/ Hex Artifact Content
Login

Artifact 0dc3be6a14d6478ded56daca868cc989fd8f7f1c:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 43 6f 64 65 20 66  ******.** Code f
0180: 6f 72 20 74 65 73 74 69 6e 67 20 61 6c 6c 20 73  or testing all s
0190: 6f 72 74 73 20 6f 66 20 53 51 4c 69 74 65 20 69  orts of SQLite i
01a0: 6e 74 65 72 66 61 63 65 73 2e 20 20 54 68 69 73  nterfaces.  This
01b0: 20 63 6f 64 65 0a 2a 2a 20 69 73 20 6e 6f 74 20   code.** is not 
01c0: 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20  included in the 
01d0: 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 20  SQLite library. 
01e0: 20 49 74 20 69 73 20 75 73 65 64 20 66 6f 72 20   It is used for 
01f0: 61 75 74 6f 6d 61 74 65 64 0a 2a 2a 20 74 65 73  automated.** tes
0200: 74 69 6e 67 20 6f 66 20 74 68 65 20 53 51 4c 69  ting of the SQLi
0210: 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23  te library..*/.#
0220: 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65 49  include "sqliteI
0230: 6e 74 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  nt.h".#include "
0240: 74 63 6c 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  tcl.h".#include 
0250: 3c 73 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c  <stdlib.h>.#incl
0260: 75 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 0a  ude <string.h>..
0270: 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 20  /*.** This is a 
0280: 63 6f 70 79 20 6f 66 20 74 68 65 20 66 69 72 73  copy of the firs
0290: 74 20 70 61 72 74 20 6f 66 20 74 68 65 20 53 71  t part of the Sq
02a0: 6c 69 74 65 44 62 20 73 74 72 75 63 74 75 72 65  liteDb structure
02b0: 20 69 6e 20 0a 2a 2a 20 74 63 6c 73 71 6c 69 74   in .** tclsqlit
02c0: 65 2e 63 2e 20 20 57 65 20 6e 65 65 64 20 69 74  e.c.  We need it
02d0: 20 68 65 72 65 20 73 6f 20 74 68 61 74 20 74 68   here so that th
02e0: 65 20 67 65 74 5f 73 71 6c 69 74 65 5f 70 6f 69  e get_sqlite_poi
02f0: 6e 74 65 72 20 72 6f 75 74 69 6e 65 0a 2a 2a 20  nter routine.** 
0300: 63 61 6e 20 65 78 74 72 61 63 74 20 74 68 65 20  can extract the 
0310: 73 71 6c 69 74 65 33 2a 20 70 6f 69 6e 74 65 72  sqlite3* pointer
0320: 20 66 72 6f 6d 20 61 6e 20 65 78 69 73 74 69 6e   from an existin
0330: 67 20 54 63 6c 20 53 51 4c 69 74 65 0a 2a 2a 20  g Tcl SQLite.** 
0340: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 2a 2f 0a 73  connection..*/.s
0350: 74 72 75 63 74 20 53 71 6c 69 74 65 44 62 20 7b  truct SqliteDb {
0360: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a  .  sqlite3 *db;.
0370: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72  };../*.** Conver
0380: 74 20 74 65 78 74 20 67 65 6e 65 72 61 74 65 64  t text generated
0390: 20 62 79 20 74 68 65 20 22 25 70 22 20 63 6f 6e   by the "%p" con
03a0: 76 65 72 73 69 6f 6e 20 66 6f 72 6d 61 74 20 62  version format b
03b0: 61 63 6b 20 69 6e 74 6f 0a 2a 2a 20 61 20 70 6f  ack into.** a po
03c0: 69 6e 74 65 72 2e 0a 2a 2f 0a 73 74 61 74 69 63  inter..*/.static
03d0: 20 69 6e 74 20 74 65 73 74 48 65 78 54 6f 49 6e   int testHexToIn
03e0: 74 28 69 6e 74 20 68 29 7b 0a 20 20 69 66 28 20  t(int h){.  if( 
03f0: 68 3e 3d 27 30 27 20 26 26 20 68 3c 3d 27 39 27  h>='0' && h<='9'
0400: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 68   ){.    return h
0410: 20 2d 20 27 30 27 3b 0a 20 20 7d 65 6c 73 65 20   - '0';.  }else 
0420: 69 66 28 20 68 3e 3d 27 61 27 20 26 26 20 68 3c  if( h>='a' && h<
0430: 3d 27 66 27 20 29 7b 0a 20 20 20 20 72 65 74 75  ='f' ){.    retu
0440: 72 6e 20 68 20 2d 20 27 61 27 20 2b 20 31 30 3b  rn h - 'a' + 10;
0450: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
0460: 73 65 72 74 28 20 68 3e 3d 27 41 27 20 26 26 20  sert( h>='A' && 
0470: 68 3c 3d 27 46 27 20 29 3b 0a 20 20 20 20 72 65  h<='F' );.    re
0480: 74 75 72 6e 20 68 20 2d 20 27 41 27 20 2b 20 31  turn h - 'A' + 1
0490: 30 3b 0a 20 20 7d 0a 7d 0a 76 6f 69 64 20 2a 73  0;.  }.}.void *s
04a0: 71 6c 69 74 65 33 54 65 73 74 54 65 78 74 54 6f  qlite3TestTextTo
04b0: 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  Ptr(const char *
04c0: 7a 29 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 0a 20  z){.  void *p;. 
04d0: 20 75 36 34 20 76 3b 0a 20 20 75 33 32 20 76 32   u64 v;.  u32 v2
04e0: 3b 0a 20 20 69 66 28 20 7a 5b 30 5d 3d 3d 27 30  ;.  if( z[0]=='0
04f0: 27 20 26 26 20 7a 5b 31 5d 3d 3d 27 78 27 20 29  ' && z[1]=='x' )
0500: 7b 0a 20 20 20 20 7a 20 2b 3d 20 32 3b 0a 20 20  {.    z += 2;.  
0510: 7d 0a 20 20 76 20 3d 20 30 3b 0a 20 20 77 68 69  }.  v = 0;.  whi
0520: 6c 65 28 20 2a 7a 20 29 7b 0a 20 20 20 20 76 20  le( *z ){.    v 
0530: 3d 20 28 76 3c 3c 34 29 20 2b 20 74 65 73 74 48  = (v<<4) + testH
0540: 65 78 54 6f 49 6e 74 28 2a 7a 29 3b 0a 20 20 20  exToInt(*z);.   
0550: 20 7a 2b 2b 3b 0a 20 20 7d 0a 20 20 69 66 28 20   z++;.  }.  if( 
0560: 73 69 7a 65 6f 66 28 70 29 3d 3d 73 69 7a 65 6f  sizeof(p)==sizeo
0570: 66 28 76 29 20 29 7b 0a 20 20 20 20 6d 65 6d 63  f(v) ){.    memc
0580: 70 79 28 26 70 2c 20 26 76 2c 20 73 69 7a 65 6f  py(&p, &v, sizeo
0590: 66 28 70 29 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  f(p));.  }else{.
05a0: 20 20 20 20 61 73 73 65 72 74 28 20 73 69 7a 65      assert( size
05b0: 6f 66 28 70 29 3d 3d 73 69 7a 65 6f 66 28 76 32  of(p)==sizeof(v2
05c0: 29 20 29 3b 0a 20 20 20 20 76 32 20 3d 20 28 75  ) );.    v2 = (u
05d0: 33 32 29 76 3b 0a 20 20 20 20 6d 65 6d 63 70 79  32)v;.    memcpy
05e0: 28 26 70 2c 20 26 76 32 2c 20 73 69 7a 65 6f 66  (&p, &v2, sizeof
05f0: 28 70 29 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  (p));.  }.  retu
0600: 72 6e 20 70 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  rn p;.}.../*.** 
0610: 41 20 54 43 4c 20 63 6f 6d 6d 61 6e 64 20 74 68  A TCL command th
0620: 61 74 20 72 65 74 75 72 6e 73 20 74 68 65 20 61  at returns the a
0630: 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 73 71  ddress of the sq
0640: 6c 69 74 65 2a 20 70 6f 69 6e 74 65 72 0a 2a 2a  lite* pointer.**
0650: 20 66 6f 72 20 61 6e 20 73 71 6c 69 74 65 20 63   for an sqlite c
0660: 6f 6e 6e 65 63 74 69 6f 6e 20 69 6e 73 74 61 6e  onnection instan
0670: 63 65 2e 20 20 42 61 64 20 74 68 69 6e 67 73 20  ce.  Bad things 
0680: 68 61 70 70 65 6e 20 69 66 20 74 68 65 0a 2a 2a  happen if the.**
0690: 20 69 6e 70 75 74 20 69 73 20 6e 6f 74 20 61 6e   input is not an
06a0: 20 73 71 6c 69 74 65 20 63 6f 6e 6e 65 63 74 69   sqlite connecti
06b0: 6f 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  on..*/.static in
06c0: 74 20 67 65 74 5f 73 71 6c 69 74 65 5f 70 6f 69  t get_sqlite_poi
06d0: 6e 74 65 72 28 0a 20 20 76 6f 69 64 20 2a 20 63  nter(.  void * c
06e0: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
06f0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
0700: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
0710: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
0720: 6a 76 5b 5d 0a 29 7b 0a 20 20 73 74 72 75 63 74  jv[].){.  struct
0730: 20 53 71 6c 69 74 65 44 62 20 2a 70 3b 0a 20 20   SqliteDb *p;.  
0740: 54 63 6c 5f 43 6d 64 49 6e 66 6f 20 63 6d 64 49  Tcl_CmdInfo cmdI
0750: 6e 66 6f 3b 0a 20 20 63 68 61 72 20 7a 42 75 66  nfo;.  char zBuf
0760: 5b 31 30 30 5d 3b 0a 20 20 69 66 28 20 6f 62 6a  [100];.  if( obj
0770: 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
0780: 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74  WrongNumArgs(int
0790: 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 53  erp, 1, objv, "S
07a0: 51 4c 49 54 45 2d 43 4f 4e 4e 45 43 54 49 4f 4e  QLITE-CONNECTION
07b0: 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  ");.    return T
07c0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
07d0: 69 66 28 20 21 54 63 6c 5f 47 65 74 43 6f 6d 6d  if( !Tcl_GetComm
07e0: 61 6e 64 49 6e 66 6f 28 69 6e 74 65 72 70 2c 20  andInfo(interp, 
07f0: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
0800: 6a 76 5b 31 5d 29 2c 20 26 63 6d 64 49 6e 66 6f  jv[1]), &cmdInfo
0810: 29 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  ) ){.    Tcl_App
0820: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
0830: 2c 20 22 63 6f 6d 6d 61 6e 64 20 6e 6f 74 20 66  , "command not f
0840: 6f 75 6e 64 3a 20 22 2c 0a 20 20 20 20 20 20 20  ound: ",.       
0850: 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
0860: 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 28 63 68 61  g(objv[1]), (cha
0870: 72 2a 29 30 29 3b 0a 20 20 20 20 72 65 74 75 72  r*)0);.    retur
0880: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
0890: 0a 20 20 70 20 3d 20 28 73 74 72 75 63 74 20 53  .  p = (struct S
08a0: 71 6c 69 74 65 44 62 2a 29 63 6d 64 49 6e 66 6f  qliteDb*)cmdInfo
08b0: 2e 6f 62 6a 43 6c 69 65 6e 74 44 61 74 61 3b 0a  .objClientData;.
08c0: 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20    sprintf(zBuf, 
08d0: 22 25 70 22 2c 20 70 2d 3e 64 62 29 3b 0a 20 20  "%p", p->db);.  
08e0: 69 66 28 20 73 74 72 6e 63 6d 70 28 7a 42 75 66  if( strncmp(zBuf
08f0: 2c 22 30 78 22 2c 32 29 20 29 7b 0a 20 20 20 20  ,"0x",2) ){.    
0900: 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 30  sprintf(zBuf, "0
0910: 78 25 70 22 2c 20 70 2d 3e 64 62 29 3b 0a 20 20  x%p", p->db);.  
0920: 7d 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65  }.  Tcl_AppendRe
0930: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75  sult(interp, zBu
0940: 66 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20  f, 0);.  return 
0950: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
0960: 20 44 65 63 6f 64 65 20 61 20 70 6f 69 6e 74 65   Decode a pointe
0970: 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 20  r to an sqlite3 
0980: 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 69 6e 74 20 67  object..*/.int g
0990: 65 74 44 62 50 6f 69 6e 74 65 72 28 54 63 6c 5f  etDbPointer(Tcl_
09a0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
09b0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 2c 20  const char *zA, 
09c0: 73 71 6c 69 74 65 33 20 2a 2a 70 70 44 62 29 7b  sqlite3 **ppDb){
09d0: 0a 20 20 73 74 72 75 63 74 20 53 71 6c 69 74 65  .  struct Sqlite
09e0: 44 62 20 2a 70 3b 0a 20 20 54 63 6c 5f 43 6d 64  Db *p;.  Tcl_Cmd
09f0: 49 6e 66 6f 20 63 6d 64 49 6e 66 6f 3b 0a 20 20  Info cmdInfo;.  
0a00: 69 66 28 20 54 63 6c 5f 47 65 74 43 6f 6d 6d 61  if( Tcl_GetComma
0a10: 6e 64 49 6e 66 6f 28 69 6e 74 65 72 70 2c 20 7a  ndInfo(interp, z
0a20: 41 2c 20 26 63 6d 64 49 6e 66 6f 29 20 29 7b 0a  A, &cmdInfo) ){.
0a30: 20 20 20 20 70 20 3d 20 28 73 74 72 75 63 74 20      p = (struct 
0a40: 53 71 6c 69 74 65 44 62 2a 29 63 6d 64 49 6e 66  SqliteDb*)cmdInf
0a50: 6f 2e 6f 62 6a 43 6c 69 65 6e 74 44 61 74 61 3b  o.objClientData;
0a60: 0a 20 20 20 20 2a 70 70 44 62 20 3d 20 70 2d 3e  .    *ppDb = p->
0a70: 64 62 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  db;.  }else{.   
0a80: 20 2a 70 70 44 62 20 3d 20 28 73 71 6c 69 74 65   *ppDb = (sqlite
0a90: 33 2a 29 73 71 6c 69 74 65 33 54 65 73 74 54 65  3*)sqlite3TestTe
0aa0: 78 74 54 6f 50 74 72 28 7a 41 29 3b 0a 20 20 7d  xtToPtr(zA);.  }
0ab0: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
0ac0: 3b 0a 7d 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72  ;.}...const char
0ad0: 20 2a 73 71 6c 69 74 65 33 54 65 73 74 45 72 72   *sqlite3TestErr
0ae0: 6f 72 4e 61 6d 65 28 69 6e 74 20 72 63 29 7b 0a  orName(int rc){.
0af0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e    const char *zN
0b00: 61 6d 65 20 3d 20 30 3b 0a 20 20 73 77 69 74 63  ame = 0;.  switc
0b10: 68 28 20 72 63 20 29 7b 0a 20 20 20 20 63 61 73  h( rc ){.    cas
0b20: 65 20 53 51 4c 49 54 45 5f 4f 4b 3a 20 20 20 20  e SQLITE_OK:    
0b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
0b40: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4f 4b  ame = "SQLITE_OK
0b50: 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ";              
0b60: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0b70: 65 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3a 20  e SQLITE_ERROR: 
0b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
0b90: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 45 52  ame = "SQLITE_ER
0ba0: 52 4f 52 22 3b 20 20 20 20 20 20 20 20 20 20 20  ROR";           
0bb0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0bc0: 65 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 4e 41  e SQLITE_INTERNA
0bd0: 4c 3a 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e  L:            zN
0be0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4e  ame = "SQLITE_IN
0bf0: 54 45 52 4e 41 4c 22 3b 20 20 20 20 20 20 20 20  TERNAL";        
0c00: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0c10: 65 20 53 51 4c 49 54 45 5f 50 45 52 4d 3a 20 20  e SQLITE_PERM:  
0c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
0c30: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 50 45  ame = "SQLITE_PE
0c40: 52 4d 22 3b 20 20 20 20 20 20 20 20 20 20 20 20  RM";            
0c50: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0c60: 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 3a 20  e SQLITE_ABORT: 
0c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
0c80: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 41 42  ame = "SQLITE_AB
0c90: 4f 52 54 22 3b 20 20 20 20 20 20 20 20 20 20 20  ORT";           
0ca0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0cb0: 65 20 53 51 4c 49 54 45 5f 42 55 53 59 3a 20 20  e SQLITE_BUSY:  
0cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
0cd0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 42 55  ame = "SQLITE_BU
0ce0: 53 59 22 3b 20 20 20 20 20 20 20 20 20 20 20 20  SY";            
0cf0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0d00: 65 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3a  e SQLITE_LOCKED:
0d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
0d20: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4c 4f  ame = "SQLITE_LO
0d30: 43 4b 45 44 22 3b 20 20 20 20 20 20 20 20 20 20  CKED";          
0d40: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0d50: 65 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 5f  e SQLITE_LOCKED_
0d60: 53 48 41 52 45 44 43 41 43 48 45 3a 20 20 7a 4e  SHAREDCACHE:  zN
0d70: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4c 4f  ame = "SQLITE_LO
0d80: 43 4b 45 44 5f 53 48 41 52 45 44 43 41 43 48 45  CKED_SHAREDCACHE
0d90: 22 3b 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73  ";break;.    cas
0da0: 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3a 20  e SQLITE_NOMEM: 
0db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
0dc0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4e 4f  ame = "SQLITE_NO
0dd0: 4d 45 4d 22 3b 20 20 20 20 20 20 20 20 20 20 20  MEM";           
0de0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0df0: 65 20 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c  e SQLITE_READONL
0e00: 59 3a 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e  Y:            zN
0e10: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 52 45  ame = "SQLITE_RE
0e20: 41 44 4f 4e 4c 59 22 3b 20 20 20 20 20 20 20 20  ADONLY";        
0e30: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0e40: 65 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55  e SQLITE_INTERRU
0e50: 50 54 3a 20 20 20 20 20 20 20 20 20 20 20 7a 4e  PT:           zN
0e60: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4e  ame = "SQLITE_IN
0e70: 54 45 52 52 55 50 54 22 3b 20 20 20 20 20 20 20  TERRUPT";       
0e80: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0e90: 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 3a 20  e SQLITE_IOERR: 
0ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
0eb0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f  ame = "SQLITE_IO
0ec0: 45 52 52 22 3b 20 20 20 20 20 20 20 20 20 20 20  ERR";           
0ed0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0ee0: 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  e SQLITE_CORRUPT
0ef0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e  :             zN
0f00: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 43 4f  ame = "SQLITE_CO
0f10: 52 52 55 50 54 22 3b 20 20 20 20 20 20 20 20 20  RRUPT";         
0f20: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0f30: 65 20 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e  e SQLITE_NOTFOUN
0f40: 44 3a 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e  D:            zN
0f50: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4e 4f  ame = "SQLITE_NO
0f60: 54 46 4f 55 4e 44 22 3b 20 20 20 20 20 20 20 20  TFOUND";        
0f70: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0f80: 65 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3a 20 20  e SQLITE_FULL:  
0f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
0fa0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 46 55  ame = "SQLITE_FU
0fb0: 4c 4c 22 3b 20 20 20 20 20 20 20 20 20 20 20 20  LL";            
0fc0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0fd0: 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45  e SQLITE_CANTOPE
0fe0: 4e 3a 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e  N:            zN
0ff0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 43 41  ame = "SQLITE_CA
1000: 4e 54 4f 50 45 4e 22 3b 20 20 20 20 20 20 20 20  NTOPEN";        
1010: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1020: 65 20 53 51 4c 49 54 45 5f 50 52 4f 54 4f 43 4f  e SQLITE_PROTOCO
1030: 4c 3a 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e  L:            zN
1040: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 50 52  ame = "SQLITE_PR
1050: 4f 54 4f 43 4f 4c 22 3b 20 20 20 20 20 20 20 20  OTOCOL";        
1060: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1070: 65 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 3a 20  e SQLITE_EMPTY: 
1080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
1090: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 45 4d  ame = "SQLITE_EM
10a0: 50 54 59 22 3b 20 20 20 20 20 20 20 20 20 20 20  PTY";           
10b0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
10c0: 65 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3a  e SQLITE_SCHEMA:
10d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
10e0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 53 43  ame = "SQLITE_SC
10f0: 48 45 4d 41 22 3b 20 20 20 20 20 20 20 20 20 20  HEMA";          
1100: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1110: 65 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3a  e SQLITE_TOOBIG:
1120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
1130: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 54 4f  ame = "SQLITE_TO
1140: 4f 42 49 47 22 3b 20 20 20 20 20 20 20 20 20 20  OBIG";          
1150: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1160: 65 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  e SQLITE_CONSTRA
1170: 49 4e 54 3a 20 20 20 20 20 20 20 20 20 20 7a 4e  INT:          zN
1180: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 43 4f  ame = "SQLITE_CO
1190: 4e 53 54 52 41 49 4e 54 22 3b 20 20 20 20 20 20  NSTRAINT";      
11a0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
11b0: 65 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43  e SQLITE_MISMATC
11c0: 48 3a 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e  H:            zN
11d0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4d 49  ame = "SQLITE_MI
11e0: 53 4d 41 54 43 48 22 3b 20 20 20 20 20 20 20 20  SMATCH";        
11f0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1200: 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3a  e SQLITE_MISUSE:
1210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
1220: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4d 49  ame = "SQLITE_MI
1230: 53 55 53 45 22 3b 20 20 20 20 20 20 20 20 20 20  SUSE";          
1240: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1250: 65 20 53 51 4c 49 54 45 5f 4e 4f 4c 46 53 3a 20  e SQLITE_NOLFS: 
1260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
1270: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4e 4f  ame = "SQLITE_NO
1280: 4c 46 53 22 3b 20 20 20 20 20 20 20 20 20 20 20  LFS";           
1290: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
12a0: 65 20 53 51 4c 49 54 45 5f 41 55 54 48 3a 20 20  e SQLITE_AUTH:  
12b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
12c0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 41 55  ame = "SQLITE_AU
12d0: 54 48 22 3b 20 20 20 20 20 20 20 20 20 20 20 20  TH";            
12e0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
12f0: 65 20 53 51 4c 49 54 45 5f 46 4f 52 4d 41 54 3a  e SQLITE_FORMAT:
1300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
1310: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 46 4f  ame = "SQLITE_FO
1320: 52 4d 41 54 22 3b 20 20 20 20 20 20 20 20 20 20  RMAT";          
1330: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1340: 65 20 53 51 4c 49 54 45 5f 52 41 4e 47 45 3a 20  e SQLITE_RANGE: 
1350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
1360: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 52 41  ame = "SQLITE_RA
1370: 4e 47 45 22 3b 20 20 20 20 20 20 20 20 20 20 20  NGE";           
1380: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1390: 65 20 53 51 4c 49 54 45 5f 4e 4f 54 41 44 42 3a  e SQLITE_NOTADB:
13a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
13b0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4e 4f  ame = "SQLITE_NO
13c0: 54 41 44 42 22 3b 20 20 20 20 20 20 20 20 20 20  TADB";          
13d0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
13e0: 65 20 53 51 4c 49 54 45 5f 52 4f 57 3a 20 20 20  e SQLITE_ROW:   
13f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
1400: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 52 4f  ame = "SQLITE_RO
1410: 57 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  W";             
1420: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1430: 65 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3a 20 20  e SQLITE_DONE:  
1440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
1450: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 44 4f  ame = "SQLITE_DO
1460: 4e 45 22 3b 20 20 20 20 20 20 20 20 20 20 20 20  NE";            
1470: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1480: 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 52  e SQLITE_IOERR_R
1490: 45 41 44 3a 20 20 20 20 20 20 20 20 20 20 7a 4e  EAD:          zN
14a0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f  ame = "SQLITE_IO
14b0: 45 52 52 5f 52 45 41 44 22 3b 20 20 20 20 20 20  ERR_READ";      
14c0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
14d0: 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 53  e SQLITE_IOERR_S
14e0: 48 4f 52 54 5f 52 45 41 44 3a 20 20 20 20 7a 4e  HORT_READ:    zN
14f0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f  ame = "SQLITE_IO
1500: 45 52 52 5f 53 48 4f 52 54 5f 52 45 41 44 22 3b  ERR_SHORT_READ";
1510: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1520: 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 57  e SQLITE_IOERR_W
1530: 52 49 54 45 3a 20 20 20 20 20 20 20 20 20 7a 4e  RITE:         zN
1540: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f  ame = "SQLITE_IO
1550: 45 52 52 5f 57 52 49 54 45 22 3b 20 20 20 20 20  ERR_WRITE";     
1560: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1570: 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 46  e SQLITE_IOERR_F
1580: 53 59 4e 43 3a 20 20 20 20 20 20 20 20 20 7a 4e  SYNC:         zN
1590: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f  ame = "SQLITE_IO
15a0: 45 52 52 5f 46 53 59 4e 43 22 3b 20 20 20 20 20  ERR_FSYNC";     
15b0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
15c0: 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 44  e SQLITE_IOERR_D
15d0: 49 52 5f 46 53 59 4e 43 3a 20 20 20 20 20 7a 4e  IR_FSYNC:     zN
15e0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f  ame = "SQLITE_IO
15f0: 45 52 52 5f 44 49 52 5f 46 53 59 4e 43 22 3b 20  ERR_DIR_FSYNC"; 
1600: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1610: 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 54  e SQLITE_IOERR_T
1620: 52 55 4e 43 41 54 45 3a 20 20 20 20 20 20 7a 4e  RUNCATE:      zN
1630: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f  ame = "SQLITE_IO
1640: 45 52 52 5f 54 52 55 4e 43 41 54 45 22 3b 20 20  ERR_TRUNCATE";  
1650: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1660: 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 46  e SQLITE_IOERR_F
1670: 53 54 41 54 3a 20 20 20 20 20 20 20 20 20 7a 4e  STAT:         zN
1680: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f  ame = "SQLITE_IO
1690: 45 52 52 5f 46 53 54 41 54 22 3b 20 20 20 20 20  ERR_FSTAT";     
16a0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
16b0: 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 55  e SQLITE_IOERR_U
16c0: 4e 4c 4f 43 4b 3a 20 20 20 20 20 20 20 20 7a 4e  NLOCK:        zN
16d0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f  ame = "SQLITE_IO
16e0: 45 52 52 5f 55 4e 4c 4f 43 4b 22 3b 20 20 20 20  ERR_UNLOCK";    
16f0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1700: 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 52  e SQLITE_IOERR_R
1710: 44 4c 4f 43 4b 3a 20 20 20 20 20 20 20 20 7a 4e  DLOCK:        zN
1720: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f  ame = "SQLITE_IO
1730: 45 52 52 5f 52 44 4c 4f 43 4b 22 3b 20 20 20 20  ERR_RDLOCK";    
1740: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1750: 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 44  e SQLITE_IOERR_D
1760: 45 4c 45 54 45 3a 20 20 20 20 20 20 20 20 7a 4e  ELETE:        zN
1770: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f  ame = "SQLITE_IO
1780: 45 52 52 5f 44 45 4c 45 54 45 22 3b 20 20 20 20  ERR_DELETE";    
1790: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
17a0: 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 42  e SQLITE_IOERR_B
17b0: 4c 4f 43 4b 45 44 3a 20 20 20 20 20 20 20 7a 4e  LOCKED:       zN
17c0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f  ame = "SQLITE_IO
17d0: 45 52 52 5f 42 4c 4f 43 4b 45 44 22 3b 20 20 20  ERR_BLOCKED";   
17e0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
17f0: 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e  e SQLITE_IOERR_N
1800: 4f 4d 45 4d 3a 20 20 20 20 20 20 20 20 20 7a 4e  OMEM:         zN
1810: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f  ame = "SQLITE_IO
1820: 45 52 52 5f 4e 4f 4d 45 4d 22 3b 20 20 20 20 20  ERR_NOMEM";     
1830: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1840: 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 41  e SQLITE_IOERR_A
1850: 43 43 45 53 53 3a 20 20 20 20 20 20 20 20 7a 4e  CCESS:        zN
1860: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f  ame = "SQLITE_IO
1870: 45 52 52 5f 41 43 43 45 53 53 22 3b 20 20 20 20  ERR_ACCESS";    
1880: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1890: 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 43  e SQLITE_IOERR_C
18a0: 48 45 43 4b 52 45 53 45 52 56 45 44 4c 4f 43 4b  HECKRESERVEDLOCK
18b0: 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :.              
18c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d0: 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45   zName = "SQLITE
18e0: 5f 49 4f 45 52 52 5f 43 48 45 43 4b 52 45 53 45  _IOERR_CHECKRESE
18f0: 52 56 45 44 4c 4f 43 4b 22 3b 20 62 72 65 61 6b  RVEDLOCK"; break
1900: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
1910: 45 5f 49 4f 45 52 52 5f 4c 4f 43 4b 3a 20 20 20  E_IOERR_LOCK:   
1920: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
1930: 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4c 4f 43  SQLITE_IOERR_LOC
1940: 4b 22 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b  K";        break
1950: 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20  ;.    default:  
1960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1970: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
1980: 53 51 4c 49 54 45 5f 55 6e 6b 6e 6f 77 6e 22 3b  SQLITE_Unknown";
1990: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
19a0: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a  ;.  }.  return z
19b0: 4e 61 6d 65 3b 0a 7d 0a 23 64 65 66 69 6e 65 20  Name;.}.#define 
19c0: 74 31 45 72 72 6f 72 4e 61 6d 65 20 73 71 6c 69  t1ErrorName sqli
19d0: 74 65 33 54 65 73 74 45 72 72 6f 72 4e 61 6d 65  te3TestErrorName
19e0: 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20  ../*.** Convert 
19f0: 61 6e 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a  an sqlite3_stmt*
1a00: 20 69 6e 74 6f 20 61 6e 20 73 71 6c 69 74 65 33   into an sqlite3
1a10: 2a 2e 20 20 54 68 69 73 20 64 65 70 65 6e 64 73  *.  This depends
1a20: 20 6f 6e 20 74 68 65 0a 2a 2a 20 66 61 63 74 20   on the.** fact 
1a30: 74 68 61 74 20 74 68 65 20 73 71 6c 69 74 65 33  that the sqlite3
1a40: 2a 20 69 73 20 74 68 65 20 66 69 72 73 74 20 66  * is the first f
1a50: 69 65 6c 64 20 69 6e 20 74 68 65 20 56 64 62 65  ield in the Vdbe
1a60: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 23   structure..*/.#
1a70: 64 65 66 69 6e 65 20 53 74 6d 74 54 6f 44 62 28  define StmtToDb(
1a80: 58 29 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f  X)   sqlite3_db_
1a90: 68 61 6e 64 6c 65 28 58 29 0a 0a 2f 2a 0a 2a 2a  handle(X)../*.**
1aa0: 20 43 68 65 63 6b 20 61 20 72 65 74 75 72 6e 20   Check a return 
1ab0: 76 61 6c 75 65 20 74 6f 20 6d 61 6b 65 20 73 75  value to make su
1ac0: 72 65 20 69 74 20 61 67 72 65 65 73 20 77 69 74  re it agrees wit
1ad0: 68 20 74 68 65 20 72 65 73 75 6c 74 73 0a 2a 2a  h the results.**
1ae0: 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 65 72   from sqlite3_er
1af0: 72 63 6f 64 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71  rcode..*/.int sq
1b00: 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65  lite3TestErrCode
1b10: 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74  (Tcl_Interp *int
1b20: 65 72 70 2c 20 73 71 6c 69 74 65 33 20 2a 64 62  erp, sqlite3 *db
1b30: 2c 20 69 6e 74 20 72 63 29 7b 0a 20 20 69 66 28  , int rc){.  if(
1b40: 20 73 71 6c 69 74 65 33 5f 74 68 72 65 61 64 73   sqlite3_threads
1b50: 61 66 65 28 29 3d 3d 30 20 26 26 20 72 63 21 3d  afe()==0 && rc!=
1b60: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 26 26  SQLITE_MISUSE &&
1b70: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 0a 20   rc!=SQLITE_OK. 
1b80: 20 20 26 26 20 73 71 6c 69 74 65 33 5f 65 72 72    && sqlite3_err
1b90: 63 6f 64 65 28 64 62 29 21 3d 72 63 20 29 7b 0a  code(db)!=rc ){.
1ba0: 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b 32 30      char zBuf[20
1bb0: 30 5d 3b 0a 20 20 20 20 69 6e 74 20 72 32 20 3d  0];.    int r2 =
1bc0: 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65   sqlite3_errcode
1bd0: 28 64 62 29 3b 0a 20 20 20 20 73 70 72 69 6e 74  (db);.    sprint
1be0: 66 28 7a 42 75 66 2c 20 22 65 72 72 6f 72 20 63  f(zBuf, "error c
1bf0: 6f 64 65 20 25 73 20 28 25 64 29 20 64 6f 65 73  ode %s (%d) does
1c00: 20 6e 6f 74 20 6d 61 74 63 68 20 73 71 6c 69 74   not match sqlit
1c10: 65 33 5f 65 72 72 63 6f 64 65 20 25 73 20 28 25  e3_errcode %s (%
1c20: 64 29 22 2c 0a 20 20 20 20 20 20 20 74 31 45 72  d)",.       t1Er
1c30: 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 72 63 2c  rorName(rc), rc,
1c40: 20 74 31 45 72 72 6f 72 4e 61 6d 65 28 72 32 29   t1ErrorName(r2)
1c50: 2c 20 72 32 29 3b 0a 20 20 20 20 54 63 6c 5f 52  , r2);.    Tcl_R
1c60: 65 73 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  esetResult(inter
1c70: 70 29 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65  p);.    Tcl_Appe
1c80: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
1c90: 20 7a 42 75 66 2c 20 30 29 3b 0a 20 20 20 20 72   zBuf, 0);.    r
1ca0: 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 72  eturn 1;.  }.  r
1cb0: 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a  eturn 0;.}../*.*
1cc0: 2a 20 44 65 63 6f 64 65 20 61 20 70 6f 69 6e 74  * Decode a point
1cd0: 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33  er to an sqlite3
1ce0: 5f 73 74 6d 74 20 6f 62 6a 65 63 74 2e 0a 2a 2f  _stmt object..*/
1cf0: 0a 73 74 61 74 69 63 20 69 6e 74 20 67 65 74 53  .static int getS
1d00: 74 6d 74 50 6f 69 6e 74 65 72 28 0a 20 20 54 63  tmtPointer(.  Tc
1d10: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
1d20: 2c 20 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  , .  const char 
1d30: 2a 7a 41 72 67 2c 20 20 0a 20 20 73 71 6c 69 74  *zArg,  .  sqlit
1d40: 65 33 5f 73 74 6d 74 20 2a 2a 70 70 53 74 6d 74  e3_stmt **ppStmt
1d50: 0a 29 7b 0a 20 20 2a 70 70 53 74 6d 74 20 3d 20  .){.  *ppStmt = 
1d60: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 29 73  (sqlite3_stmt*)s
1d70: 71 6c 69 74 65 33 54 65 73 74 54 65 78 74 54 6f  qlite3TestTextTo
1d80: 50 74 72 28 7a 41 72 67 29 3b 0a 20 20 72 65 74  Ptr(zArg);.  ret
1d90: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
1da0: 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65 20 61 20  *.** Generate a 
1db0: 74 65 78 74 20 72 65 70 72 65 73 65 6e 74 61 74  text representat
1dc0: 69 6f 6e 20 6f 66 20 61 20 70 6f 69 6e 74 65 72  ion of a pointer
1dd0: 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 6e 64   that can be und
1de0: 65 72 73 74 6f 6f 64 0a 2a 2a 20 62 79 20 74 68  erstood.** by th
1df0: 65 20 67 65 74 44 62 50 6f 69 6e 74 65 72 20 61  e getDbPointer a
1e00: 6e 64 20 67 65 74 56 6d 50 6f 69 6e 74 65 72 20  nd getVmPointer 
1e10: 72 6f 75 74 69 6e 65 73 20 61 62 6f 76 65 2e 0a  routines above..
1e20: 2a 2a 0a 2a 2a 20 54 68 65 20 70 72 6f 62 6c 65  **.** The proble
1e30: 6d 20 69 73 2c 20 6f 6e 20 73 6f 6d 65 20 6d 61  m is, on some ma
1e40: 63 68 69 6e 65 73 20 28 53 6f 6c 61 72 69 73 29  chines (Solaris)
1e50: 20 69 66 20 79 6f 75 20 64 6f 20 61 20 70 72 69   if you do a pri
1e60: 6e 74 66 20 77 69 74 68 0a 2a 2a 20 22 25 70 22  ntf with.** "%p"
1e70: 20 79 6f 75 20 63 61 6e 6e 6f 74 20 74 75 72 6e   you cannot turn
1e80: 20 61 72 6f 75 6e 64 20 61 6e 64 20 64 6f 20 61   around and do a
1e90: 20 73 63 61 6e 66 20 77 69 74 68 20 74 68 65 20   scanf with the 
1ea0: 73 61 6d 65 20 22 25 70 22 20 61 6e 64 0a 2a 2a  same "%p" and.**
1eb0: 20 67 65 74 20 79 6f 75 72 20 70 6f 69 6e 74 65   get your pointe
1ec0: 72 20 62 61 63 6b 2e 20 20 59 6f 75 20 68 61 76  r back.  You hav
1ed0: 65 20 74 6f 20 70 72 65 70 65 6e 64 20 61 20 22  e to prepend a "
1ee0: 30 78 22 20 62 65 66 6f 72 65 20 69 74 20 77 69  0x" before it wi
1ef0: 6c 6c 0a 2a 2a 20 77 6f 72 6b 2e 20 20 4f 72 20  ll.** work.  Or 
1f00: 61 74 20 6c 65 61 73 74 20 74 68 61 74 20 69 73  at least that is
1f10: 20 77 68 61 74 20 69 73 20 72 65 70 6f 72 74 65   what is reporte
1f20: 64 20 74 6f 20 6d 65 20 28 64 72 68 29 2e 20 20  d to me (drh).  
1f30: 42 75 74 20 74 68 69 73 0a 2a 2a 20 62 65 68 61  But this.** beha
1f40: 76 69 6f 72 20 76 61 72 69 65 73 20 66 72 6f 6d  vior varies from
1f50: 20 6d 61 63 68 69 6e 65 20 74 6f 20 6d 61 63 68   machine to mach
1f60: 69 6e 65 2e 20 20 54 68 65 20 73 6f 6c 75 74 69  ine.  The soluti
1f70: 6f 6e 20 75 73 65 64 20 68 65 72 20 69 73 0a 2a  on used her is.*
1f80: 2a 20 74 6f 20 74 65 73 74 20 74 68 65 20 73 74  * to test the st
1f90: 72 69 6e 67 20 72 69 67 68 74 20 61 66 74 65 72  ring right after
1fa0: 20 69 74 20 69 73 20 67 65 6e 65 72 61 74 65 64   it is generated
1fb0: 20 74 6f 20 73 65 65 20 69 66 20 69 74 20 63 61   to see if it ca
1fc0: 6e 20 62 65 0a 2a 2a 20 75 6e 64 65 72 73 74 6f  n be.** understo
1fd0: 6f 64 20 62 79 20 73 63 61 6e 66 2c 20 61 6e 64  od by scanf, and
1fe0: 20 69 66 20 6e 6f 74 2c 20 74 72 79 20 70 72 65   if not, try pre
1ff0: 70 65 6e 64 69 6e 67 20 61 6e 20 22 30 78 22 20  pending an "0x" 
2000: 74 6f 20 73 65 65 20 69 66 0a 2a 2a 20 74 68 61  to see if.** tha
2010: 74 20 68 65 6c 70 73 2e 20 20 49 66 20 6e 6f 74  t helps.  If not
2020: 68 69 6e 67 20 77 6f 72 6b 73 2c 20 61 20 66 61  hing works, a fa
2030: 74 61 6c 20 65 72 72 6f 72 20 69 73 20 67 65 6e  tal error is gen
2040: 65 72 61 74 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73  erated..*/.int s
2050: 71 6c 69 74 65 33 54 65 73 74 4d 61 6b 65 50 6f  qlite3TestMakePo
2060: 69 6e 74 65 72 53 74 72 28 54 63 6c 5f 49 6e 74  interStr(Tcl_Int
2070: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 63 68 61  erp *interp, cha
2080: 72 20 2a 7a 50 74 72 2c 20 76 6f 69 64 20 2a 70  r *zPtr, void *p
2090: 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  ){.  sqlite3_snp
20a0: 72 69 6e 74 66 28 31 30 30 2c 20 7a 50 74 72 2c  rintf(100, zPtr,
20b0: 20 22 25 70 22 2c 20 70 29 3b 0a 20 20 72 65 74   "%p", p);.  ret
20c0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
20d0: 2a 0a 2a 2a 20 54 68 65 20 63 61 6c 6c 62 61 63  *.** The callbac
20e0: 6b 20 72 6f 75 74 69 6e 65 20 66 6f 72 20 73 71  k routine for sq
20f0: 6c 69 74 65 33 5f 65 78 65 63 5f 70 72 69 6e 74  lite3_exec_print
2100: 66 28 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  f()..*/.static i
2110: 6e 74 20 65 78 65 63 5f 70 72 69 6e 74 66 5f 63  nt exec_printf_c
2120: 62 28 76 6f 69 64 20 2a 70 41 72 67 2c 20 69 6e  b(void *pArg, in
2130: 74 20 61 72 67 63 2c 20 63 68 61 72 20 2a 2a 61  t argc, char **a
2140: 72 67 76 2c 20 63 68 61 72 20 2a 2a 6e 61 6d 65  rgv, char **name
2150: 29 7b 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e 67  ){.  Tcl_DString
2160: 20 2a 73 74 72 20 3d 20 28 54 63 6c 5f 44 53 74   *str = (Tcl_DSt
2170: 72 69 6e 67 2a 29 70 41 72 67 3b 0a 20 20 69 6e  ring*)pArg;.  in
2180: 74 20 69 3b 0a 0a 20 20 69 66 28 20 54 63 6c 5f  t i;..  if( Tcl_
2190: 44 53 74 72 69 6e 67 4c 65 6e 67 74 68 28 73 74  DStringLength(st
21a0: 72 29 3d 3d 30 20 29 7b 0a 20 20 20 20 66 6f 72  r)==0 ){.    for
21b0: 28 69 3d 30 3b 20 69 3c 61 72 67 63 3b 20 69 2b  (i=0; i<argc; i+
21c0: 2b 29 7b 0a 20 20 20 20 20 20 54 63 6c 5f 44 53  +){.      Tcl_DS
21d0: 74 72 69 6e 67 41 70 70 65 6e 64 45 6c 65 6d 65  tringAppendEleme
21e0: 6e 74 28 73 74 72 2c 20 6e 61 6d 65 5b 69 5d 20  nt(str, name[i] 
21f0: 3f 20 6e 61 6d 65 5b 69 5d 20 3a 20 22 4e 55 4c  ? name[i] : "NUL
2200: 4c 22 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  L");.    }.  }. 
2210: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 61 72 67 63   for(i=0; i<argc
2220: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 54 63 6c 5f  ; i++){.    Tcl_
2230: 44 53 74 72 69 6e 67 41 70 70 65 6e 64 45 6c 65  DStringAppendEle
2240: 6d 65 6e 74 28 73 74 72 2c 20 61 72 67 76 5b 69  ment(str, argv[i
2250: 5d 20 3f 20 61 72 67 76 5b 69 5d 20 3a 20 22 4e  ] ? argv[i] : "N
2260: 55 4c 4c 22 29 3b 0a 20 20 7d 0a 20 20 72 65 74  ULL");.  }.  ret
2270: 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn 0;.}../*.** 
2280: 54 68 65 20 49 2f 4f 20 74 72 61 63 69 6e 67 20  The I/O tracing 
2290: 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 23 69 66  callback..*/.#if
22a0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
22b0: 5f 4f 4d 49 54 5f 54 52 41 43 45 29 20 26 26 20  _OMIT_TRACE) && 
22c0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
22d0: 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 29 0a 73  NABLE_IOTRACE).s
22e0: 74 61 74 69 63 20 46 49 4c 45 20 2a 69 6f 74 72  tatic FILE *iotr
22f0: 61 63 65 5f 66 69 6c 65 20 3d 20 30 3b 0a 73 74  ace_file = 0;.st
2300: 61 74 69 63 20 76 6f 69 64 20 69 6f 5f 74 72 61  atic void io_tra
2310: 63 65 5f 63 61 6c 6c 62 61 63 6b 28 63 6f 6e 73  ce_callback(cons
2320: 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c  t char *zFormat,
2330: 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74   ...){.  va_list
2340: 20 61 70 3b 0a 20 20 76 61 5f 73 74 61 72 74 28   ap;.  va_start(
2350: 61 70 2c 20 7a 46 6f 72 6d 61 74 29 3b 0a 20 20  ap, zFormat);.  
2360: 76 66 70 72 69 6e 74 66 28 69 6f 74 72 61 63 65  vfprintf(iotrace
2370: 5f 66 69 6c 65 2c 20 7a 46 6f 72 6d 61 74 2c 20  _file, zFormat, 
2380: 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64 28 61 70  ap);.  va_end(ap
2390: 29 3b 0a 20 20 66 66 6c 75 73 68 28 69 6f 74 72  );.  fflush(iotr
23a0: 61 63 65 5f 66 69 6c 65 29 3b 0a 7d 0a 23 65 6e  ace_file);.}.#en
23b0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  dif../*.** Usage
23c0: 3a 20 20 69 6f 5f 74 72 61 63 65 20 46 49 4c 45  :  io_trace FILE
23d0: 4e 41 4d 45 0a 2a 2a 0a 2a 2a 20 54 75 72 6e 20  NAME.**.** Turn 
23e0: 49 2f 4f 20 74 72 61 63 69 6e 67 20 6f 6e 20 6f  I/O tracing on o
23f0: 72 20 6f 66 66 2e 20 20 49 66 20 46 49 4c 45 4e  r off.  If FILEN
2400: 41 4d 45 20 69 73 20 6e 6f 74 20 61 6e 20 65 6d  AME is not an em
2410: 70 74 79 20 73 74 72 69 6e 67 2c 0a 2a 2a 20 49  pty string,.** I
2420: 2f 4f 20 74 72 61 63 69 6e 67 20 62 65 67 69 6e  /O tracing begin
2430: 73 20 67 6f 69 6e 67 20 69 6e 74 6f 20 46 49 4c  s going into FIL
2440: 45 4e 41 4d 45 2e 20 49 66 20 46 49 4c 45 4e 41  ENAME. If FILENA
2450: 4d 45 20 69 73 20 61 6e 20 65 6d 70 74 79 0a 2a  ME is an empty.*
2460: 2a 20 73 74 72 69 6e 67 2c 20 49 2f 4f 20 74 72  * string, I/O tr
2470: 61 63 69 6e 67 20 69 73 20 74 75 72 6e 65 64 20  acing is turned 
2480: 6f 66 66 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  off..*/.static i
2490: 6e 74 20 74 65 73 74 5f 69 6f 5f 74 72 61 63 65  nt test_io_trace
24a0: 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65  (.  void *NotUse
24b0: 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  d,.  Tcl_Interp 
24c0: 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
24d0: 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
24e0: 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
24f0: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
2500: 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20    int argc,     
2510: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
2520: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
2530: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  */.  char **argv
2540: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
2550: 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75  ext of each argu
2560: 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 23 69 66 20 21  ment */.){.#if !
2570: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2580: 4d 49 54 5f 54 52 41 43 45 29 20 26 26 20 64 65  MIT_TRACE) && de
2590: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
25a0: 42 4c 45 5f 49 4f 54 52 41 43 45 29 0a 20 20 69  BLE_IOTRACE).  i
25b0: 66 28 20 61 72 67 63 21 3d 32 20 29 7b 0a 20 20  f( argc!=2 ){.  
25c0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
25d0: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
25e0: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
25f0: 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
2600: 2c 0a 20 20 20 20 20 20 20 20 20 20 22 20 46 49  ,.          " FI
2610: 4c 45 4e 41 4d 45 5c 22 22 2c 20 30 29 3b 0a 20  LENAME\"", 0);. 
2620: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
2630: 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69  ROR;.  }.  if( i
2640: 6f 74 72 61 63 65 5f 66 69 6c 65 20 29 7b 0a 20  otrace_file ){. 
2650: 20 20 20 69 66 28 20 69 6f 74 72 61 63 65 5f 66     if( iotrace_f
2660: 69 6c 65 21 3d 73 74 64 6f 75 74 20 26 26 20 69  ile!=stdout && i
2670: 6f 74 72 61 63 65 5f 66 69 6c 65 21 3d 73 74 64  otrace_file!=std
2680: 65 72 72 20 29 7b 0a 20 20 20 20 20 20 66 63 6c  err ){.      fcl
2690: 6f 73 65 28 69 6f 74 72 61 63 65 5f 66 69 6c 65  ose(iotrace_file
26a0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 6f 74  );.    }.    iot
26b0: 72 61 63 65 5f 66 69 6c 65 20 3d 20 30 3b 0a 20  race_file = 0;. 
26c0: 20 20 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63     sqlite3IoTrac
26d0: 65 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28  e = 0;.  }.  if(
26e0: 20 61 72 67 76 5b 31 5d 5b 30 5d 20 29 7b 0a 20   argv[1][0] ){. 
26f0: 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 61 72     if( strcmp(ar
2700: 67 76 5b 31 5d 2c 22 73 74 64 6f 75 74 22 29 3d  gv[1],"stdout")=
2710: 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6f 74 72  =0 ){.      iotr
2720: 61 63 65 5f 66 69 6c 65 20 3d 20 73 74 64 6f 75  ace_file = stdou
2730: 74 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  t;.    }else if(
2740: 20 73 74 72 63 6d 70 28 61 72 67 76 5b 31 5d 2c   strcmp(argv[1],
2750: 22 73 74 64 65 72 72 22 29 3d 3d 30 20 29 7b 0a  "stderr")==0 ){.
2760: 20 20 20 20 20 20 69 6f 74 72 61 63 65 5f 66 69        iotrace_fi
2770: 6c 65 20 3d 20 73 74 64 65 72 72 3b 0a 20 20 20  le = stderr;.   
2780: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6f   }else{.      io
2790: 74 72 61 63 65 5f 66 69 6c 65 20 3d 20 66 6f 70  trace_file = fop
27a0: 65 6e 28 61 72 67 76 5b 31 5d 2c 20 22 77 22 29  en(argv[1], "w")
27b0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
27c0: 74 65 33 49 6f 54 72 61 63 65 20 3d 20 69 6f 5f  te3IoTrace = io_
27d0: 74 72 61 63 65 5f 63 61 6c 6c 62 61 63 6b 3b 0a  trace_callback;.
27e0: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72 65 74    }.#endif.  ret
27f0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a  urn TCL_OK;.}...
2800: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
2810: 6c 69 74 65 33 5f 65 78 65 63 5f 70 72 69 6e 74  lite3_exec_print
2820: 66 20 20 44 42 20 20 46 4f 52 4d 41 54 20 20 53  f  DB  FORMAT  S
2830: 54 52 49 4e 47 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f  TRING.**.** Invo
2840: 6b 65 20 74 68 65 20 73 71 6c 69 74 65 33 5f 65  ke the sqlite3_e
2850: 78 65 63 5f 70 72 69 6e 74 66 28 29 20 69 6e 74  xec_printf() int
2860: 65 72 66 61 63 65 20 75 73 69 6e 67 20 74 68 65  erface using the
2870: 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 0a 2a   open database.*
2880: 2a 20 44 42 2e 20 20 54 68 65 20 53 51 4c 20 69  * DB.  The SQL i
2890: 73 20 74 68 65 20 73 74 72 69 6e 67 20 46 4f 52  s the string FOR
28a0: 4d 41 54 2e 20 20 54 68 65 20 66 6f 72 6d 61 74  MAT.  The format
28b0: 20 73 74 72 69 6e 67 20 73 68 6f 75 6c 64 20 63   string should c
28c0: 6f 6e 74 61 69 6e 0a 2a 2a 20 6f 6e 65 20 25 73  ontain.** one %s
28d0: 20 6f 72 20 25 71 2e 20 20 53 54 52 49 4e 47 20   or %q.  STRING 
28e0: 69 73 20 74 68 65 20 76 61 6c 75 65 20 69 6e 73  is the value ins
28f0: 65 72 74 65 64 20 69 6e 74 6f 20 25 73 20 6f 72  erted into %s or
2900: 20 25 71 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69   %q..*/.static i
2910: 6e 74 20 74 65 73 74 5f 65 78 65 63 5f 70 72 69  nt test_exec_pri
2920: 6e 74 66 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74  ntf(.  void *Not
2930: 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Used,.  Tcl_Inte
2940: 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
2950: 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
2960: 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
2970: 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
2980: 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20  */.  int argc,  
2990: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
29a0: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
29b0: 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  ts */.  char **a
29c0: 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f  rgv            /
29d0: 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61  * Text of each a
29e0: 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20  rgument */.){.  
29f0: 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 54  sqlite3 *db;.  T
2a00: 63 6c 5f 44 53 74 72 69 6e 67 20 73 74 72 3b 0a  cl_DString str;.
2a10: 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 68 61 72    int rc;.  char
2a20: 20 2a 7a 45 72 72 20 3d 20 30 3b 0a 20 20 63 68   *zErr = 0;.  ch
2a30: 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 63 68 61 72  ar *zSql;.  char
2a40: 20 7a 42 75 66 5b 33 30 5d 3b 0a 20 20 69 66 28   zBuf[30];.  if(
2a50: 20 61 72 67 63 21 3d 34 20 29 7b 0a 20 20 20 20   argc!=4 ){.    
2a60: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
2a70: 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
2a80: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
2a90: 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20  e \"", argv[0], 
2aa0: 0a 20 20 20 20 20 20 20 22 20 44 42 20 46 4f 52  .       " DB FOR
2ab0: 4d 41 54 20 53 54 52 49 4e 47 22 2c 20 30 29 3b  MAT STRING", 0);
2ac0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
2ad0: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
2ae0: 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e   getDbPointer(in
2af0: 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26  terp, argv[1], &
2b00: 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  db) ) return TCL
2b10: 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 44 53  _ERROR;.  Tcl_DS
2b20: 74 72 69 6e 67 49 6e 69 74 28 26 73 74 72 29 3b  tringInit(&str);
2b30: 0a 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65  .  zSql = sqlite
2b40: 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b 32  3_mprintf(argv[2
2b50: 5d 2c 20 61 72 67 76 5b 33 5d 29 3b 0a 20 20 72  ], argv[3]);.  r
2b60: 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63  c = sqlite3_exec
2b70: 28 64 62 2c 20 7a 53 71 6c 2c 20 65 78 65 63 5f  (db, zSql, exec_
2b80: 70 72 69 6e 74 66 5f 63 62 2c 20 26 73 74 72 2c  printf_cb, &str,
2b90: 20 26 7a 45 72 72 29 3b 0a 20 20 73 71 6c 69 74   &zErr);.  sqlit
2ba0: 65 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20  e3_free(zSql);. 
2bb0: 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22   sprintf(zBuf, "
2bc0: 25 64 22 2c 20 72 63 29 3b 0a 20 20 54 63 6c 5f  %d", rc);.  Tcl_
2bd0: 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e  AppendElement(in
2be0: 74 65 72 70 2c 20 7a 42 75 66 29 3b 0a 20 20 54  terp, zBuf);.  T
2bf0: 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  cl_AppendElement
2c00: 28 69 6e 74 65 72 70 2c 20 72 63 3d 3d 53 51 4c  (interp, rc==SQL
2c10: 49 54 45 5f 4f 4b 20 3f 20 54 63 6c 5f 44 53 74  ITE_OK ? Tcl_DSt
2c20: 72 69 6e 67 56 61 6c 75 65 28 26 73 74 72 29 20  ringValue(&str) 
2c30: 3a 20 7a 45 72 72 29 3b 0a 20 20 54 63 6c 5f 44  : zErr);.  Tcl_D
2c40: 53 74 72 69 6e 67 46 72 65 65 28 26 73 74 72 29  StringFree(&str)
2c50: 3b 0a 20 20 69 66 28 20 7a 45 72 72 20 29 20 73  ;.  if( zErr ) s
2c60: 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72  qlite3_free(zErr
2c70: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
2c80: 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65  TestErrCode(inte
2c90: 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65  rp, db, rc) ) re
2ca0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
2cb0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
2cc0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
2cd0: 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63 5f 68    sqlite3_exec_h
2ce0: 65 78 20 20 44 42 20 20 48 45 58 0a 2a 2a 0a 2a  ex  DB  HEX.**.*
2cf0: 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 73 71 6c  * Invoke the sql
2d00: 69 74 65 33 5f 65 78 65 63 28 29 20 6f 6e 20 61  ite3_exec() on a
2d10: 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20   string that is 
2d20: 6f 62 74 61 69 6e 65 64 20 62 79 20 74 72 61 6e  obtained by tran
2d30: 73 6c 61 74 69 6e 67 0a 2a 2a 20 48 45 58 20 69  slating.** HEX i
2d40: 6e 74 6f 20 41 53 43 49 49 2e 20 20 4d 6f 73 74  nto ASCII.  Most
2d50: 20 63 68 61 72 61 63 74 65 72 73 20 61 72 65 20   characters are 
2d60: 74 72 61 6e 73 6c 61 74 65 64 20 61 73 20 69 73  translated as is
2d70: 2e 20 20 25 48 48 20 62 65 63 6f 6d 65 73 0a 2a  .  %HH becomes.*
2d80: 2a 20 61 20 68 65 78 20 63 68 61 72 61 63 74 65  * a hex characte
2d90: 72 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  r..*/.static int
2da0: 20 74 65 73 74 5f 65 78 65 63 5f 68 65 78 28 0a   test_exec_hex(.
2db0: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
2dc0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
2dd0: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
2de0: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
2df0: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
2e00: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
2e10: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
2e20: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
2e30: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
2e40: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
2e50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
2e60: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
2e70: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74  nt */.){.  sqlit
2e80: 65 33 20 2a 64 62 3b 0a 20 20 54 63 6c 5f 44 53  e3 *db;.  Tcl_DS
2e90: 74 72 69 6e 67 20 73 74 72 3b 0a 20 20 69 6e 74  tring str;.  int
2ea0: 20 72 63 2c 20 69 2c 20 6a 3b 0a 20 20 63 68 61   rc, i, j;.  cha
2eb0: 72 20 2a 7a 45 72 72 20 3d 20 30 3b 0a 20 20 63  r *zErr = 0;.  c
2ec0: 68 61 72 20 2a 7a 48 65 78 3b 0a 20 20 63 68 61  har *zHex;.  cha
2ed0: 72 20 7a 53 71 6c 5b 35 30 30 5d 3b 0a 20 20 63  r zSql[500];.  c
2ee0: 68 61 72 20 7a 42 75 66 5b 33 30 5d 3b 0a 20 20  har zBuf[30];.  
2ef0: 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20  if( argc!=3 ){. 
2f00: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
2f10: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
2f20: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
2f30: 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30  d be \"", argv[0
2f40: 5d 2c 20 0a 20 20 20 20 20 20 20 22 20 44 42 20  ], .       " DB 
2f50: 48 45 58 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  HEX", 0);.    re
2f60: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
2f70: 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
2f80: 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61  ointer(interp, a
2f90: 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72  rgv[1], &db) ) r
2fa0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
2fb0: 0a 20 20 7a 48 65 78 20 3d 20 61 72 67 76 5b 32  .  zHex = argv[2
2fc0: 5d 3b 0a 20 20 66 6f 72 28 69 3d 6a 3d 30 3b 20  ];.  for(i=j=0; 
2fd0: 69 3c 73 69 7a 65 6f 66 28 7a 53 71 6c 29 20 26  i<sizeof(zSql) &
2fe0: 26 20 7a 48 65 78 5b 6a 5d 3b 20 69 2b 2b 2c 20  & zHex[j]; i++, 
2ff0: 6a 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 7a 48  j++){.    if( zH
3000: 65 78 5b 6a 5d 3d 3d 27 25 27 20 26 26 20 7a 48  ex[j]=='%' && zH
3010: 65 78 5b 6a 2b 32 5d 20 26 26 20 7a 48 65 78 5b  ex[j+2] && zHex[
3020: 6a 2b 32 5d 20 29 7b 0a 20 20 20 20 20 20 7a 53  j+2] ){.      zS
3030: 71 6c 5b 69 5d 20 3d 20 28 74 65 73 74 48 65 78  ql[i] = (testHex
3040: 54 6f 49 6e 74 28 7a 48 65 78 5b 6a 2b 31 5d 29  ToInt(zHex[j+1])
3050: 3c 3c 34 29 20 2b 20 74 65 73 74 48 65 78 54 6f  <<4) + testHexTo
3060: 49 6e 74 28 7a 48 65 78 5b 6a 2b 32 5d 29 3b 0a  Int(zHex[j+2]);.
3070: 20 20 20 20 20 20 6a 20 2b 3d 20 32 3b 0a 20 20        j += 2;.  
3080: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a    }else{.      z
3090: 53 71 6c 5b 69 5d 20 3d 20 7a 48 65 78 5b 6a 5d  Sql[i] = zHex[j]
30a0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 7a 53  ;.    }.  }.  zS
30b0: 71 6c 5b 69 5d 20 3d 20 30 3b 0a 20 20 54 63 6c  ql[i] = 0;.  Tcl
30c0: 5f 44 53 74 72 69 6e 67 49 6e 69 74 28 26 73 74  _DStringInit(&st
30d0: 72 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  r);.  rc = sqlit
30e0: 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c  e3_exec(db, zSql
30f0: 2c 20 65 78 65 63 5f 70 72 69 6e 74 66 5f 63 62  , exec_printf_cb
3100: 2c 20 26 73 74 72 2c 20 26 7a 45 72 72 29 3b 0a  , &str, &zErr);.
3110: 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20    sprintf(zBuf, 
3120: 22 25 64 22 2c 20 72 63 29 3b 0a 20 20 54 63 6c  "%d", rc);.  Tcl
3130: 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  _AppendElement(i
3140: 6e 74 65 72 70 2c 20 7a 42 75 66 29 3b 0a 20 20  nterp, zBuf);.  
3150: 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e  Tcl_AppendElemen
3160: 74 28 69 6e 74 65 72 70 2c 20 72 63 3d 3d 53 51  t(interp, rc==SQ
3170: 4c 49 54 45 5f 4f 4b 20 3f 20 54 63 6c 5f 44 53  LITE_OK ? Tcl_DS
3180: 74 72 69 6e 67 56 61 6c 75 65 28 26 73 74 72 29  tringValue(&str)
3190: 20 3a 20 7a 45 72 72 29 3b 0a 20 20 54 63 6c 5f   : zErr);.  Tcl_
31a0: 44 53 74 72 69 6e 67 46 72 65 65 28 26 73 74 72  DStringFree(&str
31b0: 29 3b 0a 20 20 69 66 28 20 7a 45 72 72 20 29 20  );.  if( zErr ) 
31c0: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72  sqlite3_free(zEr
31d0: 72 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  r);.  if( sqlite
31e0: 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74  3TestErrCode(int
31f0: 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72  erp, db, rc) ) r
3200: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
3210: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
3220: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
3230: 3a 20 20 64 62 5f 65 6e 74 65 72 20 44 42 0a 2a  :  db_enter DB.*
3240: 2a 20 20 20 20 20 20 20 20 20 64 62 5f 6c 65 61  *         db_lea
3250: 76 65 20 44 42 0a 2a 2a 0a 2a 2a 20 45 6e 74 65  ve DB.**.** Ente
3260: 72 20 6f 72 20 6c 65 61 76 65 20 74 68 65 20 6d  r or leave the m
3270: 75 74 65 78 20 6f 6e 20 61 20 64 61 74 61 62 61  utex on a databa
3280: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 2a  se connection..*
3290: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 64 62 5f  /.static int db_
32a0: 65 6e 74 65 72 28 0a 20 20 76 6f 69 64 20 2a 4e  enter(.  void *N
32b0: 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e  otUsed,.  Tcl_In
32c0: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
32d0: 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
32e0: 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
32f0: 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
3300: 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c  d */.  int argc,
3310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
3320: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
3330: 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ents */.  char *
3340: 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20  *argv           
3350: 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68   /* Text of each
3360: 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a   argument */.){.
3370: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
3380: 20 69 66 28 20 61 72 67 63 21 3d 32 20 29 7b 0a   if( argc!=2 ){.
3390: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
33a0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
33b0: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
33c0: 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
33d0: 30 5d 2c 20 0a 20 20 20 20 20 20 20 22 20 44 42  0], .       " DB
33e0: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
33f0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
3400: 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e  .  if( getDbPoin
3410: 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76  ter(interp, argv
3420: 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75  [1], &db) ) retu
3430: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
3440: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e  sqlite3_mutex_en
3450: 74 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a  ter(db->mutex);.
3460: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
3470: 0a 7d 0a 73 74 61 74 69 63 20 69 6e 74 20 64 62  .}.static int db
3480: 5f 6c 65 61 76 65 28 0a 20 20 76 6f 69 64 20 2a  _leave(.  void *
3490: 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49  NotUsed,.  Tcl_I
34a0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20  nterp *interp,  
34b0: 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74    /* The TCL int
34c0: 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e  erpreter that in
34d0: 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61  voked this comma
34e0: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63  nd */.  int argc
34f0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
3500: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
3510: 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20  ments */.  char 
3520: 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20  **argv          
3530: 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63    /* Text of eac
3540: 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b  h argument */.){
3550: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a  .  sqlite3 *db;.
3560: 20 20 69 66 28 20 61 72 67 63 21 3d 32 20 29 7b    if( argc!=2 ){
3570: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
3580: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
3590: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
35a0: 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76  uld be \"", argv
35b0: 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 22 20 44  [0], .       " D
35c0: 42 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  B", 0);.    retu
35d0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
35e0: 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  }.  if( getDbPoi
35f0: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67  nter(interp, arg
3600: 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74  v[1], &db) ) ret
3610: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
3620: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c   sqlite3_mutex_l
3630: 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b  eave(db->mutex);
3640: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
3650: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
3660: 3a 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63 20  :  sqlite3_exec 
3670: 20 44 42 20 20 53 51 4c 0a 2a 2a 0a 2a 2a 20 49   DB  SQL.**.** I
3680: 6e 76 6f 6b 65 20 74 68 65 20 73 71 6c 69 74 65  nvoke the sqlite
3690: 33 5f 65 78 65 63 20 69 6e 74 65 72 66 61 63 65  3_exec interface
36a0: 20 75 73 69 6e 67 20 74 68 65 20 6f 70 65 6e 20   using the open 
36b0: 64 61 74 61 62 61 73 65 20 44 42 0a 2a 2f 0a 73  database DB.*/.s
36c0: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 65  tatic int test_e
36d0: 78 65 63 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74  xec(.  void *Not
36e0: 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Used,.  Tcl_Inte
36f0: 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
3700: 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
3710: 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
3720: 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
3730: 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20  */.  int argc,  
3740: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
3750: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
3760: 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  ts */.  char **a
3770: 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f  rgv            /
3780: 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61  * Text of each a
3790: 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20  rgument */.){.  
37a0: 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 54  sqlite3 *db;.  T
37b0: 63 6c 5f 44 53 74 72 69 6e 67 20 73 74 72 3b 0a  cl_DString str;.
37c0: 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 68 61 72    int rc;.  char
37d0: 20 2a 7a 45 72 72 20 3d 20 30 3b 0a 20 20 63 68   *zErr = 0;.  ch
37e0: 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 69 6e 74 20  ar *zSql;.  int 
37f0: 69 2c 20 6a 3b 0a 20 20 63 68 61 72 20 7a 42 75  i, j;.  char zBu
3800: 66 5b 33 30 5d 3b 0a 20 20 69 66 28 20 61 72 67  f[30];.  if( arg
3810: 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
3820: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
3830: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
3840: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
3850: 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20  ", argv[0], .   
3860: 20 20 20 20 22 20 44 42 20 53 51 4c 22 2c 20 30      " DB SQL", 0
3870: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
3880: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
3890: 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
38a0: 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c  interp, argv[1],
38b0: 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
38c0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f  CL_ERROR;.  Tcl_
38d0: 44 53 74 72 69 6e 67 49 6e 69 74 28 26 73 74 72  DStringInit(&str
38e0: 29 3b 0a 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69  );.  zSql = sqli
38f0: 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22  te3_mprintf("%s"
3900: 2c 20 61 72 67 76 5b 32 5d 29 3b 0a 20 20 66 6f  , argv[2]);.  fo
3910: 72 28 69 3d 6a 3d 30 3b 20 7a 53 71 6c 5b 69 5d  r(i=j=0; zSql[i]
3920: 3b 29 7b 0a 20 20 20 20 69 66 28 20 7a 53 71 6c  ;){.    if( zSql
3930: 5b 69 5d 3d 3d 27 25 27 20 29 7b 0a 20 20 20 20  [i]=='%' ){.    
3940: 20 20 7a 53 71 6c 5b 6a 2b 2b 5d 20 3d 20 28 74    zSql[j++] = (t
3950: 65 73 74 48 65 78 54 6f 49 6e 74 28 7a 53 71 6c  estHexToInt(zSql
3960: 5b 69 2b 31 5d 29 3c 3c 34 29 20 2b 20 74 65 73  [i+1])<<4) + tes
3970: 74 48 65 78 54 6f 49 6e 74 28 7a 53 71 6c 5b 69  tHexToInt(zSql[i
3980: 2b 32 5d 29 3b 0a 20 20 20 20 20 20 69 20 2b 3d  +2]);.      i +=
3990: 20 33 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   3;.    }else{. 
39a0: 20 20 20 20 20 7a 53 71 6c 5b 6a 2b 2b 5d 20 3d       zSql[j++] =
39b0: 20 7a 53 71 6c 5b 69 2b 2b 5d 3b 0a 20 20 20 20   zSql[i++];.    
39c0: 7d 0a 20 20 7d 0a 20 20 7a 53 71 6c 5b 6a 5d 20  }.  }.  zSql[j] 
39d0: 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  = 0;.  rc = sqli
39e0: 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71  te3_exec(db, zSq
39f0: 6c 2c 20 65 78 65 63 5f 70 72 69 6e 74 66 5f 63  l, exec_printf_c
3a00: 62 2c 20 26 73 74 72 2c 20 26 7a 45 72 72 29 3b  b, &str, &zErr);
3a10: 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  .  sqlite3_free(
3a20: 7a 53 71 6c 29 3b 0a 20 20 73 70 72 69 6e 74 66  zSql);.  sprintf
3a30: 28 7a 42 75 66 2c 20 22 25 64 22 2c 20 72 63 29  (zBuf, "%d", rc)
3a40: 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c  ;.  Tcl_AppendEl
3a50: 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 7a 42  ement(interp, zB
3a60: 75 66 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e  uf);.  Tcl_Appen
3a70: 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c  dElement(interp,
3a80: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 3f   rc==SQLITE_OK ?
3a90: 20 54 63 6c 5f 44 53 74 72 69 6e 67 56 61 6c 75   Tcl_DStringValu
3aa0: 65 28 26 73 74 72 29 20 3a 20 7a 45 72 72 29 3b  e(&str) : zErr);
3ab0: 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 46 72  .  Tcl_DStringFr
3ac0: 65 65 28 26 73 74 72 29 3b 0a 20 20 69 66 28 20  ee(&str);.  if( 
3ad0: 7a 45 72 72 20 29 20 73 71 6c 69 74 65 33 5f 66  zErr ) sqlite3_f
3ae0: 72 65 65 28 7a 45 72 72 29 3b 0a 20 20 69 66 28  ree(zErr);.  if(
3af0: 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43   sqlite3TestErrC
3b00: 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20  ode(interp, db, 
3b10: 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  rc) ) return TCL
3b20: 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74 75 72 6e  _ERROR;.  return
3b30: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
3b40: 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
3b50: 33 5f 65 78 65 63 5f 6e 72 20 20 44 42 20 20 53  3_exec_nr  DB  S
3b60: 51 4c 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20  QL.**.** Invoke 
3b70: 74 68 65 20 73 71 6c 69 74 65 33 5f 65 78 65 63  the sqlite3_exec
3b80: 20 69 6e 74 65 72 66 61 63 65 20 75 73 69 6e 67   interface using
3b90: 20 74 68 65 20 6f 70 65 6e 20 64 61 74 61 62 61   the open databa
3ba0: 73 65 20 44 42 2e 20 20 44 69 73 63 61 72 64 0a  se DB.  Discard.
3bb0: 2a 2a 20 61 6c 6c 20 72 65 73 75 6c 74 73 0a 2a  ** all results.*
3bc0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
3bd0: 74 5f 65 78 65 63 5f 6e 72 28 0a 20 20 76 6f 69  t_exec_nr(.  voi
3be0: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63  d *NotUsed,.  Tc
3bf0: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
3c00: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
3c10: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
3c20: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
3c30: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61  mmand */.  int a
3c40: 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  rgc,            
3c50: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
3c60: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68  rguments */.  ch
3c70: 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20  ar **argv       
3c80: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
3c90: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f  each argument */
3ca0: 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  .){.  sqlite3 *d
3cb0: 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 63  b;.  int rc;.  c
3cc0: 68 61 72 20 2a 7a 45 72 72 20 3d 20 30 3b 0a 20  har *zErr = 0;. 
3cd0: 20 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a   if( argc!=3 ){.
3ce0: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
3cf0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
3d00: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
3d10: 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
3d20: 30 5d 2c 20 0a 20 20 20 20 20 20 20 22 20 44 42  0], .       " DB
3d30: 20 53 51 4c 22 2c 20 30 29 3b 0a 20 20 20 20 72   SQL", 0);.    r
3d40: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
3d50: 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
3d60: 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
3d70: 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20  argv[1], &db) ) 
3d80: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
3d90: 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
3da0: 5f 65 78 65 63 28 64 62 2c 20 61 72 67 76 5b 32  _exec(db, argv[2
3db0: 5d 2c 20 30 2c 20 30 2c 20 26 7a 45 72 72 29 3b  ], 0, 0, &zErr);
3dc0: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65  .  if( sqlite3Te
3dd0: 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70  stErrCode(interp
3de0: 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65 74 75  , db, rc) ) retu
3df0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
3e00: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
3e10: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
3e20: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
3e30: 7a 5f 74 65 73 74 20 20 53 45 50 41 52 41 54 4f  z_test  SEPARATO
3e40: 52 20 20 41 52 47 30 20 20 41 52 47 31 20 2e 2e  R  ARG0  ARG1 ..
3e50: 2e 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65  ..**.** Test the
3e60: 20 25 7a 20 66 6f 72 6d 61 74 20 6f 66 20 73 71   %z format of sq
3e70: 6c 69 74 65 5f 6d 70 72 69 6e 74 66 28 29 2e 20  lite_mprintf(). 
3e80: 20 55 73 65 20 6d 75 6c 74 69 70 6c 65 20 6d 70   Use multiple mp
3e90: 72 69 6e 74 66 28 29 20 63 61 6c 6c 73 20 74 6f  rintf() calls to
3ea0: 20 0a 2a 2a 20 63 6f 6e 63 61 74 65 6e 61 74 65   .** concatenate
3eb0: 20 61 72 67 30 20 74 68 72 6f 75 67 68 20 61 72   arg0 through ar
3ec0: 67 6e 20 75 73 69 6e 67 20 73 65 70 61 72 61 74  gn using separat
3ed0: 6f 72 20 61 73 20 74 68 65 20 73 65 70 61 72 61  or as the separa
3ee0: 74 6f 72 2e 0a 2a 2a 20 52 65 74 75 72 6e 20 74  tor..** Return t
3ef0: 68 65 20 72 65 73 75 6c 74 2e 0a 2a 2f 0a 73 74  he result..*/.st
3f00: 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 6d 70  atic int test_mp
3f10: 72 69 6e 74 66 5f 7a 28 0a 20 20 76 6f 69 64 20  rintf_z(.  void 
3f20: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f  *NotUsed,.  Tcl_
3f30: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
3f40: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
3f50: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
3f60: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
3f70: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67  and */.  int arg
3f80: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
3f90: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
3fa0: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72  uments */.  char
3fb0: 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20   **argv         
3fc0: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61     /* Text of ea
3fd0: 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29  ch argument */.)
3fe0: 7b 0a 20 20 63 68 61 72 20 2a 7a 52 65 73 75 6c  {.  char *zResul
3ff0: 74 20 3d 20 30 3b 0a 20 20 69 6e 74 20 69 3b 0a  t = 0;.  int i;.
4000: 0a 20 20 66 6f 72 28 69 3d 32 3b 20 69 3c 61 72  .  for(i=2; i<ar
4010: 67 63 20 26 26 20 28 69 3d 3d 32 20 7c 7c 20 7a  gc && (i==2 || z
4020: 52 65 73 75 6c 74 29 3b 20 69 2b 2b 29 7b 0a 20  Result); i++){. 
4030: 20 20 20 7a 52 65 73 75 6c 74 20 3d 20 73 71 6c     zResult = sql
4040: 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 7a  ite3_mprintf("%z
4050: 25 73 25 73 22 2c 20 7a 52 65 73 75 6c 74 2c 20  %s%s", zResult, 
4060: 61 72 67 76 5b 31 5d 2c 20 61 72 67 76 5b 69 5d  argv[1], argv[i]
4070: 29 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 41 70 70  );.  }.  Tcl_App
4080: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
4090: 2c 20 7a 52 65 73 75 6c 74 2c 20 30 29 3b 0a 20  , zResult, 0);. 
40a0: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 52   sqlite3_free(zR
40b0: 65 73 75 6c 74 29 3b 0a 20 20 72 65 74 75 72 6e  esult);.  return
40c0: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
40d0: 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
40e0: 33 5f 6d 70 72 69 6e 74 66 5f 6e 5f 74 65 73 74  3_mprintf_n_test
40f0: 20 20 53 54 52 49 4e 47 0a 2a 2a 0a 2a 2a 20 54    STRING.**.** T
4100: 65 73 74 20 74 68 65 20 25 6e 20 66 6f 72 6d 61  est the %n forma
4110: 74 20 6f 66 20 73 71 6c 69 74 65 5f 6d 70 72 69  t of sqlite_mpri
4120: 6e 74 66 28 29 2e 20 20 52 65 74 75 72 6e 20 74  ntf().  Return t
4130: 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65  he length of the
4140: 0a 2a 2a 20 69 6e 70 75 74 20 73 74 72 69 6e 67  .** input string
4150: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
4160: 74 65 73 74 5f 6d 70 72 69 6e 74 66 5f 6e 28 0a  test_mprintf_n(.
4170: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
4180: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
4190: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
41a0: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
41b0: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
41c0: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
41d0: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
41e0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
41f0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
4200: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
4210: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
4220: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
4230: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20  nt */.){.  char 
4240: 2a 7a 53 74 72 3b 0a 20 20 69 6e 74 20 6e 20 3d  *zStr;.  int n =
4250: 20 30 3b 0a 20 20 7a 53 74 72 20 3d 20 73 71 6c   0;.  zStr = sql
4260: 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73  ite3_mprintf("%s
4270: 25 6e 22 2c 20 61 72 67 76 5b 31 5d 2c 20 26 6e  %n", argv[1], &n
4280: 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65  );.  sqlite3_fre
4290: 65 28 7a 53 74 72 29 3b 0a 20 20 54 63 6c 5f 53  e(zStr);.  Tcl_S
42a0: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
42b0: 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62  rp, Tcl_NewIntOb
42c0: 6a 28 6e 29 29 3b 0a 20 20 72 65 74 75 72 6e 20  j(n));.  return 
42d0: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
42e0: 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33   Usage:  sqlite3
42f0: 5f 73 6e 70 72 69 6e 74 66 5f 69 6e 74 20 20 53  _snprintf_int  S
4300: 49 5a 45 20 46 4f 52 4d 41 54 20 20 49 4e 54 0a  IZE FORMAT  INT.
4310: 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 6f  **.** Test the o
4320: 66 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e  f sqlite3_snprin
4330: 74 66 28 29 20 72 6f 75 74 69 6e 65 2e 20 20 53  tf() routine.  S
4340: 49 5a 45 20 69 73 20 74 68 65 20 73 69 7a 65 20  IZE is the size 
4350: 6f 66 20 74 68 65 0a 2a 2a 20 6f 75 74 70 75 74  of the.** output
4360: 20 62 75 66 66 65 72 20 69 6e 20 62 79 74 65 73   buffer in bytes
4370: 2e 20 20 54 68 65 20 6d 61 78 69 6d 75 6d 20 73  .  The maximum s
4380: 69 7a 65 20 69 73 20 31 30 30 2e 20 20 46 4f 52  ize is 100.  FOR
4390: 4d 41 54 20 69 73 20 74 68 65 0a 2a 2a 20 66 6f  MAT is the.** fo
43a0: 72 6d 61 74 20 73 74 72 69 6e 67 2e 20 20 49 4e  rmat string.  IN
43b0: 54 20 69 73 20 61 20 73 69 6e 67 6c 65 20 69 6e  T is a single in
43c0: 74 65 67 65 72 20 61 72 67 75 6d 65 6e 74 2e 20  teger argument. 
43d0: 20 54 68 65 20 46 4f 52 4d 41 54 0a 2a 2a 20 73   The FORMAT.** s
43e0: 74 72 69 6e 67 20 6d 75 73 74 20 72 65 71 75 69  tring must requi
43f0: 72 65 20 6e 6f 20 6d 6f 72 65 20 74 68 61 6e 20  re no more than 
4400: 74 68 69 73 20 6f 6e 65 20 69 6e 74 65 67 65 72  this one integer
4410: 20 61 72 67 75 6d 65 6e 74 2e 20 20 49 66 0a 2a   argument.  If.*
4420: 2a 20 59 6f 75 20 70 61 73 73 20 69 6e 20 61 20  * You pass in a 
4430: 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 74 68  format string th
4440: 61 74 20 72 65 71 75 69 72 65 73 20 6d 6f 72 65  at requires more
4450: 20 74 68 61 6e 20 6f 6e 65 20 61 72 67 75 6d 65   than one argume
4460: 6e 74 2c 0a 2a 2a 20 62 61 64 20 74 68 69 6e 67  nt,.** bad thing
4470: 73 20 77 69 6c 6c 20 68 61 70 70 65 6e 2e 0a 2a  s will happen..*
4480: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
4490: 74 5f 73 6e 70 72 69 6e 74 66 5f 69 6e 74 28 0a  t_snprintf_int(.
44a0: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
44b0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
44c0: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
44d0: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
44e0: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
44f0: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
4500: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
4510: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
4520: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
4530: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
4540: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
4550: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
4560: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20  nt */.){.  char 
4570: 7a 53 74 72 5b 31 30 30 5d 3b 0a 20 20 69 6e 74  zStr[100];.  int
4580: 20 6e 20 3d 20 61 74 6f 69 28 61 72 67 76 5b 31   n = atoi(argv[1
4590: 5d 29 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  ]);.  const char
45a0: 20 2a 7a 46 6f 72 6d 61 74 20 3d 20 61 72 67 76   *zFormat = argv
45b0: 5b 32 5d 3b 0a 20 20 69 6e 74 20 61 31 20 3d 20  [2];.  int a1 = 
45c0: 61 74 6f 69 28 61 72 67 76 5b 33 5d 29 3b 0a 20  atoi(argv[3]);. 
45d0: 20 69 66 28 20 6e 3e 73 69 7a 65 6f 66 28 7a 53   if( n>sizeof(zS
45e0: 74 72 29 20 29 20 6e 20 3d 20 73 69 7a 65 6f 66  tr) ) n = sizeof
45f0: 28 7a 53 74 72 29 3b 0a 20 20 73 71 6c 69 74 65  (zStr);.  sqlite
4600: 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f  3_snprintf(sizeo
4610: 66 28 7a 53 74 72 29 2c 20 7a 53 74 72 2c 20 22  f(zStr), zStr, "
4620: 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70  abcdefghijklmnop
4630: 71 72 73 74 75 76 77 78 79 7a 22 29 3b 0a 20 20  qrstuvwxyz");.  
4640: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
4650: 28 6e 2c 20 7a 53 74 72 2c 20 7a 46 6f 72 6d 61  (n, zStr, zForma
4660: 74 2c 20 61 31 29 3b 0a 20 20 54 63 6c 5f 41 70  t, a1);.  Tcl_Ap
4670: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
4680: 70 2c 20 7a 53 74 72 2c 20 30 29 3b 0a 20 20 72  p, zStr, 0);.  r
4690: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
46a0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
46b0: 4f 4d 49 54 5f 47 45 54 5f 54 41 42 4c 45 0a 0a  OMIT_GET_TABLE..
46c0: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
46d0: 6c 69 74 65 33 5f 67 65 74 5f 74 61 62 6c 65 5f  lite3_get_table_
46e0: 70 72 69 6e 74 66 20 20 44 42 20 20 46 4f 52 4d  printf  DB  FORM
46f0: 41 54 20 20 53 54 52 49 4e 47 20 20 3f 2d 2d 6e  AT  STRING  ?--n
4700: 6f 2d 63 6f 75 6e 74 73 3f 0a 2a 2a 0a 2a 2a 20  o-counts?.**.** 
4710: 49 6e 76 6f 6b 65 20 74 68 65 20 73 71 6c 69 74  Invoke the sqlit
4720: 65 33 5f 67 65 74 5f 74 61 62 6c 65 5f 70 72 69  e3_get_table_pri
4730: 6e 74 66 28 29 20 69 6e 74 65 72 66 61 63 65 20  ntf() interface 
4740: 75 73 69 6e 67 20 74 68 65 20 6f 70 65 6e 20 64  using the open d
4750: 61 74 61 62 61 73 65 0a 2a 2a 20 44 42 2e 20 20  atabase.** DB.  
4760: 54 68 65 20 53 51 4c 20 69 73 20 74 68 65 20 73  The SQL is the s
4770: 74 72 69 6e 67 20 46 4f 52 4d 41 54 2e 20 20 54  tring FORMAT.  T
4780: 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67  he format string
4790: 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61 69 6e 0a   should contain.
47a0: 2a 2a 20 6f 6e 65 20 25 73 20 6f 72 20 25 71 2e  ** one %s or %q.
47b0: 20 20 53 54 52 49 4e 47 20 69 73 20 74 68 65 20    STRING is the 
47c0: 76 61 6c 75 65 20 69 6e 73 65 72 74 65 64 20 69  value inserted i
47d0: 6e 74 6f 20 25 73 20 6f 72 20 25 71 2e 0a 2a 2f  nto %s or %q..*/
47e0: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
47f0: 5f 67 65 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74  _get_table_print
4800: 66 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73  f(.  void *NotUs
4810: 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ed,.  Tcl_Interp
4820: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
4830: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
4840: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
4850: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
4860: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20  .  int argc,    
4870: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
4880: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
4890: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67   */.  char **arg
48a0: 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  v            /* 
48b0: 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67  Text of each arg
48c0: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71  ument */.){.  sq
48d0: 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 54 63 6c  lite3 *db;.  Tcl
48e0: 5f 44 53 74 72 69 6e 67 20 73 74 72 3b 0a 20 20  _DString str;.  
48f0: 69 6e 74 20 72 63 3b 0a 20 20 63 68 61 72 20 2a  int rc;.  char *
4900: 7a 45 72 72 20 3d 20 30 3b 0a 20 20 69 6e 74 20  zErr = 0;.  int 
4910: 6e 52 6f 77 2c 20 6e 43 6f 6c 3b 0a 20 20 63 68  nRow, nCol;.  ch
4920: 61 72 20 2a 2a 61 52 65 73 75 6c 74 3b 0a 20 20  ar **aResult;.  
4930: 69 6e 74 20 69 3b 0a 20 20 63 68 61 72 20 7a 42  int i;.  char zB
4940: 75 66 5b 33 30 5d 3b 0a 20 20 63 68 61 72 20 2a  uf[30];.  char *
4950: 7a 53 71 6c 3b 0a 20 20 69 6e 74 20 72 65 73 43  zSql;.  int resC
4960: 6f 75 6e 74 20 3d 20 2d 31 3b 0a 20 20 69 66 28  ount = -1;.  if(
4970: 20 61 72 67 63 3d 3d 35 20 29 7b 0a 20 20 20 20   argc==5 ){.    
4980: 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69  if( Tcl_GetInt(i
4990: 6e 74 65 72 70 2c 20 61 72 67 76 5b 34 5d 2c 20  nterp, argv[4], 
49a0: 26 72 65 73 43 6f 75 6e 74 29 20 29 20 72 65 74  &resCount) ) ret
49b0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
49c0: 20 7d 0a 20 20 69 66 28 20 61 72 67 63 21 3d 34   }.  if( argc!=4
49d0: 20 26 26 20 61 72 67 63 21 3d 35 20 29 7b 0a 20   && argc!=5 ){. 
49e0: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
49f0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
4a00: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
4a10: 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30  d be \"", argv[0
4a20: 5d 2c 20 0a 20 20 20 20 20 20 20 22 20 44 42 20  ], .       " DB 
4a30: 46 4f 52 4d 41 54 20 53 54 52 49 4e 47 20 3f 43  FORMAT STRING ?C
4a40: 4f 55 4e 54 3f 22 2c 20 30 29 3b 0a 20 20 20 20  OUNT?", 0);.    
4a50: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
4a60: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44  ;.  }.  if( getD
4a70: 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  bPointer(interp,
4a80: 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29   argv[1], &db) )
4a90: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
4aa0: 52 3b 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e 67  R;.  Tcl_DString
4ab0: 49 6e 69 74 28 26 73 74 72 29 3b 0a 20 20 7a 53  Init(&str);.  zS
4ac0: 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  ql = sqlite3_mpr
4ad0: 69 6e 74 66 28 61 72 67 76 5b 32 5d 2c 61 72 67  intf(argv[2],arg
4ae0: 76 5b 33 5d 29 3b 0a 20 20 69 66 28 20 61 72 67  v[3]);.  if( arg
4af0: 63 3d 3d 35 20 29 7b 0a 20 20 20 20 72 63 20 3d  c==5 ){.    rc =
4b00: 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 74 61 62   sqlite3_get_tab
4b10: 6c 65 28 64 62 2c 20 7a 53 71 6c 2c 20 26 61 52  le(db, zSql, &aR
4b20: 65 73 75 6c 74 2c 20 30 2c 20 30 2c 20 26 7a 45  esult, 0, 0, &zE
4b30: 72 72 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  rr);.  }else{.  
4b40: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 67    rc = sqlite3_g
4b50: 65 74 5f 74 61 62 6c 65 28 64 62 2c 20 7a 53 71  et_table(db, zSq
4b60: 6c 2c 20 26 61 52 65 73 75 6c 74 2c 20 26 6e 52  l, &aResult, &nR
4b70: 6f 77 2c 20 26 6e 43 6f 6c 2c 20 26 7a 45 72 72  ow, &nCol, &zErr
4b80: 29 3b 0a 20 20 20 20 72 65 73 43 6f 75 6e 74 20  );.    resCount 
4b90: 3d 20 28 6e 52 6f 77 2b 31 29 2a 6e 43 6f 6c 3b  = (nRow+1)*nCol;
4ba0: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66  .  }.  sqlite3_f
4bb0: 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 73 70 72  ree(zSql);.  spr
4bc0: 69 6e 74 66 28 7a 42 75 66 2c 20 22 25 64 22 2c  intf(zBuf, "%d",
4bd0: 20 72 63 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65   rc);.  Tcl_Appe
4be0: 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70  ndElement(interp
4bf0: 2c 20 7a 42 75 66 29 3b 0a 20 20 69 66 28 20 72  , zBuf);.  if( r
4c00: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
4c10: 20 20 20 20 69 66 28 20 61 72 67 63 3d 3d 34 20      if( argc==4 
4c20: 29 7b 0a 20 20 20 20 20 20 73 70 72 69 6e 74 66  ){.      sprintf
4c30: 28 7a 42 75 66 2c 20 22 25 64 22 2c 20 6e 52 6f  (zBuf, "%d", nRo
4c40: 77 29 3b 0a 20 20 20 20 20 20 54 63 6c 5f 41 70  w);.      Tcl_Ap
4c50: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65  pendElement(inte
4c60: 72 70 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20 20  rp, zBuf);.     
4c70: 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22   sprintf(zBuf, "
4c80: 25 64 22 2c 20 6e 43 6f 6c 29 3b 0a 20 20 20 20  %d", nCol);.    
4c90: 20 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d    Tcl_AppendElem
4ca0: 65 6e 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66  ent(interp, zBuf
4cb0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 72  );.    }.    for
4cc0: 28 69 3d 30 3b 20 69 3c 72 65 73 43 6f 75 6e 74  (i=0; i<resCount
4cd0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 54 63  ; i++){.      Tc
4ce0: 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  l_AppendElement(
4cf0: 69 6e 74 65 72 70 2c 20 61 52 65 73 75 6c 74 5b  interp, aResult[
4d00: 69 5d 20 3f 20 61 52 65 73 75 6c 74 5b 69 5d 20  i] ? aResult[i] 
4d10: 3a 20 22 4e 55 4c 4c 22 29 3b 0a 20 20 20 20 7d  : "NULL");.    }
4d20: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 54 63  .  }else{.    Tc
4d30: 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  l_AppendElement(
4d40: 69 6e 74 65 72 70 2c 20 7a 45 72 72 29 3b 0a 20  interp, zErr);. 
4d50: 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65   }.  sqlite3_fre
4d60: 65 5f 74 61 62 6c 65 28 61 52 65 73 75 6c 74 29  e_table(aResult)
4d70: 3b 0a 20 20 69 66 28 20 7a 45 72 72 20 29 20 73  ;.  if( zErr ) s
4d80: 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72  qlite3_free(zErr
4d90: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
4da0: 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65  TestErrCode(inte
4db0: 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65  rp, db, rc) ) re
4dc0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
4dd0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
4de0: 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  .}..#endif /* SQ
4df0: 4c 49 54 45 5f 4f 4d 49 54 5f 47 45 54 5f 54 41  LITE_OMIT_GET_TA
4e00: 42 4c 45 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 55  BLE */.../*.** U
4e10: 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6c  sage:  sqlite3_l
4e20: 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
4e30: 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e   DB.**.** Return
4e40: 73 20 74 68 65 20 69 6e 74 65 67 65 72 20 52 4f  s the integer RO
4e50: 57 49 44 20 6f 66 20 74 68 65 20 6d 6f 73 74 20  WID of the most 
4e60: 72 65 63 65 6e 74 20 69 6e 73 65 72 74 2e 0a 2a  recent insert..*
4e70: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
4e80: 74 5f 6c 61 73 74 5f 72 6f 77 69 64 28 0a 20 20  t_last_rowid(.  
4e90: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
4ea0: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
4eb0: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
4ec0: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
4ed0: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
4ee0: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
4ef0: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
4f00: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
4f10: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
4f20: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
4f30: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
4f40: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
4f50: 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33   */.){.  sqlite3
4f60: 20 2a 64 62 3b 0a 20 20 63 68 61 72 20 7a 42 75   *db;.  char zBu
4f70: 66 5b 33 30 5d 3b 0a 0a 20 20 69 66 28 20 61 72  f[30];..  if( ar
4f80: 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=2 ){.    Tcl
4f90: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
4fa0: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
4fb0: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
4fc0: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 22 20 44  "", argv[0], " D
4fd0: 42 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  B\"", 0);.    re
4fe0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
4ff0: 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
5000: 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61  ointer(interp, a
5010: 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72  rgv[1], &db) ) r
5020: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
5030: 0a 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c  .  sprintf(zBuf,
5040: 20 22 25 6c 6c 64 22 2c 20 73 71 6c 69 74 65 33   "%lld", sqlite3
5050: 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  _last_insert_row
5060: 69 64 28 64 62 29 29 3b 0a 20 20 54 63 6c 5f 41  id(db));.  Tcl_A
5070: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
5080: 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 20 20  rp, zBuf, 0);.  
5090: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
50a0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
50b0: 3a 20 20 73 71 6c 69 74 65 33 5f 6b 65 79 20 44  :  sqlite3_key D
50c0: 42 20 4b 45 59 0a 2a 2a 0a 2a 2a 20 53 65 74 20  B KEY.**.** Set 
50d0: 74 68 65 20 63 6f 64 65 63 20 6b 65 79 2e 0a 2a  the codec key..*
50e0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
50f0: 74 5f 6b 65 79 28 0a 20 20 76 6f 69 64 20 2a 4e  t_key(.  void *N
5100: 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e  otUsed,.  Tcl_In
5110: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
5120: 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
5130: 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
5140: 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
5150: 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c  d */.  int argc,
5160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
5170: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
5180: 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ents */.  char *
5190: 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20  *argv           
51a0: 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68   /* Text of each
51b0: 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a   argument */.){.
51c0: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
51d0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65   const char *zKe
51e0: 79 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20  y;.  int nKey;. 
51f0: 20 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a   if( argc!=3 ){.
5200: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
5210: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
5220: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
5230: 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
5240: 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 49 4c  0],.       " FIL
5250: 45 4e 41 4d 45 5c 22 22 2c 20 30 29 3b 0a 20 20  ENAME\"", 0);.  
5260: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
5270: 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
5280: 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tDbPointer(inter
5290: 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29  p, argv[1], &db)
52a0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
52b0: 52 4f 52 3b 0a 20 20 7a 4b 65 79 20 3d 20 61 72  ROR;.  zKey = ar
52c0: 67 76 5b 32 5d 3b 0a 20 20 6e 4b 65 79 20 3d 20  gv[2];.  nKey = 
52d0: 73 74 72 6c 65 6e 28 7a 4b 65 79 29 3b 0a 23 69  strlen(zKey);.#i
52e0: 66 64 65 66 20 53 51 4c 49 54 45 5f 48 41 53 5f  fdef SQLITE_HAS_
52f0: 43 4f 44 45 43 0a 20 20 73 71 6c 69 74 65 33 5f  CODEC.  sqlite3_
5300: 6b 65 79 28 64 62 2c 20 7a 4b 65 79 2c 20 6e 4b  key(db, zKey, nK
5310: 65 79 29 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65  ey);.#endif.  re
5320: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
5330: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
5340: 6c 69 74 65 33 5f 72 65 6b 65 79 20 44 42 20 4b  lite3_rekey DB K
5350: 45 59 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20  EY.**.** Change 
5360: 74 68 65 20 63 6f 64 65 63 20 6b 65 79 2e 0a 2a  the codec key..*
5370: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
5380: 74 5f 72 65 6b 65 79 28 0a 20 20 76 6f 69 64 20  t_rekey(.  void 
5390: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f  *NotUsed,.  Tcl_
53a0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
53b0: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
53c0: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
53d0: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
53e0: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67  and */.  int arg
53f0: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
5400: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
5410: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72  uments */.  char
5420: 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20   **argv         
5430: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61     /* Text of ea
5440: 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29  ch argument */.)
5450: 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
5460: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
5470: 4b 65 79 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 3b  Key;.  int nKey;
5480: 0a 20 20 69 66 28 20 61 72 67 63 21 3d 33 20 29  .  if( argc!=3 )
5490: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
54a0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
54b0: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
54c0: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
54d0: 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46  v[0],.       " F
54e0: 49 4c 45 4e 41 4d 45 5c 22 22 2c 20 30 29 3b 0a  ILENAME\"", 0);.
54f0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
5500: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
5510: 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
5520: 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64  erp, argv[1], &d
5530: 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
5540: 45 52 52 4f 52 3b 0a 20 20 7a 4b 65 79 20 3d 20  ERROR;.  zKey = 
5550: 61 72 67 76 5b 32 5d 3b 0a 20 20 6e 4b 65 79 20  argv[2];.  nKey 
5560: 3d 20 73 74 72 6c 65 6e 28 7a 4b 65 79 29 3b 0a  = strlen(zKey);.
5570: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 48 41  #ifdef SQLITE_HA
5580: 53 5f 43 4f 44 45 43 0a 20 20 73 71 6c 69 74 65  S_CODEC.  sqlite
5590: 33 5f 72 65 6b 65 79 28 64 62 2c 20 7a 4b 65 79  3_rekey(db, zKey
55a0: 2c 20 6e 4b 65 79 29 3b 0a 23 65 6e 64 69 66 0a  , nKey);.#endif.
55b0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
55c0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
55d0: 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20    sqlite3_close 
55e0: 44 42 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 73 20  DB.**.** Closes 
55f0: 74 68 65 20 64 61 74 61 62 61 73 65 20 6f 70 65  the database ope
5600: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6f  ned by sqlite3_o
5610: 70 65 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  pen..*/.static i
5620: 6e 74 20 73 71 6c 69 74 65 5f 74 65 73 74 5f 63  nt sqlite_test_c
5630: 6c 6f 73 65 28 0a 20 20 76 6f 69 64 20 2a 4e 6f  lose(.  void *No
5640: 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74  tUsed,.  Tcl_Int
5650: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
5660: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
5670: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
5680: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
5690: 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20   */.  int argc, 
56a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
56b0: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
56c0: 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  nts */.  char **
56d0: 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20  argv            
56e0: 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20  /* Text of each 
56f0: 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20  argument */.){. 
5700: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
5710: 69 6e 74 20 72 63 3b 0a 20 20 69 66 28 20 61 72  int rc;.  if( ar
5720: 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=2 ){.    Tcl
5730: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
5740: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
5750: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
5760: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20  "", argv[0],.   
5770: 20 20 20 20 22 20 46 49 4c 45 4e 41 4d 45 5c 22      " FILENAME\"
5780: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
5790: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
57a0: 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e  .  if( getDbPoin
57b0: 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76  ter(interp, argv
57c0: 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75  [1], &db) ) retu
57d0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
57e0: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 6c 6f  rc = sqlite3_clo
57f0: 73 65 28 64 62 29 3b 0a 20 20 54 63 6c 5f 53 65  se(db);.  Tcl_Se
5800: 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  tResult(interp, 
5810: 28 63 68 61 72 20 2a 29 74 31 45 72 72 6f 72 4e  (char *)t1ErrorN
5820: 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54 41  ame(rc), TCL_STA
5830: 54 49 43 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  TIC);.  return T
5840: 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
5850: 49 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  Implementation o
5860: 66 20 74 68 65 20 78 5f 63 6f 61 6c 65 73 63 65  f the x_coalesce
5870: 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 20  () function..** 
5880: 52 65 74 75 72 6e 20 74 68 65 20 66 69 72 73 74  Return the first
5890: 20 61 72 67 75 6d 65 6e 74 20 6e 6f 6e 2d 4e 55   argument non-NU
58a0: 4c 4c 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  LL argument..*/.
58b0: 73 74 61 74 69 63 20 76 6f 69 64 20 74 31 5f 69  static void t1_i
58c0: 66 6e 75 6c 6c 46 75 6e 63 28 0a 20 20 73 71 6c  fnullFunc(.  sql
58d0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f  ite3_context *co
58e0: 6e 74 65 78 74 2c 0a 20 20 69 6e 74 20 61 72 67  ntext,.  int arg
58f0: 63 2c 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  c,.  sqlite3_val
5900: 75 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 69  ue **argv.){.  i
5910: 6e 74 20 69 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  nt i;.  for(i=0;
5920: 20 69 3c 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20   i<argc; i++){. 
5930: 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4e 55     if( SQLITE_NU
5940: 4c 4c 21 3d 73 71 6c 69 74 65 33 5f 76 61 6c 75  LL!=sqlite3_valu
5950: 65 5f 74 79 70 65 28 61 72 67 76 5b 69 5d 29 20  e_type(argv[i]) 
5960: 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d  ){.      int n =
5970: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62   sqlite3_value_b
5980: 79 74 65 73 28 61 72 67 76 5b 69 5d 29 3b 0a 20  ytes(argv[i]);. 
5990: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73       sqlite3_res
59a0: 75 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65 78 74  ult_text(context
59b0: 2c 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33  , (char*)sqlite3
59c0: 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67 76  _value_text(argv
59d0: 5b 69 5d 29 2c 0a 20 20 20 20 20 20 20 20 20 20  [i]),.          
59e0: 6e 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49  n, SQLITE_TRANSI
59f0: 45 4e 54 29 3b 0a 20 20 20 20 20 20 62 72 65 61  ENT);.      brea
5a00: 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a  k;.    }.  }.}..
5a10: 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 61 72 65 20  /*.** These are 
5a20: 74 65 73 74 20 66 75 6e 63 74 69 6f 6e 73 2e 20  test functions. 
5a30: 20 20 20 68 65 78 38 28 29 20 69 6e 74 65 72 70     hex8() interp
5a40: 72 65 74 73 20 69 74 73 20 61 72 67 75 6d 65 6e  rets its argumen
5a50: 74 20 61 73 0a 2a 2a 20 55 54 46 38 20 61 6e 64  t as.** UTF8 and
5a60: 20 72 65 74 75 72 6e 73 20 61 20 68 65 78 20 65   returns a hex e
5a70: 6e 63 6f 64 69 6e 67 2e 20 20 68 65 78 31 36 6c  ncoding.  hex16l
5a80: 65 28 29 20 69 6e 74 65 72 70 72 65 74 73 20 69  e() interprets i
5a90: 74 73 20 61 72 67 75 6d 65 6e 74 0a 2a 2a 20 61  ts argument.** a
5aa0: 73 20 55 54 46 31 36 6c 65 20 61 6e 64 20 72 65  s UTF16le and re
5ab0: 74 75 72 6e 73 20 61 20 68 65 78 20 65 6e 63 6f  turns a hex enco
5ac0: 64 69 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ding..*/.static 
5ad0: 76 6f 69 64 20 68 65 78 38 46 75 6e 63 28 73 71  void hex8Func(sq
5ae0: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
5af0: 2c 20 69 6e 74 20 61 72 67 63 2c 20 73 71 6c 69  , int argc, sqli
5b00: 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76  te3_value **argv
5b10: 29 7b 0a 20 20 63 6f 6e 73 74 20 75 6e 73 69 67  ){.  const unsig
5b20: 6e 65 64 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69  ned char *z;.  i
5b30: 6e 74 20 69 3b 0a 20 20 63 68 61 72 20 7a 42 75  nt i;.  char zBu
5b40: 66 5b 32 30 30 5d 3b 0a 20 20 7a 20 3d 20 73 71  f[200];.  z = sq
5b50: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
5b60: 28 61 72 67 76 5b 30 5d 29 3b 0a 20 20 66 6f 72  (argv[0]);.  for
5b70: 28 69 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28 7a  (i=0; i<sizeof(z
5b80: 42 75 66 29 2f 32 20 2d 20 32 20 26 26 20 7a 5b  Buf)/2 - 2 && z[
5b90: 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73 70  i]; i++){.    sp
5ba0: 72 69 6e 74 66 28 26 7a 42 75 66 5b 69 2a 32 5d  rintf(&zBuf[i*2]
5bb0: 2c 20 22 25 30 32 78 22 2c 20 7a 5b 69 5d 26 30  , "%02x", z[i]&0
5bc0: 78 66 66 29 3b 0a 20 20 7d 0a 20 20 7a 42 75 66  xff);.  }.  zBuf
5bd0: 5b 69 2a 32 5d 20 3d 20 30 3b 0a 20 20 73 71 6c  [i*2] = 0;.  sql
5be0: 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74  ite3_result_text
5bf0: 28 70 2c 20 28 63 68 61 72 2a 29 7a 42 75 66 2c  (p, (char*)zBuf,
5c00: 20 2d 31 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e   -1, SQLITE_TRAN
5c10: 53 49 45 4e 54 29 3b 0a 7d 0a 23 69 66 6e 64 65  SIENT);.}.#ifnde
5c20: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
5c30: 46 31 36 0a 73 74 61 74 69 63 20 76 6f 69 64 20  F16.static void 
5c40: 68 65 78 31 36 46 75 6e 63 28 73 71 6c 69 74 65  hex16Func(sqlite
5c50: 33 5f 63 6f 6e 74 65 78 74 20 2a 70 2c 20 69 6e  3_context *p, in
5c60: 74 20 61 72 67 63 2c 20 73 71 6c 69 74 65 33 5f  t argc, sqlite3_
5c70: 76 61 6c 75 65 20 2a 2a 61 72 67 76 29 7b 0a 20  value **argv){. 
5c80: 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
5c90: 73 68 6f 72 74 20 69 6e 74 20 2a 7a 3b 0a 20 20  short int *z;.  
5ca0: 69 6e 74 20 69 3b 0a 20 20 63 68 61 72 20 7a 42  int i;.  char zB
5cb0: 75 66 5b 34 30 30 5d 3b 0a 20 20 7a 20 3d 20 73  uf[400];.  z = s
5cc0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
5cd0: 74 31 36 28 61 72 67 76 5b 30 5d 29 3b 0a 20 20  t16(argv[0]);.  
5ce0: 66 6f 72 28 69 3d 30 3b 20 69 3c 73 69 7a 65 6f  for(i=0; i<sizeo
5cf0: 66 28 7a 42 75 66 29 2f 34 20 2d 20 34 20 26 26  f(zBuf)/4 - 4 &&
5d00: 20 7a 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20   z[i]; i++){.   
5d10: 20 73 70 72 69 6e 74 66 28 26 7a 42 75 66 5b 69   sprintf(&zBuf[i
5d20: 2a 34 5d 2c 20 22 25 30 34 78 22 2c 20 7a 5b 69  *4], "%04x", z[i
5d30: 5d 26 30 78 66 66 29 3b 0a 20 20 7d 0a 20 20 7a  ]&0xff);.  }.  z
5d40: 42 75 66 5b 69 2a 34 5d 20 3d 20 30 3b 0a 20 20  Buf[i*4] = 0;.  
5d50: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74  sqlite3_result_t
5d60: 65 78 74 28 70 2c 20 28 63 68 61 72 2a 29 7a 42  ext(p, (char*)zB
5d70: 75 66 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 54  uf, -1, SQLITE_T
5d80: 52 41 4e 53 49 45 4e 54 29 3b 0a 7d 0a 23 65 6e  RANSIENT);.}.#en
5d90: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 74 72  dif../*.** A str
5da0: 75 63 74 75 72 65 20 69 6e 74 6f 20 77 68 69 63  ucture into whic
5db0: 68 20 74 6f 20 61 63 63 75 6d 75 6c 61 74 65 20  h to accumulate 
5dc0: 74 65 78 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  text..*/.struct 
5dd0: 64 73 74 72 20 7b 0a 20 20 69 6e 74 20 6e 41 6c  dstr {.  int nAl
5de0: 6c 6f 63 3b 20 20 2f 2a 20 53 70 61 63 65 20 61  loc;  /* Space a
5df0: 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 69 6e  llocated */.  in
5e00: 74 20 6e 55 73 65 64 3b 20 20 20 2f 2a 20 53 70  t nUsed;   /* Sp
5e10: 61 63 65 20 75 73 65 64 20 2a 2f 0a 20 20 63 68  ace used */.  ch
5e20: 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 68  ar *z;     /* Th
5e30: 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 0a 2f  e space */.};../
5e40: 2a 0a 2a 2a 20 41 70 70 65 6e 64 20 74 65 78 74  *.** Append text
5e50: 20 74 6f 20 61 20 64 73 74 72 0a 2a 2f 0a 73 74   to a dstr.*/.st
5e60: 61 74 69 63 20 76 6f 69 64 20 64 73 74 72 41 70  atic void dstrAp
5e70: 70 65 6e 64 28 73 74 72 75 63 74 20 64 73 74 72  pend(struct dstr
5e80: 20 2a 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20   *p, const char 
5e90: 2a 7a 2c 20 69 6e 74 20 64 69 76 69 64 65 72 29  *z, int divider)
5ea0: 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 73 74 72 6c  {.  int n = strl
5eb0: 65 6e 28 7a 29 3b 0a 20 20 69 66 28 20 70 2d 3e  en(z);.  if( p->
5ec0: 6e 55 73 65 64 20 2b 20 6e 20 2b 20 32 20 3e 20  nUsed + n + 2 > 
5ed0: 70 2d 3e 6e 41 6c 6c 6f 63 20 29 7b 0a 20 20 20  p->nAlloc ){.   
5ee0: 20 63 68 61 72 20 2a 7a 4e 65 77 3b 0a 20 20 20   char *zNew;.   
5ef0: 20 70 2d 3e 6e 41 6c 6c 6f 63 20 3d 20 70 2d 3e   p->nAlloc = p->
5f00: 6e 41 6c 6c 6f 63 2a 32 20 2b 20 6e 20 2b 20 32  nAlloc*2 + n + 2
5f10: 30 30 3b 0a 20 20 20 20 7a 4e 65 77 20 3d 20 73  00;.    zNew = s
5f20: 71 6c 69 74 65 33 5f 72 65 61 6c 6c 6f 63 28 70  qlite3_realloc(p
5f30: 2d 3e 7a 2c 20 70 2d 3e 6e 41 6c 6c 6f 63 29 3b  ->z, p->nAlloc);
5f40: 0a 20 20 20 20 69 66 28 20 7a 4e 65 77 3d 3d 30  .    if( zNew==0
5f50: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
5f60: 33 5f 66 72 65 65 28 70 2d 3e 7a 29 3b 0a 20 20  3_free(p->z);.  
5f70: 20 20 20 20 6d 65 6d 73 65 74 28 70 2c 20 30 2c      memset(p, 0,
5f80: 20 73 69 7a 65 6f 66 28 2a 70 29 29 3b 0a 20 20   sizeof(*p));.  
5f90: 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 20 20      return;.    
5fa0: 7d 0a 20 20 20 20 70 2d 3e 7a 20 3d 20 7a 4e 65  }.    p->z = zNe
5fb0: 77 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 69 76  w;.  }.  if( div
5fc0: 69 64 65 72 20 26 26 20 70 2d 3e 6e 55 73 65 64  ider && p->nUsed
5fd0: 3e 30 20 29 7b 0a 20 20 20 20 70 2d 3e 7a 5b 70  >0 ){.    p->z[p
5fe0: 2d 3e 6e 55 73 65 64 2b 2b 5d 20 3d 20 64 69 76  ->nUsed++] = div
5ff0: 69 64 65 72 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63  ider;.  }.  memc
6000: 70 79 28 26 70 2d 3e 7a 5b 70 2d 3e 6e 55 73 65  py(&p->z[p->nUse
6010: 64 5d 2c 20 7a 2c 20 6e 2b 31 29 3b 0a 20 20 70  d], z, n+1);.  p
6020: 2d 3e 6e 55 73 65 64 20 2b 3d 20 6e 3b 0a 7d 0a  ->nUsed += n;.}.
6030: 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 64 20 66  ./*.** Invoked f
6040: 6f 72 20 65 61 63 68 20 63 61 6c 6c 62 61 63 6b  or each callback
6050: 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 45 78 65   from sqlite3Exe
6060: 63 46 75 6e 63 0a 2a 2f 0a 73 74 61 74 69 63 20  cFunc.*/.static 
6070: 69 6e 74 20 65 78 65 63 46 75 6e 63 43 61 6c 6c  int execFuncCall
6080: 62 61 63 6b 28 76 6f 69 64 20 2a 70 44 61 74 61  back(void *pData
6090: 2c 20 69 6e 74 20 61 72 67 63 2c 20 63 68 61 72  , int argc, char
60a0: 20 2a 2a 61 72 67 76 2c 20 63 68 61 72 20 2a 2a   **argv, char **
60b0: 4e 6f 74 55 73 65 64 29 7b 0a 20 20 73 74 72 75  NotUsed){.  stru
60c0: 63 74 20 64 73 74 72 20 2a 70 20 3d 20 28 73 74  ct dstr *p = (st
60d0: 72 75 63 74 20 64 73 74 72 2a 29 70 44 61 74 61  ruct dstr*)pData
60e0: 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 66 6f 72  ;.  int i;.  for
60f0: 28 69 3d 30 3b 20 69 3c 61 72 67 63 3b 20 69 2b  (i=0; i<argc; i+
6100: 2b 29 7b 0a 20 20 20 20 69 66 28 20 61 72 67 76  +){.    if( argv
6110: 5b 69 5d 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  [i]==0 ){.      
6120: 64 73 74 72 41 70 70 65 6e 64 28 70 2c 20 22 4e  dstrAppend(p, "N
6130: 55 4c 4c 22 2c 20 27 20 27 29 3b 0a 20 20 20 20  ULL", ' ');.    
6140: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 73 74  }else{.      dst
6150: 72 41 70 70 65 6e 64 28 70 2c 20 61 72 67 76 5b  rAppend(p, argv[
6160: 69 5d 2c 20 27 20 27 29 3b 0a 20 20 20 20 7d 0a  i], ' ');.    }.
6170: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a    }.  return 0;.
6180: 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c 65 6d 65  }../*.** Impleme
6190: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 78  ntation of the x
61a0: 5f 73 71 6c 69 74 65 5f 65 78 65 63 28 29 20 66  _sqlite_exec() f
61b0: 75 6e 63 74 69 6f 6e 2e 20 20 54 68 69 73 20 66  unction.  This f
61c0: 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73 0a 2a 2a  unction takes.**
61d0: 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65   a single argume
61e0: 6e 74 20 61 6e 64 20 61 74 74 65 6d 70 74 73 20  nt and attempts 
61f0: 74 6f 20 65 78 65 63 75 74 65 20 74 68 61 74 20  to execute that 
6200: 61 72 67 75 6d 65 6e 74 20 61 73 20 53 51 4c 20  argument as SQL 
6210: 63 6f 64 65 2e 0a 2a 2a 20 54 68 69 73 20 69 73  code..** This is
6220: 20 69 6c 6c 65 67 61 6c 20 61 6e 64 20 73 68 6f   illegal and sho
6230: 75 6c 64 20 73 65 74 20 74 68 65 20 53 51 4c 49  uld set the SQLI
6240: 54 45 5f 4d 49 53 55 53 45 20 66 6c 61 67 20 6f  TE_MISUSE flag o
6250: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a  n the database..
6260: 2a 2a 0a 2a 2a 20 32 30 30 34 2d 4a 61 6e 2d 30  **.** 2004-Jan-0
6270: 37 3a 20 20 57 65 20 68 61 76 65 20 63 68 61 6e  7:  We have chan
6280: 67 65 64 20 74 68 69 73 20 74 6f 20 6d 61 6b 65  ged this to make
6290: 20 69 74 20 6c 65 67 61 6c 20 74 6f 20 63 61 6c   it legal to cal
62a0: 6c 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29  l sqlite3_exec()
62b0: 0a 2a 2a 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  .** from within 
62c0: 61 20 66 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 2e  a function call.
62d0: 20 20 0a 2a 2a 20 0a 2a 2a 20 54 68 69 73 20 72    .** .** This r
62e0: 6f 75 74 69 6e 65 20 73 69 6d 75 6c 61 74 65 73  outine simulates
62f0: 20 74 68 65 20 65 66 66 65 63 74 20 6f 66 20 68   the effect of h
6300: 61 76 69 6e 67 20 74 77 6f 20 74 68 72 65 61 64  aving two thread
6310: 73 20 61 74 74 65 6d 70 74 20 74 6f 0a 2a 2a 20  s attempt to.** 
6320: 75 73 65 20 74 68 65 20 73 61 6d 65 20 64 61 74  use the same dat
6330: 61 62 61 73 65 20 61 74 20 74 68 65 20 73 61 6d  abase at the sam
6340: 65 20 74 69 6d 65 2e 0a 2a 2f 0a 73 74 61 74 69  e time..*/.stati
6350: 63 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  c void sqlite3Ex
6360: 65 63 46 75 6e 63 28 0a 20 20 73 71 6c 69 74 65  ecFunc(.  sqlite
6370: 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65  3_context *conte
6380: 78 74 2c 20 0a 20 20 69 6e 74 20 61 72 67 63 2c  xt, .  int argc,
6390: 20 20 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c    .  sqlite3_val
63a0: 75 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 73  ue **argv.){.  s
63b0: 74 72 75 63 74 20 64 73 74 72 20 78 3b 0a 20 20  truct dstr x;.  
63c0: 6d 65 6d 73 65 74 28 26 78 2c 20 30 2c 20 73 69  memset(&x, 0, si
63d0: 7a 65 6f 66 28 78 29 29 3b 0a 20 20 28 76 6f 69  zeof(x));.  (voi
63e0: 64 29 73 71 6c 69 74 65 33 5f 65 78 65 63 28 28  d)sqlite3_exec((
63f0: 73 71 6c 69 74 65 33 2a 29 73 71 6c 69 74 65 33  sqlite3*)sqlite3
6400: 5f 75 73 65 72 5f 64 61 74 61 28 63 6f 6e 74 65  _user_data(conte
6410: 78 74 29 2c 0a 20 20 20 20 20 20 28 63 68 61 72  xt),.      (char
6420: 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  *)sqlite3_value_
6430: 74 65 78 74 28 61 72 67 76 5b 30 5d 29 2c 0a 20  text(argv[0]),. 
6440: 20 20 20 20 20 65 78 65 63 46 75 6e 63 43 61 6c       execFuncCal
6450: 6c 62 61 63 6b 2c 20 26 78 2c 20 30 29 3b 0a 20  lback, &x, 0);. 
6460: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
6470: 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 78 2e  text(context, x.
6480: 7a 2c 20 78 2e 6e 55 73 65 64 2c 20 53 51 4c 49  z, x.nUsed, SQLI
6490: 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20  TE_TRANSIENT);. 
64a0: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 78 2e   sqlite3_free(x.
64b0: 7a 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70  z);.}../*.** Imp
64c0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  lementation of t
64d0: 6b 74 32 32 31 33 66 75 6e 63 28 29 2c 20 61 20  kt2213func(), a 
64e0: 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20  scalar function 
64f0: 74 68 61 74 20 74 61 6b 65 73 20 65 78 61 63 74  that takes exact
6500: 6c 79 0a 2a 2a 20 6f 6e 65 20 61 72 67 75 6d 65  ly.** one argume
6510: 6e 74 2e 20 49 74 20 68 61 73 20 74 77 6f 20 69  nt. It has two i
6520: 6e 74 65 72 65 73 74 69 6e 67 20 66 65 61 74 75  nteresting featu
6530: 72 65 73 3a 0a 2a 2a 0a 2a 2a 20 2a 20 49 74 20  res:.**.** * It 
6540: 63 61 6c 6c 73 20 73 71 6c 69 74 65 33 5f 76 61  calls sqlite3_va
6550: 6c 75 65 5f 74 65 78 74 28 29 20 33 20 74 69 6d  lue_text() 3 tim
6560: 65 73 20 6f 6e 20 74 68 65 20 61 72 67 75 6d 65  es on the argume
6570: 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt sqlite3_value
6580: 2a 2e 0a 2a 2a 20 20 20 49 66 20 74 68 65 20 74  *..**   If the t
6590: 68 72 65 65 20 70 6f 69 6e 74 65 72 73 20 72 65  hree pointers re
65a0: 74 75 72 6e 65 64 20 61 72 65 20 6e 6f 74 20 74  turned are not t
65b0: 68 65 20 73 61 6d 65 20 61 6e 20 53 51 4c 20 65  he same an SQL e
65c0: 72 72 6f 72 20 69 73 20 72 61 69 73 65 64 2e 0a  rror is raised..
65d0: 2a 2a 0a 2a 2a 20 2a 20 4f 74 68 65 72 77 69 73  **.** * Otherwis
65e0: 65 20 69 74 20 72 65 74 75 72 6e 73 20 61 20 63  e it returns a c
65f0: 6f 70 79 20 6f 66 20 74 68 65 20 74 65 78 74 20  opy of the text 
6600: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
6610: 66 20 69 74 73 20 0a 2a 2a 20 20 20 61 72 67 75  f its .**   argu
6620: 6d 65 6e 74 20 69 6e 20 73 75 63 68 20 61 20 77  ment in such a w
6630: 61 79 20 61 73 20 74 68 65 20 56 44 42 45 20 72  ay as the VDBE r
6640: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73  epresentation is
6650: 20 61 20 4d 65 6d 2a 20 63 65 6c 6c 20 0a 2a 2a   a Mem* cell .**
6660: 20 20 20 77 69 74 68 20 74 68 65 20 4d 45 4d 5f     with the MEM_
6670: 54 65 72 6d 20 66 6c 61 67 20 63 6c 65 61 72 2e  Term flag clear.
6680: 20 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23   .**.** Ticket #
6690: 32 32 31 33 20 63 61 6e 20 74 68 65 72 65 66 6f  2213 can therefo
66a0: 72 65 20 62 65 20 74 65 73 74 65 64 20 62 79 20  re be tested by 
66b0: 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 66  evaluating the f
66c0: 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 53 51 4c 20  ollowing.** SQL 
66d0: 65 78 70 72 65 73 73 69 6f 6e 3a 0a 2a 2a 0a 2a  expression:.**.*
66e0: 2a 20 20 20 74 6b 74 32 32 31 33 66 75 6e 63 28  *   tkt2213func(
66f0: 74 6b 74 32 32 31 33 66 75 6e 63 28 27 61 20 73  tkt2213func('a s
6700: 74 72 69 6e 67 27 29 29 3b 0a 2a 2f 0a 73 74 61  tring'));.*/.sta
6710: 74 69 63 20 76 6f 69 64 20 74 6b 74 32 32 31 33  tic void tkt2213
6720: 46 75 6e 63 74 69 6f 6e 28 0a 20 20 73 71 6c 69  Function(.  sqli
6730: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e  te3_context *con
6740: 74 65 78 74 2c 20 0a 20 20 69 6e 74 20 61 72 67  text, .  int arg
6750: 63 2c 20 20 0a 20 20 73 71 6c 69 74 65 33 5f 76  c,  .  sqlite3_v
6760: 61 6c 75 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20  alue **argv.){. 
6770: 20 69 6e 74 20 6e 54 65 78 74 3b 0a 20 20 75 6e   int nText;.  un
6780: 73 69 67 6e 65 64 20 63 68 61 72 20 63 6f 6e 73  signed char cons
6790: 74 20 2a 7a 54 65 78 74 31 3b 0a 20 20 75 6e 73  t *zText1;.  uns
67a0: 69 67 6e 65 64 20 63 68 61 72 20 63 6f 6e 73 74  igned char const
67b0: 20 2a 7a 54 65 78 74 32 3b 0a 20 20 75 6e 73 69   *zText2;.  unsi
67c0: 67 6e 65 64 20 63 68 61 72 20 63 6f 6e 73 74 20  gned char const 
67d0: 2a 7a 54 65 78 74 33 3b 0a 0a 20 20 6e 54 65 78  *zText3;..  nTex
67e0: 74 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  t = sqlite3_valu
67f0: 65 5f 62 79 74 65 73 28 61 72 67 76 5b 30 5d 29  e_bytes(argv[0])
6800: 3b 0a 20 20 7a 54 65 78 74 31 20 3d 20 73 71 6c  ;.  zText1 = sql
6810: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
6820: 61 72 67 76 5b 30 5d 29 3b 0a 20 20 7a 54 65 78  argv[0]);.  zTex
6830: 74 32 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c  t2 = sqlite3_val
6840: 75 65 5f 74 65 78 74 28 61 72 67 76 5b 30 5d 29  ue_text(argv[0])
6850: 3b 0a 20 20 7a 54 65 78 74 33 20 3d 20 73 71 6c  ;.  zText3 = sql
6860: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
6870: 61 72 67 76 5b 30 5d 29 3b 0a 0a 20 20 69 66 28  argv[0]);..  if(
6880: 20 7a 54 65 78 74 31 21 3d 7a 54 65 78 74 32 20   zText1!=zText2 
6890: 7c 7c 20 7a 54 65 78 74 32 21 3d 7a 54 65 78 74  || zText2!=zText
68a0: 33 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  3 ){.    sqlite3
68b0: 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28 63 6f  _result_error(co
68c0: 6e 74 65 78 74 2c 20 22 74 6b 74 32 32 31 33 20  ntext, "tkt2213 
68d0: 69 73 20 6e 6f 74 20 66 69 78 65 64 22 2c 20 2d  is not fixed", -
68e0: 31 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  1);.  }else{.   
68f0: 20 63 68 61 72 20 2a 7a 43 6f 70 79 20 3d 20 28   char *zCopy = (
6900: 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 5f 6d  char *)sqlite3_m
6910: 61 6c 6c 6f 63 28 6e 54 65 78 74 29 3b 0a 20 20  alloc(nText);.  
6920: 20 20 6d 65 6d 63 70 79 28 7a 43 6f 70 79 2c 20    memcpy(zCopy, 
6930: 7a 54 65 78 74 31 2c 20 6e 54 65 78 74 29 3b 0a  zText1, nText);.
6940: 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75      sqlite3_resu
6950: 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65 78 74 2c  lt_text(context,
6960: 20 7a 43 6f 70 79 2c 20 6e 54 65 78 74 2c 20 73   zCopy, nText, s
6970: 71 6c 69 74 65 33 5f 66 72 65 65 29 3b 0a 20 20  qlite3_free);.  
6980: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  }.}../*.** The f
6990: 6f 6c 6c 6f 77 69 6e 67 20 53 51 4c 20 66 75 6e  ollowing SQL fun
69a0: 63 74 69 6f 6e 20 74 61 6b 65 73 20 34 20 61 72  ction takes 4 ar
69b0: 67 75 6d 65 6e 74 73 2e 20 20 54 68 65 20 32 6e  guments.  The 2n
69c0: 64 20 61 6e 64 0a 2a 2a 20 34 74 68 20 61 72 67  d and.** 4th arg
69d0: 75 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 6f 6e  ument must be on
69e0: 65 20 6f 66 20 74 68 65 73 65 20 73 74 72 69 6e  e of these strin
69f0: 67 73 3a 20 20 27 74 65 78 74 27 2c 20 27 74 65  gs:  'text', 'te
6a00: 78 74 31 36 27 2c 0a 2a 2a 20 6f 72 20 27 62 6c  xt16',.** or 'bl
6a10: 6f 62 27 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  ob' correspondin
6a20: 67 20 74 6f 20 41 50 49 20 66 75 6e 63 74 69 6f  g to API functio
6a30: 6e 73 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 73 71  ns.**.**      sq
6a40: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
6a50: 28 29 0a 2a 2a 20 20 20 20 20 20 73 71 6c 69 74  ().**      sqlit
6a60: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 28  e3_value_text16(
6a70: 29 0a 2a 2a 20 20 20 20 20 20 73 71 6c 69 74 65  ).**      sqlite
6a80: 33 5f 76 61 6c 75 65 5f 62 6c 6f 62 28 29 0a 2a  3_value_blob().*
6a90: 2a 0a 2a 2a 20 54 68 65 20 74 68 69 72 64 20 61  *.** The third a
6aa0: 72 67 75 6d 65 6e 74 20 69 73 20 61 20 73 74 72  rgument is a str
6ab0: 69 6e 67 2c 20 65 69 74 68 65 72 20 27 62 79 74  ing, either 'byt
6ac0: 65 73 27 20 6f 72 20 27 62 79 74 65 73 31 36 27  es' or 'bytes16'
6ad0: 20 6f 72 20 27 6e 6f 6f 70 27 2c 0a 2a 2a 20 63   or 'noop',.** c
6ae0: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
6af0: 41 50 49 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  APIs:.**.**     
6b00: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62   sqlite3_value_b
6b10: 79 74 65 73 28 29 0a 2a 2a 20 20 20 20 20 20 73  ytes().**      s
6b20: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74  qlite3_value_byt
6b30: 65 73 31 36 28 29 0a 2a 2a 20 20 20 20 20 20 6e  es16().**      n
6b40: 6f 6f 70 0a 2a 2a 0a 2a 2a 20 54 68 65 20 41 50  oop.**.** The AP
6b50: 49 73 20 64 65 73 69 67 6e 61 74 65 64 20 62 79  Is designated by
6b60: 20 74 68 65 20 32 6e 64 20 74 68 72 6f 75 67 68   the 2nd through
6b70: 20 34 74 68 20 61 72 67 75 6d 65 6e 74 73 20 61   4th arguments a
6b80: 72 65 20 61 70 70 6c 69 65 64 0a 2a 2a 20 74 6f  re applied.** to
6b90: 20 74 68 65 20 66 69 72 73 74 20 61 72 67 75 6d   the first argum
6ba0: 65 6e 74 20 69 6e 20 6f 72 64 65 72 2e 20 20 49  ent in order.  I
6bb0: 66 20 74 68 65 20 70 6f 69 6e 74 65 72 73 20 72  f the pointers r
6bc0: 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 0a 2a  eturned by the.*
6bd0: 2a 20 73 65 63 6f 6e 64 20 61 6e 64 20 66 6f 75  * second and fou
6be0: 72 74 68 20 61 72 65 20 64 69 66 66 65 72 65 6e  rth are differen
6bf0: 74 2c 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  t, this routine 
6c00: 72 65 74 75 72 6e 73 20 31 2e 20 20 4f 74 68 65  returns 1.  Othe
6c10: 72 77 69 73 65 2c 0a 2a 2a 20 74 68 69 73 20 72  rwise,.** this r
6c20: 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20 30  outine returns 0
6c30: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e  ..**.** This fun
6c40: 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f  ction is used to
6c50: 20 74 65 73 74 20 74 6f 20 73 65 65 20 77 68 65   test to see whe
6c60: 6e 20 72 65 74 75 72 6e 65 64 20 70 6f 69 6e 74  n returned point
6c70: 65 72 73 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20  ers from.** the 
6c80: 5f 74 65 78 74 28 29 2c 20 5f 74 65 78 74 31 36  _text(), _text16
6c90: 28 29 20 61 6e 64 20 5f 62 6c 6f 62 28 29 20 41  () and _blob() A
6ca0: 50 49 73 20 62 65 63 6f 6d 65 20 69 6e 76 61 6c  PIs become inval
6cb0: 69 64 61 74 65 64 2e 0a 2a 2f 0a 73 74 61 74 69  idated..*/.stati
6cc0: 63 20 76 6f 69 64 20 70 74 72 43 68 6e 67 46 75  c void ptrChngFu
6cd0: 6e 63 74 69 6f 6e 28 0a 20 20 73 71 6c 69 74 65  nction(.  sqlite
6ce0: 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65  3_context *conte
6cf0: 78 74 2c 20 0a 20 20 69 6e 74 20 61 72 67 63 2c  xt, .  int argc,
6d00: 20 20 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c    .  sqlite3_val
6d10: 75 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 63  ue **argv.){.  c
6d20: 6f 6e 73 74 20 76 6f 69 64 20 2a 70 31 2c 20 2a  onst void *p1, *
6d30: 70 32 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  p2;.  const char
6d40: 20 2a 7a 43 6d 64 3b 0a 20 20 69 66 28 20 61 72   *zCmd;.  if( ar
6d50: 67 63 21 3d 34 20 29 20 72 65 74 75 72 6e 3b 0a  gc!=4 ) return;.
6d60: 20 20 7a 43 6d 64 20 3d 20 28 63 6f 6e 73 74 20    zCmd = (const 
6d70: 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61  char*)sqlite3_va
6d80: 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b 31 5d  lue_text(argv[1]
6d90: 29 3b 0a 20 20 69 66 28 20 7a 43 6d 64 3d 3d 30  );.  if( zCmd==0
6da0: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28   ) return;.  if(
6db0: 20 73 74 72 63 6d 70 28 7a 43 6d 64 2c 22 74 65   strcmp(zCmd,"te
6dc0: 78 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70  xt")==0 ){.    p
6dd0: 31 20 3d 20 28 63 6f 6e 73 74 20 76 6f 69 64 2a  1 = (const void*
6de0: 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  )sqlite3_value_t
6df0: 65 78 74 28 61 72 67 76 5b 30 5d 29 3b 0a 23 69  ext(argv[0]);.#i
6e00: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
6e10: 54 5f 55 54 46 31 36 0a 20 20 7d 65 6c 73 65 20  T_UTF16.  }else 
6e20: 69 66 28 20 73 74 72 63 6d 70 28 7a 43 6d 64 2c  if( strcmp(zCmd,
6e30: 20 22 74 65 78 74 31 36 22 29 3d 3d 30 20 29 7b   "text16")==0 ){
6e40: 0a 20 20 20 20 70 31 20 3d 20 28 63 6f 6e 73 74  .    p1 = (const
6e50: 20 76 6f 69 64 2a 29 73 71 6c 69 74 65 33 5f 76   void*)sqlite3_v
6e60: 61 6c 75 65 5f 74 65 78 74 31 36 28 61 72 67 76  alue_text16(argv
6e70: 5b 30 5d 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d  [0]);.#endif.  }
6e80: 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
6e90: 7a 43 6d 64 2c 20 22 62 6c 6f 62 22 29 3d 3d 30  zCmd, "blob")==0
6ea0: 20 29 7b 0a 20 20 20 20 70 31 20 3d 20 28 63 6f   ){.    p1 = (co
6eb0: 6e 73 74 20 76 6f 69 64 2a 29 73 71 6c 69 74 65  nst void*)sqlite
6ec0: 33 5f 76 61 6c 75 65 5f 62 6c 6f 62 28 61 72 67  3_value_blob(arg
6ed0: 76 5b 30 5d 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  v[0]);.  }else{.
6ee0: 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a      return;.  }.
6ef0: 20 20 7a 43 6d 64 20 3d 20 28 63 6f 6e 73 74 20    zCmd = (const 
6f00: 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61  char*)sqlite3_va
6f10: 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b 32 5d  lue_text(argv[2]
6f20: 29 3b 0a 20 20 69 66 28 20 7a 43 6d 64 3d 3d 30  );.  if( zCmd==0
6f30: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28   ) return;.  if(
6f40: 20 73 74 72 63 6d 70 28 7a 43 6d 64 2c 22 62 79   strcmp(zCmd,"by
6f50: 74 65 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  tes")==0 ){.    
6f60: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79  sqlite3_value_by
6f70: 74 65 73 28 61 72 67 76 5b 30 5d 29 3b 0a 23 69  tes(argv[0]);.#i
6f80: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
6f90: 54 5f 55 54 46 31 36 0a 20 20 7d 65 6c 73 65 20  T_UTF16.  }else 
6fa0: 69 66 28 20 73 74 72 63 6d 70 28 7a 43 6d 64 2c  if( strcmp(zCmd,
6fb0: 20 22 62 79 74 65 73 31 36 22 29 3d 3d 30 20 29   "bytes16")==0 )
6fc0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 76 61  {.    sqlite3_va
6fd0: 6c 75 65 5f 62 79 74 65 73 31 36 28 61 72 67 76  lue_bytes16(argv
6fe0: 5b 30 5d 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d  [0]);.#endif.  }
6ff0: 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
7000: 7a 43 6d 64 2c 20 22 6e 6f 6f 70 22 29 3d 3d 30  zCmd, "noop")==0
7010: 20 29 7b 0a 20 20 20 20 2f 2a 20 64 6f 20 6e 6f   ){.    /* do no
7020: 74 68 69 6e 67 20 2a 2f 0a 20 20 7d 65 6c 73 65  thing */.  }else
7030: 7b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20  {.    return;.  
7040: 7d 0a 20 20 7a 43 6d 64 20 3d 20 28 63 6f 6e 73  }.  zCmd = (cons
7050: 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f  t char*)sqlite3_
7060: 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b  value_text(argv[
7070: 33 5d 29 3b 0a 20 20 69 66 28 20 7a 43 6d 64 3d  3]);.  if( zCmd=
7080: 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69  =0 ) return;.  i
7090: 66 28 20 73 74 72 63 6d 70 28 7a 43 6d 64 2c 22  f( strcmp(zCmd,"
70a0: 74 65 78 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20  text")==0 ){.   
70b0: 20 70 32 20 3d 20 28 63 6f 6e 73 74 20 76 6f 69   p2 = (const voi
70c0: 64 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  d*)sqlite3_value
70d0: 5f 74 65 78 74 28 61 72 67 76 5b 30 5d 29 3b 0a  _text(argv[0]);.
70e0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
70f0: 4d 49 54 5f 55 54 46 31 36 0a 20 20 7d 65 6c 73  MIT_UTF16.  }els
7100: 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 43 6d  e if( strcmp(zCm
7110: 64 2c 20 22 74 65 78 74 31 36 22 29 3d 3d 30 20  d, "text16")==0 
7120: 29 7b 0a 20 20 20 20 70 32 20 3d 20 28 63 6f 6e  ){.    p2 = (con
7130: 73 74 20 76 6f 69 64 2a 29 73 71 6c 69 74 65 33  st void*)sqlite3
7140: 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 28 61 72  _value_text16(ar
7150: 67 76 5b 30 5d 29 3b 0a 23 65 6e 64 69 66 0a 20  gv[0]);.#endif. 
7160: 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
7170: 70 28 7a 43 6d 64 2c 20 22 62 6c 6f 62 22 29 3d  p(zCmd, "blob")=
7180: 3d 30 20 29 7b 0a 20 20 20 20 70 32 20 3d 20 28  =0 ){.    p2 = (
7190: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 73 71 6c 69  const void*)sqli
71a0: 74 65 33 5f 76 61 6c 75 65 5f 62 6c 6f 62 28 61  te3_value_blob(a
71b0: 72 67 76 5b 30 5d 29 3b 0a 20 20 7d 65 6c 73 65  rgv[0]);.  }else
71c0: 7b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20  {.    return;.  
71d0: 7d 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75  }.  sqlite3_resu
71e0: 6c 74 5f 69 6e 74 28 63 6f 6e 74 65 78 74 2c 20  lt_int(context, 
71f0: 70 31 21 3d 70 32 29 3b 0a 7d 0a 0a 0a 2f 2a 0a  p1!=p2);.}.../*.
7200: 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
7210: 65 5f 74 65 73 74 5f 63 72 65 61 74 65 5f 66 75  e_test_create_fu
7220: 6e 63 74 69 6f 6e 20 44 42 0a 2a 2a 0a 2a 2a 20  nction DB.**.** 
7230: 43 61 6c 6c 20 74 68 65 20 73 71 6c 69 74 65 33  Call the sqlite3
7240: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
7250: 20 41 50 49 20 6f 6e 20 74 68 65 20 67 69 76 65   API on the give
7260: 6e 20 64 61 74 61 62 61 73 65 20 69 6e 20 6f 72  n database in or
7270: 64 65 72 0a 2a 2a 20 74 6f 20 63 72 65 61 74 65  der.** to create
7280: 20 61 20 66 75 6e 63 74 69 6f 6e 20 6e 61 6d 65   a function name
7290: 64 20 22 78 5f 63 6f 61 6c 65 73 63 65 22 2e 20  d "x_coalesce". 
72a0: 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 64   This function d
72b0: 6f 65 73 20 74 68 65 20 73 61 6d 65 20 74 68 69  oes the same thi
72c0: 6e 67 0a 2a 2a 20 61 73 20 74 68 65 20 22 63 6f  ng.** as the "co
72d0: 61 6c 65 73 63 65 22 20 66 75 6e 63 74 69 6f 6e  alesce" function
72e0: 2e 20 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  .  This function
72f0: 20 61 6c 73 6f 20 72 65 67 69 73 74 65 72 73 20   also registers 
7300: 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 0a  an SQL function.
7310: 2a 2a 20 6e 61 6d 65 64 20 22 78 5f 73 71 6c 69  ** named "x_sqli
7320: 74 65 5f 65 78 65 63 22 20 74 68 61 74 20 69 6e  te_exec" that in
7330: 76 6f 6b 65 73 20 73 71 6c 69 74 65 33 5f 65 78  vokes sqlite3_ex
7340: 65 63 28 29 2e 20 20 49 6e 76 6f 6b 69 6e 67 20  ec().  Invoking 
7350: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 0a 2a  sqlite3_exec().*
7360: 2a 20 69 6e 20 74 68 69 73 20 77 61 79 20 69 73  * in this way is
7370: 20 69 6c 6c 65 67 61 6c 20 72 65 63 75 72 73 69   illegal recursi
7380: 6f 6e 20 61 6e 64 20 73 68 6f 75 6c 64 20 72 61  on and should ra
7390: 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49  ise an SQLITE_MI
73a0: 53 55 53 45 20 65 72 72 6f 72 2e 0a 2a 2a 20 54  SUSE error..** T
73b0: 68 65 20 65 66 66 65 63 74 20 69 73 20 73 69 6d  he effect is sim
73c0: 69 6c 61 72 20 74 6f 20 74 72 79 69 6e 67 20 74  ilar to trying t
73d0: 6f 20 75 73 65 20 74 68 65 20 73 61 6d 65 20 64  o use the same d
73e0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
73f0: 6f 6e 20 66 72 6f 6d 0a 2a 2a 20 74 77 6f 20 74  on from.** two t
7400: 68 72 65 61 64 73 20 61 74 20 74 68 65 20 73 61  hreads at the sa
7410: 6d 65 20 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 54  me time..**.** T
7420: 68 65 20 6f 72 69 67 69 6e 61 6c 20 6d 6f 74 69  he original moti
7430: 76 61 74 69 6f 6e 20 66 6f 72 20 74 68 69 73 20  vation for this 
7440: 72 6f 75 74 69 6e 65 20 77 61 73 20 74 6f 20 62  routine was to b
7450: 65 20 61 62 6c 65 20 74 6f 20 63 61 6c 6c 20 74  e able to call t
7460: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 72  he.** sqlite3_cr
7470: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 20 66 75  eate_function fu
7480: 6e 63 74 69 6f 6e 20 77 68 69 6c 65 20 61 20 71  nction while a q
7490: 75 65 72 79 20 69 73 20 69 6e 20 70 72 6f 67 72  uery is in progr
74a0: 65 73 73 20 69 6e 20 6f 72 64 65 72 0a 2a 2a 20  ess in order.** 
74b0: 74 6f 20 74 65 73 74 20 74 68 65 20 53 51 4c 49  to test the SQLI
74c0: 54 45 5f 4d 49 53 55 53 45 20 64 65 74 65 63 74  TE_MISUSE detect
74d0: 69 6f 6e 20 6c 6f 67 69 63 2e 0a 2a 2f 0a 73 74  ion logic..*/.st
74e0: 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63 72  atic int test_cr
74f0: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 0a 20  eate_function(. 
7500: 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a   void *NotUsed,.
7510: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
7520: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
7530: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
7540: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
7550: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
7560: 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20  nt argc,        
7570: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
7580: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
7590: 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20    char **argv   
75a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
75b0: 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e   of each argumen
75c0: 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 72 63  t */.){.  int rc
75d0: 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  ;.  sqlite3 *db;
75e0: 0a 0a 20 20 69 66 28 20 61 72 67 63 21 3d 32 20  ..  if( argc!=2 
75f0: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
7600: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
7610: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
7620: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72  hould be \"", ar
7630: 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20  gv[0],.       " 
7640: 44 42 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72  DB\"", 0);.    r
7650: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
7660: 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
7670: 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
7680: 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20  argv[1], &db) ) 
7690: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
76a0: 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
76b0: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
76c0: 28 64 62 2c 20 22 78 5f 63 6f 61 6c 65 73 63 65  (db, "x_coalesce
76d0: 22 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 41 4e  ", -1, SQLITE_AN
76e0: 59 2c 20 30 2c 20 0a 20 20 20 20 20 20 20 20 74  Y, 0, .        t
76f0: 31 5f 69 66 6e 75 6c 6c 46 75 6e 63 2c 20 30 2c  1_ifnullFunc, 0,
7700: 20 30 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53   0);.  if( rc==S
7710: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
7720: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65  rc = sqlite3_cre
7730: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c  ate_function(db,
7740: 20 22 68 65 78 38 22 2c 20 31 2c 20 53 51 4c 49   "hex8", 1, SQLI
7750: 54 45 5f 41 4e 59 2c 20 30 2c 20 0a 20 20 20 20  TE_ANY, 0, .    
7760: 20 20 20 20 20 20 68 65 78 38 46 75 6e 63 2c 20        hex8Func, 
7770: 30 2c 20 30 29 3b 0a 20 20 7d 0a 23 69 66 6e 64  0, 0);.  }.#ifnd
7780: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
7790: 54 46 31 36 0a 20 20 69 66 28 20 72 63 3d 3d 53  TF16.  if( rc==S
77a0: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
77b0: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65  rc = sqlite3_cre
77c0: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c  ate_function(db,
77d0: 20 22 68 65 78 31 36 22 2c 20 31 2c 20 53 51 4c   "hex16", 1, SQL
77e0: 49 54 45 5f 41 4e 59 2c 20 30 2c 20 0a 20 20 20  ITE_ANY, 0, .   
77f0: 20 20 20 20 20 20 20 68 65 78 31 36 46 75 6e 63         hex16Func
7800: 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 23 65 6e  , 0, 0);.  }.#en
7810: 64 69 66 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  dif.  if( rc==SQ
7820: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
7830: 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61  c = sqlite3_crea
7840: 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20  te_function(db, 
7850: 22 74 6b 74 32 32 31 33 66 75 6e 63 22 2c 20 31  "tkt2213func", 1
7860: 2c 20 53 51 4c 49 54 45 5f 41 4e 59 2c 20 30 2c  , SQLITE_ANY, 0,
7870: 20 0a 20 20 20 20 20 20 20 20 20 20 74 6b 74 32   .          tkt2
7880: 32 31 33 46 75 6e 63 74 69 6f 6e 2c 20 30 2c 20  213Function, 0, 
7890: 30 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63  0);.  }.  if( rc
78a0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
78b0: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
78c0: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
78d0: 64 62 2c 20 22 70 6f 69 6e 74 65 72 5f 63 68 61  db, "pointer_cha
78e0: 6e 67 65 22 2c 20 34 2c 20 53 51 4c 49 54 45 5f  nge", 4, SQLITE_
78f0: 41 4e 59 2c 20 30 2c 20 0a 20 20 20 20 20 20 20  ANY, 0, .       
7900: 20 20 20 70 74 72 43 68 6e 67 46 75 6e 63 74 69     ptrChngFuncti
7910: 6f 6e 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 0a  on, 0, 0);.  }..
7920: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
7930: 4d 49 54 5f 55 54 46 31 36 0a 20 20 2f 2a 20 55  MIT_UTF16.  /* U
7940: 73 65 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63  se the sqlite3_c
7950: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 31 36  reate_function16
7960: 28 29 20 41 50 49 20 68 65 72 65 2e 20 4d 61 69  () API here. Mai
7970: 6e 6c 79 20 66 6f 72 20 66 75 6e 2c 20 62 75 74  nly for fun, but
7980: 20 61 6c 73 6f 20 0a 20 20 2a 2a 20 62 65 63 61   also .  ** beca
7990: 75 73 65 20 69 74 20 69 73 20 6e 6f 74 20 74 65  use it is not te
79a0: 73 74 65 64 20 61 6e 79 77 68 65 72 65 20 65 6c  sted anywhere el
79b0: 73 65 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d  se. */.  if( rc=
79c0: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
79d0: 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 55    const void *zU
79e0: 74 66 31 36 3b 0a 20 20 20 20 73 71 6c 69 74 65  tf16;.    sqlite
79f0: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 3b 0a 20  3_value *pVal;. 
7a00: 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78     sqlite3_mutex
7a10: 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65 78  _enter(db->mutex
7a20: 29 3b 0a 20 20 20 20 70 56 61 6c 20 3d 20 73 71  );.    pVal = sq
7a30: 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 64 62  lite3ValueNew(db
7a40: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 61  );.    sqlite3Va
7a50: 6c 75 65 53 65 74 53 74 72 28 70 56 61 6c 2c 20  lueSetStr(pVal, 
7a60: 2d 31 2c 20 22 78 5f 73 71 6c 69 74 65 5f 65 78  -1, "x_sqlite_ex
7a70: 65 63 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  ec", SQLITE_UTF8
7a80: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
7a90: 3b 0a 20 20 20 20 7a 55 74 66 31 36 20 3d 20 73  ;.    zUtf16 = s
7aa0: 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74 28  qlite3ValueText(
7ab0: 70 56 61 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46  pVal, SQLITE_UTF
7ac0: 31 36 4e 41 54 49 56 45 29 3b 0a 20 20 20 20 69  16NATIVE);.    i
7ad0: 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
7ae0: 6c 65 64 20 29 7b 0a 20 20 20 20 20 20 72 63 20  led ){.      rc 
7af0: 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  = SQLITE_NOMEM;.
7b00: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
7b10: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72   rc = sqlite3_cr
7b20: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 31 36 28  eate_function16(
7b30: 64 62 2c 20 7a 55 74 66 31 36 2c 20 0a 20 20 20  db, zUtf16, .   
7b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 31 2c 20               1, 
7b50: 53 51 4c 49 54 45 5f 55 54 46 31 36 2c 20 64 62  SQLITE_UTF16, db
7b60: 2c 20 73 71 6c 69 74 65 33 45 78 65 63 46 75 6e  , sqlite3ExecFun
7b70: 63 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 7d 0a  c, 0, 0);.    }.
7b80: 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65      sqlite3Value
7b90: 46 72 65 65 28 70 56 61 6c 29 3b 0a 20 20 20 20  Free(pVal);.    
7ba0: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65  sqlite3_mutex_le
7bb0: 61 76 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a  ave(db->mutex);.
7bc0: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66    }.#endif..  if
7bd0: 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72  ( sqlite3TestErr
7be0: 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c  Code(interp, db,
7bf0: 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43   rc) ) return TC
7c00: 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53  L_ERROR;.  Tcl_S
7c10: 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
7c20: 20 28 63 68 61 72 20 2a 29 74 31 45 72 72 6f 72   (char *)t1Error
7c30: 4e 61 6d 65 28 72 63 29 2c 20 30 29 3b 0a 20 20  Name(rc), 0);.  
7c40: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
7c50: 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73  ../*.** Routines
7c60: 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68   to implement th
7c70: 65 20 78 5f 63 6f 75 6e 74 28 29 20 61 67 67 72  e x_count() aggr
7c80: 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 2e 0a  egate function..
7c90: 2a 2a 0a 2a 2a 20 78 5f 63 6f 75 6e 74 28 29 20  **.** x_count() 
7ca0: 63 6f 75 6e 74 73 20 74 68 65 20 6e 75 6d 62 65  counts the numbe
7cb0: 72 20 6f 66 20 6e 6f 6e 2d 6e 75 6c 6c 20 61 72  r of non-null ar
7cc0: 67 75 6d 65 6e 74 73 2e 20 20 42 75 74 20 74 68  guments.  But th
7cd0: 65 72 65 20 61 72 65 0a 2a 2a 20 73 6f 6d 65 20  ere are.** some 
7ce0: 74 77 69 73 74 73 20 66 6f 72 20 74 65 73 74 69  twists for testi
7cf0: 6e 67 20 70 75 72 70 6f 73 65 73 2e 0a 2a 2a 0a  ng purposes..**.
7d00: 2a 2a 20 49 66 20 74 68 65 20 61 72 67 75 6d 65  ** If the argume
7d10: 6e 74 20 74 6f 20 78 5f 63 6f 75 6e 74 28 29 20  nt to x_count() 
7d20: 69 73 20 34 30 20 74 68 65 6e 20 61 20 55 54 46  is 40 then a UTF
7d30: 2d 38 20 65 72 72 6f 72 20 69 73 20 72 65 70 6f  -8 error is repo
7d40: 72 74 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 73  rted.** on the s
7d50: 74 65 70 20 66 75 6e 63 74 69 6f 6e 2e 20 20 49  tep function.  I
7d60: 66 20 78 5f 63 6f 75 6e 74 28 34 31 29 20 69 73  f x_count(41) is
7d70: 20 73 65 65 6e 2c 20 74 68 65 6e 20 61 20 55 54   seen, then a UT
7d80: 46 2d 31 36 20 65 72 72 6f 72 0a 2a 2a 20 69 73  F-16 error.** is
7d90: 20 72 65 70 6f 72 74 65 64 20 6f 6e 20 74 68 65   reported on the
7da0: 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 2e 20   step function. 
7db0: 20 49 66 20 74 68 65 20 74 6f 74 61 6c 20 63 6f   If the total co
7dc0: 75 6e 74 20 69 73 20 34 32 2c 20 74 68 65 6e 0a  unt is 42, then.
7dd0: 2a 2a 20 61 20 55 54 46 2d 38 20 65 72 72 6f 72  ** a UTF-8 error
7de0: 20 69 73 20 72 65 70 6f 72 74 65 64 20 6f 6e 20   is reported on 
7df0: 74 68 65 20 66 69 6e 61 6c 69 7a 65 20 66 75 6e  the finalize fun
7e00: 63 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65  ction..*/.typede
7e10: 66 20 73 74 72 75 63 74 20 74 31 43 6f 75 6e 74  f struct t1Count
7e20: 43 74 78 20 74 31 43 6f 75 6e 74 43 74 78 3b 0a  Ctx t1CountCtx;.
7e30: 73 74 72 75 63 74 20 74 31 43 6f 75 6e 74 43 74  struct t1CountCt
7e40: 78 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 7d 3b 0a  x {.  int n;.};.
7e50: 73 74 61 74 69 63 20 76 6f 69 64 20 74 31 43 6f  static void t1Co
7e60: 75 6e 74 53 74 65 70 28 0a 20 20 73 71 6c 69 74  untStep(.  sqlit
7e70: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74  e3_context *cont
7e80: 65 78 74 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c  ext,.  int argc,
7e90: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
7ea0: 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 74 31 43   **argv.){.  t1C
7eb0: 6f 75 6e 74 43 74 78 20 2a 70 3b 0a 20 20 70 20  ountCtx *p;.  p 
7ec0: 3d 20 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67  = sqlite3_aggreg
7ed0: 61 74 65 5f 63 6f 6e 74 65 78 74 28 63 6f 6e 74  ate_context(cont
7ee0: 65 78 74 2c 20 73 69 7a 65 6f 66 28 2a 70 29 29  ext, sizeof(*p))
7ef0: 3b 0a 20 20 69 66 28 20 28 61 72 67 63 3d 3d 30  ;.  if( (argc==0
7f00: 20 7c 7c 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 21   || SQLITE_NULL!
7f10: 3d 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  =sqlite3_value_t
7f20: 79 70 65 28 61 72 67 76 5b 30 5d 29 20 29 20 26  ype(argv[0]) ) &
7f30: 26 20 70 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 2b  & p ){.    p->n+
7f40: 2b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 61 72 67  +;.  }.  if( arg
7f50: 63 3e 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 76  c>0 ){.    int v
7f60: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
7f70: 5f 69 6e 74 28 61 72 67 76 5b 30 5d 29 3b 0a 20  _int(argv[0]);. 
7f80: 20 20 20 69 66 28 20 76 3d 3d 34 30 20 29 7b 0a     if( v==40 ){.
7f90: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65        sqlite3_re
7fa0: 73 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65  sult_error(conte
7fb0: 78 74 2c 20 22 76 61 6c 75 65 20 6f 66 20 34 30  xt, "value of 40
7fc0: 20 68 61 6e 64 65 64 20 74 6f 20 78 5f 63 6f 75   handed to x_cou
7fd0: 6e 74 22 2c 20 2d 31 29 3b 0a 23 69 66 6e 64 65  nt", -1);.#ifnde
7fe0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
7ff0: 46 31 36 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  F16.    }else if
8000: 28 20 76 3d 3d 34 31 20 29 7b 0a 20 20 20 20 20  ( v==41 ){.     
8010: 20 63 6f 6e 73 74 20 63 68 61 72 20 7a 55 74 66   const char zUtf
8020: 31 36 45 72 72 4d 73 67 5b 5d 20 3d 20 7b 20 30  16ErrMsg[] = { 0
8030: 2c 20 30 78 36 31 2c 20 30 2c 20 30 78 36 32 2c  , 0x61, 0, 0x62,
8040: 20 30 2c 20 30 78 36 33 2c 20 30 2c 20 30 2c 20   0, 0x63, 0, 0, 
8050: 30 7d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  0};.      sqlite
8060: 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 31 36  3_result_error16
8070: 28 63 6f 6e 74 65 78 74 2c 20 26 7a 55 74 66 31  (context, &zUtf1
8080: 36 45 72 72 4d 73 67 5b 31 2d 53 51 4c 49 54 45  6ErrMsg[1-SQLITE
8090: 5f 42 49 47 45 4e 44 49 41 4e 5d 2c 20 2d 31 29  _BIGENDIAN], -1)
80a0: 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 0a 20  ;.#endif.    }. 
80b0: 20 7d 0a 7d 20 20 20 0a 73 74 61 74 69 63 20 76   }.}   .static v
80c0: 6f 69 64 20 74 31 43 6f 75 6e 74 46 69 6e 61 6c  oid t1CountFinal
80d0: 69 7a 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ize(sqlite3_cont
80e0: 65 78 74 20 2a 63 6f 6e 74 65 78 74 29 7b 0a 20  ext *context){. 
80f0: 20 74 31 43 6f 75 6e 74 43 74 78 20 2a 70 3b 0a   t1CountCtx *p;.
8100: 20 20 70 20 3d 20 73 71 6c 69 74 65 33 5f 61 67    p = sqlite3_ag
8110: 67 72 65 67 61 74 65 5f 63 6f 6e 74 65 78 74 28  gregate_context(
8120: 63 6f 6e 74 65 78 74 2c 20 73 69 7a 65 6f 66 28  context, sizeof(
8130: 2a 70 29 29 3b 0a 20 20 69 66 28 20 70 20 29 7b  *p));.  if( p ){
8140: 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e 3d 3d 34  .    if( p->n==4
8150: 32 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  2 ){.      sqlit
8160: 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28  e3_result_error(
8170: 63 6f 6e 74 65 78 74 2c 20 22 78 5f 63 6f 75 6e  context, "x_coun
8180: 74 20 74 6f 74 61 6c 73 20 74 6f 20 34 32 22 2c  t totals to 42",
8190: 20 2d 31 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   -1);.    }else{
81a0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72  .      sqlite3_r
81b0: 65 73 75 6c 74 5f 69 6e 74 28 63 6f 6e 74 65 78  esult_int(contex
81c0: 74 2c 20 70 20 3f 20 70 2d 3e 6e 20 3a 20 30 29  t, p ? p->n : 0)
81d0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 23  ;.    }.  }.}..#
81e0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
81f0: 49 54 5f 44 45 50 52 45 43 41 54 45 44 0a 73 74  IT_DEPRECATED.st
8200: 61 74 69 63 20 76 6f 69 64 20 6c 65 67 61 63 79  atic void legacy
8210: 43 6f 75 6e 74 53 74 65 70 28 0a 20 20 73 71 6c  CountStep(.  sql
8220: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f  ite3_context *co
8230: 6e 74 65 78 74 2c 0a 20 20 69 6e 74 20 61 72 67  ntext,.  int arg
8240: 63 2c 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  c,.  sqlite3_val
8250: 75 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 2f  ue **argv.){.  /
8260: 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 7d 0a 0a 73 74  * no-op */.}..st
8270: 61 74 69 63 20 76 6f 69 64 20 6c 65 67 61 63 79  atic void legacy
8280: 43 6f 75 6e 74 46 69 6e 61 6c 69 7a 65 28 73 71  CountFinalize(sq
8290: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63  lite3_context *c
82a0: 6f 6e 74 65 78 74 29 7b 0a 20 20 73 71 6c 69 74  ontext){.  sqlit
82b0: 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28 63 6f  e3_result_int(co
82c0: 6e 74 65 78 74 2c 20 73 71 6c 69 74 65 33 5f 61  ntext, sqlite3_a
82d0: 67 67 72 65 67 61 74 65 5f 63 6f 75 6e 74 28 63  ggregate_count(c
82e0: 6f 6e 74 65 78 74 29 29 3b 0a 7d 0a 23 65 6e 64  ontext));.}.#end
82f0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  if../*.** Usage:
8300: 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65    sqlite3_create
8310: 5f 61 67 67 72 65 67 61 74 65 20 44 42 0a 2a 2a  _aggregate DB.**
8320: 0a 2a 2a 20 43 61 6c 6c 20 74 68 65 20 73 71 6c  .** Call the sql
8330: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
8340: 74 69 6f 6e 20 41 50 49 20 6f 6e 20 74 68 65 20  tion API on the 
8350: 67 69 76 65 6e 20 64 61 74 61 62 61 73 65 20 69  given database i
8360: 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 63 72  n order.** to cr
8370: 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20  eate a function 
8380: 6e 61 6d 65 64 20 22 78 5f 63 6f 75 6e 74 22 2e  named "x_count".
8390: 20 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20    This function 
83a0: 69 73 20 73 69 6d 69 6c 61 72 0a 2a 2a 20 74 6f  is similar.** to
83b0: 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 63 6f   the built-in co
83c0: 75 6e 74 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20  unt() function, 
83d0: 77 69 74 68 20 61 20 66 65 77 20 73 70 65 63 69  with a few speci
83e0: 61 6c 20 71 75 69 72 6b 73 0a 2a 2a 20 66 6f 72  al quirks.** for
83f0: 20 74 65 73 74 69 6e 67 20 74 68 65 20 73 71 6c   testing the sql
8400: 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f  ite3_result_erro
8410: 72 28 29 20 41 50 49 73 2e 0a 2a 2a 0a 2a 2a 20  r() APIs..**.** 
8420: 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 6d 6f 74  The original mot
8430: 69 76 61 74 69 6f 6e 20 66 6f 72 20 74 68 69 73  ivation for this
8440: 20 72 6f 75 74 69 6e 65 20 77 61 73 20 74 6f 20   routine was to 
8450: 62 65 20 61 62 6c 65 20 74 6f 20 63 61 6c 6c 20  be able to call 
8460: 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63  the.** sqlite3_c
8470: 72 65 61 74 65 5f 61 67 67 72 65 67 61 74 65 20  reate_aggregate 
8480: 66 75 6e 63 74 69 6f 6e 20 77 68 69 6c 65 20 61  function while a
8490: 20 71 75 65 72 79 20 69 73 20 69 6e 20 70 72 6f   query is in pro
84a0: 67 72 65 73 73 20 69 6e 20 6f 72 64 65 72 0a 2a  gress in order.*
84b0: 2a 20 74 6f 20 74 65 73 74 20 74 68 65 20 53 51  * to test the SQ
84c0: 4c 49 54 45 5f 4d 49 53 55 53 45 20 64 65 74 65  LITE_MISUSE dete
84d0: 63 74 69 6f 6e 20 6c 6f 67 69 63 2e 20 20 53 65  ction logic.  Se
84e0: 65 20 6d 69 73 75 73 65 2e 74 65 73 74 2e 0a 2a  e misuse.test..*
84f0: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
8500: 65 20 77 61 73 20 6c 61 74 65 72 20 65 78 74 65  e was later exte
8510: 6e 64 65 64 20 74 6f 20 74 65 73 74 20 74 68 65  nded to test the
8520: 20 75 73 65 20 6f 66 20 73 71 6c 69 74 65 33 5f   use of sqlite3_
8530: 72 65 73 75 6c 74 5f 65 72 72 6f 72 28 29 0a 2a  result_error().*
8540: 2a 20 77 69 74 68 69 6e 20 61 67 67 72 65 67 61  * within aggrega
8550: 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a  te functions..**
8560: 0a 2a 2a 20 4c 61 74 65 72 3a 20 49 74 20 69 73  .** Later: It is
8570: 20 6e 6f 77 20 61 6c 73 6f 20 65 78 74 65 6e 64   now also extend
8580: 65 64 20 74 6f 20 72 65 67 69 73 74 65 72 20 74  ed to register t
8590: 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  he aggregate fun
85a0: 63 74 69 6f 6e 0a 2a 2a 20 22 6c 65 67 61 63 79  ction.** "legacy
85b0: 5f 63 6f 75 6e 74 28 29 22 20 77 69 74 68 20 74  _count()" with t
85c0: 68 65 20 73 75 70 70 6c 69 65 64 20 64 61 74 61  he supplied data
85d0: 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 54 68 69  base handle. Thi
85e0: 73 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20  s is used.** to 
85f0: 74 65 73 74 20 74 68 65 20 64 65 70 72 65 63 61  test the depreca
8600: 74 65 64 20 73 71 6c 69 74 65 33 5f 61 67 67 72  ted sqlite3_aggr
8610: 65 67 61 74 65 5f 63 6f 75 6e 74 28 29 20 41 50  egate_count() AP
8620: 49 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  I..*/.static int
8630: 20 74 65 73 74 5f 63 72 65 61 74 65 5f 61 67 67   test_create_agg
8640: 72 65 67 61 74 65 28 0a 20 20 76 6f 69 64 20 2a  regate(.  void *
8650: 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49  NotUsed,.  Tcl_I
8660: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20  nterp *interp,  
8670: 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74    /* The TCL int
8680: 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e  erpreter that in
8690: 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61  voked this comma
86a0: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63  nd */.  int argc
86b0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
86c0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
86d0: 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20  ments */.  char 
86e0: 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20  **argv          
86f0: 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63    /* Text of eac
8700: 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b  h argument */.){
8710: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a  .  sqlite3 *db;.
8720: 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 66 28 20    int rc;.  if( 
8730: 61 72 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  argc!=2 ){.    T
8740: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
8750: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
8760: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
8770: 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20   \"", argv[0],. 
8780: 20 20 20 20 20 20 22 20 46 49 4c 45 4e 41 4d 45        " FILENAME
8790: 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  \"", 0);.    ret
87a0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
87b0: 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f   }.  if( getDbPo
87c0: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72  inter(interp, ar
87d0: 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65  gv[1], &db) ) re
87e0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
87f0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63    rc = sqlite3_c
8800: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64  reate_function(d
8810: 62 2c 20 22 78 5f 63 6f 75 6e 74 22 2c 20 30 2c  b, "x_count", 0,
8820: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c   SQLITE_UTF8, 0,
8830: 20 30 2c 0a 20 20 20 20 20 20 74 31 43 6f 75 6e   0,.      t1Coun
8840: 74 53 74 65 70 2c 74 31 43 6f 75 6e 74 46 69 6e  tStep,t1CountFin
8850: 61 6c 69 7a 65 29 3b 0a 20 20 69 66 28 20 72 63  alize);.  if( rc
8860: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
8870: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
8880: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
8890: 64 62 2c 20 22 78 5f 63 6f 75 6e 74 22 2c 20 31  db, "x_count", 1
88a0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30  , SQLITE_UTF8, 0
88b0: 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 74 31 43  , 0,.        t1C
88c0: 6f 75 6e 74 53 74 65 70 2c 74 31 43 6f 75 6e 74  ountStep,t1Count
88d0: 46 69 6e 61 6c 69 7a 65 29 3b 0a 20 20 7d 0a 23  Finalize);.  }.#
88e0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
88f0: 49 54 5f 44 45 50 52 45 43 41 54 45 44 0a 20 20  IT_DEPRECATED.  
8900: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
8910: 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  K ){.    rc = sq
8920: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
8930: 63 74 69 6f 6e 28 64 62 2c 20 22 6c 65 67 61 63  ction(db, "legac
8940: 79 5f 63 6f 75 6e 74 22 2c 20 30 2c 20 53 51 4c  y_count", 0, SQL
8950: 49 54 45 5f 41 4e 59 2c 20 30 2c 20 30 2c 0a 20  ITE_ANY, 0, 0,. 
8960: 20 20 20 20 20 20 20 6c 65 67 61 63 79 43 6f 75         legacyCou
8970: 6e 74 53 74 65 70 2c 20 6c 65 67 61 63 79 43 6f  ntStep, legacyCo
8980: 75 6e 74 46 69 6e 61 6c 69 7a 65 0a 20 20 20 20  untFinalize.    
8990: 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  );.  }.#endif.  
89a0: 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45  if( sqlite3TestE
89b0: 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64  rrCode(interp, d
89c0: 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20  b, rc) ) return 
89d0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c  TCL_ERROR;.  Tcl
89e0: 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
89f0: 70 2c 20 28 63 68 61 72 20 2a 29 74 31 45 72 72  p, (char *)t1Err
8a00: 6f 72 4e 61 6d 65 28 72 63 29 2c 20 30 29 3b 0a  orName(rc), 0);.
8a10: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
8a20: 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  .}.../*.** Usage
8a30: 3a 20 20 70 72 69 6e 74 66 20 54 45 58 54 0a 2a  :  printf TEXT.*
8a40: 2a 0a 2a 2a 20 53 65 6e 64 20 6f 75 74 70 75 74  *.** Send output
8a50: 20 74 6f 20 70 72 69 6e 74 66 2e 20 20 55 73 65   to printf.  Use
8a60: 20 74 68 69 73 20 72 61 74 68 65 72 20 74 68 61   this rather tha
8a70: 6e 20 70 75 74 73 20 74 6f 20 6d 65 72 67 65 20  n puts to merge 
8a80: 74 68 65 20 6f 75 74 70 75 74 0a 2a 2a 20 69 6e  the output.** in
8a90: 20 74 68 65 20 63 6f 72 72 65 63 74 20 73 65 71   the correct seq
8aa0: 75 65 6e 63 65 20 77 69 74 68 20 64 65 62 75 67  uence with debug
8ab0: 67 69 6e 67 20 70 72 69 6e 74 66 73 20 69 6e 73  ging printfs ins
8ac0: 65 72 74 65 64 20 69 6e 74 6f 20 43 20 63 6f 64  erted into C cod
8ad0: 65 2e 0a 2a 2a 20 50 75 74 73 20 75 73 65 73 20  e..** Puts uses 
8ae0: 61 20 73 65 70 61 72 61 74 65 20 62 75 66 66 65  a separate buffe
8af0: 72 20 61 6e 64 20 64 65 62 75 67 67 69 6e 67 20  r and debugging 
8b00: 73 74 61 74 65 6d 65 6e 74 73 20 77 69 6c 6c 20  statements will 
8b10: 62 65 20 6f 75 74 20 6f 66 0a 2a 2a 20 73 65 71  be out of.** seq
8b20: 75 65 6e 63 65 20 69 66 20 69 74 20 69 73 20 75  uence if it is u
8b30: 73 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  sed..*/.static i
8b40: 6e 74 20 74 65 73 74 5f 70 72 69 6e 74 66 28 0a  nt test_printf(.
8b50: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
8b60: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
8b70: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
8b80: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
8b90: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
8ba0: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
8bb0: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
8bc0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
8bd0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
8be0: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
8bf0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
8c00: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
8c10: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61  nt */.){.  if( a
8c20: 72 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  rgc!=2 ){.    Tc
8c30: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
8c40: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
8c50: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
8c60: 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20  \"", argv[0],.  
8c70: 20 20 20 20 20 22 20 54 45 58 54 5c 22 22 2c 20       " TEXT\"", 
8c80: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
8c90: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
8ca0: 70 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20 61  printf("%s\n", a
8cb0: 72 67 76 5b 31 5d 29 3b 0a 20 20 72 65 74 75 72  rgv[1]);.  retur
8cc0: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 0a 2f  n TCL_OK;.}..../
8cd0: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
8ce0: 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74  ite3_mprintf_int
8cf0: 20 46 4f 52 4d 41 54 20 49 4e 54 45 47 45 52 20   FORMAT INTEGER 
8d00: 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45 52 0a  INTEGER INTEGER.
8d10: 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e  **.** Call mprin
8d20: 74 66 20 77 69 74 68 20 74 68 72 65 65 20 69 6e  tf with three in
8d30: 74 65 67 65 72 20 61 72 67 75 6d 65 6e 74 73 0a  teger arguments.
8d40: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71  */.static int sq
8d50: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e  lite3_mprintf_in
8d60: 74 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73  t(.  void *NotUs
8d70: 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ed,.  Tcl_Interp
8d80: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
8d90: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
8da0: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
8db0: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
8dc0: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20  .  int argc,    
8dd0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
8de0: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
8df0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67   */.  char **arg
8e00: 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  v            /* 
8e10: 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67  Text of each arg
8e20: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e  ument */.){.  in
8e30: 74 20 61 5b 33 5d 2c 20 69 3b 0a 20 20 63 68 61  t a[3], i;.  cha
8e40: 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72 67 63  r *z;.  if( argc
8e50: 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=5 ){.    Tcl_A
8e60: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
8e70: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
8e80: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
8e90: 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20  , argv[0],.     
8ea0: 20 20 22 20 46 4f 52 4d 41 54 20 49 4e 54 20 49    " FORMAT INT I
8eb0: 4e 54 20 49 4e 54 5c 22 22 2c 20 30 29 3b 0a 20  NT INT\"", 0);. 
8ec0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
8ed0: 52 4f 52 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69  ROR;.  }.  for(i
8ee0: 3d 32 3b 20 69 3c 35 3b 20 69 2b 2b 29 7b 0a 20  =2; i<5; i++){. 
8ef0: 20 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e     if( Tcl_GetIn
8f00: 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 69  t(interp, argv[i
8f10: 5d 2c 20 26 61 5b 69 2d 32 5d 29 20 29 20 72 65  ], &a[i-2]) ) re
8f20: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
8f30: 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65    }.  z = sqlite
8f40: 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b 31  3_mprintf(argv[1
8f50: 5d 2c 20 61 5b 30 5d 2c 20 61 5b 31 5d 2c 20 61  ], a[0], a[1], a
8f60: 5b 32 5d 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65  [2]);.  Tcl_Appe
8f70: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
8f80: 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65   z, 0);.  sqlite
8f90: 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65 74  3_free(z);.  ret
8fa0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
8fb0: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
8fc0: 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74  ite3_mprintf_int
8fd0: 36 34 20 46 4f 52 4d 41 54 20 49 4e 54 45 47 45  64 FORMAT INTEGE
8fe0: 52 20 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45  R INTEGER INTEGE
8ff0: 52 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72  R.**.** Call mpr
9000: 69 6e 74 66 20 77 69 74 68 20 74 68 72 65 65 20  intf with three 
9010: 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 61  64-bit integer a
9020: 72 67 75 6d 65 6e 74 73 0a 2a 2f 0a 73 74 61 74  rguments.*/.stat
9030: 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d  ic int sqlite3_m
9040: 70 72 69 6e 74 66 5f 69 6e 74 36 34 28 0a 20 20  printf_int64(.  
9050: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
9060: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
9070: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
9080: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
9090: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
90a0: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
90b0: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
90c0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
90d0: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
90e0: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
90f0: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
9100: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
9110: 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a   */.){.  int i;.
9120: 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 61    sqlite_int64 a
9130: 5b 33 5d 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a  [3];.  char *z;.
9140: 20 20 69 66 28 20 61 72 67 63 21 3d 35 20 29 7b    if( argc!=5 ){
9150: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
9160: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
9170: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
9180: 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76  uld be \"", argv
9190: 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 4f  [0],.       " FO
91a0: 52 4d 41 54 20 49 4e 54 20 49 4e 54 20 49 4e 54  RMAT INT INT INT
91b0: 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  \"", 0);.    ret
91c0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
91d0: 20 7d 0a 20 20 66 6f 72 28 69 3d 32 3b 20 69 3c   }.  for(i=2; i<
91e0: 35 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28  5; i++){.    if(
91f0: 20 21 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28   !sqlite3Atoi64(
9200: 61 72 67 76 5b 69 5d 2c 20 26 61 5b 69 2d 32 5d  argv[i], &a[i-2]
9210: 29 20 29 7b 0a 20 20 20 20 20 20 54 63 6c 5f 41  ) ){.      Tcl_A
9220: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
9230: 72 70 2c 20 22 61 72 67 75 6d 65 6e 74 20 69 73  rp, "argument is
9240: 20 6e 6f 74 20 61 20 76 61 6c 69 64 20 36 34 2d   not a valid 64-
9250: 62 69 74 20 69 6e 74 65 67 65 72 22 2c 20 30 29  bit integer", 0)
9260: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 54  ;.      return T
9270: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a  CL_ERROR;.    }.
9280: 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65    }.  z = sqlite
9290: 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b 31  3_mprintf(argv[1
92a0: 5d 2c 20 61 5b 30 5d 2c 20 61 5b 31 5d 2c 20 61  ], a[0], a[1], a
92b0: 5b 32 5d 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65  [2]);.  Tcl_Appe
92c0: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
92d0: 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65   z, 0);.  sqlite
92e0: 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65 74  3_free(z);.  ret
92f0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
9300: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
9310: 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 6c 6f 6e  ite3_mprintf_lon
9320: 67 20 46 4f 52 4d 41 54 20 49 4e 54 45 47 45 52  g FORMAT INTEGER
9330: 20 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45 52   INTEGER INTEGER
9340: 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69  .**.** Call mpri
9350: 6e 74 66 20 77 69 74 68 20 74 68 72 65 65 20 6c  ntf with three l
9360: 6f 6e 67 20 69 6e 74 65 67 65 72 20 61 72 67 75  ong integer argu
9370: 6d 65 6e 74 73 2e 20 20 20 54 68 69 73 20 6d 69  ments.   This mi
9380: 67 68 74 20 62 65 20 74 68 65 0a 2a 2a 20 73 61  ght be the.** sa
9390: 6d 65 20 61 73 20 73 71 6c 69 74 65 33 5f 6d 70  me as sqlite3_mp
93a0: 72 69 6e 74 66 5f 69 6e 74 20 6f 72 20 73 71 6c  rintf_int or sql
93b0: 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74  ite3_mprintf_int
93c0: 36 34 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  64, depending on
93d0: 0a 2a 2a 20 70 6c 61 74 66 6f 72 6d 2e 0a 2a 2f  .** platform..*/
93e0: 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69  .static int sqli
93f0: 74 65 33 5f 6d 70 72 69 6e 74 66 5f 6c 6f 6e 67  te3_mprintf_long
9400: 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65  (.  void *NotUse
9410: 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  d,.  Tcl_Interp 
9420: 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
9430: 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
9440: 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
9450: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
9460: 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20    int argc,     
9470: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
9480: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
9490: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  */.  char **argv
94a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
94b0: 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75  ext of each argu
94c0: 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  ment */.){.  int
94d0: 20 69 3b 0a 20 20 6c 6f 6e 67 20 69 6e 74 20 61   i;.  long int a
94e0: 5b 33 5d 3b 0a 20 20 69 6e 74 20 62 5b 33 5d 3b  [3];.  int b[3];
94f0: 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69 66  .  char *z;.  if
9500: 28 20 61 72 67 63 21 3d 35 20 29 7b 0a 20 20 20  ( argc!=5 ){.   
9510: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
9520: 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
9530: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
9540: 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c  be \"", argv[0],
9550: 0a 20 20 20 20 20 20 20 22 20 46 4f 52 4d 41 54  .       " FORMAT
9560: 20 49 4e 54 20 49 4e 54 20 49 4e 54 5c 22 22 2c   INT INT INT\"",
9570: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
9580: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
9590: 20 66 6f 72 28 69 3d 32 3b 20 69 3c 35 3b 20 69   for(i=2; i<5; i
95a0: 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 54 63 6c  ++){.    if( Tcl
95b0: 5f 47 65 74 49 6e 74 28 69 6e 74 65 72 70 2c 20  _GetInt(interp, 
95c0: 61 72 67 76 5b 69 5d 2c 20 26 62 5b 69 2d 32 5d  argv[i], &b[i-2]
95d0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
95e0: 52 52 4f 52 3b 0a 20 20 20 20 61 5b 69 2d 32 5d  RROR;.    a[i-2]
95f0: 20 3d 20 28 6c 6f 6e 67 20 69 6e 74 29 62 5b 69   = (long int)b[i
9600: 2d 32 5d 3b 0a 20 20 20 20 61 5b 69 2d 32 5d 20  -2];.    a[i-2] 
9610: 26 3d 20 28 28 28 75 36 34 29 31 29 3c 3c 28 73  &= (((u64)1)<<(s
9620: 69 7a 65 6f 66 28 69 6e 74 29 2a 38 29 29 2d 31  izeof(int)*8))-1
9630: 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69  ;.  }.  z = sqli
9640: 74 65 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76  te3_mprintf(argv
9650: 5b 31 5d 2c 20 61 5b 30 5d 2c 20 61 5b 31 5d 2c  [1], a[0], a[1],
9660: 20 61 5b 32 5d 29 3b 0a 20 20 54 63 6c 5f 41 70   a[2]);.  Tcl_Ap
9670: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
9680: 70 2c 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69  p, z, 0);.  sqli
9690: 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72  te3_free(z);.  r
96a0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
96b0: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
96c0: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73  qlite3_mprintf_s
96d0: 74 72 20 46 4f 52 4d 41 54 20 49 4e 54 45 47 45  tr FORMAT INTEGE
96e0: 52 20 49 4e 54 45 47 45 52 20 53 54 52 49 4e 47  R INTEGER STRING
96f0: 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69  .**.** Call mpri
9700: 6e 74 66 20 77 69 74 68 20 74 77 6f 20 69 6e 74  ntf with two int
9710: 65 67 65 72 20 61 72 67 75 6d 65 6e 74 73 20 61  eger arguments a
9720: 6e 64 20 6f 6e 65 20 73 74 72 69 6e 67 20 61 72  nd one string ar
9730: 67 75 6d 65 6e 74 0a 2a 2f 0a 73 74 61 74 69 63  gument.*/.static
9740: 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 70 72   int sqlite3_mpr
9750: 69 6e 74 66 5f 73 74 72 28 0a 20 20 76 6f 69 64  intf_str(.  void
9760: 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c   *NotUsed,.  Tcl
9770: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
9780: 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69      /* The TCL i
9790: 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20  nterpreter that 
97a0: 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d  invoked this com
97b0: 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72  mand */.  int ar
97c0: 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  gc,             
97d0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
97e0: 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61  guments */.  cha
97f0: 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20  r **argv        
9800: 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65      /* Text of e
9810: 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  ach argument */.
9820: 29 7b 0a 20 20 69 6e 74 20 61 5b 33 5d 2c 20 69  ){.  int a[3], i
9830: 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69  ;.  char *z;.  i
9840: 66 28 20 61 72 67 63 3c 34 20 7c 7c 20 61 72 67  f( argc<4 || arg
9850: 63 3e 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  c>5 ){.    Tcl_A
9860: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
9870: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
9880: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
9890: 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20  , argv[0],.     
98a0: 20 20 22 20 46 4f 52 4d 41 54 20 49 4e 54 20 49    " FORMAT INT I
98b0: 4e 54 20 3f 53 54 52 49 4e 47 3f 5c 22 22 2c 20  NT ?STRING?\"", 
98c0: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
98d0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
98e0: 66 6f 72 28 69 3d 32 3b 20 69 3c 34 3b 20 69 2b  for(i=2; i<4; i+
98f0: 2b 29 7b 0a 20 20 20 20 69 66 28 20 54 63 6c 5f  +){.    if( Tcl_
9900: 47 65 74 49 6e 74 28 69 6e 74 65 72 70 2c 20 61  GetInt(interp, a
9910: 72 67 76 5b 69 5d 2c 20 26 61 5b 69 2d 32 5d 29  rgv[i], &a[i-2])
9920: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
9930: 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 73  ROR;.  }.  z = s
9940: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 61  qlite3_mprintf(a
9950: 72 67 76 5b 31 5d 2c 20 61 5b 30 5d 2c 20 61 5b  rgv[1], a[0], a[
9960: 31 5d 2c 20 61 72 67 63 3e 34 20 3f 20 61 72 67  1], argc>4 ? arg
9970: 76 5b 34 5d 20 3a 20 4e 55 4c 4c 29 3b 0a 20 20  v[4] : NULL);.  
9980: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
9990: 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a  (interp, z, 0);.
99a0: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
99b0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
99c0: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
99d0: 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  ge:  sqlite3_snp
99e0: 72 69 6e 74 66 5f 73 74 72 20 49 4e 54 45 47 45  rintf_str INTEGE
99f0: 52 20 46 4f 52 4d 41 54 20 49 4e 54 45 47 45 52  R FORMAT INTEGER
9a00: 20 49 4e 54 45 47 45 52 20 53 54 52 49 4e 47 0a   INTEGER STRING.
9a10: 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e  **.** Call mprin
9a20: 74 66 20 77 69 74 68 20 74 77 6f 20 69 6e 74 65  tf with two inte
9a30: 67 65 72 20 61 72 67 75 6d 65 6e 74 73 20 61 6e  ger arguments an
9a40: 64 20 6f 6e 65 20 73 74 72 69 6e 67 20 61 72 67  d one string arg
9a50: 75 6d 65 6e 74 0a 2a 2f 0a 73 74 61 74 69 63 20  ument.*/.static 
9a60: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6e 70 72  int sqlite3_snpr
9a70: 69 6e 74 66 5f 73 74 72 28 0a 20 20 76 6f 69 64  intf_str(.  void
9a80: 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c   *NotUsed,.  Tcl
9a90: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
9aa0: 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69      /* The TCL i
9ab0: 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20  nterpreter that 
9ac0: 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d  invoked this com
9ad0: 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72  mand */.  int ar
9ae0: 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  gc,             
9af0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
9b00: 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61  guments */.  cha
9b10: 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20  r **argv        
9b20: 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65      /* Text of e
9b30: 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  ach argument */.
9b40: 29 7b 0a 20 20 69 6e 74 20 61 5b 33 5d 2c 20 69  ){.  int a[3], i
9b50: 3b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 63 68 61  ;.  int n;.  cha
9b60: 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72 67 63  r *z;.  if( argc
9b70: 3c 35 20 7c 7c 20 61 72 67 63 3e 36 20 29 7b 0a  <5 || argc>6 ){.
9b80: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
9b90: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
9ba0: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
9bb0: 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
9bc0: 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 49 4e 54  0],.       " INT
9bd0: 20 46 4f 52 4d 41 54 20 49 4e 54 20 49 4e 54 20   FORMAT INT INT 
9be0: 3f 53 54 52 49 4e 47 3f 5c 22 22 2c 20 30 29 3b  ?STRING?\"", 0);
9bf0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
9c00: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
9c10: 20 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74 65   Tcl_GetInt(inte
9c20: 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 6e 29  rp, argv[1], &n)
9c30: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
9c40: 52 4f 52 3b 0a 20 20 69 66 28 20 6e 3c 30 20 29  ROR;.  if( n<0 )
9c50: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
9c60: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
9c70: 4e 20 6d 75 73 74 20 62 65 20 6e 6f 6e 2d 6e 65  N must be non-ne
9c80: 67 61 74 69 76 65 22 2c 20 30 29 3b 0a 20 20 20  gative", 0);.   
9c90: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
9ca0: 52 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 33  R;.  }.  for(i=3
9cb0: 3b 20 69 3c 35 3b 20 69 2b 2b 29 7b 0a 20 20 20  ; i<5; i++){.   
9cc0: 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 28   if( Tcl_GetInt(
9cd0: 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 69 5d 2c  interp, argv[i],
9ce0: 20 26 61 5b 69 2d 33 5d 29 20 29 20 72 65 74 75   &a[i-3]) ) retu
9cf0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
9d00: 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f  }.  z = sqlite3_
9d10: 6d 61 6c 6c 6f 63 28 20 6e 2b 31 20 29 3b 0a 20  malloc( n+1 );. 
9d20: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
9d30: 66 28 6e 2c 20 7a 2c 20 61 72 67 76 5b 32 5d 2c  f(n, z, argv[2],
9d40: 20 61 5b 30 5d 2c 20 61 5b 31 5d 2c 20 61 72 67   a[0], a[1], arg
9d50: 63 3e 34 20 3f 20 61 72 67 76 5b 35 5d 20 3a 20  c>4 ? argv[5] : 
9d60: 4e 55 4c 4c 29 3b 0a 20 20 54 63 6c 5f 41 70 70  NULL);.  Tcl_App
9d70: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
9d80: 2c 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74  , z, 0);.  sqlit
9d90: 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65  e3_free(z);.  re
9da0: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
9db0: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
9dc0: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 64 6f  lite3_mprintf_do
9dd0: 75 62 6c 65 20 46 4f 52 4d 41 54 20 49 4e 54 45  uble FORMAT INTE
9de0: 47 45 52 20 49 4e 54 45 47 45 52 20 44 4f 55 42  GER INTEGER DOUB
9df0: 4c 45 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70  LE.**.** Call mp
9e00: 72 69 6e 74 66 20 77 69 74 68 20 74 77 6f 20 69  rintf with two i
9e10: 6e 74 65 67 65 72 20 61 72 67 75 6d 65 6e 74 73  nteger arguments
9e20: 20 61 6e 64 20 6f 6e 65 20 64 6f 75 62 6c 65 20   and one double 
9e30: 61 72 67 75 6d 65 6e 74 0a 2a 2f 0a 73 74 61 74  argument.*/.stat
9e40: 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d  ic int sqlite3_m
9e50: 70 72 69 6e 74 66 5f 64 6f 75 62 6c 65 28 0a 20  printf_double(. 
9e60: 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a   void *NotUsed,.
9e70: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
9e80: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
9e90: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
9ea0: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
9eb0: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
9ec0: 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20  nt argc,        
9ed0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
9ee0: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
9ef0: 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20    char **argv   
9f00: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
9f10: 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e   of each argumen
9f20: 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 61 5b  t */.){.  int a[
9f30: 33 5d 2c 20 69 3b 0a 20 20 64 6f 75 62 6c 65 20  3], i;.  double 
9f40: 72 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20  r;.  char *z;.  
9f50: 69 66 28 20 61 72 67 63 21 3d 35 20 29 7b 0a 20  if( argc!=5 ){. 
9f60: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
9f70: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
9f80: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
9f90: 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30  d be \"", argv[0
9fa0: 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 4f 52 4d  ],.       " FORM
9fb0: 41 54 20 49 4e 54 20 49 4e 54 20 44 4f 55 42 4c  AT INT INT DOUBL
9fc0: 45 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  E\"", 0);.    re
9fd0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
9fe0: 20 20 7d 0a 20 20 66 6f 72 28 69 3d 32 3b 20 69    }.  for(i=2; i
9ff0: 3c 34 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66  <4; i++){.    if
a000: 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74  ( Tcl_GetInt(int
a010: 65 72 70 2c 20 61 72 67 76 5b 69 5d 2c 20 26 61  erp, argv[i], &a
a020: 5b 69 2d 32 5d 29 20 29 20 72 65 74 75 72 6e 20  [i-2]) ) return 
a030: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
a040: 20 69 66 28 20 54 63 6c 5f 47 65 74 44 6f 75 62   if( Tcl_GetDoub
a050: 6c 65 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  le(interp, argv[
a060: 34 5d 2c 20 26 72 29 20 29 20 72 65 74 75 72 6e  4], &r) ) return
a070: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 20   TCL_ERROR;.  z 
a080: 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
a090: 66 28 61 72 67 76 5b 31 5d 2c 20 61 5b 30 5d 2c  f(argv[1], a[0],
a0a0: 20 61 5b 31 5d 2c 20 72 29 3b 0a 20 20 54 63 6c   a[1], r);.  Tcl
a0b0: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
a0c0: 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a 20 20 73  terp, z, 0);.  s
a0d0: 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a  qlite3_free(z);.
a0e0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
a0f0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
a100: 20 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74    sqlite3_mprint
a110: 66 5f 73 63 61 6c 65 64 20 46 4f 52 4d 41 54 20  f_scaled FORMAT 
a120: 44 4f 55 42 4c 45 20 44 4f 55 42 4c 45 0a 2a 2a  DOUBLE DOUBLE.**
a130: 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e 74 66  .** Call mprintf
a140: 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 64   with a single d
a150: 6f 75 62 6c 65 20 61 72 67 75 6d 65 6e 74 20 77  ouble argument w
a160: 68 69 63 68 20 69 73 20 74 68 65 20 70 72 6f 64  hich is the prod
a170: 75 63 74 20 6f 66 20 74 68 65 0a 2a 2a 20 74 77  uct of the.** tw
a180: 6f 20 61 72 67 75 6d 65 6e 74 73 20 67 69 76 65  o arguments give
a190: 6e 20 61 62 6f 76 65 2e 20 20 54 68 69 73 20 69  n above.  This i
a1a0: 73 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61  s used to genera
a1b0: 74 65 20 6f 76 65 72 66 6c 6f 77 20 61 6e 64 20  te overflow and 
a1c0: 75 6e 64 65 72 66 6c 6f 77 0a 2a 2a 20 64 6f 75  underflow.** dou
a1d0: 62 6c 65 73 20 74 6f 20 74 65 73 74 20 74 68 61  bles to test tha
a1e0: 74 20 74 68 65 79 20 61 72 65 20 63 6f 6e 76 65  t they are conve
a1f0: 72 74 65 64 20 70 72 6f 70 65 72 6c 79 2e 0a 2a  rted properly..*
a200: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c  /.static int sql
a210: 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 63 61  ite3_mprintf_sca
a220: 6c 65 64 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74  led(.  void *Not
a230: 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Used,.  Tcl_Inte
a240: 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
a250: 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
a260: 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
a270: 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
a280: 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20  */.  int argc,  
a290: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
a2a0: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
a2b0: 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  ts */.  char **a
a2c0: 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f  rgv            /
a2d0: 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61  * Text of each a
a2e0: 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20  rgument */.){.  
a2f0: 69 6e 74 20 69 3b 0a 20 20 64 6f 75 62 6c 65 20  int i;.  double 
a300: 72 5b 32 5d 3b 0a 20 20 63 68 61 72 20 2a 7a 3b  r[2];.  char *z;
a310: 0a 20 20 69 66 28 20 61 72 67 63 21 3d 34 20 29  .  if( argc!=4 )
a320: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
a330: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
a340: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
a350: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
a360: 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46  v[0],.       " F
a370: 4f 52 4d 41 54 20 44 4f 55 42 4c 45 20 44 4f 55  ORMAT DOUBLE DOU
a380: 42 4c 45 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20  BLE\"", 0);.    
a390: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
a3a0: 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 32 3b  ;.  }.  for(i=2;
a3b0: 20 69 3c 34 3b 20 69 2b 2b 29 7b 0a 20 20 20 20   i<4; i++){.    
a3c0: 69 66 28 20 54 63 6c 5f 47 65 74 44 6f 75 62 6c  if( Tcl_GetDoubl
a3d0: 65 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 69  e(interp, argv[i
a3e0: 5d 2c 20 26 72 5b 69 2d 32 5d 29 20 29 20 72 65  ], &r[i-2]) ) re
a3f0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
a400: 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65    }.  z = sqlite
a410: 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b 31  3_mprintf(argv[1
a420: 5d 2c 20 72 5b 30 5d 2a 72 5b 31 5d 29 3b 0a 20  ], r[0]*r[1]);. 
a430: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
a440: 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b  t(interp, z, 0);
a450: 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  .  sqlite3_free(
a460: 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  z);.  return TCL
a470: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
a480: 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70  age:  sqlite3_mp
a490: 72 69 6e 74 66 5f 73 74 72 6f 6e 6c 79 20 46 4f  rintf_stronly FO
a4a0: 52 4d 41 54 20 53 54 52 49 4e 47 0a 2a 2a 0a 2a  RMAT STRING.**.*
a4b0: 2a 20 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77  * Call mprintf w
a4c0: 69 74 68 20 61 20 73 69 6e 67 6c 65 20 64 6f 75  ith a single dou
a4d0: 62 6c 65 20 61 72 67 75 6d 65 6e 74 20 77 68 69  ble argument whi
a4e0: 63 68 20 69 73 20 74 68 65 20 70 72 6f 64 75 63  ch is the produc
a4f0: 74 20 6f 66 20 74 68 65 0a 2a 2a 20 74 77 6f 20  t of the.** two 
a500: 61 72 67 75 6d 65 6e 74 73 20 67 69 76 65 6e 20  arguments given 
a510: 61 62 6f 76 65 2e 20 20 54 68 69 73 20 69 73 20  above.  This is 
a520: 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  used to generate
a530: 20 6f 76 65 72 66 6c 6f 77 20 61 6e 64 20 75 6e   overflow and un
a540: 64 65 72 66 6c 6f 77 0a 2a 2a 20 64 6f 75 62 6c  derflow.** doubl
a550: 65 73 20 74 6f 20 74 65 73 74 20 74 68 61 74 20  es to test that 
a560: 74 68 65 79 20 61 72 65 20 63 6f 6e 76 65 72 74  they are convert
a570: 65 64 20 70 72 6f 70 65 72 6c 79 2e 0a 2a 2f 0a  ed properly..*/.
a580: 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74  static int sqlit
a590: 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72 6f 6e  e3_mprintf_stron
a5a0: 6c 79 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55  ly(.  void *NotU
a5b0: 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  sed,.  Tcl_Inter
a5c0: 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
a5d0: 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
a5e0: 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
a5f0: 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
a600: 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20  /.  int argc,   
a610: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
a620: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
a630: 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72  s */.  char **ar
a640: 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  gv            /*
a650: 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72   Text of each ar
a660: 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 63  gument */.){.  c
a670: 68 61 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72  har *z;.  if( ar
a680: 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=3 ){.    Tcl
a690: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
a6a0: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
a6b0: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
a6c0: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20  "", argv[0],.   
a6d0: 20 20 20 20 22 20 46 4f 52 4d 41 54 20 53 54 52      " FORMAT STR
a6e0: 49 4e 47 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20  ING\"", 0);.    
a6f0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
a700: 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69  ;.  }.  z = sqli
a710: 74 65 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76  te3_mprintf(argv
a720: 5b 31 5d 2c 20 61 72 67 76 5b 32 5d 29 3b 0a 20  [1], argv[2]);. 
a730: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
a740: 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b  t(interp, z, 0);
a750: 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  .  sqlite3_free(
a760: 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  z);.  return TCL
a770: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
a780: 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70  age:  sqlite3_mp
a790: 72 69 6e 74 66 5f 68 65 78 64 6f 75 62 6c 65 20  rintf_hexdouble 
a7a0: 46 4f 52 4d 41 54 20 48 45 58 0a 2a 2a 0a 2a 2a  FORMAT HEX.**.**
a7b0: 20 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77 69   Call mprintf wi
a7c0: 74 68 20 61 20 73 69 6e 67 6c 65 20 64 6f 75 62  th a single doub
a7d0: 6c 65 20 61 72 67 75 6d 65 6e 74 20 77 68 69 63  le argument whic
a7e0: 68 20 69 73 20 64 65 72 69 76 65 64 20 66 72 6f  h is derived fro
a7f0: 6d 20 74 68 65 0a 2a 2a 20 68 65 78 61 64 65 63  m the.** hexadec
a800: 69 6d 61 6c 20 65 6e 63 6f 64 69 6e 67 20 6f 66  imal encoding of
a810: 20 61 6e 20 49 45 45 45 20 64 6f 75 62 6c 65 2e   an IEEE double.
a820: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73  .*/.static int s
a830: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 68  qlite3_mprintf_h
a840: 65 78 64 6f 75 62 6c 65 28 0a 20 20 76 6f 69 64  exdouble(.  void
a850: 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c   *NotUsed,.  Tcl
a860: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
a870: 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69      /* The TCL i
a880: 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20  nterpreter that 
a890: 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d  invoked this com
a8a0: 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72  mand */.  int ar
a8b0: 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  gc,             
a8c0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
a8d0: 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61  guments */.  cha
a8e0: 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20  r **argv        
a8f0: 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65      /* Text of e
a900: 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  ach argument */.
a910: 29 7b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20  ){.  char *z;.  
a920: 64 6f 75 62 6c 65 20 72 3b 0a 20 20 75 6e 73 69  double r;.  unsi
a930: 67 6e 65 64 20 69 6e 74 20 78 31 2c 20 78 32 3b  gned int x1, x2;
a940: 0a 20 20 73 71 6c 69 74 65 5f 75 69 6e 74 36 34  .  sqlite_uint64
a950: 20 64 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d   d;.  if( argc!=
a960: 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  3 ){.    Tcl_App
a970: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
a980: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
a990: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
a9a0: 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20  argv[0],.       
a9b0: 22 20 46 4f 52 4d 41 54 20 53 54 52 49 4e 47 5c  " FORMAT STRING\
a9c0: 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  "", 0);.    retu
a9d0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
a9e0: 7d 0a 20 20 69 66 28 20 73 73 63 61 6e 66 28 61  }.  if( sscanf(a
a9f0: 72 67 76 5b 32 5d 2c 20 22 25 30 38 78 25 30 38  rgv[2], "%08x%08
aa00: 78 22 2c 20 26 78 32 2c 20 26 78 31 29 21 3d 32  x", &x2, &x1)!=2
aa10: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
aa20: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
aa30: 20 22 32 6e 64 20 61 72 67 75 6d 65 6e 74 20 73   "2nd argument s
aa40: 68 6f 75 6c 64 20 62 65 20 31 36 2d 63 68 61 72  hould be 16-char
aa50: 61 63 74 65 72 73 20 6f 66 20 68 65 78 22 2c 20  acters of hex", 
aa60: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
aa70: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
aa80: 64 20 3d 20 78 32 3b 0a 20 20 64 20 3d 20 28 64  d = x2;.  d = (d
aa90: 3c 3c 33 32 29 20 2b 20 78 31 3b 0a 20 20 6d 65  <<32) + x1;.  me
aaa0: 6d 63 70 79 28 26 72 2c 20 26 64 2c 20 73 69 7a  mcpy(&r, &d, siz
aab0: 65 6f 66 28 72 29 29 3b 0a 20 20 7a 20 3d 20 73  eof(r));.  z = s
aac0: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 61  qlite3_mprintf(a
aad0: 72 67 76 5b 31 5d 2c 20 72 29 3b 0a 20 20 54 63  rgv[1], r);.  Tc
aae0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
aaf0: 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a 20 20  nterp, z, 0);.  
ab00: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 29 3b  sqlite3_free(z);
ab10: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
ab20: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
ab30: 3a 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65  : sqlite3_enable
ab40: 5f 73 68 61 72 65 64 5f 63 61 63 68 65 20 3f 42  _shared_cache ?B
ab50: 4f 4f 4c 45 41 4e 3f 0a 2a 2a 0a 2a 2f 0a 23 69  OOLEAN?.**.*/.#i
ab60: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
ab70: 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
ab80: 43 48 45 29 0a 73 74 61 74 69 63 20 69 6e 74 20  CHE).static int 
ab90: 74 65 73 74 5f 65 6e 61 62 6c 65 5f 73 68 61 72  test_enable_shar
aba0: 65 64 28 0a 20 20 43 6c 69 65 6e 74 44 61 74 61  ed(.  ClientData
abb0: 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 2f 2a 20   clientData, /* 
abc0: 50 6f 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74  Pointer to sqlit
abd0: 65 33 5f 65 6e 61 62 6c 65 5f 58 58 58 20 66 75  e3_enable_XXX fu
abe0: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 63 6c 5f  nction */.  Tcl_
abf0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
ac00: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
ac10: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
ac20: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
ac30: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a  and */.  int obj
ac40: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
ac50: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
ac60: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f  uments */.  Tcl_
ac70: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
ac80: 5d 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72  ]  /* Command ar
ac90: 67 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20  guments */.){.  
aca0: 69 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20 65 6e  int rc;.  int en
acb0: 61 62 6c 65 3b 0a 20 20 69 6e 74 20 72 65 74 20  able;.  int ret 
acc0: 3d 20 30 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63  = 0;..  if( objc
acd0: 21 3d 32 20 26 26 20 6f 62 6a 63 21 3d 31 20 29  !=2 && objc!=1 )
ace0: 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e  {.    Tcl_WrongN
acf0: 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31  umArgs(interp, 1
ad00: 2c 20 6f 62 6a 76 2c 20 22 3f 42 4f 4f 4c 45 41  , objv, "?BOOLEA
ad10: 4e 3f 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  N?");.    return
ad20: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
ad30: 20 20 72 65 74 20 3d 20 73 71 6c 69 74 65 33 47    ret = sqlite3G
ad40: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 73 68 61 72  lobalConfig.shar
ad50: 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b 0a  edCacheEnabled;.
ad60: 0a 20 20 69 66 28 20 6f 62 6a 63 3d 3d 32 20 29  .  if( objc==2 )
ad70: 7b 0a 20 20 20 20 69 66 28 20 54 63 6c 5f 47 65  {.    if( Tcl_Ge
ad80: 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28  tBooleanFromObj(
ad90: 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c  interp, objv[1],
ada0: 20 26 65 6e 61 62 6c 65 29 20 29 7b 0a 20 20 20   &enable) ){.   
adb0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
adc0: 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72  ROR;.    }.    r
add0: 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 6e 61 62  c = sqlite3_enab
ade0: 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68 65 28  le_shared_cache(
adf0: 65 6e 61 62 6c 65 29 3b 0a 20 20 20 20 69 66 28  enable);.    if(
ae00: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
ae10: 7b 0a 20 20 20 20 20 20 54 63 6c 5f 53 65 74 52  {.      Tcl_SetR
ae20: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63  esult(interp, (c
ae30: 68 61 72 20 2a 29 73 71 6c 69 74 65 33 45 72 72  har *)sqlite3Err
ae40: 53 74 72 28 72 63 29 2c 20 54 43 4c 5f 53 54 41  Str(rc), TCL_STA
ae50: 54 49 43 29 3b 0a 20 20 20 20 20 20 72 65 74 75  TIC);.      retu
ae60: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
ae70: 20 20 7d 0a 20 20 7d 0a 20 20 54 63 6c 5f 53 65    }.  }.  Tcl_Se
ae80: 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
ae90: 70 2c 20 54 63 6c 5f 4e 65 77 42 6f 6f 6c 65 61  p, Tcl_NewBoolea
aea0: 6e 4f 62 6a 28 72 65 74 29 29 3b 0a 20 20 72 65  nObj(ret));.  re
aeb0: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 23  turn TCL_OK;.}.#
aec0: 65 6e 64 69 66 0a 0a 0a 0a 2f 2a 0a 2a 2a 20 55  endif..../*.** U
aed0: 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 65 78  sage: sqlite3_ex
aee0: 74 65 6e 64 65 64 5f 72 65 73 75 6c 74 5f 63 6f  tended_result_co
aef0: 64 65 73 20 20 20 44 42 20 20 20 20 42 4f 4f 4c  des   DB    BOOL
af00: 45 41 4e 0a 2a 2a 0a 2a 2f 0a 73 74 61 74 69 63  EAN.**.*/.static
af10: 20 69 6e 74 20 74 65 73 74 5f 65 78 74 65 6e 64   int test_extend
af20: 65 64 5f 72 65 73 75 6c 74 5f 63 6f 64 65 73 28  ed_result_codes(
af30: 0a 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c  .  ClientData cl
af40: 69 65 6e 74 44 61 74 61 2c 20 2f 2a 20 50 6f 69  ientData, /* Poi
af50: 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 5f  nter to sqlite3_
af60: 65 6e 61 62 6c 65 5f 58 58 58 20 66 75 6e 63 74  enable_XXX funct
af70: 69 6f 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74  ion */.  Tcl_Int
af80: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
af90: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
afa0: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
afb0: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
afc0: 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20   */.  int objc, 
afd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
afe0: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
aff0: 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a  nts */.  Tcl_Obj
b000: 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20   *CONST objv[]  
b010: 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d  /* Command argum
b020: 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  ents */.){.  int
b030: 20 65 6e 61 62 6c 65 3b 0a 20 20 73 71 6c 69 74   enable;.  sqlit
b040: 65 33 20 2a 64 62 3b 0a 0a 20 20 69 66 28 20 6f  e3 *db;..  if( o
b050: 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63  bjc!=3 ){.    Tc
b060: 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69  l_WrongNumArgs(i
b070: 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20  nterp, 1, objv, 
b080: 22 44 42 20 42 4f 4f 4c 45 41 4e 22 29 3b 0a 20  "DB BOOLEAN");. 
b090: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
b0a0: 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67  ROR;.  }.  if( g
b0b0: 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65  etDbPointer(inte
b0c0: 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
b0d0: 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29  g(objv[1]), &db)
b0e0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
b0f0: 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47  ROR;.  if( Tcl_G
b100: 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a  etBooleanFromObj
b110: 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d  (interp, objv[2]
b120: 2c 20 26 65 6e 61 62 6c 65 29 20 29 20 72 65 74  , &enable) ) ret
b130: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
b140: 20 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65   sqlite3_extende
b150: 64 5f 72 65 73 75 6c 74 5f 63 6f 64 65 73 28 64  d_result_codes(d
b160: 62 2c 20 65 6e 61 62 6c 65 29 3b 0a 20 20 72 65  b, enable);.  re
b170: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
b180: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  /*.** Usage: sql
b190: 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 5f  ite3_libversion_
b1a0: 6e 75 6d 62 65 72 0a 2a 2a 0a 2a 2f 0a 73 74 61  number.**.*/.sta
b1b0: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 6c 69 62  tic int test_lib
b1c0: 76 65 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 0a  version_number(.
b1d0: 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69    ClientData cli
b1e0: 65 6e 74 44 61 74 61 2c 20 2f 2a 20 50 6f 69 6e  entData, /* Poin
b1f0: 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 5f 65  ter to sqlite3_e
b200: 6e 61 62 6c 65 5f 58 58 58 20 66 75 6e 63 74 69  nable_XXX functi
b210: 6f 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65  on */.  Tcl_Inte
b220: 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
b230: 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
b240: 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
b250: 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
b260: 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20  */.  int objc,  
b270: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
b280: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
b290: 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20  ts */.  Tcl_Obj 
b2a0: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f  *CONST objv[]  /
b2b0: 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65  * Command argume
b2c0: 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 54 63 6c 5f  nts */.){.  Tcl_
b2d0: 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
b2e0: 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f  erp, Tcl_NewIntO
b2f0: 62 6a 28 73 71 6c 69 74 65 33 5f 6c 69 62 76 65  bj(sqlite3_libve
b300: 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 29 29 29  rsion_number()))
b310: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
b320: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
b330: 65 3a 20 73 71 6c 69 74 65 33 5f 74 61 62 6c 65  e: sqlite3_table
b340: 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61  _column_metadata
b350: 20 44 42 20 64 62 6e 61 6d 65 20 74 62 6c 6e 61   DB dbname tblna
b360: 6d 65 20 63 6f 6c 6e 61 6d 65 0a 2a 2a 0a 2a 2f  me colname.**.*/
b370: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
b380: 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54  NABLE_COLUMN_MET
b390: 41 44 41 54 41 0a 73 74 61 74 69 63 20 69 6e 74  ADATA.static int
b3a0: 20 74 65 73 74 5f 74 61 62 6c 65 5f 63 6f 6c 75   test_table_colu
b3b0: 6d 6e 5f 6d 65 74 61 64 61 74 61 28 0a 20 20 43  mn_metadata(.  C
b3c0: 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74  lientData client
b3d0: 44 61 74 61 2c 20 2f 2a 20 50 6f 69 6e 74 65 72  Data, /* Pointer
b3e0: 20 74 6f 20 73 71 6c 69 74 65 33 5f 65 6e 61 62   to sqlite3_enab
b3f0: 6c 65 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e 20  le_XXX function 
b400: 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  */.  Tcl_Interp 
b410: 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
b420: 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
b430: 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
b440: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
b450: 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20    int objc,     
b460: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
b470: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
b480: 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  */.  Tcl_Obj *CO
b490: 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43  NST objv[]  /* C
b4a0: 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73  ommand arguments
b4b0: 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33   */.){.  sqlite3
b4c0: 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68   *db;.  const ch
b4d0: 61 72 20 2a 7a 44 62 3b 0a 20 20 63 6f 6e 73 74  ar *zDb;.  const
b4e0: 20 63 68 61 72 20 2a 7a 54 62 6c 3b 0a 20 20 63   char *zTbl;.  c
b4f0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f 6c 3b  onst char *zCol;
b500: 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 54 63 6c  .  int rc;.  Tcl
b510: 5f 4f 62 6a 20 2a 70 52 65 74 3b 0a 0a 20 20 63  _Obj *pRet;..  c
b520: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 61 74 61  onst char *zData
b530: 74 79 70 65 3b 0a 20 20 63 6f 6e 73 74 20 63 68  type;.  const ch
b540: 61 72 20 2a 7a 43 6f 6c 6c 73 65 71 3b 0a 20 20  ar *zCollseq;.  
b550: 69 6e 74 20 6e 6f 74 6e 75 6c 6c 3b 0a 20 20 69  int notnull;.  i
b560: 6e 74 20 70 72 69 6d 61 72 79 6b 65 79 3b 0a 20  nt primarykey;. 
b570: 20 69 6e 74 20 61 75 74 6f 69 6e 63 72 65 6d 65   int autoincreme
b580: 6e 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  nt;..  if( objc!
b590: 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72  =5 ){.    Tcl_Wr
b5a0: 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72  ongNumArgs(inter
b5b0: 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 44 42 20  p, 1, objv, "DB 
b5c0: 64 62 6e 61 6d 65 20 74 62 6c 6e 61 6d 65 20 63  dbname tblname c
b5d0: 6f 6c 6e 61 6d 65 22 29 3b 0a 20 20 20 20 72 65  olname");.    re
b5e0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
b5f0: 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
b600: 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
b610: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
b620: 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65  v[1]), &db) ) re
b630: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
b640: 20 20 7a 44 62 20 3d 20 54 63 6c 5f 47 65 74 53    zDb = Tcl_GetS
b650: 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 3b 0a  tring(objv[2]);.
b660: 20 20 7a 54 62 6c 20 3d 20 54 63 6c 5f 47 65 74    zTbl = Tcl_Get
b670: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 33 5d 29 3b  String(objv[3]);
b680: 0a 20 20 7a 43 6f 6c 20 3d 20 54 63 6c 5f 47 65  .  zCol = Tcl_Ge
b690: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 34 5d 29  tString(objv[4])
b6a0: 3b 0a 0a 20 20 69 66 28 20 73 74 72 6c 65 6e 28  ;..  if( strlen(
b6b0: 7a 44 62 29 3d 3d 30 20 29 20 7a 44 62 20 3d 20  zDb)==0 ) zDb = 
b6c0: 30 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  0;..  rc = sqlit
b6d0: 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f  e3_table_column_
b6e0: 6d 65 74 61 64 61 74 61 28 64 62 2c 20 7a 44 62  metadata(db, zDb
b6f0: 2c 20 7a 54 62 6c 2c 20 7a 43 6f 6c 2c 20 0a 20  , zTbl, zCol, . 
b700: 20 20 20 20 20 26 7a 44 61 74 61 74 79 70 65 2c       &zDatatype,
b710: 20 26 7a 43 6f 6c 6c 73 65 71 2c 20 26 6e 6f 74   &zCollseq, &not
b720: 6e 75 6c 6c 2c 20 26 70 72 69 6d 61 72 79 6b 65  null, &primaryke
b730: 79 2c 20 26 61 75 74 6f 69 6e 63 72 65 6d 65 6e  y, &autoincremen
b740: 74 29 3b 0a 0a 20 20 69 66 28 20 72 63 21 3d 53  t);..  if( rc!=S
b750: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
b760: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
b770: 28 69 6e 74 65 72 70 2c 20 73 71 6c 69 74 65 33  (interp, sqlite3
b780: 5f 65 72 72 6d 73 67 28 64 62 29 2c 20 30 29 3b  _errmsg(db), 0);
b790: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
b7a0: 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 70 52  ERROR;.  }..  pR
b7b0: 65 74 20 3d 20 54 63 6c 5f 4e 65 77 4f 62 6a 28  et = Tcl_NewObj(
b7c0: 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a  );.  Tcl_ListObj
b7d0: 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 30 2c  AppendElement(0,
b7e0: 20 70 52 65 74 2c 20 54 63 6c 5f 4e 65 77 53 74   pRet, Tcl_NewSt
b7f0: 72 69 6e 67 4f 62 6a 28 7a 44 61 74 61 74 79 70  ringObj(zDatatyp
b800: 65 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 4c  e, -1));.  Tcl_L
b810: 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d  istObjAppendElem
b820: 65 6e 74 28 30 2c 20 70 52 65 74 2c 20 54 63 6c  ent(0, pRet, Tcl
b830: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 7a 43  _NewStringObj(zC
b840: 6f 6c 6c 73 65 71 2c 20 2d 31 29 29 3b 0a 20 20  ollseq, -1));.  
b850: 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e  Tcl_ListObjAppen
b860: 64 45 6c 65 6d 65 6e 74 28 30 2c 20 70 52 65 74  dElement(0, pRet
b870: 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28  , Tcl_NewIntObj(
b880: 6e 6f 74 6e 75 6c 6c 29 29 3b 0a 20 20 54 63 6c  notnull));.  Tcl
b890: 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
b8a0: 65 6d 65 6e 74 28 30 2c 20 70 52 65 74 2c 20 54  ement(0, pRet, T
b8b0: 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 70 72 69  cl_NewIntObj(pri
b8c0: 6d 61 72 79 6b 65 79 29 29 3b 0a 20 20 54 63 6c  marykey));.  Tcl
b8d0: 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
b8e0: 65 6d 65 6e 74 28 30 2c 20 70 52 65 74 2c 20 54  ement(0, pRet, T
b8f0: 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 61 75 74  cl_NewIntObj(aut
b900: 6f 69 6e 63 72 65 6d 65 6e 74 29 29 3b 0a 20 20  oincrement));.  
b910: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
b920: 28 69 6e 74 65 72 70 2c 20 70 52 65 74 29 3b 0a  (interp, pRet);.
b930: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
b940: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  ;.}.#endif..#ifn
b950: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
b960: 49 4e 43 52 42 4c 4f 42 0a 0a 2f 2a 0a 2a 2a 20  INCRBLOB../*.** 
b970: 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 72 65 61  sqlite3_blob_rea
b980: 64 20 20 43 48 41 4e 4e 45 4c 20 4f 46 46 53 45  d  CHANNEL OFFSE
b990: 54 20 4e 0a 2a 2a 0a 2a 2a 20 20 20 54 68 69 73  T N.**.**   This
b9a0: 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65 64   command is used
b9b0: 20 74 6f 20 74 65 73 74 20 74 68 65 20 73 71 6c   to test the sql
b9c0: 69 74 65 33 5f 62 6c 6f 62 5f 72 65 61 64 28 29  ite3_blob_read()
b9d0: 20 69 6e 20 77 61 79 73 20 74 68 61 74 0a 2a 2a   in ways that.**
b9e0: 20 20 20 74 68 65 20 54 63 6c 20 63 68 61 6e 6e     the Tcl chann
b9f0: 65 6c 20 69 6e 74 65 72 66 61 63 65 20 64 6f 65  el interface doe
ba00: 73 20 6e 6f 74 2e 20 54 68 65 20 66 69 72 73 74  s not. The first
ba10: 20 61 72 67 75 6d 65 6e 74 20 73 68 6f 75 6c 64   argument should
ba20: 0a 2a 2a 20 20 20 62 65 20 74 68 65 20 6e 61 6d  .**   be the nam
ba30: 65 20 6f 66 20 61 20 76 61 6c 69 64 20 63 68 61  e of a valid cha
ba40: 6e 6e 65 6c 20 63 72 65 61 74 65 64 20 62 79 20  nnel created by 
ba50: 74 68 65 20 5b 69 6e 63 72 62 6c 6f 62 5d 20 6d  the [incrblob] m
ba60: 65 74 68 6f 64 0a 2a 2a 20 20 20 6f 66 20 61 20  ethod.**   of a 
ba70: 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e  database handle.
ba80: 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 63   This function c
ba90: 61 6c 6c 73 20 73 71 6c 69 74 65 33 5f 62 6c 6f  alls sqlite3_blo
baa0: 62 5f 72 65 61 64 28 29 0a 2a 2a 20 20 20 74 6f  b_read().**   to
bab0: 20 72 65 61 64 20 4e 20 62 79 74 65 73 20 66 72   read N bytes fr
bac0: 6f 6d 20 6f 66 66 73 65 74 20 4f 46 46 53 45 54  om offset OFFSET
bad0: 20 66 72 6f 6d 20 74 68 65 20 75 6e 64 65 72 6c   from the underl
bae0: 79 69 6e 67 20 53 51 4c 69 74 65 0a 2a 2a 20 20  ying SQLite.**  
baf0: 20 62 6c 6f 62 20 68 61 6e 64 6c 65 2e 0a 2a 2a   blob handle..**
bb00: 0a 2a 2a 20 20 20 4f 6e 20 73 75 63 63 65 73 73  .**   On success
bb10: 2c 20 61 20 62 79 74 65 2d 61 72 72 61 79 20 6f  , a byte-array o
bb20: 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e 69 6e 67  bject containing
bb30: 20 74 68 65 20 72 65 61 64 20 64 61 74 61 20 69   the read data i
bb40: 73 20 0a 2a 2a 20 20 20 72 65 74 75 72 6e 65 64  s .**   returned
bb50: 2e 20 4f 6e 20 66 61 69 6c 75 72 65 2c 20 74 68  . On failure, th
bb60: 65 20 69 6e 74 65 72 70 72 65 74 65 72 20 72 65  e interpreter re
bb70: 73 75 6c 74 20 69 73 20 73 65 74 20 74 6f 20 74  sult is set to t
bb80: 68 65 0a 2a 2a 20 20 20 74 65 78 74 20 72 65 70  he.**   text rep
bb90: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
bba0: 68 65 20 72 65 74 75 72 6e 65 64 20 65 72 72 6f  he returned erro
bbb0: 72 20 63 6f 64 65 20 28 69 2e 65 2e 20 22 53 51  r code (i.e. "SQ
bbc0: 4c 49 54 45 5f 4e 4f 4d 45 4d 22 29 0a 2a 2a 20  LITE_NOMEM").** 
bbd0: 20 20 61 6e 64 20 61 20 54 63 6c 20 65 78 63 65    and a Tcl exce
bbe0: 70 74 69 6f 6e 20 69 73 20 74 68 72 6f 77 6e 2e  ption is thrown.
bbf0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
bc00: 65 73 74 5f 62 6c 6f 62 5f 72 65 61 64 28 0a 20  est_blob_read(. 
bc10: 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65   ClientData clie
bc20: 6e 74 44 61 74 61 2c 20 2f 2a 20 4e 6f 74 20 75  ntData, /* Not u
bc30: 73 65 64 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74  sed */.  Tcl_Int
bc40: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
bc50: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
bc60: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
bc70: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
bc80: 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20   */.  int objc, 
bc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bca0: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
bcb0: 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a  nts */.  Tcl_Obj
bcc0: 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20   *CONST objv[]  
bcd0: 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d  /* Command argum
bce0: 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 54 63 6c  ents */.){.  Tcl
bcf0: 5f 43 68 61 6e 6e 65 6c 20 63 68 61 6e 6e 65 6c  _Channel channel
bd00: 3b 0a 20 20 43 6c 69 65 6e 74 44 61 74 61 20 69  ;.  ClientData i
bd10: 6e 73 74 61 6e 63 65 44 61 74 61 3b 0a 20 20 73  nstanceData;.  s
bd20: 71 6c 69 74 65 33 5f 62 6c 6f 62 20 2a 70 42 6c  qlite3_blob *pBl
bd30: 6f 62 3b 0a 20 20 69 6e 74 20 6e 6f 74 55 73 65  ob;.  int notUse
bd40: 64 3b 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a  d;.  int nByte;.
bd50: 20 20 69 6e 74 20 69 4f 66 66 73 65 74 3b 0a 20    int iOffset;. 
bd60: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
bd70: 7a 42 75 66 3b 0a 20 20 69 6e 74 20 72 63 3b 0a  zBuf;.  int rc;.
bd80: 20 20 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 34    .  if( objc!=4
bd90: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e   ){.    Tcl_Wron
bda0: 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c  gNumArgs(interp,
bdb0: 20 31 2c 20 6f 62 6a 76 2c 20 22 43 48 41 4e 4e   1, objv, "CHANN
bdc0: 45 4c 20 4f 46 46 53 45 54 20 4e 22 29 3b 0a 20  EL OFFSET N");. 
bdd0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
bde0: 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 63 68 61 6e  ROR;.  }..  chan
bdf0: 6e 65 6c 20 3d 20 54 63 6c 5f 47 65 74 43 68 61  nel = Tcl_GetCha
be00: 6e 6e 65 6c 28 69 6e 74 65 72 70 2c 20 54 63 6c  nnel(interp, Tcl
be10: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
be20: 31 5d 29 2c 20 26 6e 6f 74 55 73 65 64 29 3b 0a  1]), &notUsed);.
be30: 20 20 69 66 28 20 21 63 68 61 6e 6e 65 6c 0a 20    if( !channel. 
be40: 20 20 7c 7c 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c    || TCL_OK!=Tcl
be50: 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
be60: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20  nterp, objv[2], 
be70: 26 69 4f 66 66 73 65 74 29 0a 20 20 20 7c 7c 20  &iOffset).   || 
be80: 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 49  TCL_OK!=Tcl_GetI
be90: 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  ntFromObj(interp
bea0: 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 6e 42 79 74  , objv[3], &nByt
beb0: 65 29 0a 20 20 20 7c 7c 20 6e 42 79 74 65 3c 30  e).   || nByte<0
bec0: 20 7c 7c 20 69 4f 66 66 73 65 74 3c 30 0a 20 20   || iOffset<0.  
bed0: 29 7b 20 0a 20 20 20 20 72 65 74 75 72 6e 20 54  ){ .    return T
bee0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
bef0: 20 69 6e 73 74 61 6e 63 65 44 61 74 61 20 3d 20   instanceData = 
bf00: 54 63 6c 5f 47 65 74 43 68 61 6e 6e 65 6c 49 6e  Tcl_GetChannelIn
bf10: 73 74 61 6e 63 65 44 61 74 61 28 63 68 61 6e 6e  stanceData(chann
bf20: 65 6c 29 3b 0a 20 20 70 42 6c 6f 62 20 3d 20 2a  el);.  pBlob = *
bf30: 28 28 73 71 6c 69 74 65 33 5f 62 6c 6f 62 20 2a  ((sqlite3_blob *
bf40: 2a 29 69 6e 73 74 61 6e 63 65 44 61 74 61 29 3b  *)instanceData);
bf50: 0a 0a 20 20 7a 42 75 66 20 3d 20 28 75 6e 73 69  ..  zBuf = (unsi
bf60: 67 6e 65 64 20 63 68 61 72 20 2a 29 54 63 6c 5f  gned char *)Tcl_
bf70: 41 6c 6c 6f 63 28 6e 42 79 74 65 29 3b 0a 20 20  Alloc(nByte);.  
bf80: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 6c 6f  rc = sqlite3_blo
bf90: 62 5f 72 65 61 64 28 70 42 6c 6f 62 2c 20 7a 42  b_read(pBlob, zB
bfa0: 75 66 2c 20 6e 42 79 74 65 2c 20 69 4f 66 66 73  uf, nByte, iOffs
bfb0: 65 74 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  et);.  if( rc==S
bfc0: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
bfd0: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
bfe0: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
bff0: 42 79 74 65 41 72 72 61 79 4f 62 6a 28 7a 42 75  ByteArrayObj(zBu
c000: 66 2c 20 6e 42 79 74 65 29 29 3b 0a 20 20 7d 65  f, nByte));.  }e
c010: 6c 73 65 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74  lse{.    Tcl_Set
c020: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28  Result(interp, (
c030: 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 54 65  char *)sqlite3Te
c040: 73 74 45 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c  stErrorName(rc),
c050: 20 54 43 4c 5f 56 4f 4c 41 54 49 4c 45 29 3b 0a   TCL_VOLATILE);.
c060: 20 20 7d 0a 20 20 54 63 6c 5f 46 72 65 65 28 28    }.  Tcl_Free((
c070: 63 68 61 72 20 2a 29 7a 42 75 66 29 3b 0a 0a 20  char *)zBuf);.. 
c080: 20 72 65 74 75 72 6e 20 28 72 63 3d 3d 53 51 4c   return (rc==SQL
c090: 49 54 45 5f 4f 4b 20 3f 20 54 43 4c 5f 4f 4b 20  ITE_OK ? TCL_OK 
c0a0: 3a 20 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 7d 0a  : TCL_ERROR);.}.
c0b0: 0a 2f 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 62  ./*.** sqlite3_b
c0c0: 6c 6f 62 5f 77 72 69 74 65 20 43 48 41 4e 4e 45  lob_write CHANNE
c0d0: 4c 20 4f 46 46 53 45 54 20 44 41 54 41 20 3f 4e  L OFFSET DATA ?N
c0e0: 44 41 54 41 3f 0a 2a 2a 0a 2a 2a 20 20 20 54 68  DATA?.**.**   Th
c0f0: 69 73 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73  is command is us
c100: 65 64 20 74 6f 20 74 65 73 74 20 74 68 65 20 73  ed to test the s
c110: 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 77 72 69 74  qlite3_blob_writ
c120: 65 28 29 20 69 6e 20 77 61 79 73 20 74 68 61 74  e() in ways that
c130: 0a 2a 2a 20 20 20 74 68 65 20 54 63 6c 20 63 68  .**   the Tcl ch
c140: 61 6e 6e 65 6c 20 69 6e 74 65 72 66 61 63 65 20  annel interface 
c150: 64 6f 65 73 20 6e 6f 74 2e 20 54 68 65 20 66 69  does not. The fi
c160: 72 73 74 20 61 72 67 75 6d 65 6e 74 20 73 68 6f  rst argument sho
c170: 75 6c 64 0a 2a 2a 20 20 20 62 65 20 74 68 65 20  uld.**   be the 
c180: 6e 61 6d 65 20 6f 66 20 61 20 76 61 6c 69 64 20  name of a valid 
c190: 63 68 61 6e 6e 65 6c 20 63 72 65 61 74 65 64 20  channel created 
c1a0: 62 79 20 74 68 65 20 5b 69 6e 63 72 62 6c 6f 62  by the [incrblob
c1b0: 5d 20 6d 65 74 68 6f 64 0a 2a 2a 20 20 20 6f 66  ] method.**   of
c1c0: 20 61 20 64 61 74 61 62 61 73 65 20 68 61 6e 64   a database hand
c1d0: 6c 65 2e 20 54 68 69 73 20 66 75 6e 63 74 69 6f  le. This functio
c1e0: 6e 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33 5f  n calls sqlite3_
c1f0: 62 6c 6f 62 5f 77 72 69 74 65 28 29 0a 2a 2a 20  blob_write().** 
c200: 20 20 74 6f 20 77 72 69 74 65 20 74 68 65 20 44    to write the D
c210: 41 54 41 20 62 79 74 65 2d 61 72 72 61 79 20 74  ATA byte-array t
c220: 6f 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67  o the underlying
c230: 20 53 51 4c 69 74 65 20 62 6c 6f 62 20 68 61 6e   SQLite blob han
c240: 64 6c 65 2e 0a 2a 2a 20 20 20 61 74 20 6f 66 66  dle..**   at off
c250: 73 65 74 20 4f 46 46 53 45 54 2e 0a 2a 2a 0a 2a  set OFFSET..**.*
c260: 2a 20 20 20 4f 6e 20 73 75 63 63 65 73 73 2c 20  *   On success, 
c270: 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 20  an empty string 
c280: 69 73 20 72 65 74 75 72 6e 65 64 2e 20 4f 6e 20  is returned. On 
c290: 66 61 69 6c 75 72 65 2c 20 74 68 65 20 69 6e 74  failure, the int
c2a0: 65 72 70 72 65 74 65 72 0a 2a 2a 20 20 20 72 65  erpreter.**   re
c2b0: 73 75 6c 74 20 69 73 20 73 65 74 20 74 6f 20 74  sult is set to t
c2c0: 68 65 20 74 65 78 74 20 72 65 70 72 65 73 65 6e  he text represen
c2d0: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 72 65  tation of the re
c2e0: 74 75 72 6e 65 64 20 65 72 72 6f 72 20 63 6f 64  turned error cod
c2f0: 65 20 0a 2a 2a 20 20 20 28 69 2e 65 2e 20 22 53  e .**   (i.e. "S
c300: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 22 29 20 61 6e  QLITE_NOMEM") an
c310: 64 20 61 20 54 63 6c 20 65 78 63 65 70 74 69 6f  d a Tcl exceptio
c320: 6e 20 69 73 20 74 68 72 6f 77 6e 2e 0a 2a 2f 0a  n is thrown..*/.
c330: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
c340: 62 6c 6f 62 5f 77 72 69 74 65 28 0a 20 20 43 6c  blob_write(.  Cl
c350: 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44  ientData clientD
c360: 61 74 61 2c 20 2f 2a 20 4e 6f 74 20 75 73 65 64  ata, /* Not used
c370: 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70   */.  Tcl_Interp
c380: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
c390: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
c3a0: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
c3b0: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
c3c0: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20  .  int objc,    
c3d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
c3e0: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
c3f0: 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43   */.  Tcl_Obj *C
c400: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20  ONST objv[]  /* 
c410: 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74  Command argument
c420: 73 20 2a 2f 0a 29 7b 0a 20 20 54 63 6c 5f 43 68  s */.){.  Tcl_Ch
c430: 61 6e 6e 65 6c 20 63 68 61 6e 6e 65 6c 3b 0a 20  annel channel;. 
c440: 20 43 6c 69 65 6e 74 44 61 74 61 20 69 6e 73 74   ClientData inst
c450: 61 6e 63 65 44 61 74 61 3b 0a 20 20 73 71 6c 69  anceData;.  sqli
c460: 74 65 33 5f 62 6c 6f 62 20 2a 70 42 6c 6f 62 3b  te3_blob *pBlob;
c470: 0a 20 20 69 6e 74 20 6e 6f 74 55 73 65 64 3b 0a  .  int notUsed;.
c480: 20 20 69 6e 74 20 69 4f 66 66 73 65 74 3b 0a 20    int iOffset;. 
c490: 20 69 6e 74 20 72 63 3b 0a 0a 20 20 75 6e 73 69   int rc;..  unsi
c4a0: 67 6e 65 64 20 63 68 61 72 20 2a 7a 42 75 66 3b  gned char *zBuf;
c4b0: 0a 20 20 69 6e 74 20 6e 42 75 66 3b 0a 20 20 0a  .  int nBuf;.  .
c4c0: 20 20 69 66 28 20 6f 62 6a 63 21 3d 34 20 26 26    if( objc!=4 &&
c4d0: 20 6f 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20   objc!=5 ){.    
c4e0: 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73  Tcl_WrongNumArgs
c4f0: 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76  (interp, 1, objv
c500: 2c 20 22 43 48 41 4e 4e 45 4c 20 4f 46 46 53 45  , "CHANNEL OFFSE
c510: 54 20 44 41 54 41 20 3f 4e 44 41 54 41 3f 22 29  T DATA ?NDATA?")
c520: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
c530: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 63  _ERROR;.  }..  c
c540: 68 61 6e 6e 65 6c 20 3d 20 54 63 6c 5f 47 65 74  hannel = Tcl_Get
c550: 43 68 61 6e 6e 65 6c 28 69 6e 74 65 72 70 2c 20  Channel(interp, 
c560: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
c570: 6a 76 5b 31 5d 29 2c 20 26 6e 6f 74 55 73 65 64  jv[1]), &notUsed
c580: 29 3b 0a 20 20 69 66 28 20 21 63 68 61 6e 6e 65  );.  if( !channe
c590: 6c 20 7c 7c 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c  l || TCL_OK!=Tcl
c5a0: 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
c5b0: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20  nterp, objv[2], 
c5c0: 26 69 4f 66 66 73 65 74 29 20 29 7b 20 0a 20 20  &iOffset) ){ .  
c5d0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
c5e0: 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 6e 73 74 61  OR;.  }..  insta
c5f0: 6e 63 65 44 61 74 61 20 3d 20 54 63 6c 5f 47 65  nceData = Tcl_Ge
c600: 74 43 68 61 6e 6e 65 6c 49 6e 73 74 61 6e 63 65  tChannelInstance
c610: 44 61 74 61 28 63 68 61 6e 6e 65 6c 29 3b 0a 20  Data(channel);. 
c620: 20 70 42 6c 6f 62 20 3d 20 2a 28 28 73 71 6c 69   pBlob = *((sqli
c630: 74 65 33 5f 62 6c 6f 62 20 2a 2a 29 69 6e 73 74  te3_blob **)inst
c640: 61 6e 63 65 44 61 74 61 29 3b 0a 0a 20 20 7a 42  anceData);..  zB
c650: 75 66 20 3d 20 54 63 6c 5f 47 65 74 42 79 74 65  uf = Tcl_GetByte
c660: 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28 6f 62 6a  ArrayFromObj(obj
c670: 76 5b 33 5d 2c 20 26 6e 42 75 66 29 3b 0a 20 20  v[3], &nBuf);.  
c680: 69 66 28 20 6f 62 6a 63 3d 3d 35 20 26 26 20 54  if( objc==5 && T
c690: 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a  cl_GetIntFromObj
c6a0: 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 34 5d  (interp, objv[4]
c6b0: 2c 20 26 6e 42 75 66 29 20 29 7b 0a 20 20 20 20  , &nBuf) ){.    
c6c0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
c6d0: 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
c6e0: 69 74 65 33 5f 62 6c 6f 62 5f 77 72 69 74 65 28  ite3_blob_write(
c6f0: 70 42 6c 6f 62 2c 20 7a 42 75 66 2c 20 6e 42 75  pBlob, zBuf, nBu
c700: 66 2c 20 69 4f 66 66 73 65 74 29 3b 0a 20 20 69  f, iOffset);.  i
c710: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
c720: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 52   ){.    Tcl_SetR
c730: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63  esult(interp, (c
c740: 68 61 72 20 2a 29 73 71 6c 69 74 65 33 54 65 73  har *)sqlite3Tes
c750: 74 45 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20  tErrorName(rc), 
c760: 54 43 4c 5f 56 4f 4c 41 54 49 4c 45 29 3b 0a 20  TCL_VOLATILE);. 
c770: 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 28 72 63   }..  return (rc
c780: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 3f 20 54 43  ==SQLITE_OK ? TC
c790: 4c 5f 4f 4b 20 3a 20 54 43 4c 5f 45 52 52 4f 52  L_OK : TCL_ERROR
c7a0: 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  );.}.#endif../*.
c7b0: 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65  ** Usage: sqlite
c7c0: 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69  3_create_collati
c7d0: 6f 6e 5f 76 32 20 44 42 2d 48 41 4e 44 4c 45 20  on_v2 DB-HANDLE 
c7e0: 4e 41 4d 45 20 43 4d 50 2d 50 52 4f 43 20 44 45  NAME CMP-PROC DE
c7f0: 4c 2d 50 52 4f 43 0a 2a 2a 0a 2a 2a 20 20 20 54  L-PROC.**.**   T
c800: 68 69 73 20 54 63 6c 20 70 72 6f 63 20 69 73 20  his Tcl proc is 
c810: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
c820: 20 74 68 65 20 65 78 70 65 72 69 6d 65 6e 74 61   the experimenta
c830: 6c 0a 2a 2a 20 20 20 73 71 6c 69 74 65 33 5f 63  l.**   sqlite3_c
c840: 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 5f  reate_collation_
c850: 76 32 28 29 20 69 6e 74 65 72 66 61 63 65 2e 0a  v2() interface..
c860: 2a 2f 0a 73 74 72 75 63 74 20 54 65 73 74 43 6f  */.struct TestCo
c870: 6c 6c 61 74 69 6f 6e 58 20 7b 0a 20 20 54 63 6c  llationX {.  Tcl
c880: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 3b  _Interp *interp;
c890: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 43 6d 70  .  Tcl_Obj *pCmp
c8a0: 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 44 65  ;.  Tcl_Obj *pDe
c8b0: 6c 3b 0a 7d 3b 0a 74 79 70 65 64 65 66 20 73 74  l;.};.typedef st
c8c0: 72 75 63 74 20 54 65 73 74 43 6f 6c 6c 61 74 69  ruct TestCollati
c8d0: 6f 6e 58 20 54 65 73 74 43 6f 6c 6c 61 74 69 6f  onX TestCollatio
c8e0: 6e 58 3b 0a 73 74 61 74 69 63 20 76 6f 69 64 20  nX;.static void 
c8f0: 74 65 73 74 43 72 65 61 74 65 43 6f 6c 6c 61 74  testCreateCollat
c900: 69 6f 6e 44 65 6c 28 76 6f 69 64 20 2a 70 43 74  ionDel(void *pCt
c910: 78 29 7b 0a 20 20 54 65 73 74 43 6f 6c 6c 61 74  x){.  TestCollat
c920: 69 6f 6e 58 20 2a 70 20 3d 20 28 54 65 73 74 43  ionX *p = (TestC
c930: 6f 6c 6c 61 74 69 6f 6e 58 20 2a 29 70 43 74 78  ollationX *)pCtx
c940: 3b 0a 0a 20 20 69 6e 74 20 72 63 20 3d 20 54 63  ;..  int rc = Tc
c950: 6c 5f 45 76 61 6c 4f 62 6a 45 78 28 70 2d 3e 69  l_EvalObjEx(p->i
c960: 6e 74 65 72 70 2c 20 70 2d 3e 70 44 65 6c 2c 20  nterp, p->pDel, 
c970: 54 43 4c 5f 45 56 41 4c 5f 44 49 52 45 43 54 7c  TCL_EVAL_DIRECT|
c980: 54 43 4c 5f 45 56 41 4c 5f 47 4c 4f 42 41 4c 29  TCL_EVAL_GLOBAL)
c990: 3b 0a 20 20 69 66 28 20 72 63 21 3d 54 43 4c 5f  ;.  if( rc!=TCL_
c9a0: 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f 42 61  OK ){.    Tcl_Ba
c9b0: 63 6b 67 72 6f 75 6e 64 45 72 72 6f 72 28 70 2d  ckgroundError(p-
c9c0: 3e 69 6e 74 65 72 70 29 3b 0a 20 20 7d 0a 0a 20  >interp);.  }.. 
c9d0: 20 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e   Tcl_DecrRefCoun
c9e0: 74 28 70 2d 3e 70 43 6d 70 29 3b 0a 20 20 54 63  t(p->pCmp);.  Tc
c9f0: 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28 70  l_DecrRefCount(p
ca00: 2d 3e 70 44 65 6c 29 3b 0a 20 20 73 71 6c 69 74  ->pDel);.  sqlit
ca10: 65 33 5f 66 72 65 65 28 28 76 6f 69 64 20 2a 29  e3_free((void *)
ca20: 70 29 3b 0a 7d 0a 73 74 61 74 69 63 20 69 6e 74  p);.}.static int
ca30: 20 74 65 73 74 43 72 65 61 74 65 43 6f 6c 6c 61   testCreateColla
ca40: 74 69 6f 6e 43 6d 70 28 0a 20 20 76 6f 69 64 20  tionCmp(.  void 
ca50: 2a 70 43 74 78 2c 0a 20 20 69 6e 74 20 6e 4c 65  *pCtx,.  int nLe
ca60: 66 74 2c 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64  ft,.  const void
ca70: 20 2a 7a 4c 65 66 74 2c 0a 20 20 69 6e 74 20 6e   *zLeft,.  int n
ca80: 52 69 67 68 74 2c 0a 20 20 63 6f 6e 73 74 20 76  Right,.  const v
ca90: 6f 69 64 20 2a 7a 52 69 67 68 74 0a 29 7b 0a 20  oid *zRight.){. 
caa0: 20 54 65 73 74 43 6f 6c 6c 61 74 69 6f 6e 58 20   TestCollationX 
cab0: 2a 70 20 3d 20 28 54 65 73 74 43 6f 6c 6c 61 74  *p = (TestCollat
cac0: 69 6f 6e 58 20 2a 29 70 43 74 78 3b 0a 20 20 54  ionX *)pCtx;.  T
cad0: 63 6c 5f 4f 62 6a 20 2a 70 53 63 72 69 70 74 20  cl_Obj *pScript 
cae0: 3d 20 54 63 6c 5f 44 75 70 6c 69 63 61 74 65 4f  = Tcl_DuplicateO
caf0: 62 6a 28 70 2d 3e 70 43 6d 70 29 3b 0a 20 20 69  bj(p->pCmp);.  i
cb00: 6e 74 20 69 52 65 73 20 3d 20 30 3b 0a 0a 20 20  nt iRes = 0;..  
cb10: 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74  Tcl_IncrRefCount
cb20: 28 70 53 63 72 69 70 74 29 3b 0a 20 20 54 63 6c  (pScript);.  Tcl
cb30: 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
cb40: 65 6d 65 6e 74 28 30 2c 20 70 53 63 72 69 70 74  ement(0, pScript
cb50: 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
cb60: 62 6a 28 28 63 68 61 72 20 2a 29 7a 4c 65 66 74  bj((char *)zLeft
cb70: 2c 20 6e 4c 65 66 74 29 29 3b 0a 20 20 54 63 6c  , nLeft));.  Tcl
cb80: 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
cb90: 65 6d 65 6e 74 28 30 2c 20 70 53 63 72 69 70 74  ement(0, pScript
cba0: 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
cbb0: 62 6a 28 28 63 68 61 72 20 2a 29 7a 52 69 67 68  bj((char *)zRigh
cbc0: 74 2c 6e 52 69 67 68 74 29 29 3b 0a 0a 20 20 69  t,nRight));..  i
cbd0: 66 28 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 45  f( TCL_OK!=Tcl_E
cbe0: 76 61 6c 4f 62 6a 45 78 28 70 2d 3e 69 6e 74 65  valObjEx(p->inte
cbf0: 72 70 2c 20 70 53 63 72 69 70 74 2c 20 54 43 4c  rp, pScript, TCL
cc00: 5f 45 56 41 4c 5f 44 49 52 45 43 54 7c 54 43 4c  _EVAL_DIRECT|TCL
cc10: 5f 45 56 41 4c 5f 47 4c 4f 42 41 4c 29 0a 20 20  _EVAL_GLOBAL).  
cc20: 20 7c 7c 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f   || TCL_OK!=Tcl_
cc30: 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 70 2d  GetIntFromObj(p-
cc40: 3e 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  >interp, Tcl_Get
cc50: 4f 62 6a 52 65 73 75 6c 74 28 70 2d 3e 69 6e 74  ObjResult(p->int
cc60: 65 72 70 29 2c 20 26 69 52 65 73 29 0a 20 20 29  erp), &iRes).  )
cc70: 7b 0a 20 20 20 20 54 63 6c 5f 42 61 63 6b 67 72  {.    Tcl_Backgr
cc80: 6f 75 6e 64 45 72 72 6f 72 28 70 2d 3e 69 6e 74  oundError(p->int
cc90: 65 72 70 29 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f  erp);.  }.  Tcl_
cca0: 44 65 63 72 52 65 66 43 6f 75 6e 74 28 70 53 63  DecrRefCount(pSc
ccb0: 72 69 70 74 29 3b 0a 0a 20 20 72 65 74 75 72 6e  ript);..  return
ccc0: 20 69 52 65 73 3b 0a 7d 0a 73 74 61 74 69 63 20   iRes;.}.static 
ccd0: 69 6e 74 20 74 65 73 74 5f 63 72 65 61 74 65 5f  int test_create_
cce0: 63 6f 6c 6c 61 74 69 6f 6e 5f 76 32 28 0a 20 20  collation_v2(.  
ccf0: 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e  ClientData clien
cd00: 74 44 61 74 61 2c 20 2f 2a 20 4e 6f 74 20 75 73  tData, /* Not us
cd10: 65 64 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65  ed */.  Tcl_Inte
cd20: 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
cd30: 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
cd40: 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
cd50: 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
cd60: 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20  */.  int objc,  
cd70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
cd80: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
cd90: 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20  ts */.  Tcl_Obj 
cda0: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f  *CONST objv[]  /
cdb0: 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65  * Command argume
cdc0: 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 54 65 73 74  nts */.){.  Test
cdd0: 43 6f 6c 6c 61 74 69 6f 6e 58 20 2a 70 3b 0a 20  CollationX *p;. 
cde0: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
cdf0: 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f  int rc;..  if( o
ce00: 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63  bjc!=5 ){.    Tc
ce10: 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69  l_WrongNumArgs(i
ce20: 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20  nterp, 1, objv, 
ce30: 22 44 42 2d 48 41 4e 44 4c 45 20 4e 41 4d 45 20  "DB-HANDLE NAME 
ce40: 43 4d 50 2d 50 52 4f 43 20 44 45 4c 2d 50 52 4f  CMP-PROC DEL-PRO
ce50: 43 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  C");.    return 
ce60: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
ce70: 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
ce80: 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
ce90: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
cea0: 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
ceb0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 70 20  TCL_ERROR;..  p 
cec0: 3d 20 28 54 65 73 74 43 6f 6c 6c 61 74 69 6f 6e  = (TestCollation
ced0: 58 20 2a 29 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  X *)sqlite3_mall
cee0: 6f 63 28 73 69 7a 65 6f 66 28 54 65 73 74 43 6f  oc(sizeof(TestCo
cef0: 6c 6c 61 74 69 6f 6e 58 29 29 3b 0a 20 20 70 2d  llationX));.  p-
cf00: 3e 70 43 6d 70 20 3d 20 6f 62 6a 76 5b 33 5d 3b  >pCmp = objv[3];
cf10: 0a 20 20 70 2d 3e 70 44 65 6c 20 3d 20 6f 62 6a  .  p->pDel = obj
cf20: 76 5b 34 5d 3b 0a 20 20 70 2d 3e 69 6e 74 65 72  v[4];.  p->inter
cf30: 70 20 3d 20 69 6e 74 65 72 70 3b 0a 20 20 54 63  p = interp;.  Tc
cf40: 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74 28 70  l_IncrRefCount(p
cf50: 2d 3e 70 43 6d 70 29 3b 0a 20 20 54 63 6c 5f 49  ->pCmp);.  Tcl_I
cf60: 6e 63 72 52 65 66 43 6f 75 6e 74 28 70 2d 3e 70  ncrRefCount(p->p
cf70: 44 65 6c 29 3b 0a 0a 20 20 72 63 20 3d 20 73 71  Del);..  rc = sq
cf80: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c  lite3_create_col
cf90: 6c 61 74 69 6f 6e 5f 76 32 28 64 62 2c 20 54 63  lation_v2(db, Tc
cfa0: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
cfb0: 5b 32 5d 29 2c 20 31 36 2c 20 0a 20 20 20 20 20  [2]), 16, .     
cfc0: 20 28 76 6f 69 64 20 2a 29 70 2c 20 74 65 73 74   (void *)p, test
cfd0: 43 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 43  CreateCollationC
cfe0: 6d 70 2c 20 74 65 73 74 43 72 65 61 74 65 43 6f  mp, testCreateCo
cff0: 6c 6c 61 74 69 6f 6e 44 65 6c 0a 20 20 29 3b 0a  llationDel.  );.
d000: 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
d010: 5f 4d 49 53 55 53 45 20 29 7b 0a 20 20 20 20 54  _MISUSE ){.    T
d020: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
d030: 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 33  interp, "sqlite3
d040: 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 65 5f  _create_collate_
d050: 76 32 28 29 20 66 61 69 6c 65 64 20 74 6f 20 64  v2() failed to d
d060: 65 74 65 63 74 20 22 0a 20 20 20 20 20 20 22 61  etect ".      "a
d070: 6e 20 69 6e 76 61 6c 69 64 20 65 6e 63 6f 64 69  n invalid encodi
d080: 6e 67 22 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a  ng", (char*)0);.
d090: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
d0a0: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  RROR;.  }.  rc =
d0b0: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
d0c0: 63 6f 6c 6c 61 74 69 6f 6e 5f 76 32 28 64 62 2c  collation_v2(db,
d0d0: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
d0e0: 62 6a 76 5b 32 5d 29 2c 20 53 51 4c 49 54 45 5f  bjv[2]), SQLITE_
d0f0: 55 54 46 38 2c 20 0a 20 20 20 20 20 20 28 76 6f  UTF8, .      (vo
d100: 69 64 20 2a 29 70 2c 20 74 65 73 74 43 72 65 61  id *)p, testCrea
d110: 74 65 43 6f 6c 6c 61 74 69 6f 6e 43 6d 70 2c 20  teCollationCmp, 
d120: 74 65 73 74 43 72 65 61 74 65 43 6f 6c 6c 61 74  testCreateCollat
d130: 69 6f 6e 44 65 6c 0a 20 20 29 3b 0a 20 20 72 65  ionDel.  );.  re
d140: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
d150: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  /*.** Usage: sql
d160: 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73  ite3_load_extens
d170: 69 6f 6e 20 44 42 2d 48 41 4e 44 4c 45 20 46 49  ion DB-HANDLE FI
d180: 4c 45 20 3f 50 52 4f 43 3f 0a 2a 2f 0a 73 74 61  LE ?PROC?.*/.sta
d190: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 6c 6f 61  tic int test_loa
d1a0: 64 5f 65 78 74 65 6e 73 69 6f 6e 28 0a 20 20 43  d_extension(.  C
d1b0: 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74  lientData client
d1c0: 44 61 74 61 2c 20 2f 2a 20 4e 6f 74 20 75 73 65  Data, /* Not use
d1d0: 64 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72  d */.  Tcl_Inter
d1e0: 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
d1f0: 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
d200: 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
d210: 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
d220: 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20  /.  int objc,   
d230: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
d240: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
d250: 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  s */.  Tcl_Obj *
d260: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a  CONST objv[]  /*
d270: 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e   Command argumen
d280: 74 73 20 2a 2f 0a 29 7b 0a 20 20 54 63 6c 5f 43  ts */.){.  Tcl_C
d290: 6d 64 49 6e 66 6f 20 63 6d 64 49 6e 66 6f 3b 0a  mdInfo cmdInfo;.
d2a0: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
d2b0: 20 69 6e 74 20 72 63 3b 0a 20 20 63 68 61 72 20   int rc;.  char 
d2c0: 2a 7a 44 62 3b 0a 20 20 63 68 61 72 20 2a 7a 46  *zDb;.  char *zF
d2d0: 69 6c 65 3b 0a 20 20 63 68 61 72 20 2a 7a 50 72  ile;.  char *zPr
d2e0: 6f 63 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 2a  oc = 0;.  char *
d2f0: 7a 45 72 72 20 3d 20 30 3b 0a 0a 20 20 69 66 28  zErr = 0;..  if(
d300: 20 6f 62 6a 63 21 3d 34 20 26 26 20 6f 62 6a 63   objc!=4 && objc
d310: 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57  !=3 ){.    Tcl_W
d320: 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65  rongNumArgs(inte
d330: 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 44 42  rp, 1, objv, "DB
d340: 2d 48 41 4e 44 4c 45 20 46 49 4c 45 20 3f 50 52  -HANDLE FILE ?PR
d350: 4f 43 3f 22 29 3b 0a 20 20 20 20 72 65 74 75 72  OC?");.    retur
d360: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
d370: 0a 20 20 7a 44 62 20 3d 20 54 63 6c 5f 47 65 74  .  zDb = Tcl_Get
d380: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 3b  String(objv[1]);
d390: 0a 20 20 7a 46 69 6c 65 20 3d 20 54 63 6c 5f 47  .  zFile = Tcl_G
d3a0: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d  etString(objv[2]
d3b0: 29 3b 0a 20 20 69 66 28 20 6f 62 6a 63 3d 3d 34  );.  if( objc==4
d3c0: 20 29 7b 0a 20 20 20 20 7a 50 72 6f 63 20 3d 20   ){.    zProc = 
d3d0: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
d3e0: 6a 76 5b 33 5d 29 3b 0a 20 20 7d 0a 0a 20 20 2f  jv[3]);.  }..  /
d3f0: 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 43 20  * Extract the C 
d400: 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20  database handle 
d410: 66 72 6f 6d 20 74 68 65 20 54 63 6c 20 63 6f 6d  from the Tcl com
d420: 6d 61 6e 64 20 6e 61 6d 65 20 2a 2f 0a 20 20 69  mand name */.  i
d430: 66 28 20 21 54 63 6c 5f 47 65 74 43 6f 6d 6d 61  f( !Tcl_GetComma
d440: 6e 64 49 6e 66 6f 28 69 6e 74 65 72 70 2c 20 7a  ndInfo(interp, z
d450: 44 62 2c 20 26 63 6d 64 49 6e 66 6f 29 20 29 7b  Db, &cmdInfo) ){
d460: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
d470: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 63  esult(interp, "c
d480: 6f 6d 6d 61 6e 64 20 6e 6f 74 20 66 6f 75 6e 64  ommand not found
d490: 3a 20 22 2c 20 7a 44 62 2c 20 28 63 68 61 72 2a  : ", zDb, (char*
d4a0: 29 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  )0);.    return 
d4b0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
d4c0: 20 64 62 20 3d 20 28 28 73 74 72 75 63 74 20 53   db = ((struct S
d4d0: 71 6c 69 74 65 44 62 2a 29 63 6d 64 49 6e 66 6f  qliteDb*)cmdInfo
d4e0: 2e 6f 62 6a 43 6c 69 65 6e 74 44 61 74 61 29 2d  .objClientData)-
d4f0: 3e 64 62 3b 0a 20 20 61 73 73 65 72 74 28 64 62  >db;.  assert(db
d500: 29 3b 0a 0a 20 20 2f 2a 20 43 61 6c 6c 20 74 68  );..  /* Call th
d510: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 43 20 66  e underlying C f
d520: 75 6e 63 74 69 6f 6e 2e 20 49 66 20 61 6e 20 65  unction. If an e
d530: 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 73 65 74  rror occurs, set
d540: 20 72 63 20 74 6f 20 0a 20 20 2a 2a 20 54 43 4c   rc to .  ** TCL
d550: 5f 45 52 52 4f 52 20 61 6e 64 20 6c 6f 61 64 20  _ERROR and load 
d560: 61 6e 79 20 65 72 72 6f 72 20 73 74 72 69 6e 67  any error string
d570: 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72 70   into the interp
d580: 72 65 74 65 72 2e 20 49 66 20 6e 6f 20 0a 20 20  reter. If no .  
d590: 2a 2a 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c  ** error occurs,
d5a0: 20 73 65 74 20 72 63 20 74 6f 20 54 43 4c 5f 4f   set rc to TCL_O
d5b0: 4b 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20 53  K..  */.#ifdef S
d5c0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f  QLITE_OMIT_LOAD_
d5d0: 45 58 54 45 4e 53 49 4f 4e 0a 20 20 72 63 20 3d  EXTENSION.  rc =
d5e0: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
d5f0: 20 7a 45 72 72 20 3d 20 73 71 6c 69 74 65 33 5f   zErr = sqlite3_
d600: 6d 70 72 69 6e 74 66 28 22 74 68 69 73 20 62 75  mprintf("this bu
d610: 69 6c 64 20 6f 6d 69 74 73 20 73 71 6c 69 74 65  ild omits sqlite
d620: 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  3_load_extension
d630: 28 29 22 29 3b 0a 23 65 6c 73 65 0a 20 20 72 63  ()");.#else.  rc
d640: 20 3d 20 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f   = sqlite3_load_
d650: 65 78 74 65 6e 73 69 6f 6e 28 64 62 2c 20 7a 46  extension(db, zF
d660: 69 6c 65 2c 20 7a 50 72 6f 63 2c 20 26 7a 45 72  ile, zProc, &zEr
d670: 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28  r);.#endif.  if(
d680: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
d690: 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73  {.    Tcl_SetRes
d6a0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 45 72 72  ult(interp, zErr
d6b0: 20 3f 20 7a 45 72 72 20 3a 20 22 22 2c 20 54 43   ? zErr : "", TC
d6c0: 4c 5f 56 4f 4c 41 54 49 4c 45 29 3b 0a 20 20 20  L_VOLATILE);.   
d6d0: 20 72 63 20 3d 20 54 43 4c 5f 45 52 52 4f 52 3b   rc = TCL_ERROR;
d6e0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63  .  }else{.    rc
d6f0: 20 3d 20 54 43 4c 5f 4f 4b 3b 0a 20 20 7d 0a 20   = TCL_OK;.  }. 
d700: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45   sqlite3_free(zE
d710: 72 72 29 3b 0a 0a 20 20 72 65 74 75 72 6e 20 72  rr);..  return r
d720: 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  c;.}../*.** Usag
d730: 65 3a 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c  e: sqlite3_enabl
d740: 65 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e_load_extension
d750: 20 44 42 2d 48 41 4e 44 4c 45 20 4f 4e 4f 46 46   DB-HANDLE ONOFF
d760: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
d770: 65 73 74 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64 28  est_enable_load(
d780: 0a 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c  .  ClientData cl
d790: 69 65 6e 74 44 61 74 61 2c 20 2f 2a 20 4e 6f 74  ientData, /* Not
d7a0: 20 75 73 65 64 20 2a 2f 0a 20 20 54 63 6c 5f 49   used */.  Tcl_I
d7b0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20  nterp *interp,  
d7c0: 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74    /* The TCL int
d7d0: 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e  erpreter that in
d7e0: 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61  voked this comma
d7f0: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63  nd */.  int objc
d800: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
d810: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
d820: 6d 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f  ments */.  Tcl_O
d830: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
d840: 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67    /* Command arg
d850: 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 54  uments */.){.  T
d860: 63 6c 5f 43 6d 64 49 6e 66 6f 20 63 6d 64 49 6e  cl_CmdInfo cmdIn
d870: 66 6f 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  fo;.  sqlite3 *d
d880: 62 3b 0a 20 20 63 68 61 72 20 2a 7a 44 62 3b 0a  b;.  char *zDb;.
d890: 20 20 69 6e 74 20 6f 6e 6f 66 66 3b 0a 0a 20 20    int onoff;..  
d8a0: 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20  if( objc!=3 ){. 
d8b0: 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41     Tcl_WrongNumA
d8c0: 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f  rgs(interp, 1, o
d8d0: 62 6a 76 2c 20 22 44 42 2d 48 41 4e 44 4c 45 20  bjv, "DB-HANDLE 
d8e0: 4f 4e 4f 46 46 22 29 3b 0a 20 20 20 20 72 65 74  ONOFF");.    ret
d8f0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
d900: 20 7d 0a 20 20 7a 44 62 20 3d 20 54 63 6c 5f 47   }.  zDb = Tcl_G
d910: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
d920: 29 3b 0a 0a 20 20 2f 2a 20 45 78 74 72 61 63 74  );..  /* Extract
d930: 20 74 68 65 20 43 20 64 61 74 61 62 61 73 65 20   the C database 
d940: 68 61 6e 64 6c 65 20 66 72 6f 6d 20 74 68 65 20  handle from the 
d950: 54 63 6c 20 63 6f 6d 6d 61 6e 64 20 6e 61 6d 65  Tcl command name
d960: 20 2a 2f 0a 20 20 69 66 28 20 21 54 63 6c 5f 47   */.  if( !Tcl_G
d970: 65 74 43 6f 6d 6d 61 6e 64 49 6e 66 6f 28 69 6e  etCommandInfo(in
d980: 74 65 72 70 2c 20 7a 44 62 2c 20 26 63 6d 64 49  terp, zDb, &cmdI
d990: 6e 66 6f 29 20 29 7b 0a 20 20 20 20 54 63 6c 5f  nfo) ){.    Tcl_
d9a0: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
d9b0: 65 72 70 2c 20 22 63 6f 6d 6d 61 6e 64 20 6e 6f  erp, "command no
d9c0: 74 20 66 6f 75 6e 64 3a 20 22 2c 20 7a 44 62 2c  t found: ", zDb,
d9d0: 20 28 63 68 61 72 2a 29 30 29 3b 0a 20 20 20 20   (char*)0);.    
d9e0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
d9f0: 3b 0a 20 20 7d 0a 20 20 64 62 20 3d 20 28 28 73  ;.  }.  db = ((s
da00: 74 72 75 63 74 20 53 71 6c 69 74 65 44 62 2a 29  truct SqliteDb*)
da10: 63 6d 64 49 6e 66 6f 2e 6f 62 6a 43 6c 69 65 6e  cmdInfo.objClien
da20: 74 44 61 74 61 29 2d 3e 64 62 3b 0a 20 20 61 73  tData)->db;.  as
da30: 73 65 72 74 28 64 62 29 3b 0a 0a 20 20 2f 2a 20  sert(db);..  /* 
da40: 47 65 74 20 74 68 65 20 6f 6e 6f 66 66 20 70 61  Get the onoff pa
da50: 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 69 66 28  rameter */.  if(
da60: 20 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46   Tcl_GetBooleanF
da70: 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
da80: 62 6a 76 5b 32 5d 2c 20 26 6f 6e 6f 66 66 29 20  bjv[2], &onoff) 
da90: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  ){.    return TC
daa0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 23 69  L_ERROR;.  }..#i
dab0: 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
dac0: 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a  _LOAD_EXTENSION.
dad0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
dae0: 6c 74 28 69 6e 74 65 72 70 2c 20 22 74 68 69 73  lt(interp, "this
daf0: 20 62 75 69 6c 64 20 6f 6d 69 74 73 20 73 71 6c   build omits sql
db00: 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73  ite3_load_extens
db10: 69 6f 6e 28 29 22 29 3b 0a 20 20 72 65 74 75 72  ion()");.  retur
db20: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 23 65 6c  n TCL_ERROR;.#el
db30: 73 65 0a 20 20 73 71 6c 69 74 65 33 5f 65 6e 61  se.  sqlite3_ena
db40: 62 6c 65 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ble_load_extensi
db50: 6f 6e 28 64 62 2c 20 6f 6e 6f 66 66 29 3b 0a 20  on(db, onoff);. 
db60: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
db70: 23 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  #endif.}../*.** 
db80: 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 5f 61  Usage:  sqlite_a
db90: 62 6f 72 74 0a 2a 2a 0a 2a 2a 20 53 68 75 74 64  bort.**.** Shutd
dba0: 6f 77 6e 20 74 68 65 20 70 72 6f 63 65 73 73 20  own the process 
dbb0: 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 54 68  immediately.  Th
dbc0: 69 73 20 69 73 20 6e 6f 74 20 61 20 63 6c 65 61  is is not a clea
dbd0: 6e 20 73 68 75 74 64 6f 77 6e 2e 0a 2a 2a 20 54  n shutdown..** T
dbe0: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75  his command is u
dbf0: 73 65 64 20 74 6f 20 74 65 73 74 20 74 68 65 20  sed to test the 
dc00: 72 65 63 6f 76 65 72 61 62 69 6c 69 74 79 20 6f  recoverability o
dc10: 66 20 61 20 64 61 74 61 62 61 73 65 20 69 6e 0a  f a database in.
dc20: 2a 2a 20 74 68 65 20 65 76 65 6e 74 20 6f 66 20  ** the event of 
dc30: 61 20 70 72 6f 67 72 61 6d 20 63 72 61 73 68 2e  a program crash.
dc40: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73  .*/.static int s
dc50: 71 6c 69 74 65 5f 61 62 6f 72 74 28 0a 20 20 76  qlite_abort(.  v
dc60: 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20  oid *NotUsed,.  
dc70: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
dc80: 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43  rp,    /* The TC
dc90: 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68  L interpreter th
dca0: 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20  at invoked this 
dcb0: 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74  command */.  int
dcc0: 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20   argc,          
dcd0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
dce0: 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
dcf0: 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20  char **argv     
dd00: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f         /* Text o
dd10: 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20  f each argument 
dd20: 2a 2f 0a 29 7b 0a 23 69 66 20 64 65 66 69 6e 65  */.){.#if define
dd30: 64 28 5f 4d 53 43 5f 56 45 52 29 0a 20 20 2f 2a  d(_MSC_VER).  /*
dd40: 20 57 65 20 64 6f 20 74 68 69 73 2c 20 6f 74 68   We do this, oth
dd50: 65 72 77 69 73 65 20 74 68 65 20 74 65 73 74 20  erwise the test 
dd60: 77 69 6c 6c 20 68 61 6c 74 20 77 69 74 68 20 61  will halt with a
dd70: 20 70 6f 70 75 70 20 6d 65 73 73 61 67 65 0a 20   popup message. 
dd80: 20 20 2a 20 74 68 61 74 20 77 65 20 68 61 76 65    * that we have
dd90: 20 74 6f 20 63 6c 69 63 6b 20 61 77 61 79 20 62   to click away b
dda0: 65 66 6f 72 65 20 74 68 65 20 74 65 73 74 20 77  efore the test w
ddb0: 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 2e 0a 20 20  ill continue..  
ddc0: 20 2a 2f 0a 20 20 5f 73 65 74 5f 61 62 6f 72 74   */.  _set_abort
ddd0: 5f 62 65 68 61 76 69 6f 72 28 20 30 2c 20 5f 43  _behavior( 0, _C
dde0: 41 4c 4c 5f 52 45 50 4f 52 54 46 41 55 4c 54 20  ALL_REPORTFAULT 
ddf0: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 65 78 69 74  );.#endif.  exit
de00: 28 32 35 35 29 3b 0a 20 20 61 73 73 65 72 74 28  (255);.  assert(
de10: 20 69 6e 74 65 72 70 3d 3d 30 20 29 3b 20 20 20   interp==0 );   
de20: 2f 2a 20 54 68 69 73 20 77 69 6c 6c 20 61 6c 77  /* This will alw
de30: 61 79 73 20 66 61 69 6c 20 2a 2f 0a 20 20 72 65  ays fail */.  re
de40: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
de50: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
de60: 69 6e 67 20 72 6f 75 74 69 6e 65 20 69 73 20 61  ing routine is a
de70: 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 53 51   user-defined SQ
de80: 4c 20 66 75 6e 63 74 69 6f 6e 20 77 68 6f 73 65  L function whose
de90: 20 70 75 72 70 6f 73 65 0a 2a 2a 20 69 73 20 74   purpose.** is t
dea0: 6f 20 74 65 73 74 20 74 68 65 20 73 71 6c 69 74  o test the sqlit
deb0: 65 5f 73 65 74 5f 72 65 73 75 6c 74 28 29 20 41  e_set_result() A
dec0: 50 49 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  PI..*/.static vo
ded0: 69 64 20 74 65 73 74 46 75 6e 63 28 73 71 6c 69  id testFunc(sqli
dee0: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e  te3_context *con
def0: 74 65 78 74 2c 20 69 6e 74 20 61 72 67 63 2c 20  text, int argc, 
df00: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
df10: 61 72 67 76 29 7b 0a 20 20 77 68 69 6c 65 28 20  argv){.  while( 
df20: 61 72 67 63 3e 3d 32 20 29 7b 0a 20 20 20 20 63  argc>=2 ){.    c
df30: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 72 67 30  onst char *zArg0
df40: 20 3d 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65   = (char*)sqlite
df50: 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67  3_value_text(arg
df60: 76 5b 30 5d 29 3b 0a 20 20 20 20 69 66 28 20 7a  v[0]);.    if( z
df70: 41 72 67 30 20 29 7b 0a 20 20 20 20 20 20 69 66  Arg0 ){.      if
df80: 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74 72 49  ( 0==sqlite3StrI
df90: 43 6d 70 28 7a 41 72 67 30 2c 20 22 69 6e 74 22  Cmp(zArg0, "int"
dfa0: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  ) ){.        sql
dfb0: 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28  ite3_result_int(
dfc0: 63 6f 6e 74 65 78 74 2c 20 73 71 6c 69 74 65 33  context, sqlite3
dfd0: 5f 76 61 6c 75 65 5f 69 6e 74 28 61 72 67 76 5b  _value_int(argv[
dfe0: 31 5d 29 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  1]));.      }els
dff0: 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72  e if( sqlite3Str
e000: 49 43 6d 70 28 7a 41 72 67 30 2c 22 69 6e 74 36  ICmp(zArg0,"int6
e010: 34 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  4")==0 ){.      
e020: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
e030: 5f 69 6e 74 36 34 28 63 6f 6e 74 65 78 74 2c 20  _int64(context, 
e040: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e  sqlite3_value_in
e050: 74 36 34 28 61 72 67 76 5b 31 5d 29 29 3b 0a 20  t64(argv[1]));. 
e060: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73       }else if( s
e070: 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 41  qlite3StrICmp(zA
e080: 72 67 30 2c 22 73 74 72 69 6e 67 22 29 3d 3d 30  rg0,"string")==0
e090: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
e0a0: 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28  te3_result_text(
e0b0: 63 6f 6e 74 65 78 74 2c 20 28 63 68 61 72 2a 29  context, (char*)
e0c0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
e0d0: 78 74 28 61 72 67 76 5b 31 5d 29 2c 20 2d 31 2c  xt(argv[1]), -1,
e0e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
e0f0: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a  ITE_TRANSIENT);.
e100: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
e110: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
e120: 41 72 67 30 2c 22 64 6f 75 62 6c 65 22 29 3d 3d  Arg0,"double")==
e130: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  0 ){.        sql
e140: 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62  ite3_result_doub
e150: 6c 65 28 63 6f 6e 74 65 78 74 2c 20 73 71 6c 69  le(context, sqli
e160: 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65  te3_value_double
e170: 28 61 72 67 76 5b 31 5d 29 29 3b 0a 20 20 20 20  (argv[1]));.    
e180: 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69    }else if( sqli
e190: 74 65 33 53 74 72 49 43 6d 70 28 7a 41 72 67 30  te3StrICmp(zArg0
e1a0: 2c 22 6e 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20  ,"null")==0 ){. 
e1b0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72         sqlite3_r
e1c0: 65 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74 65  esult_null(conte
e1d0: 78 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  xt);.      }else
e1e0: 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49   if( sqlite3StrI
e1f0: 43 6d 70 28 7a 41 72 67 30 2c 22 76 61 6c 75 65  Cmp(zArg0,"value
e200: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ")==0 ){.       
e210: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
e220: 76 61 6c 75 65 28 63 6f 6e 74 65 78 74 2c 20 61  value(context, a
e230: 72 67 76 5b 73 71 6c 69 74 65 33 5f 76 61 6c 75  rgv[sqlite3_valu
e240: 65 5f 69 6e 74 28 61 72 67 76 5b 31 5d 29 5d 29  e_int(argv[1])])
e250: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
e260: 20 20 20 20 20 20 20 67 6f 74 6f 20 65 72 72 6f         goto erro
e270: 72 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20  r_out;.      }. 
e280: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
e290: 67 6f 74 6f 20 65 72 72 6f 72 5f 6f 75 74 3b 0a  goto error_out;.
e2a0: 20 20 20 20 7d 0a 20 20 20 20 61 72 67 63 20 2d      }.    argc -
e2b0: 3d 20 32 3b 0a 20 20 20 20 61 72 67 76 20 2b 3d  = 2;.    argv +=
e2c0: 20 32 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e   2;.  }.  return
e2d0: 3b 0a 0a 65 72 72 6f 72 5f 6f 75 74 3a 0a 20 20  ;..error_out:.  
e2e0: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65  sqlite3_result_e
e2f0: 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 22 66 69  rror(context,"fi
e300: 72 73 74 20 61 72 67 75 6d 65 6e 74 20 73 68 6f  rst argument sho
e310: 75 6c 64 20 62 65 20 6f 6e 65 20 6f 66 3a 20 22  uld be one of: "
e320: 0a 20 20 20 20 20 20 22 69 6e 74 20 69 6e 74 36  .      "int int6
e330: 34 20 73 74 72 69 6e 67 20 64 6f 75 62 6c 65 20  4 string double 
e340: 6e 75 6c 6c 20 76 61 6c 75 65 22 2c 20 2d 31 29  null value", -1)
e350: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
e360: 3a 20 20 20 73 71 6c 69 74 65 5f 72 65 67 69 73  :   sqlite_regis
e370: 74 65 72 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f  ter_test_functio
e380: 6e 20 20 44 42 20 20 4e 41 4d 45 0a 2a 2a 0a 2a  n  DB  NAME.**.*
e390: 2a 20 52 65 67 69 73 74 65 72 20 74 68 65 20 74  * Register the t
e3a0: 65 73 74 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  est SQL function
e3b0: 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
e3c0: 20 44 42 20 75 6e 64 65 72 20 74 68 65 20 6e 61   DB under the na
e3d0: 6d 65 20 4e 41 4d 45 2e 0a 2a 2f 0a 73 74 61 74  me NAME..*/.stat
e3e0: 69 63 20 69 6e 74 20 74 65 73 74 5f 72 65 67 69  ic int test_regi
e3f0: 73 74 65 72 5f 66 75 6e 63 28 0a 20 20 76 6f 69  ster_func(.  voi
e400: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63  d *NotUsed,.  Tc
e410: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
e420: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
e430: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
e440: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
e450: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61  mmand */.  int a
e460: 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  rgc,            
e470: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
e480: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68  rguments */.  ch
e490: 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20  ar **argv       
e4a0: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
e4b0: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f  each argument */
e4c0: 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  .){.  sqlite3 *d
e4d0: 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69  b;.  int rc;.  i
e4e0: 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20  f( argc!=3 ){.  
e4f0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
e500: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
e510: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
e520: 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
e530: 2c 20 0a 20 20 20 20 20 20 20 22 20 44 42 20 46  , .       " DB F
e540: 55 4e 43 54 49 4f 4e 2d 4e 41 4d 45 22 2c 20 30  UNCTION-NAME", 0
e550: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
e560: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
e570: 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
e580: 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c  interp, argv[1],
e590: 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
e5a0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d  CL_ERROR;.  rc =
e5b0: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
e5c0: 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 61 72 67  function(db, arg
e5d0: 76 5b 32 5d 2c 20 2d 31 2c 20 53 51 4c 49 54 45  v[2], -1, SQLITE
e5e0: 5f 55 54 46 38 2c 20 30 2c 20 0a 20 20 20 20 20  _UTF8, 0, .     
e5f0: 20 74 65 73 74 46 75 6e 63 2c 20 30 2c 20 30 29   testFunc, 0, 0)
e600: 3b 0a 20 20 69 66 28 20 72 63 21 3d 30 20 29 7b  ;.  if( rc!=0 ){
e610: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
e620: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 73 71  esult(interp, sq
e630: 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29 2c  lite3ErrStr(rc),
e640: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
e650: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
e660: 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74   if( sqlite3Test
e670: 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20  ErrCode(interp, 
e680: 64 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e  db, rc) ) return
e690: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65   TCL_ERROR;.  re
e6a0: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
e6b0: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
e6c0: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 20  lite3_finalize  
e6d0: 53 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 46 69 6e 61  STMT .**.** Fina
e6e0: 6c 69 7a 65 20 61 20 73 74 61 74 65 6d 65 6e 74  lize a statement
e6f0: 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 73 74 61 74   handle..*/.stat
e700: 69 63 20 69 6e 74 20 74 65 73 74 5f 66 69 6e 61  ic int test_fina
e710: 6c 69 7a 65 28 0a 20 20 76 6f 69 64 20 2a 20 63  lize(.  void * c
e720: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
e730: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
e740: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
e750: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
e760: 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
e770: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
e780: 20 69 6e 74 20 72 63 3b 0a 20 20 73 71 6c 69 74   int rc;.  sqlit
e790: 65 33 20 2a 64 62 20 3d 20 30 3b 0a 0a 20 20 69  e3 *db = 0;..  i
e7a0: 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20  f( objc!=2 ){.  
e7b0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
e7c0: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
e7d0: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
e7e0: 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20   be \"",.       
e7f0: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72   Tcl_GetStringFr
e800: 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30  omObj(objv[0], 0
e810: 29 2c 20 22 20 3c 53 54 4d 54 3e 22 2c 20 30 29  ), " <STMT>", 0)
e820: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
e830: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69  _ERROR;.  }..  i
e840: 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
e850: 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
e860: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
e870: 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
e880: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20  rn TCL_ERROR;.. 
e890: 20 69 66 28 20 70 53 74 6d 74 20 29 7b 0a 20 20   if( pStmt ){.  
e8a0: 20 20 64 62 20 3d 20 53 74 6d 74 54 6f 44 62 28    db = StmtToDb(
e8b0: 70 53 74 6d 74 29 3b 0a 20 20 7d 0a 20 20 72 63  pStmt);.  }.  rc
e8c0: 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c   = sqlite3_final
e8d0: 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 54 63  ize(pStmt);.  Tc
e8e0: 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65  l_SetResult(inte
e8f0: 72 70 2c 20 28 63 68 61 72 20 2a 29 74 31 45 72  rp, (char *)t1Er
e900: 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c  rorName(rc), TCL
e910: 5f 53 54 41 54 49 43 29 3b 0a 20 20 69 66 28 20  _STATIC);.  if( 
e920: 64 62 20 26 26 20 73 71 6c 69 74 65 33 54 65 73  db && sqlite3Tes
e930: 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c  tErrCode(interp,
e940: 20 64 62 2c 20 72 63 29 20 29 20 72 65 74 75 72   db, rc) ) retur
e950: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72  n TCL_ERROR;.  r
e960: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
e970: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
e980: 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74 61 74  qlite3_stmt_stat
e990: 75 73 20 20 53 54 4d 54 20 20 43 4f 44 45 20 20  us  STMT  CODE  
e9a0: 52 45 53 45 54 46 4c 41 47 0a 2a 2a 0a 2a 2a 20  RESETFLAG.**.** 
e9b0: 47 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  Get the value of
e9c0: 20 61 20 73 74 61 74 75 73 20 63 6f 75 6e 74 65   a status counte
e9d0: 72 20 66 72 6f 6d 20 61 20 73 74 61 74 65 6d 65  r from a stateme
e9e0: 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  nt..*/.static in
e9f0: 74 20 74 65 73 74 5f 73 74 6d 74 5f 73 74 61 74  t test_stmt_stat
ea00: 75 73 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  us(.  void * cli
ea10: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
ea20: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
ea30: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
ea40: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
ea50: 5b 5d 0a 29 7b 0a 20 20 69 6e 74 20 69 56 61 6c  [].){.  int iVal
ea60: 75 65 3b 0a 20 20 69 6e 74 20 69 2c 20 6f 70 2c  ue;.  int i, op,
ea70: 20 72 65 73 65 74 46 6c 61 67 3b 0a 20 20 63 6f   resetFlag;.  co
ea80: 6e 73 74 20 63 68 61 72 20 2a 7a 4f 70 4e 61 6d  nst char *zOpNam
ea90: 65 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  e;.  sqlite3_stm
eaa0: 74 20 2a 70 53 74 6d 74 3b 0a 0a 20 20 73 74 61  t *pStmt;..  sta
eab0: 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74  tic const struct
eac0: 20 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61   {.    const cha
ead0: 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20 69 6e  r *zName;.    in
eae0: 74 20 6f 70 3b 0a 20 20 7d 20 61 4f 70 5b 5d 20  t op;.  } aOp[] 
eaf0: 3d 20 7b 0a 20 20 20 20 7b 20 22 53 51 4c 49 54  = {.    { "SQLIT
eb00: 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 46 55 4c  E_STMTSTATUS_FUL
eb10: 4c 53 43 41 4e 5f 53 54 45 50 22 2c 20 20 20 53  LSCAN_STEP",   S
eb20: 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53  QLITE_STMTSTATUS
eb30: 5f 46 55 4c 4c 53 43 41 4e 5f 53 54 45 50 20 20  _FULLSCAN_STEP  
eb40: 20 7d 2c 0a 20 20 20 20 7b 20 22 53 51 4c 49 54   },.    { "SQLIT
eb50: 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52  E_STMTSTATUS_SOR
eb60: 54 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 53  T",            S
eb70: 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53  QLITE_STMTSTATUS
eb80: 5f 53 4f 52 54 20 20 20 20 20 20 20 20 20 20 20  _SORT           
eb90: 20 7d 2c 0a 20 20 20 20 7b 20 22 53 51 4c 49 54   },.    { "SQLIT
eba0: 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 41 55 54  E_STMTSTATUS_AUT
ebb0: 4f 49 4e 44 45 58 22 2c 20 20 20 20 20 20 20 53  OINDEX",       S
ebc0: 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53  QLITE_STMTSTATUS
ebd0: 5f 41 55 54 4f 49 4e 44 45 58 20 20 20 20 20 20  _AUTOINDEX      
ebe0: 20 7d 2c 0a 20 20 7d 3b 0a 20 20 69 66 28 20 6f   },.  };.  if( o
ebf0: 62 6a 63 21 3d 34 20 29 7b 0a 20 20 20 20 54 63  bjc!=4 ){.    Tc
ec00: 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69  l_WrongNumArgs(i
ec10: 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20  nterp, 1, objv, 
ec20: 22 53 54 4d 54 20 50 41 52 41 4d 45 54 45 52 20  "STMT PARAMETER 
ec30: 52 45 53 45 54 46 4c 41 47 22 29 3b 0a 20 20 20  RESETFLAG");.   
ec40: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
ec50: 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74  R;.  }.  if( get
ec60: 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
ec70: 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
ec80: 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
ec90: 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
eca0: 5f 45 52 52 4f 52 3b 0a 20 20 7a 4f 70 4e 61 6d  _ERROR;.  zOpNam
ecb0: 65 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  e = Tcl_GetStrin
ecc0: 67 28 6f 62 6a 76 5b 32 5d 29 3b 0a 20 20 66 6f  g(objv[2]);.  fo
ecd0: 72 28 69 3d 30 3b 20 69 3c 41 72 72 61 79 53 69  r(i=0; i<ArraySi
ece0: 7a 65 28 61 4f 70 29 3b 20 69 2b 2b 29 7b 0a 20  ze(aOp); i++){. 
ecf0: 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 61 4f     if( strcmp(aO
ed00: 70 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 7a 4f 70 4e  p[i].zName, zOpN
ed10: 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ame)==0 ){.     
ed20: 20 6f 70 20 3d 20 61 4f 70 5b 69 5d 2e 6f 70 3b   op = aOp[i].op;
ed30: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
ed40: 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 69 3e    }.  }.  if( i>
ed50: 3d 41 72 72 61 79 53 69 7a 65 28 61 4f 70 29 20  =ArraySize(aOp) 
ed60: 29 7b 0a 20 20 20 20 69 66 28 20 54 63 6c 5f 47  ){.    if( Tcl_G
ed70: 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
ed80: 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 6f  erp, objv[2], &o
ed90: 70 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  p) ) return TCL_
eda0: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
edb0: 20 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46   Tcl_GetBooleanF
edc0: 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
edd0: 62 6a 76 5b 33 5d 2c 20 26 72 65 73 65 74 46 6c  bjv[3], &resetFl
ede0: 61 67 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  ag) ) return TCL
edf0: 5f 45 52 52 4f 52 3b 0a 20 20 69 56 61 6c 75 65  _ERROR;.  iValue
ee00: 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f   = sqlite3_stmt_
ee10: 73 74 61 74 75 73 28 70 53 74 6d 74 2c 20 6f 70  status(pStmt, op
ee20: 2c 20 72 65 73 65 74 46 6c 61 67 29 3b 0a 20 20  , resetFlag);.  
ee30: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
ee40: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
ee50: 49 6e 74 4f 62 6a 28 69 56 61 6c 75 65 29 29 3b  IntObj(iValue));
ee60: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
ee70: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
ee80: 3a 20 20 73 71 6c 69 74 65 33 5f 6e 65 78 74 5f  :  sqlite3_next_
ee90: 73 74 6d 74 20 20 44 42 20 20 53 54 4d 54 0a 2a  stmt  DB  STMT.*
eea0: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
eeb0: 6e 65 78 74 20 73 74 61 74 6d 65 6e 74 20 69 6e  next statment in
eec0: 20 73 65 71 75 65 6e 63 65 20 61 66 74 65 72 20   sequence after 
eed0: 53 54 4d 54 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  STMT..*/.static 
eee0: 69 6e 74 20 74 65 73 74 5f 6e 65 78 74 5f 73 74  int test_next_st
eef0: 6d 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  mt(.  void * cli
ef00: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
ef10: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
ef20: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
ef30: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
ef40: 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  [].){.  sqlite3_
ef50: 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 73  stmt *pStmt;.  s
ef60: 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 30 3b 0a  qlite3 *db = 0;.
ef70: 20 20 63 68 61 72 20 7a 42 75 66 5b 35 30 5d 3b    char zBuf[50];
ef80: 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20  ..  if( objc!=3 
ef90: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
efa0: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
efb0: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
efc0: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20  hould be \"",.  
efd0: 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
efe0: 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b  ingFromObj(objv[
eff0: 30 5d 2c 20 30 29 2c 20 22 20 44 42 20 53 54 4d  0], 0), " DB STM
f000: 54 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  T", 0);.    retu
f010: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
f020: 7d 0a 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f  }..  if( getDbPo
f030: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
f040: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
f050: 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74  [1]), &db) ) ret
f060: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
f070: 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
f080: 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
f090: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32  GetString(objv[2
f0a0: 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
f0b0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
f0c0: 20 20 70 53 74 6d 74 20 3d 20 73 71 6c 69 74 65    pStmt = sqlite
f0d0: 33 5f 6e 65 78 74 5f 73 74 6d 74 28 64 62 2c 20  3_next_stmt(db, 
f0e0: 70 53 74 6d 74 29 3b 0a 20 20 69 66 28 20 70 53  pStmt);.  if( pS
f0f0: 74 6d 74 20 29 7b 0a 20 20 20 20 69 66 28 20 73  tmt ){.    if( s
f100: 71 6c 69 74 65 33 54 65 73 74 4d 61 6b 65 50 6f  qlite3TestMakePo
f110: 69 6e 74 65 72 53 74 72 28 69 6e 74 65 72 70 2c  interStr(interp,
f120: 20 7a 42 75 66 2c 20 70 53 74 6d 74 29 20 29 20   zBuf, pStmt) ) 
f130: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
f140: 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  ;.    Tcl_Append
f150: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a  Result(interp, z
f160: 42 75 66 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 72  Buf, 0);.  }.  r
f170: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
f180: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
f190: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20 20 53  sqlite3_reset  S
f1a0: 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 52 65 73 65 74  TMT .**.** Reset
f1b0: 20 61 20 73 74 61 74 65 6d 65 6e 74 20 68 61 6e   a statement han
f1c0: 64 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  dle..*/.static i
f1d0: 6e 74 20 74 65 73 74 5f 72 65 73 65 74 28 0a 20  nt test_reset(. 
f1e0: 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
f1f0: 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
f200: 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
f210: 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
f220: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
f230: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
f240: 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 72 63  *pStmt;.  int rc
f250: 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32  ;..  if( objc!=2
f260: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
f270: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
f280: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
f290: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20  should be \"",. 
f2a0: 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
f2b0: 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76  ringFromObj(objv
f2c0: 5b 30 5d 2c 20 30 29 2c 20 22 20 3c 53 54 4d 54  [0], 0), " <STMT
f2d0: 3e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  >", 0);.    retu
f2e0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
f2f0: 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74  }..  if( getStmt
f300: 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
f310: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
f320: 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20  jv[1]), &pStmt) 
f330: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
f340: 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69  OR;..  rc = sqli
f350: 74 65 33 5f 72 65 73 65 74 28 70 53 74 6d 74 29  te3_reset(pStmt)
f360: 3b 0a 20 20 69 66 28 20 70 53 74 6d 74 20 26 26  ;.  if( pStmt &&
f370: 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43   sqlite3TestErrC
f380: 6f 64 65 28 69 6e 74 65 72 70 2c 20 53 74 6d 74  ode(interp, Stmt
f390: 54 6f 44 62 28 70 53 74 6d 74 29 2c 20 72 63 29  ToDb(pStmt), rc)
f3a0: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54   ){.    return T
f3b0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
f3c0: 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
f3d0: 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 74 31  terp, (char *)t1
f3e0: 45 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54  ErrorName(rc), T
f3f0: 43 4c 5f 53 54 41 54 49 43 29 3b 0a 2f 2a 0a 20  CL_STATIC);./*. 
f400: 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 72   if( rc ){.    r
f410: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
f420: 0a 20 20 7d 0a 2a 2f 0a 20 20 72 65 74 75 72 6e  .  }.*/.  return
f430: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
f440: 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
f450: 33 5f 65 78 70 69 72 65 64 20 53 54 4d 54 20 0a  3_expired STMT .
f460: 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 54 52 55  **.** Return TRU
f470: 45 20 69 66 20 61 20 72 65 63 6f 6d 70 69 6c 61  E if a recompila
f480: 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 74 61 74  tion of the stat
f490: 65 6d 65 6e 74 20 69 73 20 72 65 63 6f 6d 6d 65  ement is recomme
f4a0: 6e 64 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  nded..*/.static 
f4b0: 69 6e 74 20 74 65 73 74 5f 65 78 70 69 72 65 64  int test_expired
f4c0: 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
f4d0: 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
f4e0: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
f4f0: 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
f500: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
f510: 0a 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .){.#ifndef SQLI
f520: 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54  TE_OMIT_DEPRECAT
f530: 45 44 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ED.  sqlite3_stm
f540: 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 66 28 20  t *pStmt;.  if( 
f550: 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  objc!=2 ){.    T
f560: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
f570: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
f580: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
f590: 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63   \"",.        Tc
f5a0: 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f  l_GetStringFromO
f5b0: 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20  bj(objv[0], 0), 
f5c0: 22 20 3c 53 54 4d 54 3e 22 2c 20 30 29 3b 0a 20  " <STMT>", 0);. 
f5d0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
f5e0: 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67  ROR;.  }.  if( g
f5f0: 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e  etStmtPointer(in
f600: 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
f610: 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70  ing(objv[1]), &p
f620: 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
f630: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f  CL_ERROR;.  Tcl_
f640: 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
f650: 65 72 70 2c 20 54 63 6c 5f 4e 65 77 42 6f 6f 6c  erp, Tcl_NewBool
f660: 65 61 6e 4f 62 6a 28 73 71 6c 69 74 65 33 5f 65  eanObj(sqlite3_e
f670: 78 70 69 72 65 64 28 70 53 74 6d 74 29 29 29 3b  xpired(pStmt)));
f680: 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e  .#endif.  return
f690: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
f6a0: 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
f6b0: 33 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e 64 69  3_transfer_bindi
f6c0: 6e 67 73 20 46 52 4f 4d 53 54 4d 54 20 54 4f 53  ngs FROMSTMT TOS
f6d0: 54 4d 54 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66  TMT.**.** Transf
f6e0: 65 72 20 61 6c 6c 20 62 69 6e 64 69 6e 67 73 20  er all bindings 
f6f0: 66 72 6f 6d 20 46 52 4f 4d 53 54 4d 54 20 6f 76  from FROMSTMT ov
f700: 65 72 20 74 6f 20 54 4f 53 54 4d 54 0a 2a 2f 0a  er to TOSTMT.*/.
f710: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
f720: 74 72 61 6e 73 66 65 72 5f 62 69 6e 64 28 0a 20  transfer_bind(. 
f730: 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
f740: 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
f750: 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
f760: 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
f770: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
f780: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
f790: 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 0a  OMIT_DEPRECATED.
f7a0: 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
f7b0: 70 53 74 6d 74 31 2c 20 2a 70 53 74 6d 74 32 3b  pStmt1, *pStmt2;
f7c0: 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29  .  if( objc!=3 )
f7d0: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
f7e0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
f7f0: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
f800: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20  ould be \"",.   
f810: 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
f820: 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30  ngFromObj(objv[0
f830: 5d 2c 20 30 29 2c 20 22 20 46 52 4f 4d 2d 53 54  ], 0), " FROM-ST
f840: 4d 54 20 54 4f 2d 53 54 4d 54 22 2c 20 30 29 3b  MT TO-STMT", 0);
f850: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
f860: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
f870: 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28   getStmtPointer(
f880: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
f890: 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
f8a0: 26 70 53 74 6d 74 31 29 29 20 72 65 74 75 72 6e  &pStmt1)) return
f8b0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
f8c0: 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
f8d0: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
f8e0: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 2c  String(objv[2]),
f8f0: 20 26 70 53 74 6d 74 32 29 29 20 72 65 74 75 72   &pStmt2)) retur
f900: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54  n TCL_ERROR;.  T
f910: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
f920: 69 6e 74 65 72 70 2c 20 0a 20 20 20 20 20 54 63  interp, .     Tc
f930: 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69  l_NewIntObj(sqli
f940: 74 65 33 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e  te3_transfer_bin
f950: 64 69 6e 67 73 28 70 53 74 6d 74 31 2c 70 53 74  dings(pStmt1,pSt
f960: 6d 74 32 29 29 29 3b 0a 23 65 6e 64 69 66 0a 20  mt2)));.#endif. 
f970: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
f980: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
f990: 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73   sqlite3_changes
f9a0: 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e   DB.**.** Return
f9b0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
f9c0: 68 61 6e 67 65 73 20 6d 61 64 65 20 74 6f 20 74  hanges made to t
f9d0: 68 65 20 64 61 74 61 62 61 73 65 20 62 79 20 74  he database by t
f9e0: 68 65 20 6c 61 73 74 20 53 51 4c 0a 2a 2a 20 65  he last SQL.** e
f9f0: 78 65 63 75 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61  xecution..*/.sta
fa00: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63 68 61  tic int test_cha
fa10: 6e 67 65 73 28 0a 20 20 76 6f 69 64 20 2a 20 63  nges(.  void * c
fa20: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
fa30: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
fa40: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
fa50: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
fa60: 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
fa70: 33 20 2a 64 62 3b 0a 20 20 69 66 28 20 6f 62 6a  3 *db;.  if( obj
fa80: 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
fa90: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
faa0: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
fab0: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
fac0: 22 2c 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65  ",.       Tcl_Ge
fad0: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29  tString(objv[0])
fae0: 2c 20 22 20 44 42 22 2c 20 30 29 3b 0a 20 20 20  , " DB", 0);.   
faf0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
fb00: 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74  R;.  }.  if( get
fb10: 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  DbPointer(interp
fb20: 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
fb30: 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29  objv[1]), &db) )
fb40: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
fb50: 52 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52  R;.  Tcl_SetObjR
fb60: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
fb70: 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69  l_NewIntObj(sqli
fb80: 74 65 33 5f 63 68 61 6e 67 65 73 28 64 62 29 29  te3_changes(db))
fb90: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
fba0: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  OK;.}../*.** Thi
fbb0: 73 20 69 73 20 74 68 65 20 22 73 74 61 74 69 63  s is the "static
fbc0: 5f 62 69 6e 64 5f 76 61 6c 75 65 22 20 74 68 61  _bind_value" tha
fbd0: 74 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20  t variables are 
fbe0: 62 6f 75 6e 64 20 74 6f 20 77 68 65 6e 0a 2a 2a  bound to when.**
fbf0: 20 74 68 65 20 46 4c 41 47 20 6f 70 74 69 6f 6e   the FLAG option
fc00: 20 6f 66 20 73 71 6c 69 74 65 33 5f 62 69 6e 64   of sqlite3_bind
fc10: 20 69 73 20 22 73 74 61 74 69 63 22 0a 2a 2f 0a   is "static".*/.
fc20: 73 74 61 74 69 63 20 63 68 61 72 20 2a 73 71 6c  static char *sql
fc30: 69 74 65 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f  ite_static_bind_
fc40: 76 61 6c 75 65 20 3d 20 30 3b 0a 73 74 61 74 69  value = 0;.stati
fc50: 63 20 69 6e 74 20 73 71 6c 69 74 65 5f 73 74 61  c int sqlite_sta
fc60: 74 69 63 5f 62 69 6e 64 5f 6e 62 79 74 65 20 3d  tic_bind_nbyte =
fc70: 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65   0;../*.** Usage
fc80: 3a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 20  :  sqlite3_bind 
fc90: 20 56 4d 20 20 49 44 58 20 20 56 41 4c 55 45 20   VM  IDX  VALUE 
fca0: 20 46 4c 41 47 53 0a 2a 2a 0a 2a 2a 20 53 65 74   FLAGS.**.** Set
fcb0: 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  s the value of t
fcc0: 68 65 20 49 44 58 2d 74 68 20 6f 63 63 75 72 61  he IDX-th occura
fcd0: 6e 63 65 20 6f 66 20 22 3f 22 20 69 6e 20 74 68  nce of "?" in th
fce0: 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 0a 2a  e original SQL.*
fcf0: 2a 20 73 74 72 69 6e 67 2e 20 20 56 41 4c 55 45  * string.  VALUE
fd00: 20 69 73 20 74 68 65 20 6e 65 77 20 76 61 6c 75   is the new valu
fd10: 65 2e 20 20 49 66 20 46 4c 41 47 53 3d 3d 22 6e  e.  If FLAGS=="n
fd20: 75 6c 6c 22 20 74 68 65 6e 20 56 41 4c 55 45 20  ull" then VALUE 
fd30: 69 73 0a 2a 2a 20 69 67 6e 6f 72 65 64 20 61 6e  is.** ignored an
fd40: 64 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 73  d the value is s
fd50: 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 49 66 20  et to NULL.  If 
fd60: 46 4c 41 47 53 3d 3d 22 73 74 61 74 69 63 22 20  FLAGS=="static" 
fd70: 74 68 65 6e 0a 2a 2a 20 74 68 65 20 76 61 6c 75  then.** the valu
fd80: 65 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  e is set to the 
fd90: 76 61 6c 75 65 20 6f 66 20 61 20 73 74 61 74 69  value of a stati
fda0: 63 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 64  c variable named
fdb0: 0a 2a 2a 20 22 73 71 6c 69 74 65 5f 73 74 61 74  .** "sqlite_stat
fdc0: 69 63 5f 62 69 6e 64 5f 76 61 6c 75 65 22 2e 20  ic_bind_value". 
fdd0: 20 49 66 20 46 4c 41 47 53 3d 3d 22 6e 6f 72 6d   If FLAGS=="norm
fde0: 61 6c 22 20 74 68 65 6e 20 61 20 63 6f 70 79 0a  al" then a copy.
fdf0: 2a 2a 20 6f 66 20 74 68 65 20 56 41 4c 55 45 20  ** of the VALUE 
fe00: 69 73 20 6d 61 64 65 2e 20 20 49 66 20 46 4c 41  is made.  If FLA
fe10: 47 53 3d 3d 22 62 6c 6f 62 31 30 22 20 74 68 65  GS=="blob10" the
fe20: 6e 20 61 20 56 41 4c 55 45 20 69 73 20 69 67 6e  n a VALUE is ign
fe30: 6f 72 65 64 0a 2a 2a 20 61 6e 20 61 20 31 30 2d  ored.** an a 10-
fe40: 62 79 74 65 20 62 6c 6f 62 20 22 61 62 63 5c 30  byte blob "abc\0
fe50: 30 30 78 79 7a 5c 30 30 30 70 71 22 20 69 73 20  00xyz\000pq" is 
fe60: 69 6e 73 65 72 74 65 64 2e 0a 2a 2f 0a 73 74 61  inserted..*/.sta
fe70: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e  tic int test_bin
fe80: 64 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73  d(.  void *NotUs
fe90: 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ed,.  Tcl_Interp
fea0: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
feb0: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
fec0: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
fed0: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
fee0: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20  .  int argc,    
fef0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
ff00: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
ff10: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67   */.  char **arg
ff20: 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  v            /* 
ff30: 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67  Text of each arg
ff40: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71  ument */.){.  sq
ff50: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
ff60: 74 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69  t;.  int rc;.  i
ff70: 6e 74 20 69 64 78 3b 0a 20 20 69 66 28 20 61 72  nt idx;.  if( ar
ff80: 67 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=5 ){.    Tcl
ff90: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
ffa0: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
ffb0: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
ffc0: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20  "", argv[0], .  
ffd0: 20 20 20 20 20 22 20 56 4d 20 49 44 58 20 56 41       " VM IDX VA
ffe0: 4c 55 45 20 28 6e 75 6c 6c 7c 73 74 61 74 69 63  LUE (null|static
fff0: 7c 6e 6f 72 6d 61 6c 29 5c 22 22 2c 20 30 29 3b  |normal)\"", 0);
10000 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
10010 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
10020 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28   getStmtPointer(
10030 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c  interp, argv[1],
10040 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
10050 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
10060 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e  f( Tcl_GetInt(in
10070 74 65 72 70 2c 20 61 72 67 76 5b 32 5d 2c 20 26  terp, argv[2], &
10080 69 64 78 29 20 29 20 72 65 74 75 72 6e 20 54 43  idx) ) return TC
10090 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 73  L_ERROR;.  if( s
100a0 74 72 63 6d 70 28 61 72 67 76 5b 34 5d 2c 22 6e  trcmp(argv[4],"n
100b0 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ull")==0 ){.    
100c0 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e  rc = sqlite3_bin
100d0 64 5f 6e 75 6c 6c 28 70 53 74 6d 74 2c 20 69 64  d_null(pStmt, id
100e0 78 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  x);.  }else if( 
100f0 73 74 72 63 6d 70 28 61 72 67 76 5b 34 5d 2c 22  strcmp(argv[4],"
10100 73 74 61 74 69 63 22 29 3d 3d 30 20 29 7b 0a 20  static")==0 ){. 
10110 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
10120 62 69 6e 64 5f 74 65 78 74 28 70 53 74 6d 74 2c  bind_text(pStmt,
10130 20 69 64 78 2c 20 73 71 6c 69 74 65 5f 73 74 61   idx, sqlite_sta
10140 74 69 63 5f 62 69 6e 64 5f 76 61 6c 75 65 2c 20  tic_bind_value, 
10150 2d 31 2c 20 30 29 3b 0a 20 20 7d 65 6c 73 65 20  -1, 0);.  }else 
10160 69 66 28 20 73 74 72 63 6d 70 28 61 72 67 76 5b  if( strcmp(argv[
10170 34 5d 2c 22 73 74 61 74 69 63 2d 6e 62 79 74 65  4],"static-nbyte
10180 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63  s")==0 ){.    rc
10190 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f   = sqlite3_bind_
101a0 74 65 78 74 28 70 53 74 6d 74 2c 20 69 64 78 2c  text(pStmt, idx,
101b0 20 73 71 6c 69 74 65 5f 73 74 61 74 69 63 5f 62   sqlite_static_b
101c0 69 6e 64 5f 76 61 6c 75 65 2c 0a 20 20 20 20 20  ind_value,.     
101d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101f0 20 20 73 71 6c 69 74 65 5f 73 74 61 74 69 63 5f    sqlite_static_
10200 62 69 6e 64 5f 6e 62 79 74 65 2c 20 30 29 3b 0a  bind_nbyte, 0);.
10210 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
10220 6d 70 28 61 72 67 76 5b 34 5d 2c 22 6e 6f 72 6d  mp(argv[4],"norm
10230 61 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72  al")==0 ){.    r
10240 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  c = sqlite3_bind
10250 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 69 64 78  _text(pStmt, idx
10260 2c 20 61 72 67 76 5b 33 5d 2c 20 2d 31 2c 20 53  , argv[3], -1, S
10270 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29  QLITE_TRANSIENT)
10280 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74  ;.  }else if( st
10290 72 63 6d 70 28 61 72 67 76 5b 34 5d 2c 22 62 6c  rcmp(argv[4],"bl
102a0 6f 62 31 30 22 29 3d 3d 30 20 29 7b 0a 20 20 20  ob10")==0 ){.   
102b0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69   rc = sqlite3_bi
102c0 6e 64 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 69  nd_text(pStmt, i
102d0 64 78 2c 20 22 61 62 63 5c 30 30 30 78 79 7a 5c  dx, "abc\000xyz\
102e0 30 30 30 70 71 22 2c 20 31 30 2c 20 53 51 4c 49  000pq", 10, SQLI
102f0 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 7d 65  TE_STATIC);.  }e
10300 6c 73 65 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  lse{.    Tcl_App
10310 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
10320 2c 20 22 34 74 68 20 61 72 67 75 6d 65 6e 74 20  , "4th argument 
10330 73 68 6f 75 6c 64 20 62 65 20 22 0a 20 20 20 20  should be ".    
10340 20 20 20 20 22 5c 22 6e 75 6c 6c 5c 22 20 6f 72      "\"null\" or
10350 20 5c 22 73 74 61 74 69 63 5c 22 20 6f 72 20 5c   \"static\" or \
10360 22 6e 6f 72 6d 61 6c 5c 22 22 2c 20 30 29 3b 0a  "normal\"", 0);.
10370 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
10380 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
10390 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f  sqlite3TestErrCo
103a0 64 65 28 69 6e 74 65 72 70 2c 20 53 74 6d 74 54  de(interp, StmtT
103b0 6f 44 62 28 70 53 74 6d 74 29 2c 20 72 63 29 20  oDb(pStmt), rc) 
103c0 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
103d0 4f 52 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a  OR;.  if( rc ){.
103e0 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b 35 30      char zBuf[50
103f0 5d 3b 0a 20 20 20 20 73 70 72 69 6e 74 66 28 7a  ];.    sprintf(z
10400 42 75 66 2c 20 22 28 25 64 29 20 22 2c 20 72 63  Buf, "(%d) ", rc
10410 29 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  );.    Tcl_Appen
10420 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
10430 7a 42 75 66 2c 20 73 71 6c 69 74 65 33 45 72 72  zBuf, sqlite3Err
10440 53 74 72 28 72 63 29 2c 20 30 29 3b 0a 20 20 20  Str(rc), 0);.   
10450 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
10460 52 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  R;.  }.  return 
10470 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e 64  TCL_OK;.}..#ifnd
10480 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
10490 54 46 31 36 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  TF16./*.** Usage
104a0 3a 20 61 64 64 5f 74 65 73 74 5f 63 6f 6c 6c 61  : add_test_colla
104b0 74 65 20 3c 64 62 20 70 74 72 3e 20 3c 75 74 66  te <db ptr> <utf
104c0 38 3e 20 3c 75 74 66 31 36 6c 65 3e 20 3c 75 74  8> <utf16le> <ut
104d0 66 31 36 62 65 3e 0a 2a 2a 0a 2a 2a 20 54 68 69  f16be>.**.** Thi
104e0 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73  s function is us
104f0 65 64 20 74 6f 20 74 65 73 74 20 74 68 61 74 20  ed to test that 
10500 53 51 4c 69 74 65 20 73 65 6c 65 63 74 73 20 74  SQLite selects t
10510 68 65 20 63 6f 72 72 65 63 74 20 63 6f 6c 6c 61  he correct colla
10520 74 69 6f 6e 0a 2a 2a 20 73 65 71 75 65 6e 63 65  tion.** sequence
10530 20 63 61 6c 6c 62 61 63 6b 20 77 68 65 6e 20 6d   callback when m
10540 75 6c 74 69 70 6c 65 20 76 65 72 73 69 6f 6e 73  ultiple versions
10550 20 28 66 6f 72 20 64 69 66 66 65 72 65 6e 74 20   (for different 
10560 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 73 29 0a  text encodings).
10570 2a 2a 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65  ** are available
10580 2e 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 69 6e 67 20  ..**.** Calling 
10590 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65 67  this routine reg
105a0 69 73 74 65 72 73 20 74 68 65 20 63 6f 6c 6c 61  isters the colla
105b0 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 22 74  tion sequence "t
105c0 65 73 74 5f 63 6f 6c 6c 61 74 65 22 0a 2a 2a 20  est_collate".** 
105d0 77 69 74 68 20 64 61 74 61 62 61 73 65 20 68 61  with database ha
105e0 6e 64 6c 65 20 3c 64 62 3e 2e 20 54 68 65 20 73  ndle <db>. The s
105f0 65 63 6f 6e 64 20 61 72 67 75 6d 65 6e 74 20 6d  econd argument m
10600 75 73 74 20 62 65 20 61 20 6c 69 73 74 20 6f 66  ust be a list of
10610 20 74 68 72 65 65 0a 2a 2a 20 62 6f 6f 6c 65 61   three.** boolea
10620 6e 20 76 61 6c 75 65 73 2e 20 49 66 20 74 68 65  n values. If the
10630 20 66 69 72 73 74 20 69 73 20 74 72 75 65 2c 20   first is true, 
10640 74 68 65 6e 20 61 20 76 65 72 73 69 6f 6e 20 6f  then a version o
10650 66 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 20 69  f test_collate i
10660 73 0a 2a 2a 20 72 65 67 69 73 74 65 72 65 64 20  s.** registered 
10670 66 6f 72 20 55 54 46 2d 38 2c 20 69 66 20 74 68  for UTF-8, if th
10680 65 20 73 65 63 6f 6e 64 20 69 73 20 74 72 75 65  e second is true
10690 2c 20 61 20 76 65 72 73 69 6f 6e 20 69 73 20 72  , a version is r
106a0 65 67 69 73 74 65 72 65 64 20 66 6f 72 0a 2a 2a  egistered for.**
106b0 20 55 54 46 2d 31 36 6c 65 2c 20 69 66 20 74 68   UTF-16le, if th
106c0 65 20 74 68 69 72 64 20 69 73 20 74 72 75 65 2c  e third is true,
106d0 20 61 20 55 54 46 2d 31 36 62 65 20 76 65 72 73   a UTF-16be vers
106e0 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ion is available
106f0 2e 0a 2a 2a 20 50 72 65 76 69 6f 75 73 20 76 65  ..** Previous ve
10700 72 73 69 6f 6e 73 20 6f 66 20 74 65 73 74 5f 63  rsions of test_c
10710 6f 6c 6c 61 74 65 20 61 72 65 20 64 65 6c 65 74  ollate are delet
10720 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ed..**.** The co
10730 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
10740 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 20 69 73   test_collate is
10750 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
10760 63 61 6c 6c 69 6e 67 20 74 68 65 0a 2a 2a 20 66  calling the.** f
10770 6f 6c 6c 6f 77 69 6e 67 20 54 43 4c 20 73 63 72  ollowing TCL scr
10780 69 70 74 3a 0a 2a 2a 0a 2a 2a 20 20 20 22 74 65  ipt:.**.**   "te
10790 73 74 5f 63 6f 6c 6c 61 74 65 20 3c 65 6e 63 3e  st_collate <enc>
107a0 20 3c 6c 68 73 3e 20 3c 72 68 73 3e 22 0a 2a 2a   <lhs> <rhs>".**
107b0 0a 2a 2a 20 54 68 65 20 3c 6c 68 73 3e 20 61 6e  .** The <lhs> an
107c0 64 20 3c 72 68 73 3e 20 61 72 65 20 74 68 65 20  d <rhs> are the 
107d0 74 77 6f 20 76 61 6c 75 65 73 20 62 65 69 6e 67  two values being
107e0 20 63 6f 6d 70 61 72 65 64 2c 20 65 6e 63 6f 64   compared, encod
107f0 65 64 20 69 6e 20 55 54 46 2d 38 2e 0a 2a 2a 20  ed in UTF-8..** 
10800 54 68 65 20 3c 65 6e 63 3e 20 70 61 72 61 6d 65  The <enc> parame
10810 74 65 72 20 69 73 20 74 68 65 20 65 6e 63 6f 64  ter is the encod
10820 69 6e 67 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61  ing of the colla
10830 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 74 68  tion function th
10840 61 74 0a 2a 2a 20 53 51 4c 69 74 65 20 73 65 6c  at.** SQLite sel
10850 65 63 74 65 64 20 74 6f 20 63 61 6c 6c 2e 20 54  ected to call. T
10860 68 65 20 54 43 4c 20 74 65 73 74 20 73 63 72 69  he TCL test scri
10870 70 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68  pt implements th
10880 65 0a 2a 2a 20 22 74 65 73 74 5f 63 6f 6c 6c 61  e.** "test_colla
10890 74 65 22 20 70 72 6f 63 2e 0a 2a 2a 0a 2a 2a 20  te" proc..**.** 
108a0 4e 6f 74 65 20 74 68 61 74 20 74 68 69 73 20 77  Note that this w
108b0 69 6c 6c 20 6f 6e 6c 79 20 77 6f 72 6b 20 77 69  ill only work wi
108c0 74 68 20 6f 6e 65 20 69 6e 74 65 70 72 65 74 65  th one inteprete
108d0 72 20 61 74 20 61 20 74 69 6d 65 2c 20 61 73 20  r at a time, as 
108e0 74 68 65 0a 2a 2a 20 69 6e 74 65 72 70 20 70 6f  the.** interp po
108f0 69 6e 74 65 72 20 74 6f 20 75 73 65 20 77 68 65  inter to use whe
10900 6e 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  n evaluating the
10910 20 54 43 4c 20 73 63 72 69 70 74 20 69 73 20 73   TCL script is s
10920 74 6f 72 65 64 20 69 6e 0a 2a 2a 20 70 54 65 73  tored in.** pTes
10930 74 43 6f 6c 6c 61 74 65 49 6e 74 65 72 70 2e 0a  tCollateInterp..
10940 2a 2f 0a 73 74 61 74 69 63 20 54 63 6c 5f 49 6e  */.static Tcl_In
10950 74 65 72 70 2a 20 70 54 65 73 74 43 6f 6c 6c 61  terp* pTestColla
10960 74 65 49 6e 74 65 72 70 3b 0a 73 74 61 74 69 63  teInterp;.static
10970 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c 6c 61 74   int test_collat
10980 65 5f 66 75 6e 63 28 0a 20 20 76 6f 69 64 20 2a  e_func(.  void *
10990 70 43 74 78 2c 20 0a 20 20 69 6e 74 20 6e 41 2c  pCtx, .  int nA,
109a0 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 41 2c   const void *zA,
109b0 0a 20 20 69 6e 74 20 6e 42 2c 20 63 6f 6e 73 74  .  int nB, const
109c0 20 76 6f 69 64 20 2a 7a 42 0a 29 7b 0a 20 20 54   void *zB.){.  T
109d0 63 6c 5f 49 6e 74 65 72 70 20 2a 69 20 3d 20 70  cl_Interp *i = p
109e0 54 65 73 74 43 6f 6c 6c 61 74 65 49 6e 74 65 72  TestCollateInter
109f0 70 3b 0a 20 20 69 6e 74 20 65 6e 63 69 6e 20 3d  p;.  int encin =
10a00 20 28 69 6e 74 29 70 43 74 78 3b 0a 20 20 69 6e   (int)pCtx;.  in
10a10 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6e 3b 0a  t res;.  int n;.
10a20 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
10a30 20 2a 70 56 61 6c 3b 0a 20 20 54 63 6c 5f 4f 62   *pVal;.  Tcl_Ob
10a40 6a 20 2a 70 58 3b 0a 0a 20 20 70 58 20 3d 20 54  j *pX;..  pX = T
10a50 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
10a60 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22 2c 20  "test_collate", 
10a70 2d 31 29 3b 0a 20 20 54 63 6c 5f 49 6e 63 72 52  -1);.  Tcl_IncrR
10a80 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a 0a 20 20  efCount(pX);..  
10a90 73 77 69 74 63 68 28 20 65 6e 63 69 6e 20 29 7b  switch( encin ){
10aa0 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
10ab0 5f 55 54 46 38 3a 0a 20 20 20 20 20 20 54 63 6c  _UTF8:.      Tcl
10ac0 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
10ad0 65 6d 65 6e 74 28 69 2c 70 58 2c 54 63 6c 5f 4e  ement(i,pX,Tcl_N
10ae0 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 55 54 46  ewStringObj("UTF
10af0 2d 38 22 2c 2d 31 29 29 3b 0a 20 20 20 20 20 20  -8",-1));.      
10b00 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
10b10 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 3a 0a  SQLITE_UTF16LE:.
10b20 20 20 20 20 20 20 54 63 6c 5f 4c 69 73 74 4f 62        Tcl_ListOb
10b30 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  jAppendElement(i
10b40 2c 70 58 2c 54 63 6c 5f 4e 65 77 53 74 72 69 6e  ,pX,Tcl_NewStrin
10b50 67 4f 62 6a 28 22 55 54 46 2d 31 36 4c 45 22 2c  gObj("UTF-16LE",
10b60 2d 31 29 29 3b 0a 20 20 20 20 20 20 62 72 65 61  -1));.      brea
10b70 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
10b80 54 45 5f 55 54 46 31 36 42 45 3a 0a 20 20 20 20  TE_UTF16BE:.    
10b90 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70    Tcl_ListObjApp
10ba0 65 6e 64 45 6c 65 6d 65 6e 74 28 69 2c 70 58 2c  endElement(i,pX,
10bb0 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
10bc0 28 22 55 54 46 2d 31 36 42 45 22 2c 2d 31 29 29  ("UTF-16BE",-1))
10bd0 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
10be0 20 20 20 64 65 66 61 75 6c 74 3a 0a 20 20 20 20     default:.    
10bf0 20 20 61 73 73 65 72 74 28 30 29 3b 0a 20 20 7d    assert(0);.  }
10c00 0a 0a 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e  ..  sqlite3Begin
10c10 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a  BenignMalloc();.
10c20 20 20 70 56 61 6c 20 3d 20 73 71 6c 69 74 65 33    pVal = sqlite3
10c30 56 61 6c 75 65 4e 65 77 28 30 29 3b 0a 20 20 69  ValueNew(0);.  i
10c40 66 28 20 70 56 61 6c 20 29 7b 0a 20 20 20 20 73  f( pVal ){.    s
10c50 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74  qlite3ValueSetSt
10c60 72 28 70 56 61 6c 2c 20 6e 41 2c 20 7a 41 2c 20  r(pVal, nA, zA, 
10c70 65 6e 63 69 6e 2c 20 53 51 4c 49 54 45 5f 53 54  encin, SQLITE_ST
10c80 41 54 49 43 29 3b 0a 20 20 20 20 6e 20 3d 20 73  ATIC);.    n = s
10c90 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74  qlite3_value_byt
10ca0 65 73 28 70 56 61 6c 29 3b 0a 20 20 20 20 54 63  es(pVal);.    Tc
10cb0 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45  l_ListObjAppendE
10cc0 6c 65 6d 65 6e 74 28 69 2c 70 58 2c 0a 20 20 20  lement(i,pX,.   
10cd0 20 20 20 20 20 54 63 6c 5f 4e 65 77 53 74 72 69       Tcl_NewStri
10ce0 6e 67 4f 62 6a 28 28 63 68 61 72 2a 29 73 71 6c  ngObj((char*)sql
10cf0 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
10d00 70 56 61 6c 29 2c 6e 29 29 3b 0a 20 20 20 20 73  pVal),n));.    s
10d10 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74  qlite3ValueSetSt
10d20 72 28 70 56 61 6c 2c 20 6e 42 2c 20 7a 42 2c 20  r(pVal, nB, zB, 
10d30 65 6e 63 69 6e 2c 20 53 51 4c 49 54 45 5f 53 54  encin, SQLITE_ST
10d40 41 54 49 43 29 3b 0a 20 20 20 20 6e 20 3d 20 73  ATIC);.    n = s
10d50 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74  qlite3_value_byt
10d60 65 73 28 70 56 61 6c 29 3b 0a 20 20 20 20 54 63  es(pVal);.    Tc
10d70 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45  l_ListObjAppendE
10d80 6c 65 6d 65 6e 74 28 69 2c 70 58 2c 0a 20 20 20  lement(i,pX,.   
10d90 20 20 20 20 20 54 63 6c 5f 4e 65 77 53 74 72 69       Tcl_NewStri
10da0 6e 67 4f 62 6a 28 28 63 68 61 72 2a 29 73 71 6c  ngObj((char*)sql
10db0 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
10dc0 70 56 61 6c 29 2c 6e 29 29 3b 0a 20 20 20 20 73  pVal),n));.    s
10dd0 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28  qlite3ValueFree(
10de0 70 56 61 6c 29 3b 0a 20 20 7d 0a 20 20 73 71 6c  pVal);.  }.  sql
10df0 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c  ite3EndBenignMal
10e00 6c 6f 63 28 29 3b 0a 0a 20 20 54 63 6c 5f 45 76  loc();..  Tcl_Ev
10e10 61 6c 4f 62 6a 45 78 28 69 2c 20 70 58 2c 20 30  alObjEx(i, pX, 0
10e20 29 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52 65 66  );.  Tcl_DecrRef
10e30 43 6f 75 6e 74 28 70 58 29 3b 0a 20 20 54 63 6c  Count(pX);.  Tcl
10e40 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
10e50 2c 20 54 63 6c 5f 47 65 74 4f 62 6a 52 65 73 75  , Tcl_GetObjResu
10e60 6c 74 28 69 29 2c 20 26 72 65 73 29 3b 0a 20 20  lt(i), &res);.  
10e70 72 65 74 75 72 6e 20 72 65 73 3b 0a 7d 0a 73 74  return res;.}.st
10e80 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63 6f  atic int test_co
10e90 6c 6c 61 74 65 28 0a 20 20 76 6f 69 64 20 2a 20  llate(.  void * 
10ea0 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
10eb0 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
10ec0 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
10ed0 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
10ee0 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74  bjv[].){.  sqlit
10ef0 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 76 61  e3 *db;.  int va
10f00 6c 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  l;.  sqlite3_val
10f10 75 65 20 2a 70 56 61 6c 3b 0a 20 20 69 6e 74 20  ue *pVal;.  int 
10f20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  rc;..  if( objc!
10f30 3d 35 20 29 20 67 6f 74 6f 20 62 61 64 5f 61 72  =5 ) goto bad_ar
10f40 67 73 3b 0a 20 20 70 54 65 73 74 43 6f 6c 6c 61  gs;.  pTestColla
10f50 74 65 49 6e 74 65 72 70 20 3d 20 69 6e 74 65 72  teInterp = inter
10f60 70 3b 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f  p;.  if( getDbPo
10f70 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
10f80 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
10f90 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74  [1]), &db) ) ret
10fa0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a  urn TCL_ERROR;..
10fb0 20 20 69 66 28 20 54 43 4c 5f 4f 4b 21 3d 54 63    if( TCL_OK!=Tc
10fc0 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d  l_GetBooleanFrom
10fd0 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
10fe0 5b 32 5d 2c 20 26 76 61 6c 29 20 29 20 72 65 74  [2], &val) ) ret
10ff0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
11000 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72   rc = sqlite3_cr
11010 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64  eate_collation(d
11020 62 2c 20 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65  b, "test_collate
11030 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  ", SQLITE_UTF8, 
11040 0a 20 20 20 20 20 20 20 20 20 20 28 76 6f 69 64  .          (void
11050 20 2a 29 53 51 4c 49 54 45 5f 55 54 46 38 2c 20   *)SQLITE_UTF8, 
11060 76 61 6c 3f 74 65 73 74 5f 63 6f 6c 6c 61 74 65  val?test_collate
11070 5f 66 75 6e 63 3a 30 29 3b 0a 20 20 69 66 28 20  _func:0);.  if( 
11080 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
11090 0a 20 20 20 20 63 6f 6e 73 74 20 76 6f 69 64 20  .    const void 
110a0 2a 7a 55 74 66 31 36 3b 0a 20 20 20 20 69 66 28  *zUtf16;.    if(
110b0 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74   TCL_OK!=Tcl_Get
110c0 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69  BooleanFromObj(i
110d0 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20  nterp, objv[3], 
110e0 26 76 61 6c 29 20 29 20 72 65 74 75 72 6e 20 54  &val) ) return T
110f0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 72 63  CL_ERROR;.    rc
11100 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74   = sqlite3_creat
11110 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20  e_collation(db, 
11120 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22 2c 20  "test_collate", 
11130 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 2c 20  SQLITE_UTF16LE, 
11140 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 76 6f  .            (vo
11150 69 64 20 2a 29 53 51 4c 49 54 45 5f 55 54 46 31  id *)SQLITE_UTF1
11160 36 4c 45 2c 20 76 61 6c 3f 74 65 73 74 5f 63 6f  6LE, val?test_co
11170 6c 6c 61 74 65 5f 66 75 6e 63 3a 30 29 3b 0a 20  llate_func:0);. 
11180 20 20 20 69 66 28 20 54 43 4c 5f 4f 4b 21 3d 54     if( TCL_OK!=T
11190 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f  cl_GetBooleanFro
111a0 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
111b0 76 5b 34 5d 2c 20 26 76 61 6c 29 20 29 20 72 65  v[4], &val) ) re
111c0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
111d0 0a 23 69 66 20 30 0a 20 20 20 20 69 66 28 20 73  .#if 0.    if( s
111e0 71 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46 61  qlite3_iMallocFa
111f0 69 6c 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71  il>0 ){.      sq
11200 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46 61 69  lite3_iMallocFai
11210 6c 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  l++;.    }.#endi
11220 66 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75  f.    sqlite3_mu
11230 74 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75  tex_enter(db->mu
11240 74 65 78 29 3b 0a 20 20 20 20 70 56 61 6c 20 3d  tex);.    pVal =
11250 20 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77   sqlite3ValueNew
11260 28 64 62 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  (db);.    sqlite
11270 33 56 61 6c 75 65 53 65 74 53 74 72 28 70 56 61  3ValueSetStr(pVa
11280 6c 2c 20 2d 31 2c 20 22 74 65 73 74 5f 63 6f 6c  l, -1, "test_col
11290 6c 61 74 65 22 2c 20 53 51 4c 49 54 45 5f 55 54  late", SQLITE_UT
112a0 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  F8, SQLITE_STATI
112b0 43 29 3b 0a 20 20 20 20 7a 55 74 66 31 36 20 3d  C);.    zUtf16 =
112c0 20 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78   sqlite3ValueTex
112d0 74 28 70 56 61 6c 2c 20 53 51 4c 49 54 45 5f 55  t(pVal, SQLITE_U
112e0 54 46 31 36 4e 41 54 49 56 45 29 3b 0a 20 20 20  TF16NATIVE);.   
112f0 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46   if( db->mallocF
11300 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 20 20 72  ailed ){.      r
11310 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  c = SQLITE_NOMEM
11320 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
11330 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
11340 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e  create_collation
11350 31 36 28 64 62 2c 20 7a 55 74 66 31 36 2c 20 53  16(db, zUtf16, S
11360 51 4c 49 54 45 5f 55 54 46 31 36 42 45 2c 20 0a  QLITE_UTF16BE, .
11370 20 20 20 20 20 20 20 20 20 20 28 76 6f 69 64 20            (void 
11380 2a 29 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  *)SQLITE_UTF16BE
11390 2c 20 76 61 6c 3f 74 65 73 74 5f 63 6f 6c 6c 61  , val?test_colla
113a0 74 65 5f 66 75 6e 63 3a 30 29 3b 0a 20 20 20 20  te_func:0);.    
113b0 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c  }.    sqlite3Val
113c0 75 65 46 72 65 65 28 70 56 61 6c 29 3b 0a 20 20  ueFree(pVal);.  
113d0 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
113e0 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78 29  leave(db->mutex)
113f0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69  ;.  }.  if( sqli
11400 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69  te3TestErrCode(i
11410 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29  nterp, db, rc) )
11420 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
11430 52 3b 0a 20 20 0a 20 20 69 66 28 20 72 63 21 3d  R;.  .  if( rc!=
11440 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
11450 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
11460 74 28 69 6e 74 65 72 70 2c 20 73 71 6c 69 74 65  t(interp, sqlite
11470 33 54 65 73 74 45 72 72 6f 72 4e 61 6d 65 28 72  3TestErrorName(r
11480 63 29 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  c), 0);.    retu
11490 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
114a0 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  }.  return TCL_O
114b0 4b 3b 0a 0a 62 61 64 5f 61 72 67 73 3a 0a 20 20  K;..bad_args:.  
114c0 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
114d0 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
114e0 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
114f0 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 54 63 6c  e \"",.      Tcl
11500 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62  _GetStringFromOb
11510 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22  j(objv[0], 0), "
11520 20 3c 44 42 3e 20 3c 75 74 66 38 3e 20 3c 75 74   <DB> <utf8> <ut
11530 66 31 36 6c 65 3e 20 3c 75 74 66 31 36 62 65 3e  f16le> <utf16be>
11540 22 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20  ", 0);.  return 
11550 54 43 4c 5f 45 52 52 4f 52 3b 0a 7d 0a 0a 2f 2a  TCL_ERROR;.}../*
11560 0a 2a 2a 20 57 68 65 6e 20 74 68 65 20 63 6f 6c  .** When the col
11570 6c 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 63 61  lation needed ca
11580 6c 6c 62 61 63 6b 20 69 73 20 69 6e 76 6f 6b 65  llback is invoke
11590 64 2c 20 72 65 63 6f 72 64 20 74 68 65 20 6e 61  d, record the na
115a0 6d 65 20 6f 66 20 0a 2a 2a 20 74 68 65 20 72 65  me of .** the re
115b0 71 75 65 73 74 65 64 20 63 6f 6c 6c 61 74 69 6e  quested collatin
115c0 67 20 66 75 6e 63 74 69 6f 6e 20 68 65 72 65 2e  g function here.
115d0 20 20 54 68 65 20 72 65 63 6f 72 64 65 64 20 6e    The recorded n
115e0 61 6d 65 20 69 73 20 6c 69 6e 6b 65 64 0a 2a 2a  ame is linked.**
115f0 20 74 6f 20 61 20 54 43 4c 20 76 61 72 69 61 62   to a TCL variab
11600 6c 65 20 61 6e 64 20 75 73 65 64 20 74 6f 20 6d  le and used to m
11610 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
11620 65 20 72 65 71 75 65 73 74 65 64 20 63 6f 6c 6c  e requested coll
11630 61 74 69 6f 6e 0a 2a 2a 20 6e 61 6d 65 20 69 73  ation.** name is
11640 20 63 6f 72 72 65 63 74 2e 0a 2a 2f 0a 73 74 61   correct..*/.sta
11650 74 69 63 20 63 68 61 72 20 7a 4e 65 65 64 65 64  tic char zNeeded
11660 43 6f 6c 6c 61 74 69 6f 6e 5b 32 30 30 5d 3b 0a  Collation[200];.
11670 73 74 61 74 69 63 20 63 68 61 72 20 2a 70 7a 4e  static char *pzN
11680 65 65 64 65 64 43 6f 6c 6c 61 74 69 6f 6e 20 3d  eededCollation =
11690 20 7a 4e 65 65 64 65 64 43 6f 6c 6c 61 74 69 6f   zNeededCollatio
116a0 6e 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 43 61 6c 6c 65  n;.../*.** Calle
116b0 64 20 77 68 65 6e 20 61 20 63 6f 6c 6c 61 74 69  d when a collati
116c0 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 6e  ng sequence is n
116d0 65 65 64 65 64 2e 20 20 52 65 67 69 73 74 65 72  eeded.  Register
116e0 65 64 20 75 73 69 6e 67 0a 2a 2a 20 73 71 6c 69  ed using.** sqli
116f0 74 65 33 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 6e 65  te3_collation_ne
11700 65 64 65 64 31 36 28 29 2e 0a 2a 2f 0a 73 74 61  eded16()..*/.sta
11710 74 69 63 20 76 6f 69 64 20 74 65 73 74 5f 63 6f  tic void test_co
11720 6c 6c 61 74 65 5f 6e 65 65 64 65 64 5f 63 62 28  llate_needed_cb(
11730 0a 20 20 76 6f 69 64 20 2a 70 43 74 78 2c 20 0a  .  void *pCtx, .
11740 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a 20    sqlite3 *db,. 
11750 20 69 6e 74 20 65 54 65 78 74 52 65 70 2c 0a 20   int eTextRep,. 
11760 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 4e 61   const void *pNa
11770 6d 65 0a 29 7b 0a 20 20 69 6e 74 20 65 6e 63 20  me.){.  int enc 
11780 3d 20 45 4e 43 28 64 62 29 3b 0a 20 20 69 6e 74  = ENC(db);.  int
11790 20 69 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20   i;.  char *z;. 
117a0 20 66 6f 72 28 7a 20 3d 20 28 63 68 61 72 2a 29   for(z = (char*)
117b0 70 4e 61 6d 65 2c 20 69 3d 30 3b 20 2a 7a 20 7c  pName, i=0; *z |
117c0 7c 20 7a 5b 31 5d 3b 20 7a 2b 2b 29 7b 0a 20 20  | z[1]; z++){.  
117d0 20 20 69 66 28 20 2a 7a 20 29 20 7a 4e 65 65 64    if( *z ) zNeed
117e0 65 64 43 6f 6c 6c 61 74 69 6f 6e 5b 69 2b 2b 5d  edCollation[i++]
117f0 20 3d 20 2a 7a 3b 0a 20 20 7d 0a 20 20 7a 4e 65   = *z;.  }.  zNe
11800 65 64 65 64 43 6f 6c 6c 61 74 69 6f 6e 5b 69 5d  ededCollation[i]
11810 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f   = 0;.  sqlite3_
11820 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e  create_collation
11830 28 0a 20 20 20 20 20 20 64 62 2c 20 22 74 65 73  (.      db, "tes
11840 74 5f 63 6f 6c 6c 61 74 65 22 2c 20 45 4e 43 28  t_collate", ENC(
11850 64 62 29 2c 20 28 76 6f 69 64 20 2a 29 65 6e 63  db), (void *)enc
11860 2c 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 66  , test_collate_f
11870 75 6e 63 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  unc);.}../*.** U
11880 73 61 67 65 3a 20 61 64 64 5f 74 65 73 74 5f 63  sage: add_test_c
11890 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64 20 44 42  ollate_needed DB
118a0 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
118b0 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65 64  est_collate_need
118c0 65 64 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  ed(.  void * cli
118d0 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
118e0 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
118f0 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
11900 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
11910 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  [].){.  sqlite3 
11920 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  *db;.  int rc;..
11930 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 20    if( objc!=2 ) 
11940 67 6f 74 6f 20 62 61 64 5f 61 72 67 73 3b 0a 20  goto bad_args;. 
11950 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
11960 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
11970 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
11980 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
11990 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20  TCL_ERROR;.  rc 
119a0 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 6c 61 74  = sqlite3_collat
119b0 69 6f 6e 5f 6e 65 65 64 65 64 31 36 28 64 62 2c  ion_needed16(db,
119c0 20 30 2c 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65   0, test_collate
119d0 5f 6e 65 65 64 65 64 5f 63 62 29 3b 0a 20 20 7a  _needed_cb);.  z
119e0 4e 65 65 64 65 64 43 6f 6c 6c 61 74 69 6f 6e 5b  NeededCollation[
119f0 30 5d 20 3d 20 30 3b 0a 20 20 69 66 28 20 73 71  0] = 0;.  if( sq
11a00 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65  lite3TestErrCode
11a10 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29  (interp, db, rc)
11a20 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
11a30 52 4f 52 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  ROR;.  return TC
11a40 4c 5f 4f 4b 3b 0a 0a 62 61 64 5f 61 72 67 73 3a  L_OK;..bad_args:
11a50 0a 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41  .  Tcl_WrongNumA
11a60 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f  rgs(interp, 1, o
11a70 62 6a 76 2c 20 22 44 42 22 29 3b 0a 20 20 72 65  bjv, "DB");.  re
11a80 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
11a90 7d 0a 0a 2f 2a 0a 2a 2a 20 74 63 6c 63 6d 64 3a  }../*.** tclcmd:
11aa0 20 20 20 61 64 64 5f 61 6c 69 67 6e 6d 65 6e 74     add_alignment
11ab0 5f 74 65 73 74 5f 63 6f 6c 6c 61 74 69 6f 6e 73  _test_collations
11ac0 20 20 44 42 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74    DB.**.** Add t
11ad0 77 6f 20 6e 65 77 20 63 6f 6c 6c 61 74 69 6e 67  wo new collating
11ae0 20 73 65 71 75 65 6e 63 65 73 20 74 6f 20 74 68   sequences to th
11af0 65 20 64 61 74 61 62 61 73 65 20 44 42 0a 2a 2a  e database DB.**
11b00 0a 2a 2a 20 20 20 20 20 75 74 66 31 36 5f 61 6c  .**     utf16_al
11b10 69 67 6e 65 64 0a 2a 2a 20 20 20 20 20 75 74 66  igned.**     utf
11b20 31 36 5f 75 6e 61 6c 69 67 6e 65 64 0a 2a 2a 0a  16_unaligned.**.
11b30 2a 2a 20 42 6f 74 68 20 63 6f 6c 6c 61 74 69 6e  ** Both collatin
11b40 67 20 73 65 71 75 65 6e 63 65 73 20 75 73 65 20  g sequences use 
11b50 74 68 65 20 73 61 6d 65 20 73 6f 72 74 20 6f 72  the same sort or
11b60 64 65 72 20 61 73 20 42 49 4e 41 52 59 2e 0a 2a  der as BINARY..*
11b70 2a 20 54 68 65 20 6f 6e 6c 79 20 64 69 66 66 65  * The only diffe
11b80 72 65 6e 63 65 20 69 73 20 74 68 61 74 20 74 68  rence is that th
11b90 65 20 75 74 66 31 36 5f 61 6c 69 67 6e 65 64 20  e utf16_aligned 
11ba0 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71  collating.** seq
11bb0 75 65 6e 63 65 20 69 73 20 64 65 63 6c 61 72 65  uence is declare
11bc0 64 20 77 69 74 68 20 74 68 65 20 53 51 4c 49 54  d with the SQLIT
11bd0 45 5f 55 54 46 31 36 5f 41 4c 49 47 4e 45 44 20  E_UTF16_ALIGNED 
11be0 66 6c 61 67 2e 0a 2a 2a 20 42 6f 74 68 20 63 6f  flag..** Both co
11bf0 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
11c00 73 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 65 20  s increment the 
11c10 75 6e 61 6c 69 67 6e 65 64 20 75 74 66 31 36 20  unaligned utf16 
11c20 63 6f 75 6e 74 65 72 0a 2a 2a 20 77 68 65 6e 65  counter.** whene
11c30 76 65 72 20 74 68 65 79 20 73 65 65 20 61 20 73  ver they see a s
11c40 74 72 69 6e 67 20 74 68 61 74 20 62 65 67 69 6e  tring that begin
11c50 73 20 6f 6e 20 61 6e 20 6f 64 64 20 62 79 74 65  s on an odd byte
11c60 20 62 6f 75 6e 64 61 72 79 2e 0a 2a 2f 0a 73 74   boundary..*/.st
11c70 61 74 69 63 20 69 6e 74 20 75 6e 61 6c 69 67 6e  atic int unalign
11c80 65 64 5f 73 74 72 69 6e 67 5f 63 6f 75 6e 74 65  ed_string_counte
11c90 72 20 3d 20 30 3b 0a 73 74 61 74 69 63 20 69 6e  r = 0;.static in
11ca0 74 20 61 6c 69 67 6e 6d 65 6e 74 43 6f 6c 6c 46  t alignmentCollF
11cb0 75 6e 63 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74  unc(.  void *Not
11cc0 55 73 65 64 2c 0a 20 20 69 6e 74 20 6e 4b 65 79  Used,.  int nKey
11cd0 31 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70  1, const void *p
11ce0 4b 65 79 31 2c 0a 20 20 69 6e 74 20 6e 4b 65 79  Key1,.  int nKey
11cf0 32 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70  2, const void *p
11d00 4b 65 79 32 0a 29 7b 0a 20 20 69 6e 74 20 72 63  Key2.){.  int rc
11d10 2c 20 6e 3b 0a 20 20 6e 20 3d 20 6e 4b 65 79 31  , n;.  n = nKey1
11d20 3c 6e 4b 65 79 32 20 3f 20 6e 4b 65 79 31 20 3a  <nKey2 ? nKey1 :
11d30 20 6e 4b 65 79 32 3b 0a 20 20 69 66 28 20 6e 4b   nKey2;.  if( nK
11d40 65 79 31 3e 30 20 26 26 20 31 3d 3d 28 31 26 28  ey1>0 && 1==(1&(
11d50 69 6e 74 29 70 4b 65 79 31 29 20 29 20 75 6e 61  int)pKey1) ) una
11d60 6c 69 67 6e 65 64 5f 73 74 72 69 6e 67 5f 63 6f  ligned_string_co
11d70 75 6e 74 65 72 2b 2b 3b 0a 20 20 69 66 28 20 6e  unter++;.  if( n
11d80 4b 65 79 32 3e 30 20 26 26 20 31 3d 3d 28 31 26  Key2>0 && 1==(1&
11d90 28 69 6e 74 29 70 4b 65 79 32 29 20 29 20 75 6e  (int)pKey2) ) un
11da0 61 6c 69 67 6e 65 64 5f 73 74 72 69 6e 67 5f 63  aligned_string_c
11db0 6f 75 6e 74 65 72 2b 2b 3b 0a 20 20 72 63 20 3d  ounter++;.  rc =
11dc0 20 6d 65 6d 63 6d 70 28 70 4b 65 79 31 2c 20 70   memcmp(pKey1, p
11dd0 4b 65 79 32 2c 20 6e 29 3b 0a 20 20 69 66 28 20  Key2, n);.  if( 
11de0 72 63 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20  rc==0 ){.    rc 
11df0 3d 20 6e 4b 65 79 31 20 2d 20 6e 4b 65 79 32 3b  = nKey1 - nKey2;
11e00 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63  .  }.  return rc
11e10 3b 0a 7d 0a 73 74 61 74 69 63 20 69 6e 74 20 61  ;.}.static int a
11e20 64 64 5f 61 6c 69 67 6e 6d 65 6e 74 5f 74 65 73  dd_alignment_tes
11e30 74 5f 63 6f 6c 6c 61 74 69 6f 6e 73 28 0a 20 20  t_collations(.  
11e40 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
11e50 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
11e60 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
11e70 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
11e80 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
11e90 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
11ea0 20 69 66 28 20 6f 62 6a 63 3e 3d 32 20 29 7b 0a   if( objc>=2 ){.
11eb0 20 20 20 20 69 66 28 20 67 65 74 44 62 50 6f 69      if( getDbPoi
11ec0 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
11ed0 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
11ee0 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74 75  1]), &db) ) retu
11ef0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
11f00 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65    sqlite3_create
11f10 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 22  _collation(db, "
11f20 75 74 66 31 36 5f 75 6e 61 6c 69 67 6e 65 64 22  utf16_unaligned"
11f30 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 2c 20  , SQLITE_UTF16, 
11f40 0a 20 20 20 20 20 20 20 20 30 2c 20 61 6c 69 67  .        0, alig
11f50 6e 6d 65 6e 74 43 6f 6c 6c 46 75 6e 63 29 3b 0a  nmentCollFunc);.
11f60 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61      sqlite3_crea
11f70 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c  te_collation(db,
11f80 20 22 75 74 66 31 36 5f 61 6c 69 67 6e 65 64 22   "utf16_aligned"
11f90 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 5f 41  , SQLITE_UTF16_A
11fa0 4c 49 47 4e 45 44 2c 20 0a 20 20 20 20 20 20 20  LIGNED, .       
11fb0 20 30 2c 20 61 6c 69 67 6e 6d 65 6e 74 43 6f 6c   0, alignmentCol
11fc0 6c 46 75 6e 63 29 3b 0a 20 20 7d 0a 20 20 72 65  lFunc);.  }.  re
11fd0 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  turn SQLITE_OK;.
11fe0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66  }.#endif /* !def
11ff0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
12000 5f 55 54 46 31 36 29 20 2a 2f 0a 0a 2f 2a 0a 2a  _UTF16) */../*.*
12010 2a 20 55 73 61 67 65 3a 20 61 64 64 5f 74 65 73  * Usage: add_tes
12020 74 5f 66 75 6e 63 74 69 6f 6e 20 3c 64 62 20 70  t_function <db p
12030 74 72 3e 20 3c 75 74 66 38 3e 20 3c 75 74 66 31  tr> <utf8> <utf1
12040 36 6c 65 3e 20 3c 75 74 66 31 36 62 65 3e 0a 2a  6le> <utf16be>.*
12050 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69  *.** This functi
12060 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 74 65  on is used to te
12070 73 74 20 74 68 61 74 20 53 51 4c 69 74 65 20 73  st that SQLite s
12080 65 6c 65 63 74 73 20 74 68 65 20 63 6f 72 72 65  elects the corre
12090 63 74 20 75 73 65 72 0a 2a 2a 20 66 75 6e 63 74  ct user.** funct
120a0 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 77 68 65  ion callback whe
120b0 6e 20 6d 75 6c 74 69 70 6c 65 20 76 65 72 73 69  n multiple versi
120c0 6f 6e 73 20 28 66 6f 72 20 64 69 66 66 65 72 65  ons (for differe
120d0 6e 74 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67  nt text encoding
120e0 73 29 0a 2a 2a 20 61 72 65 20 61 76 61 69 6c 61  s).** are availa
120f0 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 69  ble..**.** Calli
12100 6e 67 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  ng this routine 
12110 72 65 67 69 73 74 65 72 73 20 75 70 20 74 6f 20  registers up to 
12120 74 68 72 65 65 20 76 65 72 73 69 6f 6e 73 20 6f  three versions o
12130 66 20 74 68 65 20 75 73 65 72 20 66 75 6e 63 74  f the user funct
12140 69 6f 6e 0a 2a 2a 20 22 74 65 73 74 5f 66 75 6e  ion.** "test_fun
12150 63 74 69 6f 6e 22 20 77 69 74 68 20 64 61 74 61  ction" with data
12160 62 61 73 65 20 68 61 6e 64 6c 65 20 3c 64 62 3e  base handle <db>
12170 2e 20 20 49 66 20 74 68 65 20 73 65 63 6f 6e 64  .  If the second
12180 20 61 72 67 75 6d 65 6e 74 20 69 73 0a 2a 2a 20   argument is.** 
12190 74 72 75 65 2c 20 74 68 65 6e 20 61 20 76 65 72  true, then a ver
121a0 73 69 6f 6e 20 6f 66 20 74 65 73 74 5f 66 75 6e  sion of test_fun
121b0 63 74 69 6f 6e 20 69 73 20 72 65 67 69 73 74 65  ction is registe
121c0 72 65 64 20 66 6f 72 20 55 54 46 2d 38 2c 20 69  red for UTF-8, i
121d0 66 20 74 68 65 0a 2a 2a 20 74 68 69 72 64 20 69  f the.** third i
121e0 73 20 74 72 75 65 2c 20 61 20 76 65 72 73 69 6f  s true, a versio
121f0 6e 20 69 73 20 72 65 67 69 73 74 65 72 65 64 20  n is registered 
12200 66 6f 72 20 55 54 46 2d 31 36 6c 65 2c 20 69 66  for UTF-16le, if
12210 20 74 68 65 20 66 6f 75 72 74 68 20 69 73 0a 2a   the fourth is.*
12220 2a 20 74 72 75 65 2c 20 61 20 55 54 46 2d 31 36  * true, a UTF-16
12230 62 65 20 76 65 72 73 69 6f 6e 20 69 73 20 61 76  be version is av
12240 61 69 6c 61 62 6c 65 2e 20 20 50 72 65 76 69 6f  ailable.  Previo
12250 75 73 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 2a  us versions of.*
12260 2a 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 20  * test_function 
12270 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 2a 2a 0a  are deleted..**.
12280 2a 2a 20 54 68 65 20 75 73 65 72 20 66 75 6e 63  ** The user func
12290 74 69 6f 6e 20 69 73 20 69 6d 70 6c 65 6d 65 6e  tion is implemen
122a0 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20 74  ted by calling t
122b0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 54 43 4c  he following TCL
122c0 20 73 63 72 69 70 74 3a 0a 2a 2a 0a 2a 2a 20 20   script:.**.**  
122d0 20 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 20   "test_function 
122e0 3c 65 6e 63 3e 20 3c 61 72 67 3e 22 0a 2a 2a 0a  <enc> <arg>".**.
122f0 2a 2a 20 57 68 65 72 65 20 3c 65 6e 63 3e 20 69  ** Where <enc> i
12300 73 20 6f 6e 65 20 6f 66 20 55 54 46 2d 38 2c 20  s one of UTF-8, 
12310 55 54 46 2d 31 36 4c 45 20 6f 72 20 55 54 46 31  UTF-16LE or UTF1
12320 36 42 45 2c 20 61 6e 64 20 3c 61 72 67 3e 20 69  6BE, and <arg> i
12330 73 20 74 68 65 0a 2a 2a 20 73 69 6e 67 6c 65 20  s the.** single 
12340 61 72 67 75 6d 65 6e 74 20 70 61 73 73 65 64 20  argument passed 
12350 74 6f 20 74 68 65 20 53 51 4c 20 66 75 6e 63 74  to the SQL funct
12360 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 72  ion. The value r
12370 65 74 75 72 6e 65 64 20 62 79 0a 2a 2a 20 74 68  eturned by.** th
12380 65 20 54 43 4c 20 73 63 72 69 70 74 20 69 73 20  e TCL script is 
12390 75 73 65 64 20 61 73 20 74 68 65 20 72 65 74 75  used as the retu
123a0 72 6e 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  rn value of the 
123b0 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2e 20 49 74  SQL function. It
123c0 0a 2a 2a 20 69 73 20 70 61 73 73 65 64 20 74 6f  .** is passed to
123d0 20 53 51 4c 69 74 65 20 75 73 69 6e 67 20 55 54   SQLite using UT
123e0 46 2d 31 36 42 45 20 66 6f 72 20 61 20 55 54 46  F-16BE for a UTF
123f0 2d 38 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e  -8 test_function
12400 28 29 2c 20 55 54 46 2d 38 0a 2a 2a 20 66 6f 72  (), UTF-8.** for
12410 20 61 20 55 54 46 2d 31 36 4c 45 20 74 65 73 74   a UTF-16LE test
12420 5f 66 75 6e 63 74 69 6f 6e 28 29 2c 20 61 6e 64  _function(), and
12430 20 55 54 46 2d 31 36 4c 45 20 66 6f 72 20 61 6e   UTF-16LE for an
12440 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
12450 74 68 61 74 0a 2a 2a 20 70 72 65 66 65 72 73 20  that.** prefers 
12460 55 54 46 2d 31 36 42 45 2e 0a 2a 2f 0a 23 69 66  UTF-16BE..*/.#if
12470 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
12480 5f 55 54 46 31 36 0a 73 74 61 74 69 63 20 76 6f  _UTF16.static vo
12490 69 64 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e  id test_function
124a0 5f 75 74 66 38 28 0a 20 20 73 71 6c 69 74 65 33  _utf8(.  sqlite3
124b0 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20  _context *pCtx, 
124c0 0a 20 20 69 6e 74 20 6e 41 72 67 2c 0a 20 20 73  .  int nArg,.  s
124d0 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
124e0 72 67 76 0a 29 7b 0a 20 20 54 63 6c 5f 49 6e 74  rgv.){.  Tcl_Int
124f0 65 72 70 20 2a 69 6e 74 65 72 70 3b 0a 20 20 54  erp *interp;.  T
12500 63 6c 5f 4f 62 6a 20 2a 70 58 3b 0a 20 20 73 71  cl_Obj *pX;.  sq
12510 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
12520 6c 3b 0a 20 20 69 6e 74 65 72 70 20 3d 20 28 54  l;.  interp = (T
12530 63 6c 5f 49 6e 74 65 72 70 20 2a 29 73 71 6c 69  cl_Interp *)sqli
12540 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 70 43  te3_user_data(pC
12550 74 78 29 3b 0a 20 20 70 58 20 3d 20 54 63 6c 5f  tx);.  pX = Tcl_
12560 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 74 65  NewStringObj("te
12570 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 2d 31  st_function", -1
12580 29 3b 0a 20 20 54 63 6c 5f 49 6e 63 72 52 65 66  );.  Tcl_IncrRef
12590 43 6f 75 6e 74 28 70 58 29 3b 0a 20 20 54 63 6c  Count(pX);.  Tcl
125a0 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
125b0 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 58  ement(interp, pX
125c0 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
125d0 62 6a 28 22 55 54 46 2d 38 22 2c 20 2d 31 29 29  bj("UTF-8", -1))
125e0 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41  ;.  Tcl_ListObjA
125f0 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74  ppendElement(int
12600 65 72 70 2c 20 70 58 2c 20 0a 20 20 20 20 20 20  erp, pX, .      
12610 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
12620 28 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f  ((char*)sqlite3_
12630 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b  value_text(argv[
12640 30 5d 29 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c  0]), -1));.  Tcl
12650 5f 45 76 61 6c 4f 62 6a 45 78 28 69 6e 74 65 72  _EvalObjEx(inter
12660 70 2c 20 70 58 2c 20 30 29 3b 0a 20 20 54 63 6c  p, pX, 0);.  Tcl
12670 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28 70 58  _DecrRefCount(pX
12680 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73  );.  sqlite3_res
12690 75 6c 74 5f 74 65 78 74 28 70 43 74 78 2c 20 54  ult_text(pCtx, T
126a0 63 6c 5f 47 65 74 53 74 72 69 6e 67 52 65 73 75  cl_GetStringResu
126b0 6c 74 28 69 6e 74 65 72 70 29 2c 20 2d 31 2c 20  lt(interp), -1, 
126c0 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54  SQLITE_TRANSIENT
126d0 29 3b 0a 20 20 70 56 61 6c 20 3d 20 73 71 6c 69  );.  pVal = sqli
126e0 74 65 33 56 61 6c 75 65 4e 65 77 28 30 29 3b 0a  te3ValueNew(0);.
126f0 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65    sqlite3ValueSe
12700 74 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c 20 54  tStr(pVal, -1, T
12710 63 6c 5f 47 65 74 53 74 72 69 6e 67 52 65 73 75  cl_GetStringResu
12720 6c 74 28 69 6e 74 65 72 70 29 2c 20 0a 20 20 20  lt(interp), .   
12730 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20     SQLITE_UTF8, 
12740 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
12750 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
12760 5f 74 65 78 74 31 36 62 65 28 70 43 74 78 2c 20  _text16be(pCtx, 
12770 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
12780 78 74 31 36 62 65 28 70 56 61 6c 29 2c 0a 20 20  xt16be(pVal),.  
12790 20 20 20 20 2d 31 2c 20 53 51 4c 49 54 45 5f 54      -1, SQLITE_T
127a0 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 73 71 6c  RANSIENT);.  sql
127b0 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 70 56  ite3ValueFree(pV
127c0 61 6c 29 3b 0a 7d 0a 73 74 61 74 69 63 20 76 6f  al);.}.static vo
127d0 69 64 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e  id test_function
127e0 5f 75 74 66 31 36 6c 65 28 0a 20 20 73 71 6c 69  _utf16le(.  sqli
127f0 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74  te3_context *pCt
12800 78 2c 20 0a 20 20 69 6e 74 20 6e 41 72 67 2c 0a  x, .  int nArg,.
12810 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
12820 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 54 63 6c 5f  **argv.){.  Tcl_
12830 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 3b 0a  Interp *interp;.
12840 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 58 3b 0a 20    Tcl_Obj *pX;. 
12850 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
12860 70 56 61 6c 3b 0a 20 20 69 6e 74 65 72 70 20 3d  pVal;.  interp =
12870 20 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 29 73   (Tcl_Interp *)s
12880 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
12890 28 70 43 74 78 29 3b 0a 20 20 70 58 20 3d 20 54  (pCtx);.  pX = T
128a0 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
128b0 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c  "test_function",
128c0 20 2d 31 29 3b 0a 20 20 54 63 6c 5f 49 6e 63 72   -1);.  Tcl_Incr
128d0 52 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a 20 20  RefCount(pX);.  
128e0 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e  Tcl_ListObjAppen
128f0 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c  dElement(interp,
12900 20 70 58 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69   pX, Tcl_NewStri
12910 6e 67 4f 62 6a 28 22 55 54 46 2d 31 36 4c 45 22  ngObj("UTF-16LE"
12920 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 4c 69  , -1));.  Tcl_Li
12930 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65  stObjAppendEleme
12940 6e 74 28 69 6e 74 65 72 70 2c 20 70 58 2c 20 0a  nt(interp, pX, .
12950 20 20 20 20 20 20 54 63 6c 5f 4e 65 77 53 74 72        Tcl_NewStr
12960 69 6e 67 4f 62 6a 28 28 63 68 61 72 2a 29 73 71  ingObj((char*)sq
12970 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
12980 28 61 72 67 76 5b 30 5d 29 2c 20 2d 31 29 29 3b  (argv[0]), -1));
12990 0a 20 20 54 63 6c 5f 45 76 61 6c 4f 62 6a 45 78  .  Tcl_EvalObjEx
129a0 28 69 6e 74 65 72 70 2c 20 70 58 2c 20 30 29 3b  (interp, pX, 0);
129b0 0a 20 20 54 63 6c 5f 44 65 63 72 52 65 66 43 6f  .  Tcl_DecrRefCo
129c0 75 6e 74 28 70 58 29 3b 0a 20 20 70 56 61 6c 20  unt(pX);.  pVal 
129d0 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65  = sqlite3ValueNe
129e0 77 28 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  w(0);.  sqlite3V
129f0 61 6c 75 65 53 65 74 53 74 72 28 70 56 61 6c 2c  alueSetStr(pVal,
12a00 20 2d 31 2c 20 54 63 6c 5f 47 65 74 53 74 72 69   -1, Tcl_GetStri
12a10 6e 67 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29  ngResult(interp)
12a20 2c 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  , .      SQLITE_
12a30 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41  UTF8, SQLITE_STA
12a40 54 49 43 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  TIC);.  sqlite3_
12a50 72 65 73 75 6c 74 5f 74 65 78 74 28 70 43 74 78  result_text(pCtx
12a60 2c 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f  ,(char*)sqlite3_
12a70 76 61 6c 75 65 5f 74 65 78 74 28 70 56 61 6c 29  value_text(pVal)
12a80 2c 2d 31 2c 53 51 4c 49 54 45 5f 54 52 41 4e 53  ,-1,SQLITE_TRANS
12a90 49 45 4e 54 29 3b 0a 20 20 73 71 6c 69 74 65 33  IENT);.  sqlite3
12aa0 56 61 6c 75 65 46 72 65 65 28 70 56 61 6c 29 3b  ValueFree(pVal);
12ab0 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74  .}.static void t
12ac0 65 73 74 5f 66 75 6e 63 74 69 6f 6e 5f 75 74 66  est_function_utf
12ad0 31 36 62 65 28 0a 20 20 73 71 6c 69 74 65 33 5f  16be(.  sqlite3_
12ae0 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 0a  context *pCtx, .
12af0 20 20 69 6e 74 20 6e 41 72 67 2c 0a 20 20 73 71    int nArg,.  sq
12b00 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72  lite3_value **ar
12b10 67 76 0a 29 7b 0a 20 20 54 63 6c 5f 49 6e 74 65  gv.){.  Tcl_Inte
12b20 72 70 20 2a 69 6e 74 65 72 70 3b 0a 20 20 54 63  rp *interp;.  Tc
12b30 6c 5f 4f 62 6a 20 2a 70 58 3b 0a 20 20 73 71 6c  l_Obj *pX;.  sql
12b40 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c  ite3_value *pVal
12b50 3b 0a 20 20 69 6e 74 65 72 70 20 3d 20 28 54 63  ;.  interp = (Tc
12b60 6c 5f 49 6e 74 65 72 70 20 2a 29 73 71 6c 69 74  l_Interp *)sqlit
12b70 65 33 5f 75 73 65 72 5f 64 61 74 61 28 70 43 74  e3_user_data(pCt
12b80 78 29 3b 0a 20 20 70 58 20 3d 20 54 63 6c 5f 4e  x);.  pX = Tcl_N
12b90 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 74 65 73  ewStringObj("tes
12ba0 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 2d 31 29  t_function", -1)
12bb0 3b 0a 20 20 54 63 6c 5f 49 6e 63 72 52 65 66 43  ;.  Tcl_IncrRefC
12bc0 6f 75 6e 74 28 70 58 29 3b 0a 20 20 54 63 6c 5f  ount(pX);.  Tcl_
12bd0 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65  ListObjAppendEle
12be0 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 58 2c  ment(interp, pX,
12bf0 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
12c00 6a 28 22 55 54 46 2d 31 36 42 45 22 2c 20 2d 31  j("UTF-16BE", -1
12c10 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62  ));.  Tcl_ListOb
12c20 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  jAppendElement(i
12c30 6e 74 65 72 70 2c 20 70 58 2c 20 0a 20 20 20 20  nterp, pX, .    
12c40 20 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f    Tcl_NewStringO
12c50 62 6a 28 28 63 68 61 72 2a 29 73 71 6c 69 74 65  bj((char*)sqlite
12c60 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67  3_value_text(arg
12c70 76 5b 30 5d 29 2c 20 2d 31 29 29 3b 0a 20 20 54  v[0]), -1));.  T
12c80 63 6c 5f 45 76 61 6c 4f 62 6a 45 78 28 69 6e 74  cl_EvalObjEx(int
12c90 65 72 70 2c 20 70 58 2c 20 30 29 3b 0a 20 20 54  erp, pX, 0);.  T
12ca0 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28  cl_DecrRefCount(
12cb0 70 58 29 3b 0a 20 20 70 56 61 6c 20 3d 20 73 71  pX);.  pVal = sq
12cc0 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 30 29  lite3ValueNew(0)
12cd0 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65  ;.  sqlite3Value
12ce0 53 65 74 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c  SetStr(pVal, -1,
12cf0 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 52 65   Tcl_GetStringRe
12d00 73 75 6c 74 28 69 6e 74 65 72 70 29 2c 20 0a 20  sult(interp), . 
12d10 20 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38       SQLITE_UTF8
12d20 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
12d30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75  ;.  sqlite3_resu
12d40 6c 74 5f 74 65 78 74 31 36 28 70 43 74 78 2c 20  lt_text16(pCtx, 
12d50 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
12d60 78 74 31 36 6c 65 28 70 56 61 6c 29 2c 0a 20 20  xt16le(pVal),.  
12d70 20 20 20 20 2d 31 2c 20 53 51 4c 49 54 45 5f 54      -1, SQLITE_T
12d80 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 73 71 6c  RANSIENT);.  sql
12d90 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74  ite3_result_text
12da0 31 36 62 65 28 70 43 74 78 2c 20 73 71 6c 69 74  16be(pCtx, sqlit
12db0 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 6c  e3_value_text16l
12dc0 65 28 70 56 61 6c 29 2c 0a 20 20 20 20 20 20 2d  e(pVal),.      -
12dd0 31 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49  1, SQLITE_TRANSI
12de0 45 4e 54 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  ENT);.  sqlite3_
12df0 72 65 73 75 6c 74 5f 74 65 78 74 31 36 6c 65 28  result_text16le(
12e00 70 43 74 78 2c 20 73 71 6c 69 74 65 33 5f 76 61  pCtx, sqlite3_va
12e10 6c 75 65 5f 74 65 78 74 31 36 6c 65 28 70 56 61  lue_text16le(pVa
12e20 6c 29 2c 0a 20 20 20 20 20 20 2d 31 2c 20 53 51  l),.      -1, SQ
12e30 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
12e40 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46  .  sqlite3ValueF
12e50 72 65 65 28 70 56 61 6c 29 3b 0a 7d 0a 23 65 6e  ree(pVal);.}.#en
12e60 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
12e70 49 54 5f 55 54 46 31 36 20 2a 2f 0a 73 74 61 74  IT_UTF16 */.stat
12e80 69 63 20 69 6e 74 20 74 65 73 74 5f 66 75 6e 63  ic int test_func
12e90 74 69 6f 6e 28 0a 20 20 76 6f 69 64 20 2a 20 63  tion(.  void * c
12ea0 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
12eb0 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
12ec0 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
12ed0 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
12ee0 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20  jv[].){.#ifndef 
12ef0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
12f00 36 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  6.  sqlite3 *db;
12f10 0a 20 20 69 6e 74 20 76 61 6c 3b 0a 0a 20 20 69  .  int val;..  i
12f20 66 28 20 6f 62 6a 63 21 3d 35 20 29 20 67 6f 74  f( objc!=5 ) got
12f30 6f 20 62 61 64 5f 61 72 67 73 3b 0a 20 20 69 66  o bad_args;.  if
12f40 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69  ( getDbPointer(i
12f50 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
12f60 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
12f70 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  db) ) return TCL
12f80 5f 45 52 52 4f 52 3b 0a 0a 20 20 69 66 28 20 54  _ERROR;..  if( T
12f90 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 42 6f  CL_OK!=Tcl_GetBo
12fa0 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74  oleanFromObj(int
12fb0 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 76  erp, objv[2], &v
12fc0 61 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  al) ) return TCL
12fd0 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 76 61  _ERROR;.  if( va
12fe0 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
12ff0 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
13000 28 64 62 2c 20 22 74 65 73 74 5f 66 75 6e 63 74  (db, "test_funct
13010 69 6f 6e 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f  ion", 1, SQLITE_
13020 55 54 46 38 2c 20 0a 20 20 20 20 20 20 20 20 69  UTF8, .        i
13030 6e 74 65 72 70 2c 20 74 65 73 74 5f 66 75 6e 63  nterp, test_func
13040 74 69 6f 6e 5f 75 74 66 38 2c 20 30 2c 20 30 29  tion_utf8, 0, 0)
13050 3b 0a 20 20 7d 0a 20 20 69 66 28 20 54 43 4c 5f  ;.  }.  if( TCL_
13060 4f 4b 21 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c 65  OK!=Tcl_GetBoole
13070 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  anFromObj(interp
13080 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 76 61 6c 29  , objv[3], &val)
13090 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
130a0 52 4f 52 3b 0a 20 20 69 66 28 20 76 61 6c 20 29  ROR;.  if( val )
130b0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72  {.    sqlite3_cr
130c0 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62  eate_function(db
130d0 2c 20 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e  , "test_function
130e0 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f 55 54 46  ", 1, SQLITE_UTF
130f0 31 36 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 69  16LE, .        i
13100 6e 74 65 72 70 2c 20 74 65 73 74 5f 66 75 6e 63  nterp, test_func
13110 74 69 6f 6e 5f 75 74 66 31 36 6c 65 2c 20 30 2c  tion_utf16le, 0,
13120 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 54   0);.  }.  if( T
13130 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 42 6f  CL_OK!=Tcl_GetBo
13140 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74  oleanFromObj(int
13150 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 26 76  erp, objv[4], &v
13160 61 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  al) ) return TCL
13170 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 76 61  _ERROR;.  if( va
13180 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
13190 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
131a0 28 64 62 2c 20 22 74 65 73 74 5f 66 75 6e 63 74  (db, "test_funct
131b0 69 6f 6e 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f  ion", 1, SQLITE_
131c0 55 54 46 31 36 42 45 2c 20 0a 20 20 20 20 20 20  UTF16BE, .      
131d0 20 20 69 6e 74 65 72 70 2c 20 74 65 73 74 5f 66    interp, test_f
131e0 75 6e 63 74 69 6f 6e 5f 75 74 66 31 36 62 65 2c  unction_utf16be,
131f0 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 0a 20 20 72   0, 0);.  }..  r
13200 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 62 61  eturn TCL_OK;.ba
13210 64 5f 61 72 67 73 3a 0a 20 20 54 63 6c 5f 41 70  d_args:.  Tcl_Ap
13220 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
13230 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
13240 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
13250 0a 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74  .      Tcl_GetSt
13260 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76  ringFromObj(objv
13270 5b 30 5d 2c 20 30 29 2c 20 22 20 3c 44 42 3e 20  [0], 0), " <DB> 
13280 3c 75 74 66 38 3e 20 3c 75 74 66 31 36 6c 65 3e  <utf8> <utf16le>
13290 20 3c 75 74 66 31 36 62 65 3e 22 2c 20 30 29 3b   <utf16be>", 0);
132a0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
132b0 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a  E_OMIT_UTF16 */.
132c0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
132d0 4f 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OR;.}../*.** Usa
132e0 67 65 3a 20 20 20 20 20 20 20 20 20 73 71 6c 69  ge:         sqli
132f0 74 65 33 5f 74 65 73 74 5f 65 72 72 73 74 72 20  te3_test_errstr 
13300 3c 65 72 72 20 63 6f 64 65 3e 0a 2a 2a 0a 2a 2a  <err code>.**.**
13310 20 54 65 73 74 20 74 68 61 74 20 74 68 65 20 65   Test that the e
13320 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20  nglish language 
13330 73 74 72 69 6e 67 20 65 71 75 69 76 61 6c 65 6e  string equivalen
13340 74 73 20 66 6f 72 20 73 71 6c 69 74 65 20 65 72  ts for sqlite er
13350 72 6f 72 20 63 6f 64 65 73 0a 2a 2a 20 61 72 65  ror codes.** are
13360 20 73 61 6e 65 2e 20 54 68 65 20 70 61 72 61 6d   sane. The param
13370 65 74 65 72 20 69 73 20 61 6e 20 69 6e 74 65 67  eter is an integ
13380 65 72 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  er representing 
13390 61 6e 20 73 71 6c 69 74 65 20 65 72 72 6f 72 20  an sqlite error 
133a0 63 6f 64 65 2e 0a 2a 2a 20 54 68 65 20 72 65 73  code..** The res
133b0 75 6c 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66  ult is a list of
133c0 20 74 77 6f 20 65 6c 65 6d 65 6e 74 73 2c 20 74   two elements, t
133d0 68 65 20 73 74 72 69 6e 67 20 72 65 70 72 65 73  he string repres
133e0 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a  entation of the.
133f0 2a 2a 20 65 72 72 6f 72 20 63 6f 64 65 20 61 6e  ** error code an
13400 64 20 74 68 65 20 65 6e 67 6c 69 73 68 20 6c 61  d the english la
13410 6e 67 75 61 67 65 20 65 78 70 6c 61 6e 61 74 69  nguage explanati
13420 6f 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  on..*/.static in
13430 74 20 74 65 73 74 5f 65 72 72 73 74 72 28 0a 20  t test_errstr(. 
13440 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
13450 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
13460 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
13470 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
13480 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
13490 0a 20 20 63 68 61 72 20 2a 7a 43 6f 64 65 3b 0a  .  char *zCode;.
134a0 20 20 69 6e 74 20 69 3b 0a 20 20 69 66 28 20 6f    int i;.  if( o
134b0 62 6a 63 21 3d 31 20 29 7b 0a 20 20 20 20 54 63  bjc!=1 ){.    Tc
134c0 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69  l_WrongNumArgs(i
134d0 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20  nterp, 1, objv, 
134e0 22 3c 65 72 72 6f 72 20 63 6f 64 65 3e 22 29 3b  "<error code>");
134f0 0a 20 20 7d 0a 0a 20 20 7a 43 6f 64 65 20 3d 20  .  }..  zCode = 
13500 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
13510 6a 76 5b 31 5d 29 3b 0a 20 20 66 6f 72 28 69 3d  jv[1]);.  for(i=
13520 30 3b 20 69 3c 32 30 30 3b 20 69 2b 2b 29 7b 0a  0; i<200; i++){.
13530 20 20 20 20 69 66 28 20 30 3d 3d 73 74 72 63 6d      if( 0==strcm
13540 70 28 74 31 45 72 72 6f 72 4e 61 6d 65 28 69 29  p(t1ErrorName(i)
13550 2c 20 7a 43 6f 64 65 29 20 29 20 62 72 65 61 6b  , zCode) ) break
13560 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 53 65 74 52  ;.  }.  Tcl_SetR
13570 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63  esult(interp, (c
13580 68 61 72 20 2a 29 73 71 6c 69 74 65 33 45 72 72  har *)sqlite3Err
13590 53 74 72 28 69 29 2c 20 30 29 3b 0a 20 20 72 65  Str(i), 0);.  re
135a0 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
135b0 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 20  /*.** Usage:    
135c0 62 72 65 61 6b 70 6f 69 6e 74 0a 2a 2a 0a 2a 2a  breakpoint.**.**
135d0 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 65 78   This routine ex
135e0 69 73 74 73 20 66 6f 72 20 6f 6e 65 20 70 75 72  ists for one pur
135f0 70 6f 73 65 20 2d 20 74 6f 20 70 72 6f 76 69 64  pose - to provid
13600 65 20 61 20 70 6c 61 63 65 20 74 6f 20 70 75 74  e a place to put
13610 20 61 0a 2a 2a 20 62 72 65 61 6b 70 6f 69 6e 74   a.** breakpoint
13620 20 77 69 74 68 20 47 44 42 20 74 68 61 74 20 63   with GDB that c
13630 61 6e 20 62 65 20 74 72 69 67 67 65 72 65 64 20  an be triggered 
13640 75 73 69 6e 67 20 54 43 4c 20 63 6f 64 65 2e 20  using TCL code. 
13650 20 54 68 65 20 75 73 65 0a 2a 2a 20 66 6f 72 20   The use.** for 
13660 74 68 69 73 20 69 73 20 77 68 65 6e 20 61 20 70  this is when a p
13670 61 72 74 69 63 75 6c 61 72 20 74 65 73 74 20 66  articular test f
13680 61 69 6c 73 20 6f 6e 20 28 73 61 79 29 20 74 68  ails on (say) th
13690 65 20 31 34 38 35 74 68 20 69 74 65 72 61 74 69  e 1485th iterati
136a0 6f 6e 2e 0a 2a 2a 20 49 6e 20 74 68 65 20 54 43  on..** In the TC
136b0 4c 20 74 65 73 74 20 73 63 72 69 70 74 2c 20 77  L test script, w
136c0 65 20 63 61 6e 20 61 64 64 20 63 6f 64 65 20 6c  e can add code l
136d0 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20  ike this:.**.** 
136e0 20 20 20 20 69 66 20 7b 24 69 3d 3d 31 34 38 35      if {$i==1485
136f0 7d 20 62 72 65 61 6b 70 6f 69 6e 74 0a 2a 2a 0a  } breakpoint.**.
13700 2a 2a 20 54 68 65 6e 20 72 75 6e 20 74 65 73 74  ** Then run test
13710 66 69 78 74 75 72 65 20 69 6e 20 74 68 65 20 64  fixture in the d
13720 65 62 75 67 67 65 72 20 61 6e 64 20 77 61 69 74  ebugger and wait
13730 20 66 6f 72 20 74 68 65 20 62 72 65 61 6b 70 6f   for the breakpo
13740 69 6e 74 20 74 6f 0a 2a 2a 20 66 69 72 65 2e 20  int to.** fire. 
13750 20 54 68 65 6e 20 61 64 64 69 74 69 6f 6e 61 6c   Then additional
13760 20 62 72 65 61 6b 70 6f 69 6e 74 73 20 63 61 6e   breakpoints can
13770 20 62 65 20 73 65 74 20 74 6f 20 74 72 61 63 65   be set to trace
13780 20 64 6f 77 6e 20 74 68 65 20 62 75 67 2e 0a 2a   down the bug..*
13790 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
137a0 74 5f 62 72 65 61 6b 70 6f 69 6e 74 28 0a 20 20  t_breakpoint(.  
137b0 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
137c0 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
137d0 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
137e0 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
137f0 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
13800 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
13810 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
13820 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
13830 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
13840 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
13850 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
13860 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
13870 20 2a 2f 0a 29 7b 0a 20 20 72 65 74 75 72 6e 20   */.){.  return 
13880 54 43 4c 5f 4f 4b 3b 20 20 20 20 20 20 20 20 20  TCL_OK;         
13890 2f 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 20 2a 2f  /* Do nothing */
138a0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
138b0 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f     sqlite3_bind_
138c0 7a 65 72 6f 62 6c 6f 62 20 20 53 54 4d 54 20 49  zeroblob  STMT I
138d0 44 58 20 4e 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20  DX N.**.** Test 
138e0 74 68 65 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  the sqlite3_bind
138f0 5f 7a 65 72 6f 62 6c 6f 62 20 69 6e 74 65 72 66  _zeroblob interf
13900 61 63 65 2e 20 20 53 54 4d 54 20 69 73 20 61 20  ace.  STMT is a 
13910 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
13920 6e 74 2e 0a 2a 2a 20 49 44 58 20 69 73 20 74 68  nt..** IDX is th
13930 65 20 69 6e 64 65 78 20 6f 66 20 61 20 77 69 6c  e index of a wil
13940 64 63 61 72 64 20 69 6e 20 74 68 65 20 70 72 65  dcard in the pre
13950 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e  pared statement.
13960 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a    This command.*
13970 2a 20 62 69 6e 64 73 20 61 20 4e 2d 62 79 74 65  * binds a N-byte
13980 20 7a 65 72 6f 2d 66 69 6c 6c 65 64 20 42 4c 4f   zero-filled BLO
13990 42 20 74 6f 20 74 68 65 20 77 69 6c 64 63 61 72  B to the wildcar
139a0 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  d..*/.static int
139b0 20 74 65 73 74 5f 62 69 6e 64 5f 7a 65 72 6f 62   test_bind_zerob
139c0 6c 6f 62 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  lob(.  void * cl
139d0 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
139e0 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
139f0 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
13a00 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
13a10 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
13a20 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20  _stmt *pStmt;.  
13a30 69 6e 74 20 69 64 78 3b 0a 20 20 69 6e 74 20 6e  int idx;.  int n
13a40 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69  ;.  int rc;..  i
13a50 66 28 20 6f 62 6a 63 21 3d 34 20 29 7b 0a 20 20  f( objc!=4 ){.  
13a60 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72    Tcl_WrongNumAr
13a70 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62  gs(interp, 1, ob
13a80 6a 76 2c 20 22 53 54 4d 54 20 49 44 58 20 4e 22  jv, "STMT IDX N"
13a90 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
13aa0 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
13ab0 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  if( getStmtPoint
13ac0 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
13ad0 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
13ae0 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74  ), &pStmt) ) ret
13af0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
13b00 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46   if( Tcl_GetIntF
13b10 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
13b20 62 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20 29 20  bjv[2], &idx) ) 
13b30 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
13b40 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49  ;.  if( Tcl_GetI
13b50 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  ntFromObj(interp
13b60 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 6e 29 20 29  , objv[3], &n) )
13b70 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
13b80 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  R;..  rc = sqlit
13b90 65 33 5f 62 69 6e 64 5f 7a 65 72 6f 62 6c 6f 62  e3_bind_zeroblob
13ba0 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 6e 29 3b  (pStmt, idx, n);
13bb0 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65  .  if( sqlite3Te
13bc0 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70  stErrCode(interp
13bd0 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74 6d 74  , StmtToDb(pStmt
13be0 29 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20  ), rc) ) return 
13bf0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  TCL_ERROR;.  if(
13c00 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
13c10 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  {.    return TCL
13c20 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72  _ERROR;.  }..  r
13c30 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
13c40 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20  ./*.** Usage:   
13c50 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
13c60 20 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 0a 2a    STMT N VALUE.*
13c70 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 73 71  *.** Test the sq
13c80 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 20 69  lite3_bind_int i
13c90 6e 74 65 72 66 61 63 65 2e 20 20 53 54 4d 54 20  nterface.  STMT 
13ca0 69 73 20 61 20 70 72 65 70 61 72 65 64 20 73 74  is a prepared st
13cb0 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73  atement..** N is
13cc0 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20   the index of a 
13cd0 77 69 6c 64 63 61 72 64 20 69 6e 20 74 68 65 20  wildcard in the 
13ce0 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
13cf0 6e 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e  nt.  This comman
13d00 64 0a 2a 2a 20 62 69 6e 64 73 20 61 20 33 32 2d  d.** binds a 32-
13d10 62 69 74 20 69 6e 74 65 67 65 72 20 56 41 4c 55  bit integer VALU
13d20 45 20 74 6f 20 74 68 61 74 20 77 69 6c 64 63 61  E to that wildca
13d30 72 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  rd..*/.static in
13d40 74 20 74 65 73 74 5f 62 69 6e 64 5f 69 6e 74 28  t test_bind_int(
13d50 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
13d60 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
13d70 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
13d80 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
13d90 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
13da0 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
13db0 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20  t *pStmt;.  int 
13dc0 69 64 78 3b 0a 20 20 69 6e 74 20 76 61 6c 75 65  idx;.  int value
13dd0 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69  ;.  int rc;..  i
13de0 66 28 20 6f 62 6a 63 21 3d 34 20 29 7b 0a 20 20  f( objc!=4 ){.  
13df0 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
13e00 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
13e10 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
13e20 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20   be \"",.       
13e30 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72   Tcl_GetStringFr
13e40 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30  omObj(objv[0], 0
13e50 29 2c 20 22 20 53 54 4d 54 20 4e 20 56 41 4c 55  ), " STMT N VALU
13e60 45 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  E", 0);.    retu
13e70 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
13e80 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74  }..  if( getStmt
13e90 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
13ea0 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
13eb0 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20  jv[1]), &pStmt) 
13ec0 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
13ed0 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65  OR;.  if( Tcl_Ge
13ee0 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65  tIntFromObj(inte
13ef0 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 69 64  rp, objv[2], &id
13f00 78 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  x) ) return TCL_
13f10 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c  ERROR;.  if( Tcl
13f20 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
13f30 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20  nterp, objv[3], 
13f40 26 76 61 6c 75 65 29 20 29 20 72 65 74 75 72 6e  &value) ) return
13f50 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72   TCL_ERROR;..  r
13f60 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  c = sqlite3_bind
13f70 5f 69 6e 74 28 70 53 74 6d 74 2c 20 69 64 78 2c  _int(pStmt, idx,
13f80 20 76 61 6c 75 65 29 3b 0a 20 20 69 66 28 20 73   value);.  if( s
13f90 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64  qlite3TestErrCod
13fa0 65 28 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f  e(interp, StmtTo
13fb0 44 62 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29  Db(pStmt), rc) )
13fc0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
13fd0 52 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  R;.  if( rc!=SQL
13fe0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65  ITE_OK ){.    re
13ff0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
14000 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54 43    }..  return TC
14010 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  L_OK;.}.../*.** 
14020 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33  Usage:   sqlite3
14030 5f 62 69 6e 64 5f 69 6e 74 36 34 20 20 53 54 4d  _bind_int64  STM
14040 54 20 4e 20 56 41 4c 55 45 0a 2a 2a 0a 2a 2a 20  T N VALUE.**.** 
14050 54 65 73 74 20 74 68 65 20 73 71 6c 69 74 65 33  Test the sqlite3
14060 5f 62 69 6e 64 5f 69 6e 74 36 34 20 69 6e 74 65  _bind_int64 inte
14070 72 66 61 63 65 2e 20 20 53 54 4d 54 20 69 73 20  rface.  STMT is 
14080 61 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  a prepared state
14090 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20 74 68  ment..** N is th
140a0 65 20 69 6e 64 65 78 20 6f 66 20 61 20 77 69 6c  e index of a wil
140b0 64 63 61 72 64 20 69 6e 20 74 68 65 20 70 72 65  dcard in the pre
140c0 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e  pared statement.
140d0 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a    This command.*
140e0 2a 20 62 69 6e 64 73 20 61 20 36 34 2d 62 69 74  * binds a 64-bit
140f0 20 69 6e 74 65 67 65 72 20 56 41 4c 55 45 20 74   integer VALUE t
14100 6f 20 74 68 61 74 20 77 69 6c 64 63 61 72 64 2e  o that wildcard.
14110 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
14120 65 73 74 5f 62 69 6e 64 5f 69 6e 74 36 34 28 0a  est_bind_int64(.
14130 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
14140 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
14150 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
14160 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
14170 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
14180 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  {.  sqlite3_stmt
14190 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69   *pStmt;.  int i
141a0 64 78 3b 0a 20 20 69 36 34 20 76 61 6c 75 65 3b  dx;.  i64 value;
141b0 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66  .  int rc;..  if
141c0 28 20 6f 62 6a 63 21 3d 34 20 29 7b 0a 20 20 20  ( objc!=4 ){.   
141d0 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
141e0 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
141f0 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
14200 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20  be \"",.        
14210 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f  Tcl_GetStringFro
14220 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29  mObj(objv[0], 0)
14230 2c 20 22 20 53 54 4d 54 20 4e 20 56 41 4c 55 45  , " STMT N VALUE
14240 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
14250 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
14260 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  ..  if( getStmtP
14270 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
14280 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
14290 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29  v[1]), &pStmt) )
142a0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
142b0 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  R;.  if( Tcl_Get
142c0 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
142d0 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 69 64 78  p, objv[2], &idx
142e0 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
142f0 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f  RROR;.  if( Tcl_
14300 47 65 74 57 69 64 65 49 6e 74 46 72 6f 6d 4f 62  GetWideIntFromOb
14310 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33  j(interp, objv[3
14320 5d 2c 20 26 76 61 6c 75 65 29 20 29 20 72 65 74  ], &value) ) ret
14330 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a  urn TCL_ERROR;..
14340 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62    rc = sqlite3_b
14350 69 6e 64 5f 69 6e 74 36 34 28 70 53 74 6d 74 2c  ind_int64(pStmt,
14360 20 69 64 78 2c 20 76 61 6c 75 65 29 3b 0a 20 20   idx, value);.  
14370 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45  if( sqlite3TestE
14380 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 53  rrCode(interp, S
14390 74 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 2c 20  tmtToDb(pStmt), 
143a0 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  rc) ) return TCL
143b0 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 63  _ERROR;.  if( rc
143c0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
143d0 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
143e0 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75  ROR;.  }..  retu
143f0 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f  rn TCL_OK;.}.../
14400 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71  *.** Usage:   sq
14410 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c  lite3_bind_doubl
14420 65 20 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 0a  e  STMT N VALUE.
14430 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 73  **.** Test the s
14440 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62  qlite3_bind_doub
14450 6c 65 20 69 6e 74 65 72 66 61 63 65 2e 20 20 53  le interface.  S
14460 54 4d 54 20 69 73 20 61 20 70 72 65 70 61 72 65  TMT is a prepare
14470 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20  d statement..** 
14480 4e 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  N is the index o
14490 66 20 61 20 77 69 6c 64 63 61 72 64 20 69 6e 20  f a wildcard in 
144a0 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
144b0 74 65 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 6f  tement.  This co
144c0 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64 73 20 61  mmand.** binds a
144d0 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20   64-bit integer 
144e0 56 41 4c 55 45 20 74 6f 20 74 68 61 74 20 77 69  VALUE to that wi
144f0 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73 74 61 74 69  ldcard..*/.stati
14500 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f  c int test_bind_
14510 64 6f 75 62 6c 65 28 0a 20 20 76 6f 69 64 20 2a  double(.  void *
14520 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
14530 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
14540 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
14550 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
14560 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
14570 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
14580 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 64 6f  .  int idx;.  do
14590 75 62 6c 65 20 76 61 6c 75 65 3b 0a 20 20 69 6e  uble value;.  in
145a0 74 20 72 63 3b 0a 20 20 63 6f 6e 73 74 20 63 68  t rc;.  const ch
145b0 61 72 20 2a 7a 56 61 6c 3b 0a 20 20 69 6e 74 20  ar *zVal;.  int 
145c0 69 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  i;.  static cons
145d0 74 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 63  t struct {.    c
145e0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
145f0 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66  ;     /* Name of
14600 20 74 68 65 20 73 70 65 63 69 61 6c 20 66 6c 6f   the special flo
14610 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75  ating point valu
14620 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  e */.    unsigne
14630 64 20 69 6e 74 20 69 55 70 70 65 72 3b 20 20 20  d int iUpper;   
14640 2f 2a 20 55 70 70 65 72 20 33 32 20 62 69 74 73  /* Upper 32 bits
14650 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
14660 20 69 6e 74 20 69 4c 6f 77 65 72 3b 20 20 20 2f   int iLower;   /
14670 2a 20 4c 6f 77 65 72 20 33 32 20 62 69 74 73 20  * Lower 32 bits 
14680 2a 2f 0a 20 20 7d 20 61 53 70 65 63 69 61 6c 46  */.  } aSpecialF
14690 70 5b 5d 20 3d 20 7b 0a 20 20 20 20 7b 20 20 22  p[] = {.    {  "
146a0 4e 61 4e 22 2c 20 20 20 20 20 20 30 78 37 66 66  NaN",      0x7ff
146b0 66 66 66 66 66 2c 20 30 78 66 66 66 66 66 66 66  fffff, 0xfffffff
146c0 66 20 7d 2c 0a 20 20 20 20 7b 20 20 22 53 4e 61  f },.    {  "SNa
146d0 4e 22 2c 20 20 20 20 20 30 78 37 66 66 37 66 66  N",     0x7ff7ff
146e0 66 66 2c 20 30 78 66 66 66 66 66 66 66 66 20 7d  ff, 0xffffffff }
146f0 2c 0a 20 20 20 20 7b 20 20 22 2d 4e 61 4e 22 2c  ,.    {  "-NaN",
14700 20 20 20 20 20 30 78 66 66 66 66 66 66 66 66 2c       0xffffffff,
14710 20 30 78 66 66 66 66 66 66 66 66 20 7d 2c 0a 20   0xffffffff },. 
14720 20 20 20 7b 20 20 22 2d 53 4e 61 4e 22 2c 20 20     {  "-SNaN",  
14730 20 20 30 78 66 66 66 37 66 66 66 66 2c 20 30 78    0xfff7ffff, 0x
14740 66 66 66 66 66 66 66 66 20 7d 2c 0a 20 20 20 20  ffffffff },.    
14750 7b 20 20 22 2b 49 6e 66 22 2c 20 20 20 20 20 30  {  "+Inf",     0
14760 78 37 66 66 30 30 30 30 30 2c 20 30 78 30 30 30  x7ff00000, 0x000
14770 30 30 30 30 30 20 7d 2c 0a 20 20 20 20 7b 20 20  00000 },.    {  
14780 22 2d 49 6e 66 22 2c 20 20 20 20 20 30 78 66 66  "-Inf",     0xff
14790 66 30 30 30 30 30 2c 20 30 78 30 30 30 30 30 30  f00000, 0x000000
147a0 30 30 20 7d 2c 0a 20 20 20 20 7b 20 20 22 45 70  00 },.    {  "Ep
147b0 73 69 6c 6f 6e 22 2c 20 20 30 78 30 30 30 30 30  silon",  0x00000
147c0 30 30 30 2c 20 30 78 30 30 30 30 30 30 30 31 20  000, 0x00000001 
147d0 7d 2c 0a 20 20 20 20 7b 20 20 22 2d 45 70 73 69  },.    {  "-Epsi
147e0 6c 6f 6e 22 2c 20 30 78 38 30 30 30 30 30 30 30  lon", 0x80000000
147f0 2c 20 30 78 30 30 30 30 30 30 30 31 20 7d 2c 0a  , 0x00000001 },.
14800 20 20 20 20 7b 20 20 22 4e 61 4e 30 22 2c 20 20      {  "NaN0",  
14810 20 20 20 30 78 37 66 66 38 30 30 30 30 2c 20 30     0x7ff80000, 0
14820 78 30 30 30 30 30 30 30 30 20 7d 2c 0a 20 20 20  x00000000 },.   
14830 20 7b 20 20 22 2d 4e 61 4e 30 22 2c 20 20 20 20   {  "-NaN0",    
14840 30 78 66 66 66 38 30 30 30 30 2c 20 30 78 30 30  0xfff80000, 0x00
14850 30 30 30 30 30 30 20 7d 2c 0a 20 20 7d 3b 0a 0a  000000 },.  };..
14860 20 20 69 66 28 20 6f 62 6a 63 21 3d 34 20 29 7b    if( objc!=4 ){
14870 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
14880 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
14890 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
148a0 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20  uld be \"",.    
148b0 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
148c0 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d  gFromObj(objv[0]
148d0 2c 20 30 29 2c 20 22 20 53 54 4d 54 20 4e 20 56  , 0), " STMT N V
148e0 41 4c 55 45 22 2c 20 30 29 3b 0a 20 20 20 20 72  ALUE", 0);.    r
148f0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
14900 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53  .  }..  if( getS
14910 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tmtPointer(inter
14920 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
14930 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d  (objv[1]), &pStm
14940 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  t) ) return TCL_
14950 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c  ERROR;.  if( Tcl
14960 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
14970 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20  nterp, objv[2], 
14980 26 69 64 78 29 20 29 20 72 65 74 75 72 6e 20 54  &idx) ) return T
14990 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 2f 2a 20  CL_ERROR;..  /* 
149a0 49 6e 74 65 72 63 65 70 74 20 74 68 65 20 73 74  Intercept the st
149b0 72 69 6e 67 20 22 4e 61 4e 22 20 61 6e 64 20 67  ring "NaN" and g
149c0 65 6e 65 72 61 74 65 20 61 20 4e 61 4e 20 76 61  enerate a NaN va
149d0 6c 75 65 20 66 6f 72 20 69 74 2e 0a 20 20 2a 2a  lue for it..  **
149e0 20 41 6c 6c 20 6f 74 68 65 72 20 73 74 72 69 6e   All other strin
149f0 67 73 20 61 72 65 20 70 61 73 73 65 64 20 74 68  gs are passed th
14a00 72 6f 75 67 68 20 74 6f 20 54 63 6c 5f 47 65 74  rough to Tcl_Get
14a10 44 6f 75 62 6c 65 46 72 6f 6d 4f 62 6a 28 29 2e  DoubleFromObj().
14a20 0a 20 20 2a 2a 20 54 63 6c 5f 47 65 74 44 6f 75  .  ** Tcl_GetDou
14a30 62 6c 65 46 72 6f 6d 4f 62 6a 28 29 20 73 68 6f  bleFromObj() sho
14a40 75 6c 64 20 75 6e 64 65 72 73 74 61 6e 64 20 22  uld understand "
14a50 4e 61 4e 22 20 62 75 74 20 73 6f 6d 65 20 76 65  NaN" but some ve
14a60 72 73 69 6f 6e 73 0a 20 20 2a 2a 20 63 6f 6e 74  rsions.  ** cont
14a70 61 69 6e 20 61 20 62 75 67 2e 0a 20 20 2a 2f 0a  ain a bug..  */.
14a80 20 20 7a 56 61 6c 20 3d 20 54 63 6c 5f 47 65 74    zVal = Tcl_Get
14a90 53 74 72 69 6e 67 28 6f 62 6a 76 5b 33 5d 29 3b  String(objv[3]);
14aa0 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 73 69  .  for(i=0; i<si
14ab0 7a 65 6f 66 28 61 53 70 65 63 69 61 6c 46 70 29  zeof(aSpecialFp)
14ac0 2f 73 69 7a 65 6f 66 28 61 53 70 65 63 69 61 6c  /sizeof(aSpecial
14ad0 46 70 5b 30 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20  Fp[0]); i++){.  
14ae0 20 20 69 66 28 20 73 74 72 63 6d 70 28 61 53 70    if( strcmp(aSp
14af0 65 63 69 61 6c 46 70 5b 69 5d 2e 7a 4e 61 6d 65  ecialFp[i].zName
14b00 2c 20 7a 56 61 6c 29 3d 3d 30 20 29 7b 0a 20 20  , zVal)==0 ){.  
14b10 20 20 20 20 73 71 6c 69 74 65 33 5f 75 69 6e 74      sqlite3_uint
14b20 36 34 20 78 3b 0a 20 20 20 20 20 20 78 20 3d 20  64 x;.      x = 
14b30 61 53 70 65 63 69 61 6c 46 70 5b 69 5d 2e 69 55  aSpecialFp[i].iU
14b40 70 70 65 72 3b 0a 20 20 20 20 20 20 78 20 3c 3c  pper;.      x <<
14b50 3d 20 33 32 3b 0a 20 20 20 20 20 20 78 20 7c 3d  = 32;.      x |=
14b60 20 61 53 70 65 63 69 61 6c 46 70 5b 69 5d 2e 69   aSpecialFp[i].i
14b70 4c 6f 77 65 72 3b 0a 20 20 20 20 20 20 61 73 73  Lower;.      ass
14b80 65 72 74 28 20 73 69 7a 65 6f 66 28 76 61 6c 75  ert( sizeof(valu
14b90 65 29 3d 3d 38 20 29 3b 0a 20 20 20 20 20 20 61  e)==8 );.      a
14ba0 73 73 65 72 74 28 20 73 69 7a 65 6f 66 28 78 29  ssert( sizeof(x)
14bb0 3d 3d 38 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d  ==8 );.      mem
14bc0 63 70 79 28 26 76 61 6c 75 65 2c 20 26 78 2c 20  cpy(&value, &x, 
14bd0 38 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  8);.      break;
14be0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
14bf0 20 69 3e 3d 73 69 7a 65 6f 66 28 61 53 70 65 63   i>=sizeof(aSpec
14c00 69 61 6c 46 70 29 2f 73 69 7a 65 6f 66 28 61 53  ialFp)/sizeof(aS
14c10 70 65 63 69 61 6c 46 70 5b 30 5d 29 20 26 26 0a  pecialFp[0]) &&.
14c20 20 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74           Tcl_Get
14c30 44 6f 75 62 6c 65 46 72 6f 6d 4f 62 6a 28 69 6e  DoubleFromObj(in
14c40 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26  terp, objv[3], &
14c50 76 61 6c 75 65 29 20 29 7b 0a 20 20 20 20 72 65  value) ){.    re
14c60 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
14c70 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
14c80 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 70  e3_bind_double(p
14c90 53 74 6d 74 2c 20 69 64 78 2c 20 76 61 6c 75 65  Stmt, idx, value
14ca0 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
14cb0 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65  TestErrCode(inte
14cc0 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74  rp, StmtToDb(pSt
14cd0 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74 75 72  mt), rc) ) retur
14ce0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
14cf0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
14d00 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54   ){.    return T
14d10 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
14d20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
14d30 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
14d40 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e    sqlite3_bind_n
14d50 75 6c 6c 20 20 53 54 4d 54 20 4e 0a 2a 2a 0a 2a  ull  STMT N.**.*
14d60 2a 20 54 65 73 74 20 74 68 65 20 73 71 6c 69 74  * Test the sqlit
14d70 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 20 69 6e 74  e3_bind_null int
14d80 65 72 66 61 63 65 2e 20 20 53 54 4d 54 20 69 73  erface.  STMT is
14d90 20 61 20 70 72 65 70 61 72 65 64 20 73 74 61 74   a prepared stat
14da0 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20 74  ement..** N is t
14db0 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20 77 69  he index of a wi
14dc0 6c 64 63 61 72 64 20 69 6e 20 74 68 65 20 70 72  ldcard in the pr
14dd0 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
14de0 2e 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 0a  .  This command.
14df0 2a 2a 20 62 69 6e 64 73 20 61 20 4e 55 4c 4c 20  ** binds a NULL 
14e00 74 6f 20 74 68 65 20 77 69 6c 64 63 61 72 64 2e  to the wildcard.
14e10 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
14e20 65 73 74 5f 62 69 6e 64 5f 6e 75 6c 6c 28 0a 20  est_bind_null(. 
14e30 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
14e40 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
14e50 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
14e60 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
14e70 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
14e80 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
14e90 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64  *pStmt;.  int id
14ea0 78 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20  x;.  int rc;..  
14eb0 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20  if( objc!=3 ){. 
14ec0 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
14ed0 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
14ee0 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
14ef0 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20  d be \"",.      
14f00 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46    Tcl_GetStringF
14f10 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20  romObj(objv[0], 
14f20 30 29 2c 20 22 20 53 54 4d 54 20 4e 22 2c 20 30  0), " STMT N", 0
14f30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
14f40 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
14f50 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  if( getStmtPoint
14f60 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
14f70 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
14f80 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74  ), &pStmt) ) ret
14f90 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
14fa0 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46   if( Tcl_GetIntF
14fb0 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
14fc0 62 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20 29 20  bjv[2], &idx) ) 
14fd0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
14fe0 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  ;..  rc = sqlite
14ff0 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 70 53 74 6d  3_bind_null(pStm
15000 74 2c 20 69 64 78 29 3b 0a 20 20 69 66 28 20 73  t, idx);.  if( s
15010 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64  qlite3TestErrCod
15020 65 28 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f  e(interp, StmtTo
15030 44 62 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29  Db(pStmt), rc) )
15040 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
15050 52 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  R;.  if( rc!=SQL
15060 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65  ITE_OK ){.    re
15070 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
15080 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54 43    }..  return TC
15090 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
150a0 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f  sage:   sqlite3_
150b0 62 69 6e 64 5f 74 65 78 74 20 20 53 54 4d 54 20  bind_text  STMT 
150c0 4e 20 53 54 52 49 4e 47 20 42 59 54 45 53 0a 2a  N STRING BYTES.*
150d0 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 73 71  *.** Test the sq
150e0 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 20  lite3_bind_text 
150f0 69 6e 74 65 72 66 61 63 65 2e 20 20 53 54 4d 54  interface.  STMT
15100 20 69 73 20 61 20 70 72 65 70 61 72 65 64 20 73   is a prepared s
15110 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69  tatement..** N i
15120 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61  s the index of a
15130 20 77 69 6c 64 63 61 72 64 20 69 6e 20 74 68 65   wildcard in the
15140 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
15150 65 6e 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d 61  ent.  This comma
15160 6e 64 0a 2a 2a 20 62 69 6e 64 73 20 61 20 55 54  nd.** binds a UT
15170 46 2d 38 20 73 74 72 69 6e 67 20 53 54 52 49 4e  F-8 string STRIN
15180 47 20 74 6f 20 74 68 65 20 77 69 6c 64 63 61 72  G to the wildcar
15190 64 2e 20 20 54 68 65 20 73 74 72 69 6e 67 20 69  d.  The string i
151a0 73 20 42 59 54 45 53 20 62 79 74 65 73 0a 2a 2a  s BYTES bytes.**
151b0 20 6c 6f 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69 63   long..*/.static
151c0 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f 74   int test_bind_t
151d0 65 78 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  ext(.  void * cl
151e0 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
151f0 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
15200 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
15210 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
15220 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
15230 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20  _stmt *pStmt;.  
15240 69 6e 74 20 69 64 78 3b 0a 20 20 69 6e 74 20 62  int idx;.  int b
15250 79 74 65 73 3b 0a 20 20 63 68 61 72 20 2a 76 61  ytes;.  char *va
15260 6c 75 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  lue;.  int rc;..
15270 20 20 69 66 28 20 6f 62 6a 63 21 3d 35 20 29 7b    if( objc!=5 ){
15280 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
15290 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
152a0 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
152b0 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20  uld be \"",.    
152c0 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
152d0 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d  gFromObj(objv[0]
152e0 2c 20 30 29 2c 20 22 20 53 54 4d 54 20 4e 20 56  , 0), " STMT N V
152f0 41 4c 55 45 20 42 59 54 45 53 22 2c 20 30 29 3b  ALUE BYTES", 0);
15300 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
15310 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66  ERROR;.  }..  if
15320 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
15330 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
15340 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
15350 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
15360 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
15370 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f  f( Tcl_GetIntFro
15380 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
15390 76 5b 32 5d 2c 20 26 69 64 78 29 20 29 20 72 65  v[2], &idx) ) re
153a0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
153b0 20 20 76 61 6c 75 65 20 3d 20 28 63 68 61 72 2a    value = (char*
153c0 29 54 63 6c 5f 47 65 74 42 79 74 65 41 72 72 61  )Tcl_GetByteArra
153d0 79 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 33 5d  yFromObj(objv[3]
153e0 2c 20 26 62 79 74 65 73 29 3b 0a 20 20 69 66 28  , &bytes);.  if(
153f0 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f   Tcl_GetIntFromO
15400 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
15410 34 5d 2c 20 26 62 79 74 65 73 29 20 29 20 72 65  4], &bytes) ) re
15420 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
15430 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
15440 62 69 6e 64 5f 74 65 78 74 28 70 53 74 6d 74 2c  bind_text(pStmt,
15450 20 69 64 78 2c 20 76 61 6c 75 65 2c 20 62 79 74   idx, value, byt
15460 65 73 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  es, SQLITE_TRANS
15470 49 45 4e 54 29 3b 0a 20 20 69 66 28 20 73 71 6c  IENT);.  if( sql
15480 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28  ite3TestErrCode(
15490 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62  interp, StmtToDb
154a0 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29 20 72  (pStmt), rc) ) r
154b0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
154c0 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
154d0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f  E_OK ){.    Tcl_
154e0 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
154f0 65 72 70 2c 20 73 71 6c 69 74 65 33 54 65 73 74  erp, sqlite3Test
15500 45 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 30  ErrorName(rc), 0
15510 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
15520 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
15530 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
15540 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
15550 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65   sqlite3_bind_te
15560 78 74 31 36 20 3f 2d 73 74 61 74 69 63 3f 20 53  xt16 ?-static? S
15570 54 4d 54 20 4e 20 53 54 52 49 4e 47 20 42 59 54  TMT N STRING BYT
15580 45 53 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68  ES.**.** Test th
15590 65 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74  e sqlite3_bind_t
155a0 65 78 74 31 36 20 69 6e 74 65 72 66 61 63 65 2e  ext16 interface.
155b0 20 20 53 54 4d 54 20 69 73 20 61 20 70 72 65 70    STMT is a prep
155c0 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a  ared statement..
155d0 2a 2a 20 4e 20 69 73 20 74 68 65 20 69 6e 64 65  ** N is the inde
155e0 78 20 6f 66 20 61 20 77 69 6c 64 63 61 72 64 20  x of a wildcard 
155f0 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20  in the prepared 
15600 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 69 73  statement.  This
15610 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64   command.** bind
15620 73 20 61 20 55 54 46 2d 31 36 20 73 74 72 69 6e  s a UTF-16 strin
15630 67 20 53 54 52 49 4e 47 20 74 6f 20 74 68 65 20  g STRING to the 
15640 77 69 6c 64 63 61 72 64 2e 20 20 54 68 65 20 73  wildcard.  The s
15650 74 72 69 6e 67 20 69 73 20 42 59 54 45 53 20 62  tring is BYTES b
15660 79 74 65 73 0a 2a 2a 20 6c 6f 6e 67 2e 0a 2a 2f  ytes.** long..*/
15670 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
15680 5f 62 69 6e 64 5f 74 65 78 74 31 36 28 0a 20 20  _bind_text16(.  
15690 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
156a0 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
156b0 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
156c0 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
156d0 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
156e0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
156f0 4d 49 54 5f 55 54 46 31 36 0a 20 20 73 71 6c 69  MIT_UTF16.  sqli
15700 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
15710 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 69 6e  .  int idx;.  in
15720 74 20 62 79 74 65 73 3b 0a 20 20 63 68 61 72 20  t bytes;.  char 
15730 2a 76 61 6c 75 65 3b 0a 20 20 69 6e 74 20 72 63  *value;.  int rc
15740 3b 0a 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c  ;..  void (*xDel
15750 29 28 29 20 3d 20 28 6f 62 6a 63 3d 3d 36 3f 53  )() = (objc==6?S
15760 51 4c 49 54 45 5f 53 54 41 54 49 43 3a 53 51 4c  QLITE_STATIC:SQL
15770 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a  ITE_TRANSIENT);.
15780 20 20 54 63 6c 5f 4f 62 6a 20 2a 6f 53 74 6d 74    Tcl_Obj *oStmt
15790 20 20 20 20 3d 20 6f 62 6a 76 5b 6f 62 6a 63 2d      = objv[objc-
157a0 34 5d 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 6f  4];.  Tcl_Obj *o
157b0 4e 20 20 20 20 20 20 20 3d 20 6f 62 6a 76 5b 6f  N       = objv[o
157c0 62 6a 63 2d 33 5d 3b 0a 20 20 54 63 6c 5f 4f 62  bjc-3];.  Tcl_Ob
157d0 6a 20 2a 6f 53 74 72 69 6e 67 20 20 3d 20 6f 62  j *oString  = ob
157e0 6a 76 5b 6f 62 6a 63 2d 32 5d 3b 0a 20 20 54 63  jv[objc-2];.  Tc
157f0 6c 5f 4f 62 6a 20 2a 6f 42 79 74 65 73 20 20 20  l_Obj *oBytes   
15800 3d 20 6f 62 6a 76 5b 6f 62 6a 63 2d 31 5d 3b 0a  = objv[objc-1];.
15810 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 35 20 26  .  if( objc!=5 &
15820 26 20 6f 62 6a 63 21 3d 36 29 7b 0a 20 20 20 20  & objc!=6){.    
15830 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
15840 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
15850 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
15860 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54  e \"",.        T
15870 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d  cl_GetStringFrom
15880 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c  Obj(objv[0], 0),
15890 20 22 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 20   " STMT N VALUE 
158a0 42 59 54 45 53 22 2c 20 30 29 3b 0a 20 20 20 20  BYTES", 0);.    
158b0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
158c0 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
158d0 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
158e0 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
158f0 67 28 6f 53 74 6d 74 29 2c 20 26 70 53 74 6d 74  g(oStmt), &pStmt
15900 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
15910 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f  RROR;.  if( Tcl_
15920 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e  GetIntFromObj(in
15930 74 65 72 70 2c 20 6f 4e 2c 20 26 69 64 78 29 20  terp, oN, &idx) 
15940 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
15950 4f 52 3b 0a 20 20 76 61 6c 75 65 20 3d 20 28 63  OR;.  value = (c
15960 68 61 72 2a 29 54 63 6c 5f 47 65 74 42 79 74 65  har*)Tcl_GetByte
15970 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28 6f 53 74  ArrayFromObj(oSt
15980 72 69 6e 67 2c 20 30 29 3b 0a 20 20 69 66 28 20  ring, 0);.  if( 
15990 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62  Tcl_GetIntFromOb
159a0 6a 28 69 6e 74 65 72 70 2c 20 6f 42 79 74 65 73  j(interp, oBytes
159b0 2c 20 26 62 79 74 65 73 29 20 29 20 72 65 74 75  , &bytes) ) retu
159c0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20  rn TCL_ERROR;.. 
159d0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69   rc = sqlite3_bi
159e0 6e 64 5f 74 65 78 74 31 36 28 70 53 74 6d 74 2c  nd_text16(pStmt,
159f0 20 69 64 78 2c 20 28 76 6f 69 64 20 2a 29 76 61   idx, (void *)va
15a00 6c 75 65 2c 20 62 79 74 65 73 2c 20 78 44 65 6c  lue, bytes, xDel
15a10 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
15a20 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65  TestErrCode(inte
15a30 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74  rp, StmtToDb(pSt
15a40 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74 75 72  mt), rc) ) retur
15a50 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
15a60 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
15a70 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
15a80 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
15a90 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 6f   sqlite3TestErro
15aa0 72 4e 61 6d 65 28 72 63 29 2c 20 30 29 3b 0a 20  rName(rc), 0);. 
15ab0 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
15ac0 52 4f 52 3b 0a 20 20 7d 0a 0a 23 65 6e 64 69 66  ROR;.  }..#endif
15ad0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
15ae0 55 54 46 31 36 20 2a 2f 0a 20 20 72 65 74 75 72  UTF16 */.  retur
15af0 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
15b00 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69  ** Usage:   sqli
15b10 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 20 3f 2d  te3_bind_blob ?-
15b20 73 74 61 74 69 63 3f 20 53 54 4d 54 20 4e 20 44  static? STMT N D
15b30 41 54 41 20 42 59 54 45 53 0a 2a 2a 0a 2a 2a 20  ATA BYTES.**.** 
15b40 54 65 73 74 20 74 68 65 20 73 71 6c 69 74 65 33  Test the sqlite3
15b50 5f 62 69 6e 64 5f 62 6c 6f 62 20 69 6e 74 65 72  _bind_blob inter
15b60 66 61 63 65 2e 20 20 53 54 4d 54 20 69 73 20 61  face.  STMT is a
15b70 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
15b80 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20 74 68 65  ent..** N is the
15b90 20 69 6e 64 65 78 20 6f 66 20 61 20 77 69 6c 64   index of a wild
15ba0 63 61 72 64 20 69 6e 20 74 68 65 20 70 72 65 70  card in the prep
15bb0 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 20  ared statement. 
15bc0 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a   This command.**
15bd0 20 62 69 6e 64 73 20 61 20 42 4c 4f 42 20 74 6f   binds a BLOB to
15be0 20 74 68 65 20 77 69 6c 64 63 61 72 64 2e 20 20   the wildcard.  
15bf0 54 68 65 20 42 4c 4f 42 20 69 73 20 42 59 54 45  The BLOB is BYTE
15c00 53 20 62 79 74 65 73 20 69 6e 20 73 69 7a 65 2e  S bytes in size.
15c10 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
15c20 65 73 74 5f 62 69 6e 64 5f 62 6c 6f 62 28 0a 20  est_bind_blob(. 
15c30 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
15c40 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
15c50 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
15c60 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
15c70 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
15c80 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
15c90 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64  *pStmt;.  int id
15ca0 78 3b 0a 20 20 69 6e 74 20 62 79 74 65 73 3b 0a  x;.  int bytes;.
15cb0 20 20 63 68 61 72 20 2a 76 61 6c 75 65 3b 0a 20    char *value;. 
15cc0 20 69 6e 74 20 72 63 3b 0a 20 20 73 71 6c 69 74   int rc;.  sqlit
15cd0 65 33 5f 64 65 73 74 72 75 63 74 6f 72 5f 74 79  e3_destructor_ty
15ce0 70 65 20 78 44 65 73 74 72 75 63 74 6f 72 20 3d  pe xDestructor =
15cf0 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
15d00 54 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  T;..  if( objc!=
15d10 35 20 26 26 20 6f 62 6a 63 21 3d 36 20 29 7b 0a  5 && objc!=6 ){.
15d20 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
15d30 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
15d40 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
15d50 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20  ld be \"",.     
15d60 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
15d70 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c  FromObj(objv[0],
15d80 20 30 29 2c 20 22 20 53 54 4d 54 20 4e 20 44 41   0), " STMT N DA
15d90 54 41 20 42 59 54 45 53 22 2c 20 30 29 3b 0a 20  TA BYTES", 0);. 
15da0 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
15db0 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  ROR;.  }..  if( 
15dc0 6f 62 6a 63 3d 3d 36 20 29 7b 0a 20 20 20 20 78  objc==6 ){.    x
15dd0 44 65 73 74 72 75 63 74 6f 72 20 3d 20 53 51 4c  Destructor = SQL
15de0 49 54 45 5f 53 54 41 54 49 43 3b 0a 20 20 20 20  ITE_STATIC;.    
15df0 6f 62 6a 76 2b 2b 3b 0a 20 20 7d 0a 0a 20 20 69  objv++;.  }..  i
15e00 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
15e10 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
15e20 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
15e30 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
15e40 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
15e50 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72  if( Tcl_GetIntFr
15e60 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
15e70 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20 29 20 72  jv[2], &idx) ) r
15e80 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
15e90 0a 20 20 76 61 6c 75 65 20 3d 20 54 63 6c 5f 47  .  value = Tcl_G
15ea0 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 33 5d  etString(objv[3]
15eb0 29 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  );.  if( Tcl_Get
15ec0 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
15ed0 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 26 62 79 74  p, objv[4], &byt
15ee0 65 73 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  es) ) return TCL
15ef0 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20  _ERROR;..  rc = 
15f00 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f  sqlite3_bind_blo
15f10 62 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 76 61  b(pStmt, idx, va
15f20 6c 75 65 2c 20 62 79 74 65 73 2c 20 78 44 65 73  lue, bytes, xDes
15f30 74 72 75 63 74 6f 72 29 3b 0a 20 20 69 66 28 20  tructor);.  if( 
15f40 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f  sqlite3TestErrCo
15f50 64 65 28 69 6e 74 65 72 70 2c 20 53 74 6d 74 54  de(interp, StmtT
15f60 6f 44 62 28 70 53 74 6d 74 29 2c 20 72 63 29 20  oDb(pStmt), rc) 
15f70 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
15f80 4f 52 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51  OR;.  if( rc!=SQ
15f90 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
15fa0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
15fb0 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54  .  }..  return T
15fc0 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
15fd0 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33  Usage:   sqlite3
15fe0 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
15ff0 63 6f 75 6e 74 20 20 53 54 4d 54 0a 2a 2a 0a 2a  count  STMT.**.*
16000 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d  * Return the num
16010 62 65 72 20 6f 66 20 77 69 6c 64 63 61 72 64 73  ber of wildcards
16020 20 69 6e 20 74 68 65 20 67 69 76 65 6e 20 73 74   in the given st
16030 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 61 74  atement..*/.stat
16040 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64  ic int test_bind
16050 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74  _parameter_count
16060 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
16070 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
16080 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
16090 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
160a0 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
160b0 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  .){.  sqlite3_st
160c0 6d 74 20 2a 70 53 74 6d 74 3b 0a 0a 20 20 69 66  mt *pStmt;..  if
160d0 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
160e0 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67   Tcl_WrongNumArg
160f0 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a  s(interp, 1, obj
16100 76 2c 20 22 53 54 4d 54 22 29 3b 0a 20 20 20 20  v, "STMT");.    
16110 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
16120 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 53  ;.  }.  if( getS
16130 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tmtPointer(inter
16140 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
16150 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d  (objv[1]), &pStm
16160 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  t) ) return TCL_
16170 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74  ERROR;.  Tcl_Set
16180 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
16190 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28  , Tcl_NewIntObj(
161a0 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
161b0 61 6d 65 74 65 72 5f 63 6f 75 6e 74 28 70 53 74  ameter_count(pSt
161c0 6d 74 29 29 29 3b 0a 20 20 72 65 74 75 72 6e 20  mt)));.  return 
161d0 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
161e0 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65   Usage:   sqlite
161f0 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
16200 5f 6e 61 6d 65 20 20 53 54 4d 54 20 20 4e 0a 2a  _name  STMT  N.*
16210 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
16220 6e 61 6d 65 20 6f 66 20 74 68 65 20 4e 74 68 20  name of the Nth 
16230 77 69 6c 64 63 61 72 64 2e 20 20 54 68 65 20 66  wildcard.  The f
16240 69 72 73 74 20 77 69 6c 64 63 61 72 64 20 69 73  irst wildcard is
16250 20 31 2e 0a 2a 2a 20 41 6e 20 65 6d 70 74 79 20   1..** An empty 
16260 73 74 72 69 6e 67 20 69 73 20 72 65 74 75 72 6e  string is return
16270 65 64 20 69 66 20 4e 20 69 73 20 6f 75 74 20 6f  ed if N is out o
16280 66 20 72 61 6e 67 65 20 6f 72 20 69 66 20 74 68  f range or if th
16290 65 20 77 69 6c 64 63 61 72 64 0a 2a 2a 20 69 73  e wildcard.** is
162a0 20 6e 61 6d 65 6c 65 73 73 2e 0a 2a 2f 0a 73 74   nameless..*/.st
162b0 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69  atic int test_bi
162c0 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d  nd_parameter_nam
162d0 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  e(.  void * clie
162e0 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
162f0 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
16300 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
16310 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
16320 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ].){.  sqlite3_s
16330 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e  tmt *pStmt;.  in
16340 74 20 69 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63  t i;..  if( objc
16350 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57  !=3 ){.    Tcl_W
16360 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65  rongNumArgs(inte
16370 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 53 54  rp, 1, objv, "ST
16380 4d 54 20 4e 22 29 3b 0a 20 20 20 20 72 65 74 75  MT N");.    retu
16390 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
163a0 7d 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  }.  if( getStmtP
163b0 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
163c0 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
163d0 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29  v[1]), &pStmt) )
163e0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
163f0 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  R;.  if( Tcl_Get
16400 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
16410 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 69 29 20  p, objv[2], &i) 
16420 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
16430 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a  OR;.  Tcl_SetObj
16440 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 0a  Result(interp, .
16450 20 20 20 20 20 54 63 6c 5f 4e 65 77 53 74 72 69       Tcl_NewStri
16460 6e 67 4f 62 6a 28 73 71 6c 69 74 65 33 5f 62 69  ngObj(sqlite3_bi
16470 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d  nd_parameter_nam
16480 65 28 70 53 74 6d 74 2c 69 29 2c 2d 31 29 0a 20  e(pStmt,i),-1). 
16490 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c   );.  return TCL
164a0 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
164b0 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 62  age:   sqlite3_b
164c0 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e  ind_parameter_in
164d0 64 65 78 20 20 53 54 4d 54 20 20 4e 41 4d 45 0a  dex  STMT  NAME.
164e0 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  **.** Return the
164f0 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 77 69   index of the wi
16500 6c 64 63 61 72 64 20 63 61 6c 6c 65 64 20 4e 41  ldcard called NA
16510 4d 45 2e 20 20 52 65 74 75 72 6e 20 30 20 69 66  ME.  Return 0 if
16520 20 74 68 65 72 65 20 69 73 0a 2a 2a 20 6e 6f 20   there is.** no 
16530 73 75 63 68 20 77 69 6c 64 63 61 72 64 2e 0a 2a  such wildcard..*
16540 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
16550 74 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  t_bind_parameter
16560 5f 69 6e 64 65 78 28 0a 20 20 76 6f 69 64 20 2a  _index(.  void *
16570 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
16580 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
16590 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
165a0 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
165b0 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
165c0 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
165d0 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20  ..  if( objc!=3 
165e0 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67  ){.    Tcl_Wrong
165f0 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20  NumArgs(interp, 
16600 31 2c 20 6f 62 6a 76 2c 20 22 53 54 4d 54 20 4e  1, objv, "STMT N
16610 41 4d 45 22 29 3b 0a 20 20 20 20 72 65 74 75 72  AME");.    retur
16620 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
16630 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f  .  if( getStmtPo
16640 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
16650 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
16660 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20  [1]), &pStmt) ) 
16670 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
16680 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65  ;.  Tcl_SetObjRe
16690 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 0a 20 20  sult(interp, .  
166a0 20 20 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a     Tcl_NewIntObj
166b0 28 0a 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  (.       sqlite3
166c0 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
166d0 69 6e 64 65 78 28 70 53 74 6d 74 2c 54 63 6c 5f  index(pStmt,Tcl_
166e0 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32  GetString(objv[2
166f0 5d 29 29 0a 20 20 20 20 20 29 0a 20 20 29 3b 0a  ])).     ).  );.
16700 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
16710 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
16720 20 20 20 73 71 6c 69 74 65 33 5f 63 6c 65 61 72     sqlite3_clear
16730 5f 62 69 6e 64 69 6e 67 73 20 53 54 4d 54 0a 2a  _bindings STMT.*
16740 2a 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  *.*/.static int 
16750 74 65 73 74 5f 63 6c 65 61 72 5f 62 69 6e 64 69  test_clear_bindi
16760 6e 67 73 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  ngs(.  void * cl
16770 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
16780 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
16790 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
167a0 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
167b0 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
167c0 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 0a 20  _stmt *pStmt;.. 
167d0 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a   if( objc!=2 ){.
167e0 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d      Tcl_WrongNum
167f0 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20  Args(interp, 1, 
16800 6f 62 6a 76 2c 20 22 53 54 4d 54 22 29 3b 0a 20  objv, "STMT");. 
16810 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
16820 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67  ROR;.  }.  if( g
16830 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e  etStmtPointer(in
16840 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
16850 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70  ing(objv[1]), &p
16860 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
16870 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 73 71 6c 69  CL_ERROR;.  sqli
16880 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e  te3_clear_bindin
16890 67 73 28 30 29 3b 20 2f 2a 20 74 65 73 74 20 66  gs(0); /* test f
168a0 6f 72 20 68 61 6e 64 6c 69 6e 67 20 4e 55 4c 4c  or handling NULL
168b0 20 3c 72 64 61 72 3a 2f 2f 70 72 6f 62 6c 65 6d   <rdar://problem
168c0 2f 36 36 34 36 33 33 31 3e 20 2a 2f 0a 20 20 54  /6646331> */.  T
168d0 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
168e0 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49  interp, Tcl_NewI
168f0 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33 5f 63 6c  ntObj(sqlite3_cl
16900 65 61 72 5f 62 69 6e 64 69 6e 67 73 28 70 53 74  ear_bindings(pSt
16910 6d 74 29 29 29 3b 0a 20 20 72 65 74 75 72 6e 20  mt)));.  return 
16920 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
16930 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65   Usage:   sqlite
16940 33 5f 73 6c 65 65 70 20 4d 49 4c 4c 49 53 45 43  3_sleep MILLISEC
16950 4f 4e 44 53 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ONDS.*/.static i
16960 6e 74 20 74 65 73 74 5f 73 6c 65 65 70 28 0a 20  nt test_sleep(. 
16970 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
16980 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
16990 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
169a0 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
169b0 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
169c0 0a 20 20 69 6e 74 20 6d 73 3b 0a 0a 20 20 69 66  .  int ms;..  if
169d0 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
169e0 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67   Tcl_WrongNumArg
169f0 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a  s(interp, 1, obj
16a00 76 2c 20 22 4d 49 4c 4c 49 53 45 43 4f 4e 44 53  v, "MILLISECONDS
16a10 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  ");.    return T
16a20 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
16a30 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72  if( Tcl_GetIntFr
16a40 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
16a50 6a 76 5b 31 5d 2c 20 26 6d 73 29 20 29 7b 0a 20  jv[1], &ms) ){. 
16a60 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
16a70 52 4f 52 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 53  ROR;.  }.  Tcl_S
16a80 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
16a90 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62  rp, Tcl_NewIntOb
16aa0 6a 28 73 71 6c 69 74 65 33 5f 73 6c 65 65 70 28  j(sqlite3_sleep(
16ab0 6d 73 29 29 29 3b 0a 20 20 72 65 74 75 72 6e 20  ms)));.  return 
16ac0 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
16ad0 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
16ae0 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65  extended_errcode
16af0 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e   DB.**.** Return
16b00 20 74 68 65 20 73 74 72 69 6e 67 20 72 65 70 72   the string repr
16b10 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
16b20 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 71  e most recent sq
16b30 6c 69 74 65 33 5f 2a 20 41 50 49 0a 2a 2a 20 65  lite3_* API.** e
16b40 72 72 6f 72 20 63 6f 64 65 2e 20 65 2e 67 2e 20  rror code. e.g. 
16b50 22 53 51 4c 49 54 45 5f 45 52 52 4f 52 22 2e 0a  "SQLITE_ERROR"..
16b60 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
16b70 73 74 5f 65 78 5f 65 72 72 63 6f 64 65 28 0a 20  st_ex_errcode(. 
16b80 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
16b90 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
16ba0 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
16bb0 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
16bc0 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
16bd0 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a  .  sqlite3 *db;.
16be0 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28    int rc;..  if(
16bf0 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20   objc!=2 ){.    
16c00 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
16c10 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
16c20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
16c30 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54  e \"", .       T
16c40 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
16c50 76 5b 30 5d 29 2c 20 22 20 44 42 22 2c 20 30 29  v[0]), " DB", 0)
16c60 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
16c70 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
16c80 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69  ( getDbPointer(i
16c90 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
16ca0 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
16cb0 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  db) ) return TCL
16cc0 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73  _ERROR;.  rc = s
16cd0 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f  qlite3_extended_
16ce0 65 72 72 63 6f 64 65 28 64 62 29 3b 0a 20 20 54  errcode(db);.  T
16cf0 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
16d00 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29  interp, (char *)
16d10 74 31 45 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c  t1ErrorName(rc),
16d20 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43   0);.  return TC
16d30 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  L_OK;.}.../*.** 
16d40 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 65  Usage: sqlite3_e
16d50 72 72 63 6f 64 65 20 44 42 0a 2a 2a 0a 2a 2a 20  rrcode DB.**.** 
16d60 52 65 74 75 72 6e 20 74 68 65 20 73 74 72 69 6e  Return the strin
16d70 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  g representation
16d80 20 6f 66 20 74 68 65 20 6d 6f 73 74 20 72 65 63   of the most rec
16d90 65 6e 74 20 73 71 6c 69 74 65 33 5f 2a 20 41 50  ent sqlite3_* AP
16da0 49 0a 2a 2a 20 65 72 72 6f 72 20 63 6f 64 65 2e  I.** error code.
16db0 20 65 2e 67 2e 20 22 53 51 4c 49 54 45 5f 45 52   e.g. "SQLITE_ER
16dc0 52 4f 52 22 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ROR"..*/.static 
16dd0 69 6e 74 20 74 65 73 74 5f 65 72 72 63 6f 64 65  int test_errcode
16de0 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
16df0 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
16e00 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
16e10 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
16e20 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
16e30 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  .){.  sqlite3 *d
16e40 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20  b;.  int rc;..  
16e50 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20  if( objc!=2 ){. 
16e60 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
16e70 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
16e80 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
16e90 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20  d be \"", .     
16ea0 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28    Tcl_GetString(
16eb0 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44 42 22 2c  objv[0]), " DB",
16ec0 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
16ed0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
16ee0 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
16ef0 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
16f00 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
16f10 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
16f20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20  TCL_ERROR;.  rc 
16f30 3d 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64  = sqlite3_errcod
16f40 65 28 64 62 29 3b 0a 20 20 54 63 6c 5f 41 70 70  e(db);.  Tcl_App
16f50 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
16f60 2c 20 28 63 68 61 72 20 2a 29 74 31 45 72 72 6f  , (char *)t1Erro
16f70 72 4e 61 6d 65 28 72 63 29 2c 20 30 29 3b 0a 20  rName(rc), 0);. 
16f80 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
16f90 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
16fa0 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67    sqlite3_errmsg
16fb0 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e   DB.**.** Return
16fc0 73 20 74 68 65 20 55 54 46 2d 38 20 72 65 70 72  s the UTF-8 repr
16fd0 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
16fe0 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  e error message 
16ff0 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65 0a 2a  string for the.*
17000 2a 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 71  * most recent sq
17010 6c 69 74 65 33 5f 2a 20 41 50 49 20 63 61 6c 6c  lite3_* API call
17020 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
17030 74 65 73 74 5f 65 72 72 6d 73 67 28 0a 20 20 76  test_errmsg(.  v
17040 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
17050 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
17060 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
17070 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
17080 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
17090 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
170a0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 72 72  const char *zErr
170b0 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32  ;..  if( objc!=2
170c0 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
170d0 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
170e0 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
170f0 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a  should be \"", .
17100 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
17110 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22  ring(objv[0]), "
17120 20 44 42 22 2c 20 30 29 3b 0a 20 20 20 20 72 65   DB", 0);.    re
17130 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
17140 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
17150 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
17160 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
17170 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65  v[1]), &db) ) re
17180 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
17190 0a 20 20 7a 45 72 72 20 3d 20 73 71 6c 69 74 65  .  zErr = sqlite
171a0 33 5f 65 72 72 6d 73 67 28 64 62 29 3b 0a 20 20  3_errmsg(db);.  
171b0 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
171c0 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
171d0 53 74 72 69 6e 67 4f 62 6a 28 7a 45 72 72 2c 20  StringObj(zErr, 
171e0 2d 31 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  -1));.  return T
171f0 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
17200 55 73 61 67 65 3a 20 20 20 74 65 73 74 5f 65 72  Usage:   test_er
17210 72 6d 73 67 31 36 20 44 42 0a 2a 2a 0a 2a 2a 20  rmsg16 DB.**.** 
17220 52 65 74 75 72 6e 73 20 74 68 65 20 55 54 46 2d  Returns the UTF-
17230 31 36 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  16 representatio
17240 6e 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20 6d  n of the error m
17250 65 73 73 61 67 65 20 73 74 72 69 6e 67 20 66 6f  essage string fo
17260 72 20 74 68 65 0a 2a 2a 20 6d 6f 73 74 20 72 65  r the.** most re
17270 63 65 6e 74 20 73 71 6c 69 74 65 33 5f 2a 20 41  cent sqlite3_* A
17280 50 49 20 63 61 6c 6c 2e 20 54 68 69 73 20 69 73  PI call. This is
17290 20 61 20 62 79 74 65 20 61 72 72 61 79 20 6f 62   a byte array ob
172a0 6a 65 63 74 20 61 74 20 74 68 65 20 54 43 4c 20  ject at the TCL 
172b0 0a 2a 2a 20 6c 65 76 65 6c 2c 20 61 6e 64 20 69  .** level, and i
172c0 74 20 69 6e 63 6c 75 64 65 73 20 74 68 65 20 30  t includes the 0
172d0 78 30 30 20 30 78 30 30 20 74 65 72 6d 69 6e 61  x00 0x00 termina
172e0 74 6f 72 20 62 79 74 65 73 20 61 74 20 74 68 65  tor bytes at the
172f0 20 65 6e 64 20 6f 66 20 74 68 65 0a 2a 2a 20 55   end of the.** U
17300 54 46 2d 31 36 20 73 74 72 69 6e 67 2e 0a 2a 2f  TF-16 string..*/
17310 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
17320 5f 65 72 72 6d 73 67 31 36 28 0a 20 20 76 6f 69  _errmsg16(.  voi
17330 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
17340 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
17350 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
17360 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
17370 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66  ST objv[].){.#if
17380 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
17390 5f 55 54 46 31 36 0a 20 20 73 71 6c 69 74 65 33  _UTF16.  sqlite3
173a0 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20 76 6f   *db;.  const vo
173b0 69 64 20 2a 7a 45 72 72 3b 0a 20 20 63 6f 6e 73  id *zErr;.  cons
173c0 74 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69 6e 74  t char *z;.  int
173d0 20 62 79 74 65 73 20 3d 20 30 3b 0a 0a 20 20 69   bytes = 0;..  i
173e0 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20  f( objc!=2 ){.  
173f0 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
17400 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
17410 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
17420 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20   be \"", .      
17430 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
17440 62 6a 76 5b 30 5d 29 2c 20 22 20 44 42 22 2c 20  bjv[0]), " DB", 
17450 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
17460 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
17470 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72  if( getDbPointer
17480 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
17490 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
174a0 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
174b0 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 7a 45 72  CL_ERROR;..  zEr
174c0 72 20 3d 20 73 71 6c 69 74 65 33 5f 65 72 72 6d  r = sqlite3_errm
174d0 73 67 31 36 28 64 62 29 3b 0a 20 20 69 66 28 20  sg16(db);.  if( 
174e0 7a 45 72 72 20 29 7b 0a 20 20 20 20 7a 20 3d 20  zErr ){.    z = 
174f0 7a 45 72 72 3b 0a 20 20 20 20 66 6f 72 28 62 79  zErr;.    for(by
17500 74 65 73 3d 30 3b 20 7a 5b 62 79 74 65 73 5d 20  tes=0; z[bytes] 
17510 7c 7c 20 7a 5b 62 79 74 65 73 2b 31 5d 3b 20 62  || z[bytes+1]; b
17520 79 74 65 73 2b 3d 32 29 7b 7d 0a 20 20 7d 0a 20  ytes+=2){}.  }. 
17530 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c   Tcl_SetObjResul
17540 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
17550 77 42 79 74 65 41 72 72 61 79 4f 62 6a 28 7a 45  wByteArrayObj(zE
17560 72 72 2c 20 62 79 74 65 73 29 29 3b 0a 23 65 6e  rr, bytes));.#en
17570 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
17580 49 54 5f 55 54 46 31 36 20 2a 2f 0a 20 20 72 65  IT_UTF16 */.  re
17590 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
175a0 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  /*.** Usage: sql
175b0 69 74 65 33 5f 70 72 65 70 61 72 65 20 44 42 20  ite3_prepare DB 
175c0 73 71 6c 20 62 79 74 65 73 20 3f 74 61 69 6c 76  sql bytes ?tailv
175d0 61 72 3f 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 69 6c  ar?.**.** Compil
175e0 65 20 75 70 20 74 6f 20 3c 62 79 74 65 73 3e 20  e up to <bytes> 
175f0 62 79 74 65 73 20 6f 66 20 74 68 65 20 73 75 70  bytes of the sup
17600 70 6c 69 65 64 20 53 51 4c 20 73 74 72 69 6e 67  plied SQL string
17610 20 3c 73 71 6c 3e 20 75 73 69 6e 67 0a 2a 2a 20   <sql> using.** 
17620 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20  database handle 
17630 3c 44 42 3e 2e 20 54 68 65 20 70 61 72 61 6d 65  <DB>. The parame
17640 74 65 72 20 3c 74 61 69 6c 76 61 6c 3e 20 69 73  ter <tailval> is
17650 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 67   the name of a g
17660 6c 6f 62 61 6c 0a 2a 2a 20 76 61 72 69 61 62 6c  lobal.** variabl
17670 65 20 74 68 61 74 20 69 73 20 73 65 74 20 74 6f  e that is set to
17680 20 74 68 65 20 75 6e 75 73 65 64 20 70 6f 72 74   the unused port
17690 69 6f 6e 20 6f 66 20 3c 73 71 6c 3e 20 28 69 66  ion of <sql> (if
176a0 20 61 6e 79 29 2e 20 41 0a 2a 2a 20 53 54 4d 54   any). A.** STMT
176b0 20 68 61 6e 64 6c 65 20 69 73 20 72 65 74 75 72   handle is retur
176c0 6e 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ned..*/.static i
176d0 6e 74 20 74 65 73 74 5f 70 72 65 70 61 72 65 28  nt test_prepare(
176e0 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
176f0 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
17700 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
17710 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
17720 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
17730 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
17740 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
17750 7a 53 71 6c 3b 0a 20 20 69 6e 74 20 62 79 74 65  zSql;.  int byte
17760 73 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  s;.  const char 
17770 2a 7a 54 61 69 6c 20 3d 20 30 3b 0a 20 20 73 71  *zTail = 0;.  sq
17780 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
17790 74 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 7a 42  t = 0;.  char zB
177a0 75 66 5b 35 30 5d 3b 0a 20 20 69 6e 74 20 72 63  uf[50];.  int rc
177b0 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 35  ;..  if( objc!=5
177c0 20 26 26 20 6f 62 6a 63 21 3d 34 20 29 7b 0a 20   && objc!=4 ){. 
177d0 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
177e0 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
177f0 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
17800 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20  d be \"", .     
17810 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28    Tcl_GetString(
17820 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44 42 20 73  objv[0]), " DB s
17830 71 6c 20 62 79 74 65 73 20 3f 74 61 69 6c 76 61  ql bytes ?tailva
17840 72 3f 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  r?", 0);.    ret
17850 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
17860 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f   }.  if( getDbPo
17870 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
17880 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
17890 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74  [1]), &db) ) ret
178a0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
178b0 20 7a 53 71 6c 20 3d 20 54 63 6c 5f 47 65 74 53   zSql = Tcl_GetS
178c0 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 3b 0a  tring(objv[2]);.
178d0 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
178e0 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
178f0 6f 62 6a 76 5b 33 5d 2c 20 26 62 79 74 65 73 29  objv[3], &bytes)
17900 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
17910 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c  ROR;..  rc = sql
17920 69 74 65 33 5f 70 72 65 70 61 72 65 28 64 62 2c  ite3_prepare(db,
17930 20 7a 53 71 6c 2c 20 62 79 74 65 73 2c 20 26 70   zSql, bytes, &p
17940 53 74 6d 74 2c 20 6f 62 6a 63 3e 3d 35 20 3f 20  Stmt, objc>=5 ? 
17950 26 7a 54 61 69 6c 20 3a 20 30 29 3b 0a 20 20 54  &zTail : 0);.  T
17960 63 6c 5f 52 65 73 65 74 52 65 73 75 6c 74 28 69  cl_ResetResult(i
17970 6e 74 65 72 70 29 3b 0a 20 20 69 66 28 20 73 71  nterp);.  if( sq
17980 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65  lite3TestErrCode
17990 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29  (interp, db, rc)
179a0 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
179b0 52 4f 52 3b 0a 20 20 69 66 28 20 7a 54 61 69 6c  ROR;.  if( zTail
179c0 20 26 26 20 6f 62 6a 63 3e 3d 35 20 29 7b 0a 20   && objc>=5 ){. 
179d0 20 20 20 69 66 28 20 62 79 74 65 73 3e 3d 30 20     if( bytes>=0 
179e0 29 7b 0a 20 20 20 20 20 20 62 79 74 65 73 20 3d  ){.      bytes =
179f0 20 62 79 74 65 73 20 2d 20 28 7a 54 61 69 6c 2d   bytes - (zTail-
17a00 7a 53 71 6c 29 3b 0a 20 20 20 20 7d 0a 20 20 20  zSql);.    }.   
17a10 20 69 66 28 20 73 74 72 6c 65 6e 28 7a 54 61 69   if( strlen(zTai
17a20 6c 29 3c 62 79 74 65 73 20 29 7b 0a 20 20 20 20  l)<bytes ){.    
17a30 20 20 62 79 74 65 73 20 3d 20 73 74 72 6c 65 6e    bytes = strlen
17a40 28 7a 54 61 69 6c 29 3b 0a 20 20 20 20 7d 0a 20  (zTail);.    }. 
17a50 20 20 20 54 63 6c 5f 4f 62 6a 53 65 74 56 61 72     Tcl_ObjSetVar
17a60 32 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 34  2(interp, objv[4
17a70 5d 2c 20 30 2c 20 54 63 6c 5f 4e 65 77 53 74 72  ], 0, Tcl_NewStr
17a80 69 6e 67 4f 62 6a 28 7a 54 61 69 6c 2c 20 62 79  ingObj(zTail, by
17a90 74 65 73 29 2c 20 30 29 3b 0a 20 20 7d 0a 20 20  tes), 0);.  }.  
17aa0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
17ab0 4b 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  K ){.    assert(
17ac0 20 70 53 74 6d 74 3d 3d 30 20 29 3b 0a 20 20 20   pStmt==0 );.   
17ad0 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22   sprintf(zBuf, "
17ae0 28 25 64 29 20 22 2c 20 72 63 29 3b 0a 20 20 20  (%d) ", rc);.   
17af0 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
17b00 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20  t(interp, zBuf, 
17b10 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 64  sqlite3_errmsg(d
17b20 62 29 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  b), 0);.    retu
17b30 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
17b40 7d 0a 0a 20 20 69 66 28 20 70 53 74 6d 74 20 29  }..  if( pStmt )
17b50 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  {.    if( sqlite
17b60 33 54 65 73 74 4d 61 6b 65 50 6f 69 6e 74 65 72  3TestMakePointer
17b70 53 74 72 28 69 6e 74 65 72 70 2c 20 7a 42 75 66  Str(interp, zBuf
17b80 2c 20 70 53 74 6d 74 29 20 29 20 72 65 74 75 72  , pStmt) ) retur
17b90 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20  n TCL_ERROR;.   
17ba0 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
17bb0 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20  t(interp, zBuf, 
17bc0 30 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  0);.  }.  return
17bd0 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
17be0 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33  * Usage: sqlite3
17bf0 5f 70 72 65 70 61 72 65 5f 76 32 20 44 42 20 73  _prepare_v2 DB s
17c00 71 6c 20 62 79 74 65 73 20 3f 74 61 69 6c 76 61  ql bytes ?tailva
17c10 72 3f 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 69 6c 65  r?.**.** Compile
17c20 20 75 70 20 74 6f 20 3c 62 79 74 65 73 3e 20 62   up to <bytes> b
17c30 79 74 65 73 20 6f 66 20 74 68 65 20 73 75 70 70  ytes of the supp
17c40 6c 69 65 64 20 53 51 4c 20 73 74 72 69 6e 67 20  lied SQL string 
17c50 3c 73 71 6c 3e 20 75 73 69 6e 67 0a 2a 2a 20 64  <sql> using.** d
17c60 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 3c  atabase handle <
17c70 44 42 3e 2e 20 54 68 65 20 70 61 72 61 6d 65 74  DB>. The paramet
17c80 65 72 20 3c 74 61 69 6c 76 61 6c 3e 20 69 73 20  er <tailval> is 
17c90 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 67 6c  the name of a gl
17ca0 6f 62 61 6c 0a 2a 2a 20 76 61 72 69 61 62 6c 65  obal.** variable
17cb0 20 74 68 61 74 20 69 73 20 73 65 74 20 74 6f 20   that is set to 
17cc0 74 68 65 20 75 6e 75 73 65 64 20 70 6f 72 74 69  the unused porti
17cd0 6f 6e 20 6f 66 20 3c 73 71 6c 3e 20 28 69 66 20  on of <sql> (if 
17ce0 61 6e 79 29 2e 20 41 0a 2a 2a 20 53 54 4d 54 20  any). A.** STMT 
17cf0 68 61 6e 64 6c 65 20 69 73 20 72 65 74 75 72 6e  handle is return
17d00 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ed..*/.static in
17d10 74 20 74 65 73 74 5f 70 72 65 70 61 72 65 5f 76  t test_prepare_v
17d20 32 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  2(.  void * clie
17d30 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
17d40 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
17d50 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
17d60 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
17d70 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  ].){.  sqlite3 *
17d80 64 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  db;.  const char
17d90 20 2a 7a 53 71 6c 3b 0a 20 20 69 6e 74 20 62 79   *zSql;.  int by
17da0 74 65 73 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  tes;.  const cha
17db0 72 20 2a 7a 54 61 69 6c 20 3d 20 30 3b 0a 20 20  r *zTail = 0;.  
17dc0 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
17dd0 74 6d 74 20 3d 20 30 3b 0a 20 20 63 68 61 72 20  tmt = 0;.  char 
17de0 7a 42 75 66 5b 35 30 5d 3b 0a 20 20 69 6e 74 20  zBuf[50];.  int 
17df0 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  rc;..  if( objc!
17e00 3d 35 20 26 26 20 6f 62 6a 63 21 3d 34 20 29 7b  =5 && objc!=4 ){
17e10 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
17e20 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
17e30 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
17e40 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20  uld be \"", .   
17e50 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
17e60 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44 42  g(objv[0]), " DB
17e70 20 73 71 6c 20 62 79 74 65 73 20 74 61 69 6c 76   sql bytes tailv
17e80 61 72 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  ar", 0);.    ret
17e90 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
17ea0 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f   }.  if( getDbPo
17eb0 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
17ec0 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
17ed0 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74  [1]), &db) ) ret
17ee0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
17ef0 20 7a 53 71 6c 20 3d 20 54 63 6c 5f 47 65 74 53   zSql = Tcl_GetS
17f00 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 3b 0a  tring(objv[2]);.
17f10 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
17f20 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
17f30 6f 62 6a 76 5b 33 5d 2c 20 26 62 79 74 65 73 29  objv[3], &bytes)
17f40 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
17f50 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c  ROR;..  rc = sql
17f60 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
17f70 64 62 2c 20 7a 53 71 6c 2c 20 62 79 74 65 73 2c  db, zSql, bytes,
17f80 20 26 70 53 74 6d 74 2c 20 6f 62 6a 63 3e 3d 35   &pStmt, objc>=5
17f90 20 3f 20 26 7a 54 61 69 6c 20 3a 20 30 29 3b 0a   ? &zTail : 0);.
17fa0 20 20 61 73 73 65 72 74 28 72 63 3d 3d 53 51 4c    assert(rc==SQL
17fb0 49 54 45 5f 4f 4b 20 7c 7c 20 70 53 74 6d 74 3d  ITE_OK || pStmt=
17fc0 3d 30 29 3b 0a 20 20 54 63 6c 5f 52 65 73 65 74  =0);.  Tcl_Reset
17fd0 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29 3b 0a  Result(interp);.
17fe0 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73    if( sqlite3Tes
17ff0 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c  tErrCode(interp,
18000 20 64 62 2c 20 72 63 29 20 29 20 72 65 74 75 72   db, rc) ) retur
18010 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
18020 66 28 20 7a 54 61 69 6c 20 26 26 20 6f 62 6a 63  f( zTail && objc
18030 3e 3d 35 20 29 7b 0a 20 20 20 20 69 66 28 20 62  >=5 ){.    if( b
18040 79 74 65 73 3e 3d 30 20 29 7b 0a 20 20 20 20 20  ytes>=0 ){.     
18050 20 62 79 74 65 73 20 3d 20 62 79 74 65 73 20 2d   bytes = bytes -
18060 20 28 7a 54 61 69 6c 2d 7a 53 71 6c 29 3b 0a 20   (zTail-zSql);. 
18070 20 20 20 7d 0a 20 20 20 20 54 63 6c 5f 4f 62 6a     }.    Tcl_Obj
18080 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
18090 6f 62 6a 76 5b 34 5d 2c 20 30 2c 20 54 63 6c 5f  objv[4], 0, Tcl_
180a0 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 7a 54 61  NewStringObj(zTa
180b0 69 6c 2c 20 62 79 74 65 73 29 2c 20 30 29 3b 0a  il, bytes), 0);.
180c0 20 20 7d 0a 20 20 69 66 28 20 72 63 21 3d 53 51    }.  if( rc!=SQ
180d0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 61  LITE_OK ){.    a
180e0 73 73 65 72 74 28 20 70 53 74 6d 74 3d 3d 30 20  ssert( pStmt==0 
180f0 29 3b 0a 20 20 20 20 73 70 72 69 6e 74 66 28 7a  );.    sprintf(z
18100 42 75 66 2c 20 22 28 25 64 29 20 22 2c 20 72 63  Buf, "(%d) ", rc
18110 29 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  );.    Tcl_Appen
18120 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
18130 7a 42 75 66 2c 20 73 71 6c 69 74 65 33 5f 65 72  zBuf, sqlite3_er
18140 72 6d 73 67 28 64 62 29 2c 20 30 29 3b 0a 20 20  rmsg(db), 0);.  
18150 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
18160 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70  OR;.  }..  if( p
18170 53 74 6d 74 20 29 7b 0a 20 20 20 20 69 66 28 20  Stmt ){.    if( 
18180 73 71 6c 69 74 65 33 54 65 73 74 4d 61 6b 65 50  sqlite3TestMakeP
18190 6f 69 6e 74 65 72 53 74 72 28 69 6e 74 65 72 70  ointerStr(interp
181a0 2c 20 7a 42 75 66 2c 20 70 53 74 6d 74 29 20 29  , zBuf, pStmt) )
181b0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
181c0 52 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  R;.    Tcl_Appen
181d0 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
181e0 7a 42 75 66 2c 20 30 29 3b 0a 20 20 7d 0a 20 20  zBuf, 0);.  }.  
181f0 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
18200 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
18210 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 74  qlite3_prepare_t
18220 6b 74 33 31 33 34 20 44 42 0a 2a 2a 0a 2a 2a 20  kt3134 DB.**.** 
18230 47 65 6e 65 72 61 74 65 20 61 20 70 72 65 70 61  Generate a prepa
18240 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 66 6f  red statement fo
18250 72 20 61 20 7a 65 72 6f 2d 62 79 74 65 20 73 74  r a zero-byte st
18260 72 69 6e 67 20 61 73 20 61 20 74 65 73 74 0a 2a  ring as a test.*
18270 2a 20 66 6f 72 20 74 69 63 6b 65 74 20 23 33 31  * for ticket #31
18280 33 34 2e 20 20 54 68 65 20 73 74 72 69 6e 67 20  34.  The string 
18290 73 68 6f 75 6c 64 20 62 65 20 70 72 65 63 65 65  should be precee
182a0 64 65 64 20 62 79 20 61 20 7a 65 72 6f 20 62 79  ded by a zero by
182b0 74 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  te..*/.static in
182c0 74 20 74 65 73 74 5f 70 72 65 70 61 72 65 5f 74  t test_prepare_t
182d0 6b 74 33 31 33 34 28 0a 20 20 76 6f 69 64 20 2a  kt3134(.  void *
182e0 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
182f0 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
18300 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
18310 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
18320 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
18330 74 65 33 20 2a 64 62 3b 0a 20 20 73 74 61 74 69  te3 *db;.  stati
18340 63 20 63 6f 6e 73 74 20 63 68 61 72 20 7a 53 71  c const char zSq
18350 6c 5b 5d 20 3d 20 22 5c 30 30 30 53 45 4c 45 43  l[] = "\000SELEC
18360 54 20 31 22 3b 0a 20 20 73 71 6c 69 74 65 33 5f  T 1";.  sqlite3_
18370 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30 3b  stmt *pStmt = 0;
18380 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 35 30 5d  .  char zBuf[50]
18390 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69  ;.  int rc;..  i
183a0 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20  f( objc!=2 ){.  
183b0 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
183c0 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
183d0 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
183e0 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20   be \"", .      
183f0 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
18400 62 6a 76 5b 30 5d 29 2c 20 22 20 44 42 20 73 71  bjv[0]), " DB sq
18410 6c 20 62 79 74 65 73 20 74 61 69 6c 76 61 72 22  l bytes tailvar"
18420 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
18430 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
18440 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74    if( getDbPoint
18450 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
18460 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
18470 29 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e  ), &db) ) return
18480 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63   TCL_ERROR;.  rc
18490 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61   = sqlite3_prepa
184a0 72 65 5f 76 32 28 64 62 2c 20 26 7a 53 71 6c 5b  re_v2(db, &zSql[
184b0 31 5d 2c 20 30 2c 20 26 70 53 74 6d 74 2c 20 30  1], 0, &pStmt, 0
184c0 29 3b 0a 20 20 61 73 73 65 72 74 28 72 63 3d 3d  );.  assert(rc==
184d0 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70 53 74  SQLITE_OK || pSt
184e0 6d 74 3d 3d 30 29 3b 0a 20 20 69 66 28 20 73 71  mt==0);.  if( sq
184f0 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65  lite3TestErrCode
18500 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29  (interp, db, rc)
18510 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
18520 52 4f 52 3b 0a 20 20 69 66 28 20 72 63 21 3d 53  ROR;.  if( rc!=S
18530 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
18540 61 73 73 65 72 74 28 20 70 53 74 6d 74 3d 3d 30  assert( pStmt==0
18550 20 29 3b 0a 20 20 20 20 73 70 72 69 6e 74 66 28   );.    sprintf(
18560 7a 42 75 66 2c 20 22 28 25 64 29 20 22 2c 20 72  zBuf, "(%d) ", r
18570 63 29 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65  c);.    Tcl_Appe
18580 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
18590 20 7a 42 75 66 2c 20 73 71 6c 69 74 65 33 5f 65   zBuf, sqlite3_e
185a0 72 72 6d 73 67 28 64 62 29 2c 20 30 29 3b 0a 20  rrmsg(db), 0);. 
185b0 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
185c0 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  ROR;.  }..  if( 
185d0 70 53 74 6d 74 20 29 7b 0a 20 20 20 20 69 66 28  pStmt ){.    if(
185e0 20 73 71 6c 69 74 65 33 54 65 73 74 4d 61 6b 65   sqlite3TestMake
185f0 50 6f 69 6e 74 65 72 53 74 72 28 69 6e 74 65 72  PointerStr(inter
18600 70 2c 20 7a 42 75 66 2c 20 70 53 74 6d 74 29 20  p, zBuf, pStmt) 
18610 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
18620 4f 52 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65  OR;.    Tcl_Appe
18630 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
18640 20 7a 42 75 66 2c 20 30 29 3b 0a 20 20 7d 0a 20   zBuf, 0);.  }. 
18650 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
18660 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
18670 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31  sqlite3_prepare1
18680 36 20 44 42 20 73 71 6c 20 62 79 74 65 73 20 74  6 DB sql bytes t
18690 61 69 6c 76 61 72 0a 2a 2a 0a 2a 2a 20 43 6f 6d  ailvar.**.** Com
186a0 70 69 6c 65 20 75 70 20 74 6f 20 3c 62 79 74 65  pile up to <byte
186b0 73 3e 20 62 79 74 65 73 20 6f 66 20 74 68 65 20  s> bytes of the 
186c0 73 75 70 70 6c 69 65 64 20 53 51 4c 20 73 74 72  supplied SQL str
186d0 69 6e 67 20 3c 73 71 6c 3e 20 75 73 69 6e 67 0a  ing <sql> using.
186e0 2a 2a 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  ** database hand
186f0 6c 65 20 3c 44 42 3e 2e 20 54 68 65 20 70 61 72  le <DB>. The par
18700 61 6d 65 74 65 72 20 3c 74 61 69 6c 76 61 6c 3e  ameter <tailval>
18710 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
18720 61 20 67 6c 6f 62 61 6c 0a 2a 2a 20 76 61 72 69  a global.** vari
18730 61 62 6c 65 20 74 68 61 74 20 69 73 20 73 65 74  able that is set
18740 20 74 6f 20 74 68 65 20 75 6e 75 73 65 64 20 70   to the unused p
18750 6f 72 74 69 6f 6e 20 6f 66 20 3c 73 71 6c 3e 20  ortion of <sql> 
18760 28 69 66 20 61 6e 79 29 2e 20 41 0a 2a 2a 20 53  (if any). A.** S
18770 54 4d 54 20 68 61 6e 64 6c 65 20 69 73 20 72 65  TMT handle is re
18780 74 75 72 6e 65 64 2e 0a 2a 2f 0a 73 74 61 74 69  turned..*/.stati
18790 63 20 69 6e 74 20 74 65 73 74 5f 70 72 65 70 61  c int test_prepa
187a0 72 65 31 36 28 0a 20 20 76 6f 69 64 20 2a 20 63  re16(.  void * c
187b0 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
187c0 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
187d0 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
187e0 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
187f0 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20  jv[].){.#ifndef 
18800 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
18810 36 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  6.  sqlite3 *db;
18820 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a  .  const void *z
18830 53 71 6c 3b 0a 20 20 63 6f 6e 73 74 20 76 6f 69  Sql;.  const voi
18840 64 20 2a 7a 54 61 69 6c 20 3d 20 30 3b 0a 20 20  d *zTail = 0;.  
18850 54 63 6c 5f 4f 62 6a 20 2a 70 54 61 69 6c 20 3d  Tcl_Obj *pTail =
18860 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74   0;.  sqlite3_st
18870 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30 3b 0a 20  mt *pStmt = 0;. 
18880 20 63 68 61 72 20 7a 42 75 66 5b 35 30 5d 3b 20   char zBuf[50]; 
18890 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e 74  .  int rc;.  int
188a0 20 62 79 74 65 73 3b 20 20 20 20 20 20 20 20 20   bytes;         
188b0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 69 6e         /* The in
188c0 74 65 67 65 72 20 73 70 65 63 69 66 69 65 64 20  teger specified 
188d0 61 73 20 61 72 67 20 33 20 2a 2f 0a 20 20 69 6e  as arg 3 */.  in
188e0 74 20 6f 62 6a 6c 65 6e 3b 20 20 20 20 20 20 20  t objlen;       
188f0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 62          /* The b
18900 79 74 65 2d 61 72 72 61 79 20 6c 65 6e 67 74 68  yte-array length
18910 20 6f 66 20 61 72 67 20 32 20 2a 2f 0a 0a 20 20   of arg 2 */..  
18920 69 66 28 20 6f 62 6a 63 21 3d 35 20 26 26 20 6f  if( objc!=5 && o
18930 62 6a 63 21 3d 34 20 29 7b 0a 20 20 20 20 54 63  bjc!=4 ){.    Tc
18940 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
18950 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
18960 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
18970 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c  \"", .       Tcl
18980 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
18990 30 5d 29 2c 20 22 20 44 42 20 73 71 6c 20 62 79  0]), " DB sql by
189a0 74 65 73 20 3f 74 61 69 6c 76 61 72 3f 22 2c 20  tes ?tailvar?", 
189b0 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
189c0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
189d0 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72  if( getDbPointer
189e0 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
189f0 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
18a00 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
18a10 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 53 71 6c  CL_ERROR;.  zSql
18a20 20 3d 20 54 63 6c 5f 47 65 74 42 79 74 65 41 72   = Tcl_GetByteAr
18a30 72 61 79 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b  rayFromObj(objv[
18a40 32 5d 2c 20 26 6f 62 6a 6c 65 6e 29 3b 0a 20 20  2], &objlen);.  
18a50 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72  if( Tcl_GetIntFr
18a60 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
18a70 6a 76 5b 33 5d 2c 20 26 62 79 74 65 73 29 20 29  jv[3], &bytes) )
18a80 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
18a90 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  R;..  rc = sqlit
18aa0 65 33 5f 70 72 65 70 61 72 65 31 36 28 64 62 2c  e3_prepare16(db,
18ab0 20 7a 53 71 6c 2c 20 62 79 74 65 73 2c 20 26 70   zSql, bytes, &p
18ac0 53 74 6d 74 2c 20 6f 62 6a 63 3e 3d 35 20 3f 20  Stmt, objc>=5 ? 
18ad0 26 7a 54 61 69 6c 20 3a 20 30 29 3b 0a 20 20 69  &zTail : 0);.  i
18ae0 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72  f( sqlite3TestEr
18af0 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62  rCode(interp, db
18b00 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54  , rc) ) return T
18b10 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
18b20 72 63 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  rc ){.    return
18b30 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
18b40 0a 20 20 69 66 28 20 6f 62 6a 63 3e 3d 35 20 29  .  if( objc>=5 )
18b50 7b 0a 20 20 20 20 69 66 28 20 7a 54 61 69 6c 20  {.    if( zTail 
18b60 29 7b 0a 20 20 20 20 20 20 6f 62 6a 6c 65 6e 20  ){.      objlen 
18b70 3d 20 6f 62 6a 6c 65 6e 20 2d 20 28 28 75 38 20  = objlen - ((u8 
18b80 2a 29 7a 54 61 69 6c 2d 28 75 38 20 2a 29 7a 53  *)zTail-(u8 *)zS
18b90 71 6c 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ql);.    }else{.
18ba0 20 20 20 20 20 20 6f 62 6a 6c 65 6e 20 3d 20 30        objlen = 0
18bb0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 54 61 69  ;.    }.    pTai
18bc0 6c 20 3d 20 54 63 6c 5f 4e 65 77 42 79 74 65 41  l = Tcl_NewByteA
18bd0 72 72 61 79 4f 62 6a 28 28 75 38 20 2a 29 7a 54  rrayObj((u8 *)zT
18be0 61 69 6c 2c 20 6f 62 6a 6c 65 6e 29 3b 0a 20 20  ail, objlen);.  
18bf0 20 20 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75    Tcl_IncrRefCou
18c00 6e 74 28 70 54 61 69 6c 29 3b 0a 20 20 20 20 54  nt(pTail);.    T
18c10 63 6c 5f 4f 62 6a 53 65 74 56 61 72 32 28 69 6e  cl_ObjSetVar2(in
18c20 74 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 30  terp, objv[4], 0
18c30 2c 20 70 54 61 69 6c 2c 20 30 29 3b 0a 20 20 20  , pTail, 0);.   
18c40 20 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e   Tcl_DecrRefCoun
18c50 74 28 70 54 61 69 6c 29 3b 0a 20 20 7d 0a 0a 20  t(pTail);.  }.. 
18c60 20 69 66 28 20 70 53 74 6d 74 20 29 7b 0a 20 20   if( pStmt ){.  
18c70 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73    if( sqlite3Tes
18c80 74 4d 61 6b 65 50 6f 69 6e 74 65 72 53 74 72 28  tMakePointerStr(
18c90 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 70 53  interp, zBuf, pS
18ca0 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43  tmt) ) return TC
18cb0 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 54  L_ERROR;.  }.  T
18cc0 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
18cd0 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29  interp, zBuf, 0)
18ce0 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
18cf0 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f  TE_OMIT_UTF16 */
18d00 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
18d10 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
18d20 3a 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  : sqlite3_prepar
18d30 65 31 36 5f 76 32 20 44 42 20 73 71 6c 20 62 79  e16_v2 DB sql by
18d40 74 65 73 20 3f 74 61 69 6c 76 61 72 3f 0a 2a 2a  tes ?tailvar?.**
18d50 0a 2a 2a 20 43 6f 6d 70 69 6c 65 20 75 70 20 74  .** Compile up t
18d60 6f 20 3c 62 79 74 65 73 3e 20 62 79 74 65 73 20  o <bytes> bytes 
18d70 6f 66 20 74 68 65 20 73 75 70 70 6c 69 65 64 20  of the supplied 
18d80 53 51 4c 20 73 74 72 69 6e 67 20 3c 73 71 6c 3e  SQL string <sql>
18d90 20 75 73 69 6e 67 0a 2a 2a 20 64 61 74 61 62 61   using.** databa
18da0 73 65 20 68 61 6e 64 6c 65 20 3c 44 42 3e 2e 20  se handle <DB>. 
18db0 54 68 65 20 70 61 72 61 6d 65 74 65 72 20 3c 74  The parameter <t
18dc0 61 69 6c 76 61 6c 3e 20 69 73 20 74 68 65 20 6e  ailval> is the n
18dd0 61 6d 65 20 6f 66 20 61 20 67 6c 6f 62 61 6c 0a  ame of a global.
18de0 2a 2a 20 76 61 72 69 61 62 6c 65 20 74 68 61 74  ** variable that
18df0 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 75   is set to the u
18e00 6e 75 73 65 64 20 70 6f 72 74 69 6f 6e 20 6f 66  nused portion of
18e10 20 3c 73 71 6c 3e 20 28 69 66 20 61 6e 79 29 2e   <sql> (if any).
18e20 20 41 0a 2a 2a 20 53 54 4d 54 20 68 61 6e 64 6c   A.** STMT handl
18e30 65 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a  e is returned..*
18e40 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
18e50 74 5f 70 72 65 70 61 72 65 31 36 5f 76 32 28 0a  t_prepare16_v2(.
18e60 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
18e70 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
18e80 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
18e90 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
18ea0 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
18eb0 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  {.#ifndef SQLITE
18ec0 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 73 71  _OMIT_UTF16.  sq
18ed0 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e  lite3 *db;.  con
18ee0 73 74 20 76 6f 69 64 20 2a 7a 53 71 6c 3b 0a 20  st void *zSql;. 
18ef0 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 54 61   const void *zTa
18f00 69 6c 20 3d 20 30 3b 0a 20 20 54 63 6c 5f 4f 62  il = 0;.  Tcl_Ob
18f10 6a 20 2a 70 54 61 69 6c 20 3d 20 30 3b 0a 20 20  j *pTail = 0;.  
18f20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
18f30 74 6d 74 20 3d 20 30 3b 0a 20 20 63 68 61 72 20  tmt = 0;.  char 
18f40 7a 42 75 66 5b 35 30 5d 3b 20 0a 20 20 69 6e 74  zBuf[50]; .  int
18f50 20 72 63 3b 0a 20 20 69 6e 74 20 62 79 74 65 73   rc;.  int bytes
18f60 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
18f70 20 2f 2a 20 54 68 65 20 69 6e 74 65 67 65 72 20   /* The integer 
18f80 73 70 65 63 69 66 69 65 64 20 61 73 20 61 72 67  specified as arg
18f90 20 33 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 6c   3 */.  int objl
18fa0 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  en;             
18fb0 20 20 2f 2a 20 54 68 65 20 62 79 74 65 2d 61 72    /* The byte-ar
18fc0 72 61 79 20 6c 65 6e 67 74 68 20 6f 66 20 61 72  ray length of ar
18fd0 67 20 32 20 2a 2f 0a 0a 20 20 69 66 28 20 6f 62  g 2 */..  if( ob
18fe0 6a 63 21 3d 35 20 26 26 20 6f 62 6a 63 21 3d 34  jc!=5 && objc!=4
18ff0 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
19000 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
19010 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
19020 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a  should be \"", .
19030 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
19040 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22  ring(objv[0]), "
19050 20 44 42 20 73 71 6c 20 62 79 74 65 73 20 3f 74   DB sql bytes ?t
19060 61 69 6c 76 61 72 3f 22 2c 20 30 29 3b 0a 20 20  ailvar?", 0);.  
19070 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
19080 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
19090 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tDbPointer(inter
190a0 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
190b0 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20  (objv[1]), &db) 
190c0 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
190d0 4f 52 3b 0a 20 20 7a 53 71 6c 20 3d 20 54 63 6c  OR;.  zSql = Tcl
190e0 5f 47 65 74 42 79 74 65 41 72 72 61 79 46 72 6f  _GetByteArrayFro
190f0 6d 4f 62 6a 28 6f 62 6a 76 5b 32 5d 2c 20 26 6f  mObj(objv[2], &o
19100 62 6a 6c 65 6e 29 3b 0a 20 20 69 66 28 20 54 63  bjlen);.  if( Tc
19110 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
19120 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c  interp, objv[3],
19130 20 26 62 79 74 65 73 29 20 29 20 72 65 74 75 72   &bytes) ) retur
19140 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
19150 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65  rc = sqlite3_pre
19160 70 61 72 65 31 36 5f 76 32 28 64 62 2c 20 7a 53  pare16_v2(db, zS
19170 71 6c 2c 20 62 79 74 65 73 2c 20 26 70 53 74 6d  ql, bytes, &pStm
19180 74 2c 20 6f 62 6a 63 3e 3d 35 20 3f 20 26 7a 54  t, objc>=5 ? &zT
19190 61 69 6c 20 3a 20 30 29 3b 0a 20 20 69 66 28 20  ail : 0);.  if( 
191a0 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f  sqlite3TestErrCo
191b0 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72  de(interp, db, r
191c0 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  c) ) return TCL_
191d0 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 63 20  ERROR;.  if( rc 
191e0 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  ){.    return TC
191f0 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
19200 69 66 28 20 6f 62 6a 63 3e 3d 35 20 29 7b 0a 20  if( objc>=5 ){. 
19210 20 20 20 69 66 28 20 7a 54 61 69 6c 20 29 7b 0a     if( zTail ){.
19220 20 20 20 20 20 20 6f 62 6a 6c 65 6e 20 3d 20 6f        objlen = o
19230 62 6a 6c 65 6e 20 2d 20 28 28 75 38 20 2a 29 7a  bjlen - ((u8 *)z
19240 54 61 69 6c 2d 28 75 38 20 2a 29 7a 53 71 6c 29  Tail-(u8 *)zSql)
19250 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
19260 20 20 20 6f 62 6a 6c 65 6e 20 3d 20 30 3b 0a 20     objlen = 0;. 
19270 20 20 20 7d 0a 20 20 20 20 70 54 61 69 6c 20 3d     }.    pTail =
19280 20 54 63 6c 5f 4e 65 77 42 79 74 65 41 72 72 61   Tcl_NewByteArra
19290 79 4f 62 6a 28 28 75 38 20 2a 29 7a 54 61 69 6c  yObj((u8 *)zTail
192a0 2c 20 6f 62 6a 6c 65 6e 29 3b 0a 20 20 20 20 54  , objlen);.    T
192b0 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74 28  cl_IncrRefCount(
192c0 70 54 61 69 6c 29 3b 0a 20 20 20 20 54 63 6c 5f  pTail);.    Tcl_
192d0 4f 62 6a 53 65 74 56 61 72 32 28 69 6e 74 65 72  ObjSetVar2(inter
192e0 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 30 2c 20 70  p, objv[4], 0, p
192f0 54 61 69 6c 2c 20 30 29 3b 0a 20 20 20 20 54 63  Tail, 0);.    Tc
19300 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28 70  l_DecrRefCount(p
19310 54 61 69 6c 29 3b 0a 20 20 7d 0a 0a 20 20 69 66  Tail);.  }..  if
19320 28 20 70 53 74 6d 74 20 29 7b 0a 20 20 20 20 69  ( pStmt ){.    i
19330 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 4d 61  f( sqlite3TestMa
19340 6b 65 50 6f 69 6e 74 65 72 53 74 72 28 69 6e 74  kePointerStr(int
19350 65 72 70 2c 20 7a 42 75 66 2c 20 70 53 74 6d 74  erp, zBuf, pStmt
19360 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
19370 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f  RROR;.  }.  Tcl_
19380 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
19390 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 23  erp, zBuf, 0);.#
193a0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
193b0 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 20 20  OMIT_UTF16 */.  
193c0 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
193d0 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
193e0 71 6c 69 74 65 33 5f 6f 70 65 6e 20 66 69 6c 65  qlite3_open file
193f0 6e 61 6d 65 20 3f 6f 70 74 69 6f 6e 73 2d 6c 69  name ?options-li
19400 73 74 3f 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  st?.*/.static in
19410 74 20 74 65 73 74 5f 6f 70 65 6e 28 0a 20 20 76  t test_open(.  v
19420 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
19430 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
19440 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
19450 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
19460 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
19470 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69   const char *zFi
19480 6c 65 6e 61 6d 65 3b 0a 20 20 73 71 6c 69 74 65  lename;.  sqlite
19490 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b  3 *db;.  int rc;
194a0 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 31 30 30  .  char zBuf[100
194b0 5d 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  ];..  if( objc!=
194c0 33 20 26 26 20 6f 62 6a 63 21 3d 32 20 26 26 20  3 && objc!=2 && 
194d0 6f 62 6a 63 21 3d 31 20 29 7b 0a 20 20 20 20 54  objc!=1 ){.    T
194e0 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
194f0 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
19500 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
19510 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63   \"", .       Tc
19520 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
19530 5b 30 5d 29 2c 20 22 20 66 69 6c 65 6e 61 6d 65  [0]), " filename
19540 20 6f 70 74 69 6f 6e 73 2d 6c 69 73 74 22 2c 20   options-list", 
19550 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
19560 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
19570 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 6f 62 6a   zFilename = obj
19580 63 3e 31 20 3f 20 54 63 6c 5f 47 65 74 53 74 72  c>1 ? Tcl_GetStr
19590 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 20 3a 20 30  ing(objv[1]) : 0
195a0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
195b0 5f 6f 70 65 6e 28 7a 46 69 6c 65 6e 61 6d 65 2c  _open(zFilename,
195c0 20 26 64 62 29 3b 0a 20 20 0a 20 20 69 66 28 20   &db);.  .  if( 
195d0 73 71 6c 69 74 65 33 54 65 73 74 4d 61 6b 65 50  sqlite3TestMakeP
195e0 6f 69 6e 74 65 72 53 74 72 28 69 6e 74 65 72 70  ointerStr(interp
195f0 2c 20 7a 42 75 66 2c 20 64 62 29 20 29 20 72 65  , zBuf, db) ) re
19600 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
19610 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
19620 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c  lt(interp, zBuf,
19630 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43   0);.  return TC
19640 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
19650 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 6f 70  sage: sqlite3_op
19660 65 6e 31 36 20 66 69 6c 65 6e 61 6d 65 20 6f 70  en16 filename op
19670 74 69 6f 6e 73 0a 2a 2f 0a 73 74 61 74 69 63 20  tions.*/.static 
19680 69 6e 74 20 74 65 73 74 5f 6f 70 65 6e 31 36 28  int test_open16(
19690 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
196a0 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
196b0 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
196c0 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
196d0 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
196e0 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ){.#ifndef SQLIT
196f0 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 63  E_OMIT_UTF16.  c
19700 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 46 69 6c 65  onst void *zFile
19710 6e 61 6d 65 3b 0a 20 20 73 71 6c 69 74 65 33 20  name;.  sqlite3 
19720 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  *db;.  int rc;. 
19730 20 63 68 61 72 20 7a 42 75 66 5b 31 30 30 5d 3b   char zBuf[100];
19740 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20  ..  if( objc!=3 
19750 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
19760 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
19770 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
19780 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20  hould be \"", . 
19790 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
197a0 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20  ing(objv[0]), " 
197b0 66 69 6c 65 6e 61 6d 65 20 6f 70 74 69 6f 6e 73  filename options
197c0 2d 6c 69 73 74 22 2c 20 30 29 3b 0a 20 20 20 20  -list", 0);.    
197d0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
197e0 3b 0a 20 20 7d 0a 0a 20 20 7a 46 69 6c 65 6e 61  ;.  }..  zFilena
197f0 6d 65 20 3d 20 54 63 6c 5f 47 65 74 42 79 74 65  me = Tcl_GetByte
19800 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28 6f 62 6a  ArrayFromObj(obj
19810 76 5b 31 5d 2c 20 30 29 3b 0a 20 20 72 63 20 3d  v[1], 0);.  rc =
19820 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 28   sqlite3_open16(
19830 7a 46 69 6c 65 6e 61 6d 65 2c 20 26 64 62 29 3b  zFilename, &db);
19840 0a 20 20 0a 20 20 69 66 28 20 73 71 6c 69 74 65  .  .  if( sqlite
19850 33 54 65 73 74 4d 61 6b 65 50 6f 69 6e 74 65 72  3TestMakePointer
19860 53 74 72 28 69 6e 74 65 72 70 2c 20 7a 42 75 66  Str(interp, zBuf
19870 2c 20 64 62 29 20 29 20 72 65 74 75 72 6e 20 54  , db) ) return T
19880 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f  CL_ERROR;.  Tcl_
19890 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
198a0 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 23  erp, zBuf, 0);.#
198b0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
198c0 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 20 20  OMIT_UTF16 */.  
198d0 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
198e0 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
198f0 71 6c 69 74 65 33 5f 63 6f 6d 70 6c 65 74 65 31  qlite3_complete1
19900 36 20 3c 55 54 46 2d 31 36 20 73 74 72 69 6e 67  6 <UTF-16 string
19910 3e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 31  >.**.** Return 1
19920 20 69 66 20 74 68 65 20 73 75 70 70 6c 69 65 64   if the supplied
19930 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 63   argument is a c
19940 6f 6d 70 6c 65 74 65 20 53 51 4c 20 73 74 61 74  omplete SQL stat
19950 65 6d 65 6e 74 2c 20 6f 72 20 7a 65 72 6f 0a 2a  ement, or zero.*
19960 2a 20 6f 74 68 65 72 77 69 73 65 2e 0a 2a 2f 0a  * otherwise..*/.
19970 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
19980 63 6f 6d 70 6c 65 74 65 31 36 28 0a 20 20 76 6f  complete16(.  vo
19990 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
199a0 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
199b0 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
199c0 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
199d0 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69  NST objv[].){.#i
199e0 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
199f0 45 5f 4f 4d 49 54 5f 43 4f 4d 50 4c 45 54 45 29  E_OMIT_COMPLETE)
19a00 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
19a10 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 29 0a  ITE_OMIT_UTF16).
19a20 20 20 63 68 61 72 20 2a 7a 42 75 66 3b 0a 0a 20    char *zBuf;.. 
19a30 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a   if( objc!=2 ){.
19a40 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d      Tcl_WrongNum
19a50 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20  Args(interp, 1, 
19a60 6f 62 6a 76 2c 20 22 3c 75 74 66 2d 31 36 20 73  objv, "<utf-16 s
19a70 71 6c 3e 22 29 3b 0a 20 20 20 20 72 65 74 75 72  ql>");.    retur
19a80 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
19a90 0a 0a 20 20 7a 42 75 66 20 3d 20 28 63 68 61 72  ..  zBuf = (char
19aa0 2a 29 54 63 6c 5f 47 65 74 42 79 74 65 41 72 72  *)Tcl_GetByteArr
19ab0 61 79 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 31  ayFromObj(objv[1
19ac0 5d 2c 20 30 29 3b 0a 20 20 54 63 6c 5f 53 65 74  ], 0);.  Tcl_Set
19ad0 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
19ae0 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28  , Tcl_NewIntObj(
19af0 73 71 6c 69 74 65 33 5f 63 6f 6d 70 6c 65 74 65  sqlite3_complete
19b00 31 36 28 7a 42 75 66 29 29 29 3b 0a 23 65 6e 64  16(zBuf)));.#end
19b10 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
19b20 54 5f 43 4f 4d 50 4c 45 54 45 20 26 26 20 53 51  T_COMPLETE && SQ
19b30 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
19b40 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  */.  return TCL_
19b50 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
19b60 67 65 3a 20 73 71 6c 69 74 65 33 5f 73 74 65 70  ge: sqlite3_step
19b70 20 53 54 4d 54 0a 2a 2a 0a 2a 2a 20 41 64 76 61   STMT.**.** Adva
19b80 6e 63 65 20 74 68 65 20 73 74 61 74 65 6d 65 6e  nce the statemen
19b90 74 20 74 6f 20 74 68 65 20 6e 65 78 74 20 72 6f  t to the next ro
19ba0 77 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  w..*/.static int
19bb0 20 74 65 73 74 5f 73 74 65 70 28 0a 20 20 76 6f   test_step(.  vo
19bc0 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
19bd0 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
19be0 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
19bf0 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
19c00 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
19c10 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
19c20 74 6d 74 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  tmt;.  int rc;..
19c30 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b    if( objc!=2 ){
19c40 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
19c50 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
19c60 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
19c70 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20  uld be \"", .   
19c80 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
19c90 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54  g(objv[0]), " ST
19ca0 4d 54 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  MT", 0);.    ret
19cb0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
19cc0 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d   }..  if( getStm
19cd0 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  tPointer(interp,
19ce0 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
19cf0 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29  bjv[1]), &pStmt)
19d00 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
19d10 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ROR;.  rc = sqli
19d20 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74 29 3b  te3_step(pStmt);
19d30 0a 0a 20 20 2f 2a 20 69 66 28 20 72 63 21 3d 53  ..  /* if( rc!=S
19d40 51 4c 49 54 45 5f 44 4f 4e 45 20 26 26 20 72 63  QLITE_DONE && rc
19d50 21 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 20 72  !=SQLITE_ROW ) r
19d60 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
19d70 20 2a 2f 0a 20 20 54 63 6c 5f 53 65 74 52 65 73   */.  Tcl_SetRes
19d80 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61  ult(interp, (cha
19d90 72 20 2a 29 74 31 45 72 72 6f 72 4e 61 6d 65 28  r *)t1ErrorName(
19da0 72 63 29 2c 20 30 29 3b 0a 20 20 72 65 74 75 72  rc), 0);.  retur
19db0 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 73 74 61  n TCL_OK;.}..sta
19dc0 74 69 63 20 69 6e 74 20 74 65 73 74 5f 73 71 6c  tic int test_sql
19dd0 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
19de0 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
19df0 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
19e00 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
19e10 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
19e20 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  .){.  sqlite3_st
19e30 6d 74 20 2a 70 53 74 6d 74 3b 0a 0a 20 20 69 66  mt *pStmt;..  if
19e40 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
19e50 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67   Tcl_WrongNumArg
19e60 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a  s(interp, 1, obj
19e70 76 2c 20 22 53 54 4d 54 22 29 3b 0a 20 20 20 20  v, "STMT");.    
19e80 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
19e90 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
19ea0 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
19eb0 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
19ec0 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
19ed0 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
19ee0 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53 65  _ERROR;.  Tcl_Se
19ef0 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  tResult(interp, 
19f00 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 5f  (char *)sqlite3_
19f10 73 71 6c 28 70 53 74 6d 74 29 2c 20 54 43 4c 5f  sql(pStmt), TCL_
19f20 56 4f 4c 41 54 49 4c 45 29 3b 0a 20 20 72 65 74  VOLATILE);.  ret
19f30 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
19f40 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69  *.** Usage: sqli
19f50 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74  te3_column_count
19f60 20 53 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 52 65 74   STMT .**.** Ret
19f70 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
19f80 66 20 63 6f 6c 75 6d 6e 73 20 72 65 74 75 72 6e  f columns return
19f90 65 64 20 62 79 20 74 68 65 20 73 71 6c 20 73 74  ed by the sql st
19fa0 61 74 65 6d 65 6e 74 20 53 54 4d 54 2e 0a 2a 2f  atement STMT..*/
19fb0 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
19fc0 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 0a 20  _column_count(. 
19fd0 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
19fe0 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
19ff0 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
1a000 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
1a010 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
1a020 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
1a030 2a 70 53 74 6d 74 3b 0a 0a 20 20 69 66 28 20 6f  *pStmt;..  if( o
1a040 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  bjc!=2 ){.    Tc
1a050 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
1a060 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
1a070 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
1a080 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c  \"", .       Tcl
1a090 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
1a0a0 30 5d 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75  0]), " STMT colu
1a0b0 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  mn", 0);.    ret
1a0c0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
1a0d0 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d   }..  if( getStm
1a0e0 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  tPointer(interp,
1a0f0 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
1a100 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29  bjv[1]), &pStmt)
1a110 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
1a120 52 4f 52 3b 0a 0a 20 20 54 63 6c 5f 53 65 74 4f  ROR;..  Tcl_SetO
1a130 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
1a140 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73   Tcl_NewIntObj(s
1a150 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f  qlite3_column_co
1a160 75 6e 74 28 70 53 74 6d 74 29 29 29 3b 0a 20 20  unt(pStmt)));.  
1a170 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
1a180 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
1a190 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79  qlite3_column_ty
1a1a0 70 65 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a  pe STMT column.*
1a1b0 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
1a1c0 74 79 70 65 20 6f 66 20 74 68 65 20 64 61 74 61  type of the data
1a1d0 20 69 6e 20 63 6f 6c 75 6d 6e 20 27 63 6f 6c 75   in column 'colu
1a1e0 6d 6e 27 20 6f 66 20 74 68 65 20 63 75 72 72 65  mn' of the curre
1a1f0 6e 74 20 72 6f 77 2e 0a 2a 2f 0a 73 74 61 74 69  nt row..*/.stati
1a200 63 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c 75 6d  c int test_colum
1a210 6e 5f 74 79 70 65 28 0a 20 20 76 6f 69 64 20 2a  n_type(.  void *
1a220 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
1a230 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
1a240 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
1a250 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
1a260 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
1a270 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
1a280 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a 20 20 69 6e  .  int col;.  in
1a290 74 20 74 70 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  t tp;..  if( obj
1a2a0 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
1a2b0 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
1a2c0 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
1a2d0 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
1a2e0 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
1a2f0 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
1a300 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e  ), " STMT column
1a310 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
1a320 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
1a330 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  ..  if( getStmtP
1a340 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
1a350 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
1a360 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29  v[1]), &pStmt) )
1a370 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
1a380 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  R;.  if( Tcl_Get
1a390 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
1a3a0 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c  p, objv[2], &col
1a3b0 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
1a3c0 52 52 4f 52 3b 0a 0a 20 20 74 70 20 3d 20 73 71  RROR;..  tp = sq
1a3d0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70  lite3_column_typ
1a3e0 65 28 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a 20  e(pStmt, col);. 
1a3f0 20 73 77 69 74 63 68 28 20 74 70 20 29 7b 0a 20   switch( tp ){. 
1a400 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49     case SQLITE_I
1a410 4e 54 45 47 45 52 3a 20 0a 20 20 20 20 20 20 54  NTEGER: .      T
1a420 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74  cl_SetResult(int
1a430 65 72 70 2c 20 22 49 4e 54 45 47 45 52 22 2c 20  erp, "INTEGER", 
1a440 54 43 4c 5f 53 54 41 54 49 43 29 3b 20 0a 20 20  TCL_STATIC); .  
1a450 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
1a460 61 73 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 3a  ase SQLITE_NULL:
1a470 0a 20 20 20 20 20 20 54 63 6c 5f 53 65 74 52 65  .      Tcl_SetRe
1a480 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 4e 55  sult(interp, "NU
1a490 4c 4c 22 2c 20 54 43 4c 5f 53 54 41 54 49 43 29  LL", TCL_STATIC)
1a4a0 3b 20 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  ; .      break;.
1a4b0 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
1a4c0 46 4c 4f 41 54 3a 0a 20 20 20 20 20 20 54 63 6c  FLOAT:.      Tcl
1a4d0 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
1a4e0 70 2c 20 22 46 4c 4f 41 54 22 2c 20 54 43 4c 5f  p, "FLOAT", TCL_
1a4f0 53 54 41 54 49 43 29 3b 20 0a 20 20 20 20 20 20  STATIC); .      
1a500 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
1a510 53 51 4c 49 54 45 5f 54 45 58 54 3a 0a 20 20 20  SQLITE_TEXT:.   
1a520 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74     Tcl_SetResult
1a530 28 69 6e 74 65 72 70 2c 20 22 54 45 58 54 22 2c  (interp, "TEXT",
1a540 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 20 0a 20   TCL_STATIC); . 
1a550 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1a560 63 61 73 65 20 53 51 4c 49 54 45 5f 42 4c 4f 42  case SQLITE_BLOB
1a570 3a 0a 20 20 20 20 20 20 54 63 6c 5f 53 65 74 52  :.      Tcl_SetR
1a580 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 42  esult(interp, "B
1a590 4c 4f 42 22 2c 20 54 43 4c 5f 53 54 41 54 49 43  LOB", TCL_STATIC
1a5a0 29 3b 20 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  ); .      break;
1a5b0 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 0a 20 20  .    default:.  
1a5c0 20 20 20 20 61 73 73 65 72 74 28 30 29 3b 0a 20      assert(0);. 
1a5d0 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54 43 4c   }..  return TCL
1a5e0 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
1a5f0 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c  age: sqlite3_col
1a600 75 6d 6e 5f 69 6e 74 36 34 20 53 54 4d 54 20 63  umn_int64 STMT c
1a610 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 52 65 74 75  olumn.**.** Retu
1a620 72 6e 20 74 68 65 20 64 61 74 61 20 69 6e 20 63  rn the data in c
1a630 6f 6c 75 6d 6e 20 27 63 6f 6c 75 6d 6e 27 20 6f  olumn 'column' o
1a640 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f  f the current ro
1a650 77 20 63 61 73 74 20 61 73 20 61 6e 0a 2a 2a 20  w cast as an.** 
1a660 77 69 64 65 20 28 36 34 2d 62 69 74 29 20 69 6e  wide (64-bit) in
1a670 74 65 67 65 72 2e 0a 2a 2f 0a 73 74 61 74 69 63  teger..*/.static
1a680 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c 75 6d 6e   int test_column
1a690 5f 69 6e 74 36 34 28 0a 20 20 76 6f 69 64 20 2a  _int64(.  void *
1a6a0 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
1a6b0 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
1a6c0 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
1a6d0 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
1a6e0 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
1a6f0 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
1a700 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a 20 20 69 36  .  int col;.  i6
1a710 34 20 69 56 61 6c 3b 0a 0a 20 20 69 66 28 20 6f  4 iVal;..  if( o
1a720 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63  bjc!=3 ){.    Tc
1a730 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
1a740 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
1a750 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
1a760 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c  \"", .       Tcl
1a770 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
1a780 30 5d 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75  0]), " STMT colu
1a790 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  mn", 0);.    ret
1a7a0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
1a7b0 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d   }..  if( getStm
1a7c0 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  tPointer(interp,
1a7d0 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
1a7e0 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29  bjv[1]), &pStmt)
1a7f0 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
1a800 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47  ROR;.  if( Tcl_G
1a810 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
1a820 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 63  erp, objv[2], &c
1a830 6f 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  ol) ) return TCL
1a840 5f 45 52 52 4f 52 3b 0a 0a 20 20 69 56 61 6c 20  _ERROR;..  iVal 
1a850 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
1a860 5f 69 6e 74 36 34 28 70 53 74 6d 74 2c 20 63 6f  _int64(pStmt, co
1a870 6c 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a  l);.  Tcl_SetObj
1a880 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
1a890 63 6c 5f 4e 65 77 57 69 64 65 49 6e 74 4f 62 6a  cl_NewWideIntObj
1a8a0 28 69 56 61 6c 29 29 3b 0a 20 20 72 65 74 75 72  (iVal));.  retur
1a8b0 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
1a8c0 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65  ** Usage: sqlite
1a8d0 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 20 53 54  3_column_blob ST
1a8e0 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2f 0a 73 74 61  MT column.*/.sta
1a8f0 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c  tic int test_col
1a900 75 6d 6e 5f 62 6c 6f 62 28 0a 20 20 76 6f 69 64  umn_blob(.  void
1a910 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
1a920 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
1a930 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
1a940 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
1a950 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
1a960 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
1a970 74 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a 0a 20  t;.  int col;.. 
1a980 20 69 6e 74 20 6c 65 6e 3b 0a 20 20 63 6f 6e 73   int len;.  cons
1a990 74 20 76 6f 69 64 20 2a 70 42 6c 6f 62 3b 0a 0a  t void *pBlob;..
1a9a0 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b    if( objc!=3 ){
1a9b0 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
1a9c0 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
1a9d0 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
1a9e0 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20  uld be \"", .   
1a9f0 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
1aa00 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54  g(objv[0]), " ST
1aa10 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a  MT column", 0);.
1aa20 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
1aa30 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  RROR;.  }..  if(
1aa40 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28   getStmtPointer(
1aa50 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
1aa60 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
1aa70 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e  &pStmt) ) return
1aa80 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
1aa90 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d  ( Tcl_GetIntFrom
1aaa0 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
1aab0 5b 32 5d 2c 20 26 63 6f 6c 29 20 29 20 72 65 74  [2], &col) ) ret
1aac0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a  urn TCL_ERROR;..
1aad0 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 5f    len = sqlite3_
1aae0 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 70 53 74  column_bytes(pSt
1aaf0 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20 70 42 6c 6f  mt, col);.  pBlo
1ab00 62 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  b = sqlite3_colu
1ab10 6d 6e 5f 62 6c 6f 62 28 70 53 74 6d 74 2c 20 63  mn_blob(pStmt, c
1ab20 6f 6c 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62  ol);.  Tcl_SetOb
1ab30 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
1ab40 54 63 6c 5f 4e 65 77 42 79 74 65 41 72 72 61 79  Tcl_NewByteArray
1ab50 4f 62 6a 28 70 42 6c 6f 62 2c 20 6c 65 6e 29 29  Obj(pBlob, len))
1ab60 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
1ab70 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
1ab80 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  e: sqlite3_colum
1ab90 6e 5f 64 6f 75 62 6c 65 20 53 54 4d 54 20 63 6f  n_double STMT co
1aba0 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72  lumn.**.** Retur
1abb0 6e 20 74 68 65 20 64 61 74 61 20 69 6e 20 63 6f  n the data in co
1abc0 6c 75 6d 6e 20 27 63 6f 6c 75 6d 6e 27 20 6f 66  lumn 'column' of
1abd0 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
1abe0 20 63 61 73 74 20 61 73 20 61 20 64 6f 75 62 6c   cast as a doubl
1abf0 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  e..*/.static int
1ac00 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 64 6f 75   test_column_dou
1ac10 62 6c 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  ble(.  void * cl
1ac20 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
1ac30 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
1ac40 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
1ac50 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
1ac60 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
1ac70 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20  _stmt *pStmt;.  
1ac80 69 6e 74 20 63 6f 6c 3b 0a 20 20 64 6f 75 62 6c  int col;.  doubl
1ac90 65 20 72 56 61 6c 3b 0a 0a 20 20 69 66 28 20 6f  e rVal;..  if( o
1aca0 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63  bjc!=3 ){.    Tc
1acb0 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
1acc0 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
1acd0 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
1ace0 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c  \"", .       Tcl
1acf0 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
1ad00 30 5d 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75  0]), " STMT colu
1ad10 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  mn", 0);.    ret
1ad20 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
1ad30 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d   }..  if( getStm
1ad40 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  tPointer(interp,
1ad50 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
1ad60 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29  bjv[1]), &pStmt)
1ad70 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
1ad80 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47  ROR;.  if( Tcl_G
1ad90 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
1ada0 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 63  erp, objv[2], &c
1adb0 6f 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  ol) ) return TCL
1adc0 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 56 61 6c 20  _ERROR;..  rVal 
1add0 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
1ade0 5f 64 6f 75 62 6c 65 28 70 53 74 6d 74 2c 20 63  _double(pStmt, c
1adf0 6f 6c 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62  ol);.  Tcl_SetOb
1ae00 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
1ae10 54 63 6c 5f 4e 65 77 44 6f 75 62 6c 65 4f 62 6a  Tcl_NewDoubleObj
1ae20 28 72 56 61 6c 29 29 3b 0a 20 20 72 65 74 75 72  (rVal));.  retur
1ae30 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
1ae40 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65  ** Usage: sqlite
1ae50 33 5f 64 61 74 61 5f 63 6f 75 6e 74 20 53 54 4d  3_data_count STM
1ae60 54 20 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  T .**.** Return 
1ae70 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
1ae80 6c 75 6d 6e 73 20 72 65 74 75 72 6e 65 64 20 62  lumns returned b
1ae90 79 20 74 68 65 20 73 71 6c 20 73 74 61 74 65 6d  y the sql statem
1aea0 65 6e 74 20 53 54 4d 54 2e 0a 2a 2f 0a 73 74 61  ent STMT..*/.sta
1aeb0 74 69 63 20 69 6e 74 20 74 65 73 74 5f 64 61 74  tic int test_dat
1aec0 61 5f 63 6f 75 6e 74 28 0a 20 20 76 6f 69 64 20  a_count(.  void 
1aed0 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
1aee0 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
1aef0 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
1af00 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
1af10 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
1af20 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
1af30 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32  ;..  if( objc!=2
1af40 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
1af50 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
1af60 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
1af70 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a  should be \"", .
1af80 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
1af90 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22  ring(objv[0]), "
1afa0 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30   STMT column", 0
1afb0 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
1afc0 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
1afd0 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  if( getStmtPoint
1afe0 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
1aff0 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
1b000 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74  ), &pStmt) ) ret
1b010 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a  urn TCL_ERROR;..
1b020 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
1b030 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
1b040 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33  ewIntObj(sqlite3
1b050 5f 64 61 74 61 5f 63 6f 75 6e 74 28 70 53 74 6d  _data_count(pStm
1b060 74 29 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  t)));.  return T
1b070 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
1b080 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63  Usage: sqlite3_c
1b090 6f 6c 75 6d 6e 5f 74 65 78 74 20 53 54 4d 54 20  olumn_text STMT 
1b0a0 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73 61  column.**.** Usa
1b0b0 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ge: sqlite3_colu
1b0c0 6d 6e 5f 64 65 63 6c 74 79 70 65 20 53 54 4d 54  mn_decltype STMT
1b0d0 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73   column.**.** Us
1b0e0 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c  age: sqlite3_col
1b0f0 75 6d 6e 5f 6e 61 6d 65 20 53 54 4d 54 20 63 6f  umn_name STMT co
1b100 6c 75 6d 6e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  lumn.*/.static i
1b110 6e 74 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66  nt test_stmt_utf
1b120 38 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  8(.  void * clie
1b130 6e 74 44 61 74 61 2c 20 20 20 20 20 20 20 20 2f  ntData,        /
1b140 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 53 51 4c  * Pointer to SQL
1b150 69 74 65 20 41 50 49 20 66 75 6e 63 74 69 6f 6e  ite API function
1b160 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 20 2a 2f   to be invoke */
1b170 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
1b180 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
1b190 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
1b1a0 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
1b1b0 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
1b1c0 74 6d 74 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a  tmt;.  int col;.
1b1d0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 28 2a    const char *(*
1b1e0 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 73  xFunc)(sqlite3_s
1b1f0 74 6d 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 63 6f  tmt*, int);.  co
1b200 6e 73 74 20 63 68 61 72 20 2a 7a 52 65 74 3b 0a  nst char *zRet;.
1b210 0a 20 20 78 46 75 6e 63 20 3d 20 28 63 6f 6e 73  .  xFunc = (cons
1b220 74 20 63 68 61 72 20 2a 28 2a 29 28 73 71 6c 69  t char *(*)(sqli
1b230 74 65 33 5f 73 74 6d 74 2a 2c 20 69 6e 74 29 29  te3_stmt*, int))
1b240 63 6c 69 65 6e 74 44 61 74 61 3b 0a 20 20 69 66  clientData;.  if
1b250 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20  ( objc!=3 ){.   
1b260 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
1b270 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
1b280 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
1b290 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20  be \"", .       
1b2a0 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
1b2b0 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20 63  jv[0]), " STMT c
1b2c0 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20  olumn", 0);.    
1b2d0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
1b2e0 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
1b2f0 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
1b300 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
1b310 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
1b320 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
1b330 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63  _ERROR;.  if( Tc
1b340 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
1b350 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c  interp, objv[2],
1b360 20 26 63 6f 6c 29 20 29 20 72 65 74 75 72 6e 20   &col) ) return 
1b370 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 52 65  TCL_ERROR;.  zRe
1b380 74 20 3d 20 78 46 75 6e 63 28 70 53 74 6d 74 2c  t = xFunc(pStmt,
1b390 20 63 6f 6c 29 3b 0a 20 20 69 66 28 20 7a 52 65   col);.  if( zRe
1b3a0 74 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74  t ){.    Tcl_Set
1b3b0 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28  Result(interp, (
1b3c0 63 68 61 72 20 2a 29 7a 52 65 74 2c 20 30 29 3b  char *)zRet, 0);
1b3d0 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43  .  }.  return TC
1b3e0 4c 5f 4f 4b 3b 0a 7d 0a 0a 73 74 61 74 69 63 20  L_OK;.}..static 
1b3f0 69 6e 74 20 74 65 73 74 5f 67 6c 6f 62 61 6c 5f  int test_global_
1b400 72 65 63 6f 76 65 72 28 0a 20 20 76 6f 69 64 20  recover(.  void 
1b410 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
1b420 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
1b430 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
1b440 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
1b450 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64   objv[].){.#ifnd
1b460 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44  ef SQLITE_OMIT_D
1b470 45 50 52 45 43 41 54 45 44 0a 20 20 69 6e 74 20  EPRECATED.  int 
1b480 72 63 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  rc;.  if( objc!=
1b490 31 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f  1 ){.    Tcl_Wro
1b4a0 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
1b4b0 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 22 29 3b 0a  , 1, objv, "");.
1b4c0 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
1b4d0 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  RROR;.  }.  rc =
1b4e0 20 73 71 6c 69 74 65 33 5f 67 6c 6f 62 61 6c 5f   sqlite3_global_
1b4f0 72 65 63 6f 76 65 72 28 29 3b 0a 20 20 54 63 6c  recover();.  Tcl
1b500 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
1b510 70 2c 20 28 63 68 61 72 20 2a 29 74 31 45 72 72  p, (char *)t1Err
1b520 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f  orName(rc), TCL_
1b530 53 54 41 54 49 43 29 3b 0a 23 65 6e 64 69 66 0a  STATIC);.#endif.
1b540 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
1b550 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
1b560 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
1b570 74 65 78 74 20 53 54 4d 54 20 63 6f 6c 75 6d 6e  text STMT column
1b580 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  .**.** Usage: sq
1b590 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63  lite3_column_dec
1b5a0 6c 74 79 70 65 20 53 54 4d 54 20 63 6f 6c 75 6d  ltype STMT colum
1b5b0 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  n.**.** Usage: s
1b5c0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
1b5d0 6d 65 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a  me STMT column.*
1b5e0 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
1b5f0 74 5f 73 74 6d 74 5f 75 74 66 31 36 28 0a 20 20  t_stmt_utf16(.  
1b600 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
1b610 61 2c 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65  a,     /* Pointe
1b620 72 20 74 6f 20 53 51 4c 69 74 65 20 41 50 49 20  r to SQLite API 
1b630 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 69  function to be i
1b640 6e 76 6f 6b 65 64 20 2a 2f 0a 20 20 54 63 6c 5f  nvoked */.  Tcl_
1b650 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
1b660 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
1b670 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
1b680 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20 53  v[].){.#ifndef S
1b690 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
1b6a0 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
1b6b0 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63 6f  *pStmt;.  int co
1b6c0 6c 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 52  l;.  Tcl_Obj *pR
1b6d0 65 74 3b 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64  et;.  const void
1b6e0 20 2a 7a 4e 61 6d 65 31 36 3b 0a 20 20 63 6f 6e   *zName16;.  con
1b6f0 73 74 20 76 6f 69 64 20 2a 28 2a 78 46 75 6e 63  st void *(*xFunc
1b700 29 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 2c  )(sqlite3_stmt*,
1b710 20 69 6e 74 29 3b 0a 0a 20 20 78 46 75 6e 63 20   int);..  xFunc 
1b720 3d 20 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 28  = (const void *(
1b730 2a 29 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a  *)(sqlite3_stmt*
1b740 2c 20 69 6e 74 29 29 63 6c 69 65 6e 74 44 61 74  , int))clientDat
1b750 61 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33  a;.  if( objc!=3
1b760 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
1b770 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
1b780 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
1b790 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a  should be \"", .
1b7a0 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
1b7b0 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22  ring(objv[0]), "
1b7c0 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30   STMT column", 0
1b7d0 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
1b7e0 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
1b7f0 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  if( getStmtPoint
1b800 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
1b810 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
1b820 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74  ), &pStmt) ) ret
1b830 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
1b840 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46   if( Tcl_GetIntF
1b850 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
1b860 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20 29 20  bjv[2], &col) ) 
1b870 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
1b880 3b 0a 0a 20 20 7a 4e 61 6d 65 31 36 20 3d 20 78  ;..  zName16 = x
1b890 46 75 6e 63 28 70 53 74 6d 74 2c 20 63 6f 6c 29  Func(pStmt, col)
1b8a0 3b 0a 20 20 69 66 28 20 7a 4e 61 6d 65 31 36 20  ;.  if( zName16 
1b8b0 29 7b 0a 20 20 20 20 69 6e 74 20 6e 3b 0a 20 20  ){.    int n;.  
1b8c0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20    const char *z 
1b8d0 3d 20 7a 4e 61 6d 65 31 36 3b 0a 20 20 20 20 66  = zName16;.    f
1b8e0 6f 72 28 6e 3d 30 3b 20 7a 5b 6e 5d 20 7c 7c 20  or(n=0; z[n] || 
1b8f0 7a 5b 6e 2b 31 5d 3b 20 6e 2b 3d 32 29 7b 7d 0a  z[n+1]; n+=2){}.
1b900 20 20 20 20 70 52 65 74 20 3d 20 54 63 6c 5f 4e      pRet = Tcl_N
1b910 65 77 42 79 74 65 41 72 72 61 79 4f 62 6a 28 7a  ewByteArrayObj(z
1b920 4e 61 6d 65 31 36 2c 20 6e 2b 32 29 3b 0a 20 20  Name16, n+2);.  
1b930 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
1b940 6c 74 28 69 6e 74 65 72 70 2c 20 70 52 65 74 29  lt(interp, pRet)
1b950 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ;.  }.#endif /* 
1b960 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
1b970 36 20 2a 2f 0a 0a 20 20 72 65 74 75 72 6e 20 54  6 */..  return T
1b980 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
1b990 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63  Usage: sqlite3_c
1b9a0 6f 6c 75 6d 6e 5f 69 6e 74 20 53 54 4d 54 20 63  olumn_int STMT c
1b9b0 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67  olumn.**.** Usag
1b9c0 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  e: sqlite3_colum
1b9d0 6e 5f 62 79 74 65 73 20 53 54 4d 54 20 63 6f 6c  n_bytes STMT col
1b9e0 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a  umn.**.** Usage:
1b9f0 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
1ba00 62 79 74 65 73 31 36 20 53 54 4d 54 20 63 6f 6c  bytes16 STMT col
1ba10 75 6d 6e 0a 2a 2a 0a 2a 2f 0a 73 74 61 74 69 63  umn.**.*/.static
1ba20 20 69 6e 74 20 74 65 73 74 5f 73 74 6d 74 5f 69   int test_stmt_i
1ba30 6e 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  nt(.  void * cli
1ba40 65 6e 74 44 61 74 61 2c 20 20 20 20 2f 2a 20 50  entData,    /* P
1ba50 6f 69 6e 74 65 72 20 74 6f 20 53 51 4c 69 74 65  ointer to SQLite
1ba60 20 41 50 49 20 66 75 6e 63 74 69 6f 6e 20 74 6f   API function to
1ba70 20 62 65 20 69 6e 76 6f 6b 65 64 20 2a 2f 0a 20   be invoked */. 
1ba80 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
1ba90 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
1baa0 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
1bab0 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
1bac0 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
1bad0 74 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a 20 20  t;.  int col;.  
1bae0 69 6e 74 20 28 2a 78 46 75 6e 63 29 28 73 71 6c  int (*xFunc)(sql
1baf0 69 74 65 33 5f 73 74 6d 74 2a 2c 20 69 6e 74 29  ite3_stmt*, int)
1bb00 3b 0a 0a 20 20 78 46 75 6e 63 20 3d 20 28 69 6e  ;..  xFunc = (in
1bb10 74 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 73 74  t (*)(sqlite3_st
1bb20 6d 74 2a 2c 20 69 6e 74 29 29 63 6c 69 65 6e 74  mt*, int))client
1bb30 44 61 74 61 3b 0a 20 20 69 66 28 20 6f 62 6a 63  Data;.  if( objc
1bb40 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=3 ){.    Tcl_A
1bb50 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
1bb60 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
1bb70 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
1bb80 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65  , .       Tcl_Ge
1bb90 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29  tString(objv[0])
1bba0 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22  , " STMT column"
1bbb0 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
1bbc0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
1bbd0 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f  .  if( getStmtPo
1bbe0 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
1bbf0 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
1bc00 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20  [1]), &pStmt) ) 
1bc10 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
1bc20 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49  ;.  if( Tcl_GetI
1bc30 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  ntFromObj(interp
1bc40 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29  , objv[2], &col)
1bc50 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
1bc60 52 4f 52 3b 0a 0a 20 20 54 63 6c 5f 53 65 74 4f  ROR;..  Tcl_SetO
1bc70 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
1bc80 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 78   Tcl_NewIntObj(x
1bc90 46 75 6e 63 28 70 53 74 6d 74 2c 20 63 6f 6c 29  Func(pStmt, col)
1bca0 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ));.  return TCL
1bcb0 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
1bcc0 61 67 65 3a 20 20 73 71 6c 69 74 65 5f 73 65 74  age:  sqlite_set
1bcd0 5f 6d 61 67 69 63 20 20 44 42 20 20 4d 41 47 49  _magic  DB  MAGI
1bce0 43 2d 4e 55 4d 42 45 52 0a 2a 2a 0a 2a 2a 20 53  C-NUMBER.**.** S
1bcf0 65 74 20 74 68 65 20 64 62 2d 3e 6d 61 67 69 63  et the db->magic
1bd00 20 76 61 6c 75 65 2e 20 20 54 68 69 73 20 69 73   value.  This is
1bd10 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 65 72   used to test er
1bd20 72 6f 72 20 72 65 63 6f 76 65 72 79 20 6c 6f 67  ror recovery log
1bd30 69 63 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ic..*/.static in
1bd40 74 20 73 71 6c 69 74 65 5f 73 65 74 5f 6d 61 67  t sqlite_set_mag
1bd50 69 63 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  ic(.  void * cli
1bd60 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
1bd70 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
1bd80 20 69 6e 74 20 61 72 67 63 2c 0a 20 20 63 68 61   int argc,.  cha
1bd90 72 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 73 71  r **argv.){.  sq
1bda0 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 66 28  lite3 *db;.  if(
1bdb0 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20   argc!=3 ){.    
1bdc0 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
1bdd0 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
1bde0 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
1bdf0 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a  e \"", argv[0],.
1be00 20 20 20 20 20 20 20 20 20 22 20 44 42 20 4d 41           " DB MA
1be10 47 49 43 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  GIC", 0);.    re
1be20 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
1be30 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
1be40 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61  ointer(interp, a
1be50 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72  rgv[1], &db) ) r
1be60 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
1be70 0a 20 20 69 66 28 20 73 74 72 63 6d 70 28 61 72  .  if( strcmp(ar
1be80 67 76 5b 32 5d 2c 20 22 53 51 4c 49 54 45 5f 4d  gv[2], "SQLITE_M
1be90 41 47 49 43 5f 4f 50 45 4e 22 29 3d 3d 30 20 29  AGIC_OPEN")==0 )
1bea0 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20  {.    db->magic 
1beb0 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f  = SQLITE_MAGIC_O
1bec0 50 45 4e 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  PEN;.  }else if(
1bed0 20 73 74 72 63 6d 70 28 61 72 67 76 5b 32 5d 2c   strcmp(argv[2],
1bee0 20 22 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43   "SQLITE_MAGIC_C
1bef0 4c 4f 53 45 44 22 29 3d 3d 30 20 29 7b 0a 20 20  LOSED")==0 ){.  
1bf00 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51    db->magic = SQ
1bf10 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45  LITE_MAGIC_CLOSE
1bf20 44 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73  D;.  }else if( s
1bf30 74 72 63 6d 70 28 61 72 67 76 5b 32 5d 2c 20 22  trcmp(argv[2], "
1bf40 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53  SQLITE_MAGIC_BUS
1bf50 59 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 64 62  Y")==0 ){.    db
1bf60 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45  ->magic = SQLITE
1bf70 5f 4d 41 47 49 43 5f 42 55 53 59 3b 0a 20 20 7d  _MAGIC_BUSY;.  }
1bf80 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
1bf90 61 72 67 76 5b 32 5d 2c 20 22 53 51 4c 49 54 45  argv[2], "SQLITE
1bfa0 5f 4d 41 47 49 43 5f 45 52 52 4f 52 22 29 3d 3d  _MAGIC_ERROR")==
1bfb0 30 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67  0 ){.    db->mag
1bfc0 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49  ic = SQLITE_MAGI
1bfd0 43 5f 45 52 52 4f 52 3b 0a 20 20 7d 65 6c 73 65  C_ERROR;.  }else
1bfe0 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 28   if( Tcl_GetInt(
1bff0 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 32 5d 2c  interp, argv[2],
1c000 20 28 69 6e 74 2a 29 26 64 62 2d 3e 6d 61 67 69   (int*)&db->magi
1c010 63 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  c) ){.    return
1c020 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
1c030 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
1c040 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
1c050 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72    sqlite3_interr
1c060 75 70 74 20 20 44 42 20 0a 2a 2a 0a 2a 2a 20 54  upt  DB .**.** T
1c070 72 69 67 67 65 72 20 61 6e 20 69 6e 74 65 72 72  rigger an interr
1c080 75 70 74 20 6f 6e 20 44 42 0a 2a 2f 0a 73 74 61  upt on DB.*/.sta
1c090 74 69 63 20 69 6e 74 20 74 65 73 74 5f 69 6e 74  tic int test_int
1c0a0 65 72 72 75 70 74 28 0a 20 20 76 6f 69 64 20 2a  errupt(.  void *
1c0b0 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
1c0c0 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
1c0d0 70 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a 20  p,.  int argc,. 
1c0e0 20 63 68 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a   char **argv.){.
1c0f0 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
1c100 20 69 66 28 20 61 72 67 63 21 3d 32 20 29 7b 0a   if( argc!=2 ){.
1c110 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
1c120 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
1c130 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
1c140 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
1c150 30 5d 2c 20 22 20 44 42 22 2c 20 30 29 3b 0a 20  0], " DB", 0);. 
1c160 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
1c170 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67  ROR;.  }.  if( g
1c180 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65  etDbPointer(inte
1c190 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62  rp, argv[1], &db
1c1a0 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
1c1b0 52 52 4f 52 3b 0a 20 20 73 71 6c 69 74 65 33 5f  RROR;.  sqlite3_
1c1c0 69 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a 20  interrupt(db);. 
1c1d0 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
1c1e0 7d 0a 0a 73 74 61 74 69 63 20 75 38 20 2a 73 71  }..static u8 *sq
1c1f0 6c 69 74 65 33 5f 73 74 61 63 6b 5f 62 61 73 65  lite3_stack_base
1c200 6c 69 6e 65 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a  line = 0;../*.**
1c210 20 46 69 6c 6c 20 74 68 65 20 73 74 61 63 6b 20   Fill the stack 
1c220 77 69 74 68 20 61 20 6b 6e 6f 77 6e 20 62 69 74  with a known bit
1c230 70 61 74 74 65 72 6e 2e 0a 2a 2f 0a 73 74 61 74  pattern..*/.stat
1c240 69 63 20 76 6f 69 64 20 70 72 65 70 53 74 61 63  ic void prepStac
1c250 6b 28 76 6f 69 64 29 7b 0a 20 20 69 6e 74 20 69  k(void){.  int i
1c260 3b 0a 20 20 75 33 32 20 62 69 67 42 75 66 5b 36  ;.  u32 bigBuf[6
1c270 35 35 33 36 5d 3b 0a 20 20 66 6f 72 28 69 3d 30  5536];.  for(i=0
1c280 3b 20 69 3c 73 69 7a 65 6f 66 28 62 69 67 42 75  ; i<sizeof(bigBu
1c290 66 29 3b 20 69 2b 2b 29 20 62 69 67 42 75 66 5b  f); i++) bigBuf[
1c2a0 69 5d 20 3d 20 30 78 64 65 61 64 62 65 65 66 3b  i] = 0xdeadbeef;
1c2b0 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 61 63 6b  .  sqlite3_stack
1c2c0 5f 62 61 73 65 6c 69 6e 65 20 3d 20 28 75 38 2a  _baseline = (u8*
1c2d0 29 26 62 69 67 42 75 66 5b 36 35 35 33 36 5d 3b  )&bigBuf[65536];
1c2e0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47 65 74 20 74 68  .}../*.** Get th
1c2f0 65 20 63 75 72 72 65 6e 74 20 73 74 61 63 6b 20  e current stack 
1c300 64 65 70 74 68 2e 20 20 55 73 65 64 20 66 6f 72  depth.  Used for
1c310 20 64 65 62 75 67 67 69 6e 67 20 6f 6e 6c 79 2e   debugging only.
1c320 0a 2a 2f 0a 75 36 34 20 73 71 6c 69 74 65 33 53  .*/.u64 sqlite3S
1c330 74 61 63 6b 44 65 70 74 68 28 76 6f 69 64 29 7b  tackDepth(void){
1c340 0a 20 20 75 38 20 78 3b 0a 20 20 72 65 74 75 72  .  u8 x;.  retur
1c350 6e 20 28 75 36 34 29 28 73 71 6c 69 74 65 33 5f  n (u64)(sqlite3_
1c360 73 74 61 63 6b 5f 62 61 73 65 6c 69 6e 65 20 2d  stack_baseline -
1c370 20 26 78 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55   &x);.}../*.** U
1c380 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 73  sage:  sqlite3_s
1c390 74 61 63 6b 5f 75 73 65 64 20 44 42 20 53 51 4c  tack_used DB SQL
1c3a0 0a 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 6d 65  .**.** Try to me
1c3b0 61 73 75 72 65 20 74 68 65 20 61 6d 6f 75 6e 74  asure the amount
1c3c0 20 6f 66 20 73 74 61 63 6b 20 73 70 61 63 65 20   of stack space 
1c3d0 75 73 65 64 20 62 79 20 61 20 63 61 6c 6c 20 74  used by a call t
1c3e0 6f 20 73 71 6c 69 74 65 33 5f 65 78 65 63 0a 2a  o sqlite3_exec.*
1c3f0 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
1c400 74 5f 73 74 61 63 6b 5f 75 73 65 64 28 0a 20 20  t_stack_used(.  
1c410 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
1c420 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
1c430 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 61  *interp,.  int a
1c440 72 67 63 2c 0a 20 20 63 68 61 72 20 2a 2a 61 72  rgc,.  char **ar
1c450 67 76 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  gv.){.  sqlite3 
1c460 2a 64 62 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  *db;.  int i;.  
1c470 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20  if( argc!=3 ){. 
1c480 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
1c490 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
1c4a0 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
1c4b0 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30  d be \"", argv[0
1c4c0 5d 2c 20 0a 20 20 20 20 20 20 20 20 22 20 44 42  ], .        " DB
1c4d0 20 53 51 4c 22 2c 20 30 29 3b 0a 20 20 20 20 72   SQL", 0);.    r
1c4e0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
1c4f0 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
1c500 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
1c510 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20  argv[1], &db) ) 
1c520 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
1c530 3b 0a 20 20 70 72 65 70 53 74 61 63 6b 28 29 3b  ;.  prepStack();
1c540 0a 20 20 28 76 6f 69 64 29 73 71 6c 69 74 65 33  .  (void)sqlite3
1c550 5f 65 78 65 63 28 64 62 2c 20 61 72 67 76 5b 32  _exec(db, argv[2
1c560 5d 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 66  ], 0, 0, 0);.  f
1c570 6f 72 28 69 3d 36 35 35 33 35 3b 20 69 3e 3d 30  or(i=65535; i>=0
1c580 20 26 26 20 28 28 75 33 32 2a 29 73 71 6c 69 74   && ((u32*)sqlit
1c590 65 33 5f 73 74 61 63 6b 5f 62 61 73 65 6c 69 6e  e3_stack_baselin
1c5a0 65 29 5b 2d 69 5d 3d 3d 30 78 64 65 61 64 62 65  e)[-i]==0xdeadbe
1c5b0 65 66 3b 20 69 2d 2d 29 7b 7d 0a 20 20 54 63 6c  ef; i--){}.  Tcl
1c5c0 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
1c5d0 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74  terp, Tcl_NewInt
1c5e0 4f 62 6a 28 69 2a 34 29 29 3b 0a 20 20 72 65 74  Obj(i*4));.  ret
1c5f0 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
1c600 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69  *.** Usage: sqli
1c610 74 65 5f 64 65 6c 65 74 65 5f 66 75 6e 63 74 69  te_delete_functi
1c620 6f 6e 20 44 42 20 66 75 6e 63 74 69 6f 6e 2d 6e  on DB function-n
1c630 61 6d 65 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65  ame.**.** Delete
1c640 20 74 68 65 20 75 73 65 72 20 66 75 6e 63 74 69   the user functi
1c650 6f 6e 20 27 66 75 6e 63 74 69 6f 6e 2d 6e 61 6d  on 'function-nam
1c660 65 27 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65  e' from database
1c670 20 68 61 6e 64 6c 65 20 44 42 2e 20 49 74 0a 2a   handle DB. It.*
1c680 2a 20 69 73 20 61 73 73 75 6d 65 64 20 74 68 61  * is assumed tha
1c690 74 20 74 68 65 20 75 73 65 72 20 66 75 6e 63 74  t the user funct
1c6a0 69 6f 6e 20 77 61 73 20 63 72 65 61 74 65 64 20  ion was created 
1c6b0 61 73 20 55 54 46 38 2c 20 61 6e 79 20 6e 75 6d  as UTF8, any num
1c6c0 62 65 72 20 6f 66 0a 2a 2a 20 61 72 67 75 6d 65  ber of.** argume
1c6d0 6e 74 73 20 28 74 68 65 20 77 61 79 20 74 68 65  nts (the way the
1c6e0 20 54 43 4c 20 69 6e 74 65 72 66 61 63 65 20 64   TCL interface d
1c6f0 6f 65 73 20 69 74 29 2e 0a 2a 2f 0a 73 74 61 74  oes it)..*/.stat
1c700 69 63 20 69 6e 74 20 64 65 6c 65 74 65 5f 66 75  ic int delete_fu
1c710 6e 63 74 69 6f 6e 28 0a 20 20 76 6f 69 64 20 2a  nction(.  void *
1c720 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
1c730 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
1c740 70 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a 20  p,.  int argc,. 
1c750 20 63 68 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a   char **argv.){.
1c760 20 20 69 6e 74 20 72 63 3b 0a 20 20 73 71 6c 69    int rc;.  sqli
1c770 74 65 33 20 2a 64 62 3b 0a 20 20 69 66 28 20 61  te3 *db;.  if( a
1c780 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63  rgc!=3 ){.    Tc
1c790 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
1c7a0 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
1c7b0 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
1c7c0 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20  \"", argv[0], . 
1c7d0 20 20 20 20 20 20 20 22 20 44 42 20 66 75 6e 63         " DB func
1c7e0 74 69 6f 6e 2d 6e 61 6d 65 22 2c 20 30 29 3b 0a  tion-name", 0);.
1c7f0 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
1c800 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
1c810 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
1c820 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64  erp, argv[1], &d
1c830 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
1c840 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71  ERROR;.  rc = sq
1c850 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
1c860 63 74 69 6f 6e 28 64 62 2c 20 61 72 67 76 5b 32  ction(db, argv[2
1c870 5d 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54  ], -1, SQLITE_UT
1c880 46 38 2c 20 30 2c 20 30 2c 20 30 2c 20 30 29 3b  F8, 0, 0, 0, 0);
1c890 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74  .  Tcl_SetResult
1c8a0 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a  (interp, (char *
1c8b0 29 74 31 45 72 72 6f 72 4e 61 6d 65 28 72 63 29  )t1ErrorName(rc)
1c8c0 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20  , TCL_STATIC);. 
1c8d0 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
1c8e0 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
1c8f0 73 71 6c 69 74 65 5f 64 65 6c 65 74 65 5f 63 6f  sqlite_delete_co
1c900 6c 6c 61 74 69 6f 6e 20 44 42 20 63 6f 6c 6c 61  llation DB colla
1c910 74 69 6f 6e 2d 6e 61 6d 65 0a 2a 2a 0a 2a 2a 20  tion-name.**.** 
1c920 44 65 6c 65 74 65 20 74 68 65 20 63 6f 6c 6c 61  Delete the colla
1c930 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 27 63  tion sequence 'c
1c940 6f 6c 6c 61 74 69 6f 6e 2d 6e 61 6d 65 27 20 66  ollation-name' f
1c950 72 6f 6d 20 64 61 74 61 62 61 73 65 20 68 61 6e  rom database han
1c960 64 6c 65 20 0a 2a 2a 20 44 42 2e 20 49 74 20 69  dle .** DB. It i
1c970 73 20 61 73 73 75 6d 65 64 20 74 68 61 74 20 74  s assumed that t
1c980 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
1c990 75 65 6e 63 65 20 77 61 73 20 63 72 65 61 74 65  uence was create
1c9a0 64 20 61 73 20 55 54 46 38 20 28 74 68 65 20 0a  d as UTF8 (the .
1c9b0 2a 2a 20 77 61 79 20 74 68 65 20 54 43 4c 20 69  ** way the TCL i
1c9c0 6e 74 65 72 66 61 63 65 20 64 6f 65 73 20 69 74  nterface does it
1c9d0 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  )..*/.static int
1c9e0 20 64 65 6c 65 74 65 5f 63 6f 6c 6c 61 74 69 6f   delete_collatio
1c9f0 6e 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  n(.  void * clie
1ca00 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
1ca10 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
1ca20 69 6e 74 20 61 72 67 63 2c 0a 20 20 63 68 61 72  int argc,.  char
1ca30 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 69 6e 74   **argv.){.  int
1ca40 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a   rc;.  sqlite3 *
1ca50 64 62 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d  db;.  if( argc!=
1ca60 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  3 ){.    Tcl_App
1ca70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
1ca80 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
1ca90 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
1caa0 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20  argv[0], .      
1cab0 20 20 22 20 44 42 20 66 75 6e 63 74 69 6f 6e 2d    " DB function-
1cac0 6e 61 6d 65 22 2c 20 30 29 3b 0a 20 20 20 20 72  name", 0);.    r
1cad0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
1cae0 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
1caf0 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
1cb00 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20  argv[1], &db) ) 
1cb10 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
1cb20 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
1cb30 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f  _create_collatio
1cb40 6e 28 64 62 2c 20 61 72 67 76 5b 32 5d 2c 20 53  n(db, argv[2], S
1cb50 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 20 30  QLITE_UTF8, 0, 0
1cb60 29 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75  );.  Tcl_SetResu
1cb70 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72  lt(interp, (char
1cb80 20 2a 29 74 31 45 72 72 6f 72 4e 61 6d 65 28 72   *)t1ErrorName(r
1cb90 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b  c), TCL_STATIC);
1cba0 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
1cbb0 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
1cbc0 3a 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75  : sqlite3_get_au
1cbd0 74 6f 63 6f 6d 6d 69 74 20 44 42 0a 2a 2a 0a 2a  tocommit DB.**.*
1cbe0 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
1cbf0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 44 42   the database DB
1cc00 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   is currently in
1cc10 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 6d 6f 64   auto-commit mod
1cc20 65 2e 0a 2a 2a 20 52 65 74 75 72 6e 20 66 61 6c  e..** Return fal
1cc30 73 65 20 69 66 20 6e 6f 74 2e 0a 2a 2f 0a 73 74  se if not..*/.st
1cc40 61 74 69 63 20 69 6e 74 20 67 65 74 5f 61 75 74  atic int get_aut
1cc50 6f 63 6f 6d 6d 69 74 28 0a 20 20 76 6f 69 64 20  ocommit(.  void 
1cc60 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
1cc70 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
1cc80 72 70 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a  rp,.  int argc,.
1cc90 20 20 63 68 61 72 20 2a 2a 61 72 67 76 0a 29 7b    char **argv.){
1cca0 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 33 30 5d  .  char zBuf[30]
1ccb0 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  ;.  sqlite3 *db;
1ccc0 0a 20 20 69 66 28 20 61 72 67 63 21 3d 32 20 29  .  if( argc!=2 )
1ccd0 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
1cce0 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
1ccf0 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
1cd00 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
1cd10 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 20 22  v[0], .        "
1cd20 20 44 42 22 2c 20 30 29 3b 0a 20 20 20 20 72 65   DB", 0);.    re
1cd30 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
1cd40 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
1cd50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61  ointer(interp, a
1cd60 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72  rgv[1], &db) ) r
1cd70 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
1cd80 0a 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c  .  sprintf(zBuf,
1cd90 20 22 25 64 22 2c 20 73 71 6c 69 74 65 33 5f 67   "%d", sqlite3_g
1cda0 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 28 64 62  et_autocommit(db
1cdb0 29 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64  ));.  Tcl_Append
1cdc0 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a  Result(interp, z
1cdd0 42 75 66 2c 20 30 29 3b 0a 20 20 72 65 74 75 72  Buf, 0);.  retur
1cde0 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
1cdf0 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65  ** Usage: sqlite
1ce00 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 20 44  3_busy_timeout D
1ce10 42 20 4d 53 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74  B MS.**.** Set t
1ce20 68 65 20 62 75 73 79 20 74 69 6d 65 6f 75 74 2e  he busy timeout.
1ce30 20 20 54 68 69 73 20 69 73 20 6d 6f 72 65 20 65    This is more e
1ce40 61 73 69 6c 79 20 64 6f 6e 65 20 75 73 69 6e 67  asily done using
1ce50 20 74 68 65 20 74 69 6d 65 6f 75 74 0a 2a 2a 20   the timeout.** 
1ce60 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 54 43  method of the TC
1ce70 4c 20 69 6e 74 65 72 66 61 63 65 2e 20 20 42 75  L interface.  Bu
1ce80 74 20 77 65 20 6e 65 65 64 20 61 20 77 61 79 20  t we need a way 
1ce90 74 6f 20 74 65 73 74 20 74 68 65 20 63 61 73 65  to test the case
1cea0 0a 2a 2a 20 77 68 65 72 65 20 69 74 20 72 65 74  .** where it ret
1ceb0 75 72 6e 73 20 53 51 4c 49 54 45 5f 4d 49 53 55  urns SQLITE_MISU
1cec0 53 45 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  SE..*/.static in
1ced0 74 20 74 65 73 74 5f 62 75 73 79 5f 74 69 6d 65  t test_busy_time
1cee0 6f 75 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  out(.  void * cl
1cef0 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
1cf00 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
1cf10 20 20 69 6e 74 20 61 72 67 63 2c 0a 20 20 63 68    int argc,.  ch
1cf20 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 69  ar **argv.){.  i
1cf30 6e 74 20 72 63 2c 20 6d 73 3b 0a 20 20 73 71 6c  nt rc, ms;.  sql
1cf40 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 66 28 20  ite3 *db;.  if( 
1cf50 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54  argc!=3 ){.    T
1cf60 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
1cf70 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
1cf80 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
1cf90 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a   \"", argv[0], .
1cfa0 20 20 20 20 20 20 20 20 22 20 44 42 22 2c 20 30          " DB", 0
1cfb0 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
1cfc0 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
1cfd0 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
1cfe0 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c  interp, argv[1],
1cff0 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
1d000 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
1d010 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74 65 72  Tcl_GetInt(inter
1d020 70 2c 20 61 72 67 76 5b 32 5d 2c 20 26 6d 73 29  p, argv[2], &ms)
1d030 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
1d040 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ROR;.  rc = sqli
1d050 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74  te3_busy_timeout
1d060 28 64 62 2c 20 6d 73 29 3b 0a 20 20 54 63 6c 5f  (db, ms);.  Tcl_
1d070 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
1d080 65 72 70 2c 20 73 71 6c 69 74 65 33 54 65 73 74  erp, sqlite3Test
1d090 45 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 30  ErrorName(rc), 0
1d0a0 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
1d0b0 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
1d0c0 67 65 3a 20 20 74 63 6c 5f 76 61 72 69 61 62 6c  ge:  tcl_variabl
1d0d0 65 5f 74 79 70 65 20 56 41 52 49 41 42 4c 45 4e  e_type VARIABLEN
1d0e0 41 4d 45 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e  AME.**.** Return
1d0f0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
1d100 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73   internal repres
1d110 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 74 68 65  entation for the
1d120 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74 68 65  .** value of the
1d130 20 67 69 76 65 6e 20 76 61 72 69 61 62 6c 65 2e   given variable.
1d140 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
1d150 63 6c 5f 76 61 72 69 61 62 6c 65 5f 74 79 70 65  cl_variable_type
1d160 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
1d170 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
1d180 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
1d190 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
1d1a0 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
1d1b0 0a 29 7b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70  .){.  Tcl_Obj *p
1d1c0 56 61 72 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21  Var;.  if( objc!
1d1d0 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72  =2 ){.    Tcl_Wr
1d1e0 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72  ongNumArgs(inter
1d1f0 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 56 41 52  p, 1, objv, "VAR
1d200 49 41 42 4c 45 22 29 3b 0a 20 20 20 20 72 65 74  IABLE");.    ret
1d210 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
1d220 20 7d 0a 20 20 70 56 61 72 20 3d 20 54 63 6c 5f   }.  pVar = Tcl_
1d230 47 65 74 56 61 72 32 45 78 28 69 6e 74 65 72 70  GetVar2Ex(interp
1d240 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
1d250 6f 62 6a 76 5b 31 5d 29 2c 20 30 2c 20 54 43 4c  objv[1]), 0, TCL
1d260 5f 4c 45 41 56 45 5f 45 52 52 5f 4d 53 47 29 3b  _LEAVE_ERR_MSG);
1d270 0a 20 20 69 66 28 20 70 56 61 72 3d 3d 30 20 29  .  if( pVar==0 )
1d280 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
1d290 52 3b 0a 20 20 69 66 28 20 70 56 61 72 2d 3e 74  R;.  if( pVar->t
1d2a0 79 70 65 50 74 72 20 29 7b 0a 20 20 20 20 54 63  ypePtr ){.    Tc
1d2b0 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
1d2c0 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74  nterp, Tcl_NewSt
1d2d0 72 69 6e 67 4f 62 6a 28 70 56 61 72 2d 3e 74 79  ringObj(pVar->ty
1d2e0 70 65 50 74 72 2d 3e 6e 61 6d 65 2c 20 2d 31 29  pePtr->name, -1)
1d2f0 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
1d300 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
1d310 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33   Usage:  sqlite3
1d320 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 20  _release_memory 
1d330 3f 4e 3f 0a 2a 2a 0a 2a 2a 20 41 74 74 65 6d 70  ?N?.**.** Attemp
1d340 74 20 74 6f 20 72 65 6c 65 61 73 65 20 6d 65 6d  t to release mem
1d350 6f 72 79 20 63 75 72 72 65 6e 74 6c 79 20 68 65  ory currently he
1d360 6c 64 20 62 75 74 20 6e 6f 74 20 61 63 74 75 61  ld but not actua
1d370 6c 6c 79 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a  lly required..**
1d380 20 54 68 65 20 69 6e 74 65 67 65 72 20 4e 20 69   The integer N i
1d390 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
1d3a0 62 79 74 65 73 20 77 65 20 61 72 65 20 74 72 79  bytes we are try
1d3b0 69 6e 67 20 74 6f 20 72 65 6c 65 61 73 65 2e 20  ing to release. 
1d3c0 20 54 68 65 20 0a 2a 2a 20 72 65 74 75 72 6e 20   The .** return 
1d3d0 76 61 6c 75 65 20 69 73 20 74 68 65 20 61 6d 6f  value is the amo
1d3e0 75 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 20 61 63  unt of memory ac
1d3f0 74 75 61 6c 6c 79 20 72 65 6c 65 61 73 65 64 2e  tually released.
1d400 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
1d410 65 73 74 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f  est_release_memo
1d420 72 79 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  ry(.  void * cli
1d430 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
1d440 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
1d450 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
1d460 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
1d470 5b 5d 0a 29 7b 0a 23 69 66 20 64 65 66 69 6e 65  [].){.#if define
1d480 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
1d490 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e  MEMORY_MANAGEMEN
1d4a0 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  T) && !defined(S
1d4b0 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 49 53 4b 49  QLITE_OMIT_DISKI
1d4c0 4f 29 0a 20 20 69 6e 74 20 4e 3b 0a 20 20 69 6e  O).  int N;.  in
1d4d0 74 20 61 6d 74 3b 0a 20 20 69 66 28 20 6f 62 6a  t amt;.  if( obj
1d4e0 63 21 3d 31 20 26 26 20 6f 62 6a 63 21 3d 32 20  c!=1 && objc!=2 
1d4f0 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67  ){.    Tcl_Wrong
1d500 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20  NumArgs(interp, 
1d510 31 2c 20 6f 62 6a 76 2c 20 22 3f 4e 3f 22 29 3b  1, objv, "?N?");
1d520 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
1d530 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
1d540 20 6f 62 6a 63 3d 3d 32 20 29 7b 0a 20 20 20 20   objc==2 ){.    
1d550 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72  if( Tcl_GetIntFr
1d560 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
1d570 6a 76 5b 31 5d 2c 20 26 4e 29 20 29 20 72 65 74  jv[1], &N) ) ret
1d580 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
1d590 20 7d 65 6c 73 65 7b 0a 20 20 20 20 4e 20 3d 20   }else{.    N = 
1d5a0 2d 31 3b 0a 20 20 7d 0a 20 20 61 6d 74 20 3d 20  -1;.  }.  amt = 
1d5b0 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73 65 5f  sqlite3_release_
1d5c0 6d 65 6d 6f 72 79 28 4e 29 3b 0a 20 20 54 63 6c  memory(N);.  Tcl
1d5d0 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
1d5e0 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74  terp, Tcl_NewInt
1d5f0 4f 62 6a 28 61 6d 74 29 29 3b 0a 23 65 6e 64 69  Obj(amt));.#endi
1d600 66 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  f.  return TCL_O
1d610 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
1d620 65 3a 20 20 73 71 6c 69 74 65 33 5f 73 6f 66 74  e:  sqlite3_soft
1d630 5f 68 65 61 70 5f 6c 69 6d 69 74 20 3f 4e 3f 0a  _heap_limit ?N?.
1d640 2a 2a 0a 2a 2a 20 51 75 65 72 79 20 6f 72 20 73  **.** Query or s
1d650 65 74 20 74 68 65 20 73 6f 66 74 20 68 65 61 70  et the soft heap
1d660 20 6c 69 6d 69 74 20 66 6f 72 20 74 68 65 20 63   limit for the c
1d670 75 72 72 65 6e 74 20 74 68 72 65 61 64 2e 20 20  urrent thread.  
1d680 54 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 69 73 20  The.** limit is 
1d690 6f 6e 6c 79 20 63 68 61 6e 67 65 64 20 69 66 20  only changed if 
1d6a0 74 68 65 20 4e 20 69 73 20 70 72 65 73 65 6e 74  the N is present
1d6b0 2e 20 20 54 68 65 20 70 72 65 76 69 6f 75 73 20  .  The previous 
1d6c0 6c 69 6d 69 74 0a 2a 2a 20 69 73 20 72 65 74 75  limit.** is retu
1d6d0 72 6e 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  rned..*/.static 
1d6e0 69 6e 74 20 74 65 73 74 5f 73 6f 66 74 5f 68 65  int test_soft_he
1d6f0 61 70 5f 6c 69 6d 69 74 28 0a 20 20 76 6f 69 64  ap_limit(.  void
1d700 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
1d710 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
1d720 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
1d730 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
1d740 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 74  T objv[].){.  st
1d750 61 74 69 63 20 69 6e 74 20 73 6f 66 74 48 65 61  atic int softHea
1d760 70 4c 69 6d 69 74 20 3d 20 30 3b 0a 20 20 69 6e  pLimit = 0;.  in
1d770 74 20 61 6d 74 3b 0a 20 20 69 66 28 20 6f 62 6a  t amt;.  if( obj
1d780 63 21 3d 31 20 26 26 20 6f 62 6a 63 21 3d 32 20  c!=1 && objc!=2 
1d790 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67  ){.    Tcl_Wrong
1d7a0 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20  NumArgs(interp, 
1d7b0 31 2c 20 6f 62 6a 76 2c 20 22 3f 4e 3f 22 29 3b  1, objv, "?N?");
1d7c0 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
1d7d0 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 61 6d 74  ERROR;.  }.  amt
1d7e0 20 3d 20 73 6f 66 74 48 65 61 70 4c 69 6d 69 74   = softHeapLimit
1d7f0 3b 0a 20 20 69 66 28 20 6f 62 6a 63 3d 3d 32 20  ;.  if( objc==2 
1d800 29 7b 0a 20 20 20 20 69 6e 74 20 4e 3b 0a 20 20  ){.    int N;.  
1d810 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
1d820 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
1d830 6f 62 6a 76 5b 31 5d 2c 20 26 4e 29 20 29 20 72  objv[1], &N) ) r
1d840 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
1d850 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6f 66  .    sqlite3_sof
1d860 74 5f 68 65 61 70 5f 6c 69 6d 69 74 28 4e 29 3b  t_heap_limit(N);
1d870 0a 20 20 20 20 73 6f 66 74 48 65 61 70 4c 69 6d  .    softHeapLim
1d880 69 74 20 3d 20 4e 3b 0a 20 20 7d 0a 20 20 54 63  it = N;.  }.  Tc
1d890 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
1d8a0 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e  nterp, Tcl_NewIn
1d8b0 74 4f 62 6a 28 61 6d 74 29 29 3b 0a 20 20 72 65  tObj(amt));.  re
1d8c0 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
1d8d0 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73  /*.** Usage:   s
1d8e0 71 6c 69 74 65 33 5f 74 68 72 65 61 64 5f 63 6c  qlite3_thread_cl
1d8f0 65 61 6e 75 70 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c  eanup.**.** Call
1d900 20 74 68 65 20 73 71 6c 69 74 65 33 5f 74 68 72   the sqlite3_thr
1d910 65 61 64 5f 63 6c 65 61 6e 75 70 20 41 50 49 2e  ead_cleanup API.
1d920 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
1d930 65 73 74 5f 74 68 72 65 61 64 5f 63 6c 65 61 6e  est_thread_clean
1d940 75 70 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  up(.  void * cli
1d950 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
1d960 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
1d970 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
1d980 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
1d990 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20 53 51  [].){.#ifndef SQ
1d9a0 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43  LITE_OMIT_DEPREC
1d9b0 41 54 45 44 0a 20 20 73 71 6c 69 74 65 33 5f 74  ATED.  sqlite3_t
1d9c0 68 72 65 61 64 5f 63 6c 65 61 6e 75 70 28 29 3b  hread_cleanup();
1d9d0 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e  .#endif.  return
1d9e0 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
1d9f0 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74  * Usage:   sqlit
1da00 65 33 5f 70 61 67 65 72 5f 72 65 66 63 6f 75 6e  e3_pager_refcoun
1da10 74 73 20 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74  ts  DB.**.** Ret
1da20 75 72 6e 20 61 20 6c 69 73 74 20 6f 66 20 6e 75  urn a list of nu
1da30 6d 62 65 72 73 20 77 68 69 63 68 20 61 72 65 20  mbers which are 
1da40 74 68 65 20 50 61 67 65 72 52 65 66 63 6f 75 6e  the PagerRefcoun
1da50 74 20 66 6f 72 20 61 6c 6c 0a 2a 2a 20 70 61 67  t for all.** pag
1da60 65 72 73 20 6f 6e 20 65 61 63 68 20 64 61 74 61  ers on each data
1da70 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
1da80 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
1da90 65 73 74 5f 70 61 67 65 72 5f 72 65 66 63 6f 75  est_pager_refcou
1daa0 6e 74 73 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  nts(.  void * cl
1dab0 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
1dac0 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
1dad0 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
1dae0 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
1daf0 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
1db00 20 2a 64 62 3b 0a 20 20 69 6e 74 20 69 3b 0a 20   *db;.  int i;. 
1db10 20 69 6e 74 20 76 2c 20 2a 61 3b 0a 20 20 54 63   int v, *a;.  Tc
1db20 6c 5f 4f 62 6a 20 2a 70 52 65 73 75 6c 74 3b 0a  l_Obj *pResult;.
1db30 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29  .  if( objc!=2 )
1db40 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
1db50 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
1db60 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
1db70 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20  ould be \"",.   
1db80 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
1db90 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30  ngFromObj(objv[0
1dba0 5d 2c 20 30 29 2c 20 22 20 44 42 22 2c 20 30 29  ], 0), " DB", 0)
1dbb0 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
1dbc0 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
1dbd0 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69  ( getDbPointer(i
1dbe0 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
1dbf0 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
1dc00 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  db) ) return TCL
1dc10 5f 45 52 52 4f 52 3b 0a 20 20 70 52 65 73 75 6c  _ERROR;.  pResul
1dc20 74 20 3d 20 54 63 6c 5f 4e 65 77 4f 62 6a 28 29  t = Tcl_NewObj()
1dc30 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64  ;.  for(i=0; i<d
1dc40 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20  b->nDb; i++){.  
1dc50 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d    if( db->aDb[i]
1dc60 2e 70 42 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20  .pBt==0 ){.     
1dc70 20 76 20 3d 20 2d 31 3b 0a 20 20 20 20 7d 65 6c   v = -1;.    }el
1dc80 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  se{.      sqlite
1dc90 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 64 62  3_mutex_enter(db
1dca0 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 20 20 20 20  ->mutex);.      
1dcb0 61 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  a = sqlite3Pager
1dcc0 53 74 61 74 73 28 73 71 6c 69 74 65 33 42 74 72  Stats(sqlite3Btr
1dcd0 65 65 50 61 67 65 72 28 64 62 2d 3e 61 44 62 5b  eePager(db->aDb[
1dce0 69 5d 2e 70 42 74 29 29 3b 0a 20 20 20 20 20 20  i].pBt));.      
1dcf0 76 20 3d 20 61 5b 30 5d 3b 0a 20 20 20 20 20 20  v = a[0];.      
1dd00 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65  sqlite3_mutex_le
1dd10 61 76 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a  ave(db->mutex);.
1dd20 20 20 20 20 7d 0a 20 20 20 20 54 63 6c 5f 4c 69      }.    Tcl_Li
1dd30 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65  stObjAppendEleme
1dd40 6e 74 28 30 2c 20 70 52 65 73 75 6c 74 2c 20 54  nt(0, pResult, T
1dd50 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 76 29 29  cl_NewIntObj(v))
1dd60 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 53 65 74 4f  ;.  }.  Tcl_SetO
1dd70 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
1dd80 20 70 52 65 73 75 6c 74 29 3b 0a 20 20 72 65 74   pResult);.  ret
1dd90 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a  urn TCL_OK;.}...
1dda0 2f 2a 0a 2a 2a 20 74 63 6c 63 6d 64 3a 20 20 20  /*.** tclcmd:   
1ddb0 77 6f 72 6b 69 6e 67 5f 36 34 62 69 74 5f 69 6e  working_64bit_in
1ddc0 74 0a 2a 2a 0a 2a 2a 20 53 6f 6d 65 20 54 43 4c  t.**.** Some TCL
1ddd0 20 62 75 69 6c 64 73 20 28 65 78 3a 20 63 79 67   builds (ex: cyg
1dde0 77 69 6e 29 20 64 6f 20 6e 6f 74 20 73 75 70 70  win) do not supp
1ddf0 6f 72 74 20 36 34 2d 62 69 74 20 69 6e 74 65 67  ort 64-bit integ
1de00 65 72 73 2e 20 20 54 68 69 73 0a 2a 2a 20 6c 65  ers.  This.** le
1de10 61 64 73 20 74 6f 20 61 20 6e 75 6d 62 65 72 20  ads to a number 
1de20 6f 66 20 74 65 73 74 20 66 61 69 6c 75 72 65 73  of test failures
1de30 2e 20 20 54 68 65 20 70 72 65 73 65 6e 74 20 63  .  The present c
1de40 6f 6d 6d 61 6e 64 20 63 68 65 63 6b 73 20 74 68  ommand checks th
1de50 65 0a 2a 2a 20 54 43 4c 20 62 75 69 6c 64 20 74  e.** TCL build t
1de60 6f 20 73 65 65 20 77 68 65 74 68 65 72 20 6f 72  o see whether or
1de70 20 6e 6f 74 20 69 74 20 73 75 70 70 6f 72 74 73   not it supports
1de80 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 73   64-bit integers
1de90 2e 20 20 49 74 0a 2a 2a 20 72 65 74 75 72 6e 73  .  It.** returns
1dea0 20 54 52 55 45 20 69 66 20 69 74 20 64 6f 65 73   TRUE if it does
1deb0 20 61 6e 64 20 46 41 4c 53 45 20 69 66 20 6e 6f   and FALSE if no
1dec0 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 63 6f  t..**.** This co
1ded0 6d 6d 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f  mmand is used to
1dee0 20 77 61 72 6e 20 75 73 65 72 73 20 74 68 61 74   warn users that
1def0 20 74 68 65 69 72 20 54 43 4c 20 62 75 69 6c 64   their TCL build
1df00 20 69 73 20 64 65 66 65 63 74 69 76 65 0a 2a 2a   is defective.**
1df10 20 61 6e 64 20 74 68 61 74 20 74 68 65 20 65 72   and that the er
1df20 72 6f 72 73 20 74 68 65 79 20 61 72 65 20 73 65  rors they are se
1df30 65 69 6e 67 20 69 6e 20 74 68 65 20 74 65 73 74  eing in the test
1df40 20 73 63 72 69 70 74 73 20 6d 69 67 68 74 20 62   scripts might b
1df50 65 0a 2a 2a 20 61 20 72 65 73 75 6c 74 20 6f 66  e.** a result of
1df60 20 74 68 65 69 72 20 64 65 66 65 63 74 69 76 65   their defective
1df70 20 54 43 4c 20 72 61 74 68 65 72 20 74 68 61 6e   TCL rather than
1df80 20 70 72 6f 62 6c 65 6d 73 20 69 6e 20 53 51 4c   problems in SQL
1df90 69 74 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ite..*/.static i
1dfa0 6e 74 20 77 6f 72 6b 69 6e 67 5f 36 34 62 69 74  nt working_64bit
1dfb0 5f 69 6e 74 28 0a 20 20 43 6c 69 65 6e 74 44 61  _int(.  ClientDa
1dfc0 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 2f  ta clientData, /
1dfd0 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 71 6c  * Pointer to sql
1dfe0 69 74 65 33 5f 65 6e 61 62 6c 65 5f 58 58 58 20  ite3_enable_XXX 
1dff0 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 63  function */.  Tc
1e000 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
1e010 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
1e020 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
1e030 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
1e040 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6f  mmand */.  int o
1e050 62 6a 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  bjc,            
1e060 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
1e070 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 54 63  rguments */.  Tc
1e080 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
1e090 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20  v[]  /* Command 
1e0a0 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a  arguments */.){.
1e0b0 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 54 65 73 74    Tcl_Obj *pTest
1e0c0 4f 62 6a 3b 0a 20 20 69 6e 74 20 77 6f 72 6b 69  Obj;.  int worki
1e0d0 6e 67 20 3d 20 30 3b 0a 0a 20 20 70 54 65 73 74  ng = 0;..  pTest
1e0e0 4f 62 6a 20 3d 20 54 63 6c 5f 4e 65 77 57 69 64  Obj = Tcl_NewWid
1e0f0 65 49 6e 74 4f 62 6a 28 31 30 30 30 30 30 30 2a  eIntObj(1000000*
1e100 28 69 36 34 29 31 32 33 34 35 36 37 38 39 30 29  (i64)1234567890)
1e110 3b 0a 20 20 77 6f 72 6b 69 6e 67 20 3d 20 73 74  ;.  working = st
1e120 72 63 6d 70 28 54 63 6c 5f 47 65 74 53 74 72 69  rcmp(Tcl_GetStri
1e130 6e 67 28 70 54 65 73 74 4f 62 6a 29 2c 20 22 31  ng(pTestObj), "1
1e140 32 33 34 35 36 37 38 39 30 30 30 30 30 30 30 22  234567890000000"
1e150 29 3d 3d 30 3b 0a 20 20 54 63 6c 5f 44 65 63 72  )==0;.  Tcl_Decr
1e160 52 65 66 43 6f 75 6e 74 28 70 54 65 73 74 4f 62  RefCount(pTestOb
1e170 6a 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a  j);.  Tcl_SetObj
1e180 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
1e190 63 6c 5f 4e 65 77 42 6f 6f 6c 65 61 6e 4f 62 6a  cl_NewBooleanObj
1e1a0 28 77 6f 72 6b 69 6e 67 29 29 3b 0a 20 20 72 65  (working));.  re
1e1b0 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
1e1c0 0a 2f 2a 0a 2a 2a 20 74 63 6c 63 6d 64 3a 20 20  ./*.** tclcmd:  
1e1d0 20 76 66 73 5f 75 6e 6c 69 6e 6b 5f 74 65 73 74   vfs_unlink_test
1e1e0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 54 43 4c 20  .**.** This TCL 
1e1f0 63 6f 6d 6d 61 6e 64 20 75 6e 72 65 67 69 73 74  command unregist
1e200 65 72 73 20 74 68 65 20 70 72 69 6d 61 72 79 20  ers the primary 
1e210 56 46 53 20 61 6e 64 20 74 68 65 6e 20 72 65 67  VFS and then reg
1e220 69 73 74 65 72 73 0a 2a 2a 20 69 74 20 62 61 63  isters.** it bac
1e230 6b 20 61 67 61 69 6e 2e 20 20 54 68 69 73 20 69  k again.  This i
1e240 73 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 74  s used to test t
1e250 68 65 20 61 62 69 6c 69 74 79 20 74 6f 20 72 65  he ability to re
1e260 67 69 73 74 65 72 20 61 0a 2a 2a 20 56 46 53 20  gister a.** VFS 
1e270 77 68 65 6e 20 6e 6f 6e 65 20 61 72 65 20 70 72  when none are pr
1e280 65 76 69 6f 75 73 6c 79 20 72 65 67 69 73 74 65  eviously registe
1e290 72 65 64 2c 20 61 6e 64 20 74 68 65 20 61 62 69  red, and the abi
1e2a0 6c 69 74 79 20 74 6f 20 0a 2a 2a 20 75 6e 72 65  lity to .** unre
1e2b0 67 69 73 74 65 72 20 74 68 65 20 6f 6e 6c 79 20  gister the only 
1e2c0 61 76 61 69 6c 61 62 6c 65 20 56 46 53 2e 20 20  available VFS.  
1e2d0 54 69 63 6b 65 74 20 23 32 37 33 38 0a 2a 2f 0a  Ticket #2738.*/.
1e2e0 73 74 61 74 69 63 20 69 6e 74 20 76 66 73 5f 75  static int vfs_u
1e2f0 6e 6c 69 6e 6b 5f 74 65 73 74 28 0a 20 20 43 6c  nlink_test(.  Cl
1e300 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44  ientData clientD
1e310 61 74 61 2c 20 2f 2a 20 50 6f 69 6e 74 65 72 20  ata, /* Pointer 
1e320 74 6f 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c  to sqlite3_enabl
1e330 65 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e 20 2a  e_XXX function *
1e340 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  /.  Tcl_Interp *
1e350 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
1e360 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
1e370 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
1e380 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
1e390 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20   int objc,      
1e3a0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1e3b0 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
1e3c0 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  /.  Tcl_Obj *CON
1e3d0 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f  ST objv[]  /* Co
1e3e0 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20  mmand arguments 
1e3f0 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20  */.){.  int i;. 
1e400 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 4d   sqlite3_vfs *pM
1e410 61 69 6e 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  ain;.  sqlite3_v
1e420 66 73 20 2a 61 70 56 66 73 5b 32 30 5d 3b 0a 20  fs *apVfs[20];. 
1e430 20 73 71 6c 69 74 65 33 5f 76 66 73 20 6f 6e 65   sqlite3_vfs one
1e440 2c 20 74 77 6f 3b 0a 0a 20 20 73 71 6c 69 74 65  , two;..  sqlite
1e450 33 5f 76 66 73 5f 75 6e 72 65 67 69 73 74 65 72  3_vfs_unregister
1e460 28 30 29 3b 20 20 20 2f 2a 20 55 6e 72 65 67 69  (0);   /* Unregi
1e470 73 74 65 72 20 6f 66 20 4e 55 4c 4c 20 69 73 20  ster of NULL is 
1e480 68 61 72 6d 6c 65 73 73 20 2a 2f 0a 20 20 6f 6e  harmless */.  on
1e490 65 2e 7a 4e 61 6d 65 20 3d 20 22 5f 5f 6f 6e 65  e.zName = "__one
1e4a0 22 3b 0a 20 20 74 77 6f 2e 7a 4e 61 6d 65 20 3d  ";.  two.zName =
1e4b0 20 22 5f 5f 74 77 6f 22 3b 0a 0a 20 20 2f 2a 20   "__two";..  /* 
1e4c0 43 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33 5f  Calling sqlite3_
1e4d0 76 66 73 5f 72 65 67 69 73 74 65 72 20 77 69 74  vfs_register wit
1e4e0 68 20 32 6e 64 20 61 72 67 75 6d 65 6e 74 20 6f  h 2nd argument o
1e4f0 66 20 30 20 64 6f 65 73 20 6e 6f 74 0a 20 20 2a  f 0 does not.  *
1e500 2a 20 63 68 61 6e 67 65 20 74 68 65 20 64 65 66  * change the def
1e510 61 75 6c 74 20 56 46 53 0a 20 20 2a 2f 0a 20 20  ault VFS.  */.  
1e520 70 4d 61 69 6e 20 3d 20 73 71 6c 69 74 65 33 5f  pMain = sqlite3_
1e530 76 66 73 5f 66 69 6e 64 28 30 29 3b 0a 20 20 73  vfs_find(0);.  s
1e540 71 6c 69 74 65 33 5f 76 66 73 5f 72 65 67 69 73  qlite3_vfs_regis
1e550 74 65 72 28 26 6f 6e 65 2c 20 30 29 3b 0a 20 20  ter(&one, 0);.  
1e560 61 73 73 65 72 74 28 20 70 4d 61 69 6e 3d 3d 30  assert( pMain==0
1e570 20 7c 7c 20 70 4d 61 69 6e 3d 3d 73 71 6c 69 74   || pMain==sqlit
1e580 65 33 5f 76 66 73 5f 66 69 6e 64 28 30 29 20 29  e3_vfs_find(0) )
1e590 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73 5f  ;.  sqlite3_vfs_
1e5a0 72 65 67 69 73 74 65 72 28 26 74 77 6f 2c 20 30  register(&two, 0
1e5b0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d 61  );.  assert( pMa
1e5c0 69 6e 3d 3d 30 20 7c 7c 20 70 4d 61 69 6e 3d 3d  in==0 || pMain==
1e5d0 73 71 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e 64  sqlite3_vfs_find
1e5e0 28 30 29 20 29 3b 0a 0a 20 20 2f 2a 20 57 65 20  (0) );..  /* We 
1e5f0 63 61 6e 20 66 69 6e 64 20 61 20 56 46 53 20 62  can find a VFS b
1e600 79 20 69 74 73 20 6e 61 6d 65 20 2a 2f 0a 20 20  y its name */.  
1e610 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f  assert( sqlite3_
1e620 76 66 73 5f 66 69 6e 64 28 22 5f 5f 6f 6e 65 22  vfs_find("__one"
1e630 29 3d 3d 26 6f 6e 65 20 29 3b 0a 20 20 61 73 73  )==&one );.  ass
1e640 65 72 74 28 20 73 71 6c 69 74 65 33 5f 76 66 73  ert( sqlite3_vfs
1e650 5f 66 69 6e 64 28 22 5f 5f 74 77 6f 22 29 3d 3d  _find("__two")==
1e660 26 74 77 6f 20 29 3b 0a 0a 20 20 2f 2a 20 43 61  &two );..  /* Ca
1e670 6c 6c 69 6e 67 20 73 71 6c 69 74 65 5f 76 66 73  lling sqlite_vfs
1e680 5f 72 65 67 69 73 74 65 72 20 77 69 74 68 20 6e  _register with n
1e690 6f 6e 2d 7a 65 72 6f 20 73 65 63 6f 6e 64 20 70  on-zero second p
1e6a0 61 72 61 6d 65 74 65 72 20 63 68 61 6e 67 65 73  arameter changes
1e6b0 20 74 68 65 0a 20 20 2a 2a 20 64 65 66 61 75 6c   the.  ** defaul
1e6c0 74 20 56 46 53 2c 20 65 76 65 6e 20 69 66 20 74  t VFS, even if t
1e6d0 68 65 20 31 73 74 20 70 61 72 61 6d 65 74 65 72  he 1st parameter
1e6e0 20 69 73 20 61 6e 20 65 78 69 73 74 69 67 20 56   is an existig V
1e6f0 46 53 20 74 68 61 74 20 69 73 0a 20 20 2a 2a 20  FS that is.  ** 
1e700 70 72 65 76 69 6f 75 73 6c 79 20 72 65 67 69 73  previously regis
1e710 74 65 72 65 64 20 61 73 20 74 68 65 20 6e 6f 6e  tered as the non
1e720 2d 64 65 66 61 75 6c 74 2e 0a 20 20 2a 2f 0a 20  -default..  */. 
1e730 20 73 71 6c 69 74 65 33 5f 76 66 73 5f 72 65 67   sqlite3_vfs_reg
1e740 69 73 74 65 72 28 26 6f 6e 65 2c 20 31 29 3b 0a  ister(&one, 1);.
1e750 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
1e760 33 5f 76 66 73 5f 66 69 6e 64 28 22 5f 5f 6f 6e  3_vfs_find("__on
1e770 65 22 29 3d 3d 26 6f 6e 65 20 29 3b 0a 20 20 61  e")==&one );.  a
1e780 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f 76  ssert( sqlite3_v
1e790 66 73 5f 66 69 6e 64 28 22 5f 5f 74 77 6f 22 29  fs_find("__two")
1e7a0 3d 3d 26 74 77 6f 20 29 3b 0a 20 20 61 73 73 65  ==&two );.  asse
1e7b0 72 74 28 20 73 71 6c 69 74 65 33 5f 76 66 73 5f  rt( sqlite3_vfs_
1e7c0 66 69 6e 64 28 30 29 3d 3d 26 6f 6e 65 20 29 3b  find(0)==&one );
1e7d0 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73 5f 72  .  sqlite3_vfs_r
1e7e0 65 67 69 73 74 65 72 28 26 74 77 6f 2c 20 31 29  egister(&two, 1)
1e7f0 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  ;.  assert( sqli
1e800 74 65 33 5f 76 66 73 5f 66 69 6e 64 28 22 5f 5f  te3_vfs_find("__
1e810 6f 6e 65 22 29 3d 3d 26 6f 6e 65 20 29 3b 0a 20  one")==&one );. 
1e820 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
1e830 5f 76 66 73 5f 66 69 6e 64 28 22 5f 5f 74 77 6f  _vfs_find("__two
1e840 22 29 3d 3d 26 74 77 6f 20 29 3b 0a 20 20 61 73  ")==&two );.  as
1e850 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f 76 66  sert( sqlite3_vf
1e860 73 5f 66 69 6e 64 28 30 29 3d 3d 26 74 77 6f 20  s_find(0)==&two 
1e870 29 3b 0a 20 20 69 66 28 20 70 4d 61 69 6e 20 29  );.  if( pMain )
1e880 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66  {.    sqlite3_vf
1e890 73 5f 72 65 67 69 73 74 65 72 28 70 4d 61 69 6e  s_register(pMain
1e8a0 2c 20 31 29 3b 0a 20 20 20 20 61 73 73 65 72 74  , 1);.    assert
1e8b0 28 20 73 71 6c 69 74 65 33 5f 76 66 73 5f 66 69  ( sqlite3_vfs_fi
1e8c0 6e 64 28 22 5f 5f 6f 6e 65 22 29 3d 3d 26 6f 6e  nd("__one")==&on
1e8d0 65 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  e );.    assert(
1e8e0 20 73 71 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e   sqlite3_vfs_fin
1e8f0 64 28 22 5f 5f 74 77 6f 22 29 3d 3d 26 74 77 6f  d("__two")==&two
1e900 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
1e910 73 71 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e 64  sqlite3_vfs_find
1e920 28 30 29 3d 3d 70 4d 61 69 6e 20 29 3b 0a 20 20  (0)==pMain );.  
1e930 7d 0a 20 20 0a 20 20 2f 2a 20 55 6e 6c 69 6e 6b  }.  .  /* Unlink
1e940 20 74 68 65 20 64 65 66 61 75 6c 74 20 56 46 53   the default VFS
1e950 2e 20 20 52 65 70 65 61 74 20 75 6e 74 69 6c 20  .  Repeat until 
1e960 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72  there are no mor
1e970 65 20 56 46 53 65 73 0a 20 20 2a 2a 20 72 65 67  e VFSes.  ** reg
1e980 69 73 74 65 72 65 64 2e 0a 20 20 2a 2f 0a 20 20  istered..  */.  
1e990 66 6f 72 28 69 3d 30 3b 20 69 3c 73 69 7a 65 6f  for(i=0; i<sizeo
1e9a0 66 28 61 70 56 66 73 29 2f 73 69 7a 65 6f 66 28  f(apVfs)/sizeof(
1e9b0 61 70 56 66 73 5b 30 5d 29 3b 20 69 2b 2b 29 7b  apVfs[0]); i++){
1e9c0 0a 20 20 20 20 61 70 56 66 73 5b 69 5d 20 3d 20  .    apVfs[i] = 
1e9d0 73 71 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e 64  sqlite3_vfs_find
1e9e0 28 30 29 3b 0a 20 20 20 20 69 66 28 20 61 70 56  (0);.    if( apV
1e9f0 66 73 5b 69 5d 20 29 7b 0a 20 20 20 20 20 20 61  fs[i] ){.      a
1ea00 73 73 65 72 74 28 20 61 70 56 66 73 5b 69 5d 3d  ssert( apVfs[i]=
1ea10 3d 73 71 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e  =sqlite3_vfs_fin
1ea20 64 28 61 70 56 66 73 5b 69 5d 2d 3e 7a 4e 61 6d  d(apVfs[i]->zNam
1ea30 65 29 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  e) );.      sqli
1ea40 74 65 33 5f 76 66 73 5f 75 6e 72 65 67 69 73 74  te3_vfs_unregist
1ea50 65 72 28 61 70 56 66 73 5b 69 5d 29 3b 0a 20 20  er(apVfs[i]);.  
1ea60 20 20 20 20 61 73 73 65 72 74 28 20 30 3d 3d 73      assert( 0==s
1ea70 71 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e 64 28  qlite3_vfs_find(
1ea80 61 70 56 66 73 5b 69 5d 2d 3e 7a 4e 61 6d 65 29  apVfs[i]->zName)
1ea90 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   );.    }.  }.  
1eaa0 61 73 73 65 72 74 28 20 30 3d 3d 73 71 6c 69 74  assert( 0==sqlit
1eab0 65 33 5f 76 66 73 5f 66 69 6e 64 28 30 29 20 29  e3_vfs_find(0) )
1eac0 3b 0a 20 20 0a 20 20 2f 2a 20 52 65 67 69 73 74  ;.  .  /* Regist
1ead0 65 72 20 74 68 65 20 6d 61 69 6e 20 56 46 53 20  er the main VFS 
1eae0 61 73 20 6e 6f 6e 2d 64 65 66 61 75 6c 74 20 28  as non-default (
1eaf0 77 69 6c 6c 20 62 65 20 6d 61 64 65 20 64 65 66  will be made def
1eb00 61 75 6c 74 2c 20 73 69 6e 63 65 0a 20 20 2a 2a  ault, since.  **
1eb10 20 69 74 27 6c 6c 20 62 65 20 74 68 65 20 6f 6e   it'll be the on
1eb20 6c 79 20 6f 6e 65 20 69 6e 20 65 78 69 73 74 65  ly one in existe
1eb30 6e 63 65 29 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c  nce)..  */.  sql
1eb40 69 74 65 33 5f 76 66 73 5f 72 65 67 69 73 74 65  ite3_vfs_registe
1eb50 72 28 70 4d 61 69 6e 2c 20 30 29 3b 0a 20 20 61  r(pMain, 0);.  a
1eb60 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f 76  ssert( sqlite3_v
1eb70 66 73 5f 66 69 6e 64 28 30 29 3d 3d 70 4d 61 69  fs_find(0)==pMai
1eb80 6e 20 29 3b 0a 20 20 0a 20 20 2f 2a 20 55 6e 2d  n );.  .  /* Un-
1eb90 72 65 67 69 73 74 65 72 20 74 68 65 20 6d 61 69  register the mai
1eba0 6e 20 56 46 53 20 61 67 61 69 6e 20 74 6f 20 72  n VFS again to r
1ebb0 65 73 74 6f 72 65 20 61 6e 20 65 6d 70 74 79 20  estore an empty 
1ebc0 56 46 53 20 6c 69 73 74 20 2a 2f 0a 20 20 73 71  VFS list */.  sq
1ebd0 6c 69 74 65 33 5f 76 66 73 5f 75 6e 72 65 67 69  lite3_vfs_unregi
1ebe0 73 74 65 72 28 70 4d 61 69 6e 29 3b 0a 20 20 61  ster(pMain);.  a
1ebf0 73 73 65 72 74 28 20 30 3d 3d 73 71 6c 69 74 65  ssert( 0==sqlite
1ec00 33 5f 76 66 73 5f 66 69 6e 64 28 30 29 20 29 3b  3_vfs_find(0) );
1ec10 0a 0a 20 20 2f 2a 20 52 65 6c 69 6e 6b 20 61 6c  ..  /* Relink al
1ec20 6c 20 56 46 53 65 73 20 69 6e 20 72 65 76 65 72  l VFSes in rever
1ec30 73 65 20 6f 72 64 65 72 2e 20 2a 2f 20 20 0a 20  se order. */  . 
1ec40 20 66 6f 72 28 69 3d 73 69 7a 65 6f 66 28 61 70   for(i=sizeof(ap
1ec50 56 66 73 29 2f 73 69 7a 65 6f 66 28 61 70 56 66  Vfs)/sizeof(apVf
1ec60 73 5b 30 5d 29 2d 31 3b 20 69 3e 3d 30 3b 20 69  s[0])-1; i>=0; i
1ec70 2d 2d 29 7b 0a 20 20 20 20 69 66 28 20 61 70 56  --){.    if( apV
1ec80 66 73 5b 69 5d 20 29 7b 0a 20 20 20 20 20 20 73  fs[i] ){.      s
1ec90 71 6c 69 74 65 33 5f 76 66 73 5f 72 65 67 69 73  qlite3_vfs_regis
1eca0 74 65 72 28 61 70 56 66 73 5b 69 5d 2c 20 31 29  ter(apVfs[i], 1)
1ecb0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
1ecc0 61 70 56 66 73 5b 69 5d 3d 3d 73 71 6c 69 74 65  apVfs[i]==sqlite
1ecd0 33 5f 76 66 73 5f 66 69 6e 64 28 30 29 20 29 3b  3_vfs_find(0) );
1ece0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 61  .      assert( a
1ecf0 70 56 66 73 5b 69 5d 3d 3d 73 71 6c 69 74 65 33  pVfs[i]==sqlite3
1ed00 5f 76 66 73 5f 66 69 6e 64 28 61 70 56 66 73 5b  _vfs_find(apVfs[
1ed10 69 5d 2d 3e 7a 4e 61 6d 65 29 20 29 3b 0a 20 20  i]->zName) );.  
1ed20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 55 6e    }.  }..  /* Un
1ed30 72 65 67 69 73 74 65 72 20 6f 75 74 20 73 61 6d  register out sam
1ed40 70 6c 65 20 56 46 53 65 73 2e 20 2a 2f 0a 20 20  ple VFSes. */.  
1ed50 73 71 6c 69 74 65 33 5f 76 66 73 5f 75 6e 72 65  sqlite3_vfs_unre
1ed60 67 69 73 74 65 72 28 26 6f 6e 65 29 3b 0a 20 20  gister(&one);.  
1ed70 73 71 6c 69 74 65 33 5f 76 66 73 5f 75 6e 72 65  sqlite3_vfs_unre
1ed80 67 69 73 74 65 72 28 26 74 77 6f 29 3b 0a 0a 20  gister(&two);.. 
1ed90 20 2f 2a 20 55 6e 72 65 67 69 73 74 65 72 69 6e   /* Unregisterin
1eda0 67 20 61 20 56 46 53 20 74 68 61 74 20 69 73 20  g a VFS that is 
1edb0 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 72 65  not currently re
1edc0 67 69 73 74 65 72 65 64 20 69 73 20 68 61 72 6d  gistered is harm
1edd0 6c 65 73 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65  less */.  sqlite
1ede0 33 5f 76 66 73 5f 75 6e 72 65 67 69 73 74 65 72  3_vfs_unregister
1edf0 28 26 6f 6e 65 29 3b 0a 20 20 73 71 6c 69 74 65  (&one);.  sqlite
1ee00 33 5f 76 66 73 5f 75 6e 72 65 67 69 73 74 65 72  3_vfs_unregister
1ee10 28 26 74 77 6f 29 3b 0a 20 20 61 73 73 65 72 74  (&two);.  assert
1ee20 28 20 73 71 6c 69 74 65 33 5f 76 66 73 5f 66 69  ( sqlite3_vfs_fi
1ee30 6e 64 28 22 5f 5f 6f 6e 65 22 29 3d 3d 30 20 29  nd("__one")==0 )
1ee40 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  ;.  assert( sqli
1ee50 74 65 33 5f 76 66 73 5f 66 69 6e 64 28 22 5f 5f  te3_vfs_find("__
1ee60 74 77 6f 22 29 3d 3d 30 20 29 3b 0a 0a 20 20 2f  two")==0 );..  /
1ee70 2a 20 57 65 20 73 68 6f 75 6c 64 20 62 65 20 6c  * We should be l
1ee80 65 66 74 20 77 69 74 68 20 74 68 65 20 6f 72 69  eft with the ori
1ee90 67 69 6e 61 6c 20 64 65 66 61 75 6c 74 20 56 46  ginal default VF
1eea0 53 20 62 61 63 6b 20 61 73 20 74 68 65 0a 20 20  S back as the.  
1eeb0 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 2a 2f 0a 20  ** original */. 
1eec0 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
1eed0 5f 76 66 73 5f 66 69 6e 64 28 30 29 3d 3d 70 4d  _vfs_find(0)==pM
1eee0 61 69 6e 20 29 3b 0a 0a 20 20 72 65 74 75 72 6e  ain );..  return
1eef0 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
1ef00 2a 20 74 63 6c 63 6d 64 3a 20 20 20 76 66 73 5f  * tclcmd:   vfs_
1ef10 69 6e 69 74 66 61 69 6c 5f 74 65 73 74 0a 2a 2a  initfail_test.**
1ef20 0a 2a 2a 20 54 68 69 73 20 54 43 4c 20 63 6f 6d  .** This TCL com
1ef30 6d 61 6e 64 20 61 74 74 65 6d 70 74 73 20 74 6f  mand attempts to
1ef40 20 76 66 73 5f 66 69 6e 64 20 61 6e 64 20 76 66   vfs_find and vf
1ef50 73 5f 72 65 67 69 73 74 65 72 20 77 68 65 6e 20  s_register when 
1ef60 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 69  the.** sqlite3_i
1ef70 6e 69 74 69 61 6c 69 7a 65 28 29 20 69 6e 74 65  nitialize() inte
1ef80 72 66 61 63 65 20 69 73 20 66 61 69 6c 69 6e 67  rface is failing
1ef90 2e 20 20 41 6c 6c 20 63 61 6c 6c 73 20 73 68 6f  .  All calls sho
1efa0 75 6c 64 20 66 61 69 6c 2e 0a 2a 2f 0a 73 74 61  uld fail..*/.sta
1efb0 74 69 63 20 69 6e 74 20 76 66 73 5f 69 6e 69 74  tic int vfs_init
1efc0 66 61 69 6c 5f 74 65 73 74 28 0a 20 20 43 6c 69  fail_test(.  Cli
1efd0 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61  entData clientDa
1efe0 74 61 2c 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74  ta, /* Pointer t
1eff0 6f 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65  o sqlite3_enable
1f000 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  _XXX function */
1f010 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
1f020 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
1f030 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
1f040 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
1f050 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
1f060 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20 20  int objc,       
1f070 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1f080 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
1f090 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
1f0a0 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d  T objv[]  /* Com
1f0b0 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20 2a  mand arguments *
1f0c0 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76  /.){.  sqlite3_v
1f0d0 66 73 20 6f 6e 65 3b 0a 20 20 6f 6e 65 2e 7a 4e  fs one;.  one.zN
1f0e0 61 6d 65 20 3d 20 22 5f 5f 6f 6e 65 22 3b 0a 0a  ame = "__one";..
1f0f0 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 76 66    if( sqlite3_vf
1f100 73 5f 66 69 6e 64 28 30 29 20 29 20 72 65 74 75  s_find(0) ) retu
1f110 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
1f120 73 71 6c 69 74 65 33 5f 76 66 73 5f 72 65 67 69  sqlite3_vfs_regi
1f130 73 74 65 72 28 26 6f 6e 65 2c 20 30 29 3b 0a 20  ster(&one, 0);. 
1f140 20 69 66 28 20 73 71 6c 69 74 65 33 5f 76 66 73   if( sqlite3_vfs
1f150 5f 66 69 6e 64 28 30 29 20 29 20 72 65 74 75 72  _find(0) ) retur
1f160 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 73  n TCL_ERROR;.  s
1f170 71 6c 69 74 65 33 5f 76 66 73 5f 72 65 67 69 73  qlite3_vfs_regis
1f180 74 65 72 28 26 6f 6e 65 2c 20 31 29 3b 0a 20 20  ter(&one, 1);.  
1f190 69 66 28 20 73 71 6c 69 74 65 33 5f 76 66 73 5f  if( sqlite3_vfs_
1f1a0 66 69 6e 64 28 30 29 20 29 20 72 65 74 75 72 6e  find(0) ) return
1f1b0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65   TCL_ERROR;.  re
1f1c0 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
1f1d0 2f 2a 0a 2a 2a 20 53 61 76 65 64 20 56 46 53 65  /*.** Saved VFSe
1f1e0 73 0a 2a 2f 0a 73 74 61 74 69 63 20 73 71 6c 69  s.*/.static sqli
1f1f0 74 65 33 5f 76 66 73 20 2a 61 70 56 66 73 5b 32  te3_vfs *apVfs[2
1f200 30 5d 3b 0a 73 74 61 74 69 63 20 69 6e 74 20 6e  0];.static int n
1f210 56 66 73 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20  Vfs = 0;../*.** 
1f220 74 63 6c 63 6d 64 3a 20 20 20 76 66 73 5f 75 6e  tclcmd:   vfs_un
1f230 72 65 67 69 73 74 65 72 5f 61 6c 6c 0a 2a 2a 0a  register_all.**.
1f240 2a 2a 20 55 6e 72 65 67 69 73 74 65 72 20 61 6c  ** Unregister al
1f250 6c 20 56 46 53 65 73 2e 0a 2a 2f 0a 73 74 61 74  l VFSes..*/.stat
1f260 69 63 20 69 6e 74 20 76 66 73 5f 75 6e 72 65 67  ic int vfs_unreg
1f270 69 73 74 65 72 5f 61 6c 6c 28 0a 20 20 43 6c 69  ister_all(.  Cli
1f280 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61  entData clientDa
1f290 74 61 2c 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74  ta, /* Pointer t
1f2a0 6f 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65  o sqlite3_enable
1f2b0 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  _XXX function */
1f2c0 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
1f2d0 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
1f2e0 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
1f2f0 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
1f300 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
1f310 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20 20  int objc,       
1f320 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1f330 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
1f340 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
1f350 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d  T objv[]  /* Com
1f360 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20 2a  mand arguments *
1f370 2f 0a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  /.){.  int i;.  
1f380 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72 61 79  for(i=0; i<Array
1f390 53 69 7a 65 28 61 70 56 66 73 29 3b 20 69 2b 2b  Size(apVfs); i++
1f3a0 29 7b 0a 20 20 20 20 61 70 56 66 73 5b 69 5d 20  ){.    apVfs[i] 
1f3b0 3d 20 73 71 6c 69 74 65 33 5f 76 66 73 5f 66 69  = sqlite3_vfs_fi
1f3c0 6e 64 28 30 29 3b 0a 20 20 20 20 69 66 28 20 61  nd(0);.    if( a
1f3d0 70 56 66 73 5b 69 5d 3d 3d 30 20 29 20 62 72 65  pVfs[i]==0 ) bre
1f3e0 61 6b 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  ak;.    sqlite3_
1f3f0 76 66 73 5f 75 6e 72 65 67 69 73 74 65 72 28 61  vfs_unregister(a
1f400 70 56 66 73 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20  pVfs[i]);.  }.  
1f410 6e 56 66 73 20 3d 20 69 3b 0a 20 20 72 65 74 75  nVfs = i;.  retu
1f420 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 2f 2a 0a  rn TCL_OK;.}./*.
1f430 2a 2a 20 74 63 6c 63 6d 64 3a 20 20 20 76 66 73  ** tclcmd:   vfs
1f440 5f 72 65 72 65 67 69 73 74 65 72 5f 61 6c 6c 0a  _reregister_all.
1f450 2a 2a 0a 2a 2a 20 52 65 73 74 6f 72 65 20 61 6c  **.** Restore al
1f460 6c 20 56 46 53 65 73 20 74 68 61 74 20 77 65 72  l VFSes that wer
1f470 65 20 72 65 6d 6f 76 65 64 20 75 73 69 6e 67 20  e removed using 
1f480 76 66 73 5f 75 6e 72 65 67 69 73 74 65 72 5f 61  vfs_unregister_a
1f490 6c 6c 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  ll.*/.static int
1f4a0 20 76 66 73 5f 72 65 72 65 67 69 73 74 65 72 5f   vfs_reregister_
1f4b0 61 6c 6c 28 0a 20 20 43 6c 69 65 6e 74 44 61 74  all(.  ClientDat
1f4c0 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 2f 2a  a clientData, /*
1f4d0 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 71 6c 69   Pointer to sqli
1f4e0 74 65 33 5f 65 6e 61 62 6c 65 5f 58 58 58 20 66  te3_enable_XXX f
1f4f0 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 63 6c  unction */.  Tcl
1f500 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
1f510 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69      /* The TCL i
1f520 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20  nterpreter that 
1f530 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d  invoked this com
1f540 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62  mand */.  int ob
1f550 6a 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  jc,             
1f560 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
1f570 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c  guments */.  Tcl
1f580 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
1f590 5b 5d 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61  []  /* Command a
1f5a0 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20  rguments */.){. 
1f5b0 20 69 6e 74 20 69 3b 0a 20 20 66 6f 72 28 69 3d   int i;.  for(i=
1f5c0 30 3b 20 69 3c 6e 56 66 73 3b 20 69 2b 2b 29 7b  0; i<nVfs; i++){
1f5d0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73  .    sqlite3_vfs
1f5e0 5f 72 65 67 69 73 74 65 72 28 61 70 56 66 73 5b  _register(apVfs[
1f5f0 69 5d 2c 20 69 3d 3d 30 29 3b 0a 20 20 7d 0a 20  i], i==0);.  }. 
1f600 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
1f610 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 74 63 6c 63 6d 64  }.../*.** tclcmd
1f620 3a 20 20 20 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c  :   file_control
1f630 5f 74 65 73 74 20 44 42 0a 2a 2a 0a 2a 2a 20 54  _test DB.**.** T
1f640 68 69 73 20 54 43 4c 20 63 6f 6d 6d 61 6e 64 20  his TCL command 
1f650 72 75 6e 73 20 74 68 65 20 73 71 6c 69 74 65 33  runs the sqlite3
1f660 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 20 69 6e  _file_control in
1f670 74 65 72 66 61 63 65 20 61 6e 64 0a 2a 2a 20 76  terface and.** v
1f680 65 72 69 66 69 65 73 20 63 6f 72 72 65 63 74 20  erifies correct 
1f690 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65  operation of the
1f6a0 20 73 61 6d 65 2e 0a 2a 2f 0a 73 74 61 74 69 63   same..*/.static
1f6b0 20 69 6e 74 20 66 69 6c 65 5f 63 6f 6e 74 72 6f   int file_contro
1f6c0 6c 5f 74 65 73 74 28 0a 20 20 43 6c 69 65 6e 74  l_test(.  Client
1f6d0 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c  Data clientData,
1f6e0 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73   /* Pointer to s
1f6f0 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 58 58  qlite3_enable_XX
1f700 58 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  X function */.  
1f710 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
1f720 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43  rp,    /* The TC
1f730 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68  L interpreter th
1f740 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20  at invoked this 
1f750 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74  command */.  int
1f760 20 6f 62 6a 63 2c 20 20 20 20 20 20 20 20 20 20   objc,          
1f770 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1f780 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
1f790 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
1f7a0 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d 61 6e  bjv[]  /* Comman
1f7b0 64 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 29  d arguments */.)
1f7c0 7b 0a 20 20 69 6e 74 20 69 41 72 67 20 3d 20 30  {.  int iArg = 0
1f7d0 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  ;.  sqlite3 *db;
1f7e0 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66  .  int rc;..  if
1f7f0 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
1f800 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
1f810 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
1f820 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
1f830 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20  be \"",.        
1f840 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f  Tcl_GetStringFro
1f850 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29  mObj(objv[0], 0)
1f860 2c 20 22 20 44 42 22 2c 20 30 29 3b 0a 20 20 20  , " DB", 0);.   
1f870 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
1f880 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74  R;.  }.  if( get
1f890 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  DbPointer(interp
1f8a0 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
1f8b0 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29  objv[1]), &db) )
1f8c0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
1f8d0 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  R;.  rc = sqlite
1f8e0 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64  3_file_control(d
1f8f0 62 2c 20 30 2c 20 30 2c 20 26 69 41 72 67 29 3b  b, 0, 0, &iArg);
1f900 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
1f910 51 4c 49 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20  QLITE_ERROR );. 
1f920 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69   rc = sqlite3_fi
1f930 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 22  le_control(db, "
1f940 6e 6f 74 61 64 61 74 61 62 61 73 65 22 2c 20 53  notadatabase", S
1f950 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 4c 4f 43 4b  QLITE_FCNTL_LOCK
1f960 53 54 41 54 45 2c 20 26 69 41 72 67 29 3b 0a 20  STATE, &iArg);. 
1f970 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
1f980 49 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20 20 72  ITE_ERROR );.  r
1f990 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c 65  c = sqlite3_file
1f9a0 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 22 6d 61  _control(db, "ma
1f9b0 69 6e 22 2c 20 2d 31 2c 20 26 69 41 72 67 29 3b  in", -1, &iArg);
1f9c0 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
1f9d0 51 4c 49 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20  QLITE_ERROR );. 
1f9e0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69   rc = sqlite3_fi
1f9f0 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 22  le_control(db, "
1fa00 74 65 6d 70 22 2c 20 2d 31 2c 20 26 69 41 72 67  temp", -1, &iArg
1fa10 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d  );.  assert( rc=
1fa20 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 29 3b  =SQLITE_ERROR );
1fa30 0a 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ..  return TCL_O
1fa40 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 74 63 6c  K;.}.../*.** tcl
1fa50 63 6d 64 3a 20 20 20 66 69 6c 65 5f 63 6f 6e 74  cmd:   file_cont
1fa60 72 6f 6c 5f 6c 61 73 74 65 72 72 6e 6f 5f 74 65  rol_lasterrno_te
1fa70 73 74 20 44 42 0a 2a 2a 0a 2a 2a 20 54 68 69 73  st DB.**.** This
1fa80 20 54 43 4c 20 63 6f 6d 6d 61 6e 64 20 72 75 6e   TCL command run
1fa90 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f 66 69  s the sqlite3_fi
1faa0 6c 65 5f 63 6f 6e 74 72 6f 6c 20 69 6e 74 65 72  le_control inter
1fab0 66 61 63 65 20 61 6e 64 0a 2a 2a 20 76 65 72 69  face and.** veri
1fac0 66 69 65 73 20 63 6f 72 72 65 63 74 20 6f 70 65  fies correct ope
1fad0 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 53 51  ration of the SQ
1fae0 4c 49 54 45 5f 4c 41 53 54 5f 45 52 52 4e 4f 20  LITE_LAST_ERRNO 
1faf0 76 65 72 62 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  verb..*/.static 
1fb00 69 6e 74 20 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c  int file_control
1fb10 5f 6c 61 73 74 65 72 72 6e 6f 5f 74 65 73 74 28  _lasterrno_test(
1fb20 0a 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c  .  ClientData cl
1fb30 69 65 6e 74 44 61 74 61 2c 20 2f 2a 20 50 6f 69  ientData, /* Poi
1fb40 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 5f  nter to sqlite3_
1fb50 65 6e 61 62 6c 65 5f 58 58 58 20 66 75 6e 63 74  enable_XXX funct
1fb60 69 6f 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74  ion */.  Tcl_Int
1fb70 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
1fb80 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
1fb90 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
1fba0 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
1fbb0 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20   */.  int objc, 
1fbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1fbd0 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
1fbe0 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a  nts */.  Tcl_Obj
1fbf0 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20   *CONST objv[]  
1fc00 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d  /* Command argum
1fc10 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  ents */.){.  int
1fc20 20 69 41 72 67 20 3d 20 30 3b 0a 20 20 73 71 6c   iArg = 0;.  sql
1fc30 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20  ite3 *db;.  int 
1fc40 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  rc;..  if( objc!
1fc50 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =2 ){.    Tcl_Ap
1fc60 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
1fc70 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
1fc80 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
1fc90 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74  .        Tcl_Get
1fca0 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62  StringFromObj(ob
1fcb0 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 44 42 22  jv[0], 0), " DB"
1fcc0 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
1fcd0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
1fce0 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74    if( getDbPoint
1fcf0 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
1fd00 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
1fd10 29 2c 20 26 64 62 29 20 29 7b 0a 20 20 20 20 72  ), &db) ){.    r
1fd20 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
1fd30 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
1fd40 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c  te3_file_control
1fd50 28 64 62 2c 20 4e 55 4c 4c 2c 20 53 51 4c 49 54  (db, NULL, SQLIT
1fd60 45 5f 4c 41 53 54 5f 45 52 52 4e 4f 2c 20 26 69  E_LAST_ERRNO, &i
1fd70 41 72 67 29 3b 0a 20 20 69 66 28 20 72 63 20 29  Arg);.  if( rc )
1fd80 7b 20 0a 20 20 20 20 54 63 6c 5f 53 65 74 4f 62  { .    Tcl_SetOb
1fd90 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
1fda0 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 72 63  Tcl_NewIntObj(rc
1fdb0 29 29 3b 20 0a 20 20 20 20 72 65 74 75 72 6e 20  )); .    return 
1fdc0 54 43 4c 5f 45 52 52 4f 52 3b 20 0a 20 20 7d 0a  TCL_ERROR; .  }.
1fdd0 20 20 69 66 28 20 69 41 72 67 21 3d 30 20 29 20    if( iArg!=0 ) 
1fde0 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
1fdf0 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
1fe00 55 6e 65 78 70 65 63 74 65 64 20 6e 6f 6e 2d 7a  Unexpected non-z
1fe10 65 72 6f 20 65 72 72 6e 6f 3a 20 22 2c 0a 20 20  ero errno: ",.  
1fe20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe30 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
1fe40 46 72 6f 6d 4f 62 6a 28 54 63 6c 5f 4e 65 77 49  FromObj(Tcl_NewI
1fe50 6e 74 4f 62 6a 28 69 41 72 67 29 2c 20 30 29 2c  ntObj(iArg), 0),
1fe60 20 22 20 22 2c 20 30 29 3b 0a 20 20 20 20 72 65   " ", 0);.    re
1fe70 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
1fe80 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c    }.  return TCL
1fe90 5f 4f 4b 3b 20 20 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  _OK;  .}../*.** 
1fea0 74 63 6c 63 6d 64 3a 20 20 20 66 69 6c 65 5f 63  tclcmd:   file_c
1feb0 6f 6e 74 72 6f 6c 5f 6c 6f 63 6b 70 72 6f 78 79  ontrol_lockproxy
1fec0 5f 74 65 73 74 20 44 42 20 50 57 44 0a 2a 2a 0a  _test DB PWD.**.
1fed0 2a 2a 20 54 68 69 73 20 54 43 4c 20 63 6f 6d 6d  ** This TCL comm
1fee0 61 6e 64 20 72 75 6e 73 20 74 68 65 20 73 71 6c  and runs the sql
1fef0 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f  ite3_file_contro
1ff00 6c 20 69 6e 74 65 72 66 61 63 65 20 61 6e 64 0a  l interface and.
1ff10 2a 2a 20 76 65 72 69 66 69 65 73 20 63 6f 72 72  ** verifies corr
1ff20 65 63 74 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66  ect operation of
1ff30 20 74 68 65 20 53 51 4c 49 54 45 5f 47 45 54 5f   the SQLITE_GET_
1ff40 4c 4f 43 4b 50 52 4f 58 59 46 49 4c 45 20 61 6e  LOCKPROXYFILE an
1ff50 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 53 45 54 5f  d.** SQLITE_SET_
1ff60 4c 4f 43 4b 50 52 4f 58 59 46 49 4c 45 20 76 65  LOCKPROXYFILE ve
1ff70 72 62 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  rbs..*/.static i
1ff80 6e 74 20 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 5f  nt file_control_
1ff90 6c 6f 63 6b 70 72 6f 78 79 5f 74 65 73 74 28 0a  lockproxy_test(.
1ffa0 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69    ClientData cli
1ffb0 65 6e 74 44 61 74 61 2c 20 2f 2a 20 50 6f 69 6e  entData, /* Poin
1ffc0 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 5f 65  ter to sqlite3_e
1ffd0 6e 61 62 6c 65 5f 58 58 58 20 66 75 6e 63 74 69  nable_XXX functi
1ffe0 6f 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65  on */.  Tcl_Inte
1fff0 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
20000 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
20010 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
20020 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
20030 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20  */.  int objc,  
20040 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
20050 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
20060 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20  ts */.  Tcl_Obj 
20070 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f  *CONST objv[]  /
20080 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65  * Command argume
20090 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69  nts */.){.  sqli
200a0 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74  te3 *db;.  const
200b0 20 63 68 61 72 20 2a 7a 50 77 64 3b 0a 20 20 69   char *zPwd;.  i
200c0 6e 74 20 6e 50 77 64 3b 0a 20 20 0a 20 20 69 66  nt nPwd;.  .  if
200d0 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20  ( objc!=3 ){.   
200e0 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
200f0 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
20100 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
20110 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20  be \"",.        
20120 20 20 20 20 20 20 20 20 20 20 20 20 20 54 63 6c               Tcl
20130 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62  _GetStringFromOb
20140 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22  j(objv[0], 0), "
20150 20 44 42 20 50 57 44 22 2c 20 30 29 3b 0a 20 20   DB PWD", 0);.  
20160 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
20170 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
20180 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tDbPointer(inter
20190 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
201a0 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20  (objv[1]), &db) 
201b0 29 7b 0a 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ){.   return TCL
201c0 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a 50  _ERROR;.  }.  zP
201d0 77 64 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69  wd = Tcl_GetStri
201e0 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 32  ngFromObj(objv[2
201f0 5d 2c 20 26 6e 50 77 64 29 3b 0a 20 20 0a 23 69  ], &nPwd);.  .#i
20200 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
20210 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47  E_ENABLE_LOCKING
20220 5f 53 54 59 4c 45 29 0a 23 20 20 69 66 20 64 65  _STYLE).#  if de
20230 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29  fined(__APPLE__)
20240 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53 51 4c  .#    define SQL
20250 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49  ITE_ENABLE_LOCKI
20260 4e 47 5f 53 54 59 4c 45 20 31 0a 23 20 20 65 6c  NG_STYLE 1.#  el
20270 73 65 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53  se.#    define S
20280 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43  QLITE_ENABLE_LOC
20290 4b 49 4e 47 5f 53 54 59 4c 45 20 30 0a 23 20 20  KING_STYLE 0.#  
202a0 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
202b0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c   SQLITE_ENABLE_L
202c0 4f 43 4b 49 4e 47 5f 53 54 59 4c 45 20 26 26 20  OCKING_STYLE && 
202d0 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f  defined(__APPLE_
202e0 5f 29 0a 20 20 7b 0a 20 20 20 20 63 68 61 72 20  _).  {.    char 
202f0 2a 74 65 73 74 50 61 74 68 3b 0a 20 20 20 20 69  *testPath;.    i
20300 6e 74 20 72 63 3b 0a 20 20 20 20 63 68 61 72 20  nt rc;.    char 
20310 70 72 6f 78 79 50 61 74 68 5b 34 30 30 5d 3b 0a  proxyPath[400];.
20320 20 20 20 20 0a 20 20 20 20 69 66 28 20 73 69 7a      .    if( siz
20330 65 6f 66 28 70 72 6f 78 79 50 61 74 68 29 3c 6e  eof(proxyPath)<n
20340 50 77 64 2b 32 30 20 29 7b 0a 20 20 20 20 20 20  Pwd+20 ){.      
20350 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
20360 28 69 6e 74 65 72 70 2c 20 22 50 57 44 20 74 6f  (interp, "PWD to
20370 6f 20 62 69 67 22 2c 20 28 76 6f 69 64 2a 29 30  o big", (void*)0
20380 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
20390 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  TCL_ERROR;.    }
203a0 0a 20 20 20 20 73 70 72 69 6e 74 66 28 70 72 6f  .    sprintf(pro
203b0 78 79 50 61 74 68 2c 20 22 25 73 2f 74 65 73 74  xyPath, "%s/test
203c0 2e 70 72 6f 78 79 22 2c 20 7a 50 77 64 29 3b 0a  .proxy", zPwd);.
203d0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
203e0 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62  _file_control(db
203f0 2c 20 4e 55 4c 4c 2c 20 53 51 4c 49 54 45 5f 53  , NULL, SQLITE_S
20400 45 54 5f 4c 4f 43 4b 50 52 4f 58 59 46 49 4c 45  ET_LOCKPROXYFILE
20410 2c 20 70 72 6f 78 79 50 61 74 68 29 3b 0a 20 20  , proxyPath);.  
20420 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
20430 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
20440 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
20450 65 77 49 6e 74 4f 62 6a 28 72 63 29 29 3b 20 0a  ewIntObj(rc)); .
20460 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c        return TCL
20470 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20  _ERROR;.    }.  
20480 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 66    rc = sqlite3_f
20490 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20  ile_control(db, 
204a0 4e 55 4c 4c 2c 20 53 51 4c 49 54 45 5f 47 45 54  NULL, SQLITE_GET
204b0 5f 4c 4f 43 4b 50 52 4f 58 59 46 49 4c 45 2c 20  _LOCKPROXYFILE, 
204c0 26 74 65 73 74 50 61 74 68 29 3b 0a 20 20 20 20  &testPath);.    
204d0 69 66 28 20 73 74 72 6e 63 6d 70 28 70 72 6f 78  if( strncmp(prox
204e0 79 50 61 74 68 2c 74 65 73 74 50 61 74 68 2c 31  yPath,testPath,1
204f0 31 29 20 29 7b 0a 20 20 20 20 20 20 54 63 6c 5f  1) ){.      Tcl_
20500 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
20510 65 72 70 2c 20 22 4c 6f 63 6b 20 70 72 6f 78 79  erp, "Lock proxy
20520 20 66 69 6c 65 20 64 69 64 20 6e 6f 74 20 6d 61   file did not ma
20530 74 63 68 20 74 68 65 20 22 0a 20 20 20 20 20 20  tch the ".      
20540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20550 20 20 20 20 20 20 20 20 20 22 70 72 65 76 69 6f           "previo
20560 75 73 6c 79 20 61 73 73 69 67 6e 65 64 20 76 61  usly assigned va
20570 6c 75 65 22 2c 20 30 29 3b 0a 20 20 20 20 20 20  lue", 0);.      
20580 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
20590 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
205a0 72 63 20 29 7b 0a 20 20 20 20 20 20 54 63 6c 5f  rc ){.      Tcl_
205b0 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
205c0 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f  erp, Tcl_NewIntO
205d0 62 6a 28 72 63 29 29 3b 0a 20 20 20 20 20 20 72  bj(rc));.      r
205e0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
205f0 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20 3d 20  .    }.    rc = 
20600 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e  sqlite3_file_con
20610 74 72 6f 6c 28 64 62 2c 20 4e 55 4c 4c 2c 20 53  trol(db, NULL, S
20620 51 4c 49 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52  QLITE_SET_LOCKPR
20630 4f 58 59 46 49 4c 45 2c 20 70 72 6f 78 79 50 61  OXYFILE, proxyPa
20640 74 68 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20  th);.    if( rc 
20650 29 7b 0a 20 20 20 20 20 20 54 63 6c 5f 53 65 74  ){.      Tcl_Set
20660 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
20670 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28  , Tcl_NewIntObj(
20680 72 63 29 29 3b 0a 20 20 20 20 20 20 72 65 74 75  rc));.      retu
20690 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
206a0 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20    }.  }.#endif. 
206b0 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 20   return TCL_OK; 
206c0 20 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 74 63 6c 63   .}.../*.** tclc
206d0 6d 64 3a 20 20 20 73 71 6c 69 74 65 33 5f 76 66  md:   sqlite3_vf
206e0 73 5f 6c 69 73 74 0a 2a 2a 0a 2a 2a 20 20 20 52  s_list.**.**   R
206f0 65 74 75 72 6e 20 61 20 74 63 6c 20 6c 69 73 74  eturn a tcl list
20700 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
20710 6e 61 6d 65 73 20 6f 66 20 61 6c 6c 20 72 65 67  names of all reg
20720 69 73 74 65 72 65 64 20 76 66 73 27 73 2e 0a 2a  istered vfs's..*
20730 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 76 66 73  /.static int vfs
20740 5f 6c 69 73 74 28 0a 20 20 43 6c 69 65 6e 74 44  _list(.  ClientD
20750 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 20  ata clientData, 
20760 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 71  /* Pointer to sq
20770 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 58 58 58  lite3_enable_XXX
20780 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54   function */.  T
20790 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
207a0 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c  p,    /* The TCL
207b0 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61   interpreter tha
207c0 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63  t invoked this c
207d0 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  ommand */.  int 
207e0 6f 62 6a 63 2c 20 20 20 20 20 20 20 20 20 20 20  objc,           
207f0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
20800 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 54  arguments */.  T
20810 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
20820 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64  jv[]  /* Command
20830 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b   arguments */.){
20840 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  .  sqlite3_vfs *
20850 70 56 66 73 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20  pVfs;.  Tcl_Obj 
20860 2a 70 52 65 74 20 3d 20 54 63 6c 5f 4e 65 77 4f  *pRet = Tcl_NewO
20870 62 6a 28 29 3b 0a 20 20 69 66 28 20 6f 62 6a 63  bj();.  if( objc
20880 21 3d 31 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57  !=1 ){.    Tcl_W
20890 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65  rongNumArgs(inte
208a0 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 22 29  rp, 1, objv, "")
208b0 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
208c0 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 66 6f  _ERROR;.  }.  fo
208d0 72 28 70 56 66 73 3d 73 71 6c 69 74 65 33 5f 76  r(pVfs=sqlite3_v
208e0 66 73 5f 66 69 6e 64 28 30 29 3b 20 70 56 66 73  fs_find(0); pVfs
208f0 3b 20 70 56 66 73 3d 70 56 66 73 2d 3e 70 4e 65  ; pVfs=pVfs->pNe
20900 78 74 29 7b 0a 20 20 20 20 54 63 6c 5f 4c 69 73  xt){.    Tcl_Lis
20910 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e  tObjAppendElemen
20920 74 28 69 6e 74 65 72 70 2c 20 70 52 65 74 2c 20  t(interp, pRet, 
20930 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
20940 28 70 56 66 73 2d 3e 7a 4e 61 6d 65 2c 20 2d 31  (pVfs->zName, -1
20950 29 29 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 53 65  ));.  }.  Tcl_Se
20960 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
20970 70 2c 20 70 52 65 74 29 3b 0a 20 20 72 65 74 75  p, pRet);.  retu
20980 72 6e 20 54 43 4c 5f 4f 4b 3b 20 20 0a 7d 0a 0a  rn TCL_OK;  .}..
20990 2f 2a 0a 2a 2a 20 74 63 6c 63 6d 64 3a 20 20 20  /*.** tclcmd:   
209a0 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20 44 42  sqlite3_limit DB
209b0 20 49 44 20 56 41 4c 55 45 0a 2a 2a 0a 2a 2a 20   ID VALUE.**.** 
209c0 54 68 69 73 20 54 43 4c 20 63 6f 6d 6d 61 6e 64  This TCL command
209d0 20 72 75 6e 73 20 74 68 65 20 73 71 6c 69 74 65   runs the sqlite
209e0 33 5f 6c 69 6d 69 74 20 69 6e 74 65 72 66 61 63  3_limit interfac
209f0 65 20 61 6e 64 0a 2a 2a 20 76 65 72 69 66 69 65  e and.** verifie
20a00 73 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61 74  s correct operat
20a10 69 6f 6e 20 6f 66 20 74 68 65 20 73 61 6d 65 2e  ion of the same.
20a20 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
20a30 65 73 74 5f 6c 69 6d 69 74 28 0a 20 20 43 6c 69  est_limit(.  Cli
20a40 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61  entData clientDa
20a50 74 61 2c 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74  ta, /* Pointer t
20a60 6f 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65  o sqlite3_enable
20a70 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  _XXX function */
20a80 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
20a90 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
20aa0 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
20ab0 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
20ac0 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
20ad0 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20 20  int objc,       
20ae0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
20af0 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
20b00 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
20b10 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d  T objv[]  /* Com
20b20 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20 2a  mand arguments *
20b30 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  /.){.  sqlite3 *
20b40 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  db;.  int rc;.  
20b50 73 74 61 74 69 63 20 63 6f 6e 73 74 20 73 74 72  static const str
20b60 75 63 74 20 7b 0a 20 20 20 20 20 63 68 61 72 20  uct {.     char 
20b70 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20 20 69 6e 74  *zName;.     int
20b80 20 69 64 3b 0a 20 20 7d 20 61 49 64 5b 5d 20 3d   id;.  } aId[] =
20b90 20 7b 0a 20 20 20 20 7b 20 22 53 51 4c 49 54 45   {.    { "SQLITE
20ba0 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 22 2c 20  _LIMIT_LENGTH", 
20bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
20bc0 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
20bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
20be0 2c 0a 20 20 20 20 7b 20 22 53 51 4c 49 54 45 5f  ,.    { "SQLITE_
20bf0 4c 49 4d 49 54 5f 53 51 4c 5f 4c 45 4e 47 54 48  LIMIT_SQL_LENGTH
20c00 22 2c 20 20 20 20 20 20 20 20 20 20 53 51 4c 49  ",          SQLI
20c10 54 45 5f 4c 49 4d 49 54 5f 53 51 4c 5f 4c 45 4e  TE_LIMIT_SQL_LEN
20c20 47 54 48 20 20 20 20 20 20 20 20 20 20 20 7d 2c  GTH           },
20c30 0a 20 20 20 20 7b 20 22 53 51 4c 49 54 45 5f 4c  .    { "SQLITE_L
20c40 49 4d 49 54 5f 43 4f 4c 55 4d 4e 22 2c 20 20 20  IMIT_COLUMN",   
20c50 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54             SQLIT
20c60 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e 20 20  E_LIMIT_COLUMN  
20c70 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a               },.
20c80 20 20 20 20 7b 20 22 53 51 4c 49 54 45 5f 4c 49      { "SQLITE_LI
20c90 4d 49 54 5f 45 58 50 52 5f 44 45 50 54 48 22 2c  MIT_EXPR_DEPTH",
20ca0 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
20cb0 5f 4c 49 4d 49 54 5f 45 58 50 52 5f 44 45 50 54  _LIMIT_EXPR_DEPT
20cc0 48 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20  H           },. 
20cd0 20 20 20 7b 20 22 53 51 4c 49 54 45 5f 4c 49 4d     { "SQLITE_LIM
20ce0 49 54 5f 43 4f 4d 50 4f 55 4e 44 5f 53 45 4c 45  IT_COMPOUND_SELE
20cf0 43 54 22 2c 20 20 20 20 20 53 51 4c 49 54 45 5f  CT",     SQLITE_
20d00 4c 49 4d 49 54 5f 43 4f 4d 50 4f 55 4e 44 5f 53  LIMIT_COMPOUND_S
20d10 45 4c 45 43 54 20 20 20 20 20 20 7d 2c 0a 20 20  ELECT      },.  
20d20 20 20 7b 20 22 53 51 4c 49 54 45 5f 4c 49 4d 49    { "SQLITE_LIMI
20d30 54 5f 56 44 42 45 5f 4f 50 22 2c 20 20 20 20 20  T_VDBE_OP",     
20d40 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c          SQLITE_L
20d50 49 4d 49 54 5f 56 44 42 45 5f 4f 50 20 20 20 20  IMIT_VDBE_OP    
20d60 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
20d70 20 7b 20 22 53 51 4c 49 54 45 5f 4c 49 4d 49 54   { "SQLITE_LIMIT
20d80 5f 46 55 4e 43 54 49 4f 4e 5f 41 52 47 22 2c 20  _FUNCTION_ARG", 
20d90 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c 49         SQLITE_LI
20da0 4d 49 54 5f 46 55 4e 43 54 49 4f 4e 5f 41 52 47  MIT_FUNCTION_ARG
20db0 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20           },.    
20dc0 7b 20 22 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  { "SQLITE_LIMIT_
20dd0 41 54 54 41 43 48 45 44 22 2c 20 20 20 20 20 20  ATTACHED",      
20de0 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d        SQLITE_LIM
20df0 49 54 5f 41 54 54 41 43 48 45 44 20 20 20 20 20  IT_ATTACHED     
20e00 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b          },.    {
20e10 20 22 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c   "SQLITE_LIMIT_L
20e20 49 4b 45 5f 50 41 54 54 45 52 4e 5f 4c 45 4e 47  IKE_PATTERN_LENG
20e30 54 48 22 2c 20 53 51 4c 49 54 45 5f 4c 49 4d 49  TH", SQLITE_LIMI
20e40 54 5f 4c 49 4b 45 5f 50 41 54 54 45 52 4e 5f 4c  T_LIKE_PATTERN_L
20e50 45 4e 47 54 48 20 20 7d 2c 0a 20 20 20 20 7b 20  ENGTH  },.    { 
20e60 22 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 56 41  "SQLITE_LIMIT_VA
20e70 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 22 2c 20  RIABLE_NUMBER", 
20e80 20 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54      SQLITE_LIMIT
20e90 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
20ea0 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22        },.    { "
20eb0 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49  SQLITE_LIMIT_TRI
20ec0 47 47 45 52 5f 44 45 50 54 48 22 2c 20 20 20 20  GGER_DEPTH",    
20ed0 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f     SQLITE_LIMIT_
20ee0 54 52 49 47 47 45 52 5f 44 45 50 54 48 20 20 20  TRIGGER_DEPTH   
20ef0 20 20 20 20 20 7d 2c 0a 20 20 20 20 0a 20 20 20       },.    .   
20f00 20 2f 2a 20 4f 75 74 20 6f 66 20 72 61 6e 67 65   /* Out of range
20f10 20 74 65 73 74 20 63 61 73 65 73 20 2a 2f 0a 20   test cases */. 
20f20 20 20 20 7b 20 22 53 51 4c 49 54 45 5f 4c 49 4d     { "SQLITE_LIM
20f30 49 54 5f 54 4f 4f 53 4d 41 4c 4c 22 2c 20 20 20  IT_TOOSMALL",   
20f40 20 20 20 20 20 20 20 20 20 2d 31 2c 20 20 20 20           -1,    
20f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f60 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20             },.  
20f70 20 20 7b 20 22 53 51 4c 49 54 45 5f 4c 49 4d 49    { "SQLITE_LIMI
20f80 54 5f 54 4f 4f 42 49 47 22 2c 20 20 20 20 20 20  T_TOOBIG",      
20f90 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c          SQLITE_L
20fa0 49 4d 49 54 5f 54 52 49 47 47 45 52 5f 44 45 50  IMIT_TRIGGER_DEP
20fb0 54 48 2b 31 20 20 20 20 20 20 7d 2c 0a 20 20 7d  TH+1      },.  }
20fc0 3b 0a 20 20 69 6e 74 20 69 2c 20 69 64 3b 0a 20  ;.  int i, id;. 
20fd0 20 69 6e 74 20 76 61 6c 3b 0a 20 20 63 6f 6e 73   int val;.  cons
20fe0 74 20 63 68 61 72 20 2a 7a 49 64 3b 0a 0a 20 20  t char *zId;..  
20ff0 69 66 28 20 6f 62 6a 63 21 3d 34 20 29 7b 0a 20  if( objc!=4 ){. 
21000 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
21010 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
21020 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
21030 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20  d be \"",.      
21040 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46    Tcl_GetStringF
21050 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20  romObj(objv[0], 
21060 30 29 2c 20 22 20 44 42 20 49 44 20 56 41 4c 55  0), " DB ID VALU
21070 45 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  E", 0);.    retu
21080 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
21090 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  }.  if( getDbPoi
210a0 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
210b0 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
210c0 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74 75  1]), &db) ) retu
210d0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
210e0 7a 49 64 20 3d 20 54 63 6c 5f 47 65 74 53 74 72  zId = Tcl_GetStr
210f0 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 3b 0a 20 20  ing(objv[2]);.  
21100 66 6f 72 28 69 3d 30 3b 20 69 3c 73 69 7a 65 6f  for(i=0; i<sizeo
21110 66 28 61 49 64 29 2f 73 69 7a 65 6f 66 28 61 49  f(aId)/sizeof(aI
21120 64 5b 30 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20 20  d[0]); i++){.   
21130 20 69 66 28 20 73 74 72 63 6d 70 28 7a 49 64 2c   if( strcmp(zId,
21140 20 61 49 64 5b 69 5d 2e 7a 4e 61 6d 65 29 3d 3d   aId[i].zName)==
21150 30 20 29 7b 0a 20 20 20 20 20 20 69 64 20 3d 20  0 ){.      id = 
21160 61 49 64 5b 69 5d 2e 69 64 3b 0a 20 20 20 20 20  aId[i].id;.     
21170 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
21180 7d 0a 20 20 69 66 28 20 69 3e 3d 73 69 7a 65 6f  }.  if( i>=sizeo
21190 66 28 61 49 64 29 2f 73 69 7a 65 6f 66 28 61 49  f(aId)/sizeof(aI
211a0 64 5b 30 5d 29 20 29 7b 0a 20 20 20 20 54 63 6c  d[0]) ){.    Tcl
211b0 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
211c0 74 65 72 70 2c 20 22 75 6e 6b 6e 6f 77 6e 20 6c  terp, "unknown l
211d0 69 6d 69 74 20 74 79 70 65 3a 20 22 2c 20 7a 49  imit type: ", zI
211e0 64 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a 20 20  d, (char*)0);.  
211f0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
21200 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 54 63  OR;.  }.  if( Tc
21210 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
21220 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c  interp, objv[3],
21230 20 26 76 61 6c 29 20 29 20 72 65 74 75 72 6e 20   &val) ) return 
21240 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20  TCL_ERROR;.  rc 
21250 3d 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28  = sqlite3_limit(
21260 64 62 2c 20 69 64 2c 20 76 61 6c 29 3b 0a 20 20  db, id, val);.  
21270 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
21280 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
21290 49 6e 74 4f 62 6a 28 72 63 29 29 3b 0a 20 20 72  IntObj(rc));.  r
212a0 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 20 20 0a  eturn TCL_OK;  .
212b0 7d 0a 0a 2f 2a 0a 2a 2a 20 74 63 6c 63 6d 64 3a  }../*.** tclcmd:
212c0 20 20 73 61 76 65 5f 70 72 6e 67 5f 73 74 61 74    save_prng_stat
212d0 65 0a 2a 2a 0a 2a 2a 20 53 61 76 65 20 74 68 65  e.**.** Save the
212e0 20 73 74 61 74 65 20 6f 66 20 74 68 65 20 70 73   state of the ps
212f0 65 75 64 6f 2d 72 61 6e 64 6f 6d 20 6e 75 6d 62  eudo-random numb
21300 65 72 20 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2a  er generator..**
21310 20 41 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   At the same tim
21320 65 2c 20 76 65 72 69 66 79 20 74 68 61 74 20 73  e, verify that s
21330 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
21340 72 6f 6c 20 77 6f 72 6b 73 20 65 76 65 6e 20 77  rol works even w
21350 68 65 6e 0a 2a 2a 20 63 61 6c 6c 65 64 20 77 69  hen.** called wi
21360 74 68 20 61 6e 20 6f 75 74 2d 6f 66 2d 72 61 6e  th an out-of-ran
21370 67 65 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 73 74  ge opcode..*/.st
21380 61 74 69 63 20 69 6e 74 20 73 61 76 65 5f 70 72  atic int save_pr
21390 6e 67 5f 73 74 61 74 65 28 0a 20 20 43 6c 69 65  ng_state(.  Clie
213a0 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74  ntData clientDat
213b0 61 2c 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f  a, /* Pointer to
213c0 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f   sqlite3_enable_
213d0 58 58 58 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  XXX function */.
213e0 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
213f0 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
21400 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
21410 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
21420 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
21430 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20 20 20  nt objc,        
21440 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
21450 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
21460 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
21470 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d   objv[]  /* Comm
21480 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f  and arguments */
21490 0a 29 7b 0a 20 20 69 6e 74 20 72 63 20 3d 20 73  .){.  int rc = s
214a0 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
214b0 72 6f 6c 28 39 39 39 39 29 3b 0a 20 20 61 73 73  rol(9999);.  ass
214c0 65 72 74 28 20 72 63 3d 3d 30 20 29 3b 0a 20 20  ert( rc==0 );.  
214d0 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 74 65 73  rc = sqlite3_tes
214e0 74 5f 63 6f 6e 74 72 6f 6c 28 2d 31 29 3b 0a 20  t_control(-1);. 
214f0 20 61 73 73 65 72 74 28 20 72 63 3d 3d 30 20 29   assert( rc==0 )
21500 3b 0a 20 20 73 71 6c 69 74 65 33 5f 74 65 73 74  ;.  sqlite3_test
21510 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f  _control(SQLITE_
21520 54 45 53 54 43 54 52 4c 5f 50 52 4e 47 5f 53 41  TESTCTRL_PRNG_SA
21530 56 45 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  VE);.  return TC
21540 4c 5f 4f 4b 3b 0a 7d 0a 2f 2a 0a 2a 2a 20 74 63  L_OK;.}./*.** tc
21550 6c 63 6d 64 3a 20 20 72 65 73 74 6f 72 65 5f 70  lcmd:  restore_p
21560 72 6e 67 5f 73 74 61 74 65 0a 2a 2f 0a 73 74 61  rng_state.*/.sta
21570 74 69 63 20 69 6e 74 20 72 65 73 74 6f 72 65 5f  tic int restore_
21580 70 72 6e 67 5f 73 74 61 74 65 28 0a 20 20 43 6c  prng_state(.  Cl
21590 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44  ientData clientD
215a0 61 74 61 2c 20 2f 2a 20 50 6f 69 6e 74 65 72 20  ata, /* Pointer 
215b0 74 6f 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c  to sqlite3_enabl
215c0 65 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e 20 2a  e_XXX function *
215d0 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  /.  Tcl_Interp *
215e0 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
215f0 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
21600 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
21610 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
21620 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20   int objc,      
21630 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
21640 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
21650 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  /.  Tcl_Obj *CON
21660 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f  ST objv[]  /* Co
21670 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20  mmand arguments 
21680 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  */.){.  sqlite3_
21690 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c  test_control(SQL
216a0 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 50 52 4e  ITE_TESTCTRL_PRN
216b0 47 5f 52 45 53 54 4f 52 45 29 3b 0a 20 20 72 65  G_RESTORE);.  re
216c0 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 2f  turn TCL_OK;.}./
216d0 2a 0a 2a 2a 20 74 63 6c 63 6d 64 3a 20 20 72 65  *.** tclcmd:  re
216e0 73 65 74 5f 70 72 6e 67 5f 73 74 61 74 65 0a 2a  set_prng_state.*
216f0 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 72 65 73  /.static int res
21700 65 74 5f 70 72 6e 67 5f 73 74 61 74 65 28 0a 20  et_prng_state(. 
21710 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65   ClientData clie
21720 6e 74 44 61 74 61 2c 20 2f 2a 20 50 6f 69 6e 74  ntData, /* Point
21730 65 72 20 74 6f 20 73 71 6c 69 74 65 33 5f 65 6e  er to sqlite3_en
21740 61 62 6c 65 5f 58 58 58 20 66 75 6e 63 74 69 6f  able_XXX functio
21750 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72  n */.  Tcl_Inter
21760 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
21770 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
21780 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
21790 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
217a0 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20  /.  int objc,   
217b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
217c0 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
217d0 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  s */.  Tcl_Obj *
217e0 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a  CONST objv[]  /*
217f0 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e   Command argumen
21800 74 73 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74  ts */.){.  sqlit
21810 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
21820 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
21830 50 52 4e 47 5f 52 45 53 45 54 29 3b 0a 20 20 72  PRNG_RESET);.  r
21840 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
21850 0a 2f 2a 0a 2a 2a 20 74 63 6c 63 6d 64 3a 20 20  ./*.** tclcmd:  
21860 70 63 61 63 68 65 5f 73 74 61 74 73 0a 2a 2f 0a  pcache_stats.*/.
21870 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
21880 70 63 61 63 68 65 5f 73 74 61 74 73 28 0a 20 20  pcache_stats(.  
21890 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e  ClientData clien
218a0 74 44 61 74 61 2c 20 2f 2a 20 50 6f 69 6e 74 65  tData, /* Pointe
218b0 72 20 74 6f 20 73 71 6c 69 74 65 33 5f 65 6e 61  r to sqlite3_ena
218c0 62 6c 65 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e  ble_XXX function
218d0 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70   */.  Tcl_Interp
218e0 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
218f0 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
21900 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
21910 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
21920 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20  .  int objc,    
21930 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
21940 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
21950 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43   */.  Tcl_Obj *C
21960 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20  ONST objv[]  /* 
21970 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74  Command argument
21980 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 6e 4d  s */.){.  int nM
21990 69 6e 3b 0a 20 20 69 6e 74 20 6e 4d 61 78 3b 0a  in;.  int nMax;.
219a0 20 20 69 6e 74 20 6e 43 75 72 72 65 6e 74 3b 0a    int nCurrent;.
219b0 20 20 69 6e 74 20 6e 52 65 63 79 63 6c 61 62 6c    int nRecyclabl
219c0 65 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 52  e;.  Tcl_Obj *pR
219d0 65 74 3b 0a 0a 20 20 73 71 6c 69 74 65 33 50 63  et;..  sqlite3Pc
219e0 61 63 68 65 53 74 61 74 73 28 26 6e 43 75 72 72  acheStats(&nCurr
219f0 65 6e 74 2c 20 26 6e 4d 61 78 2c 20 26 6e 4d 69  ent, &nMax, &nMi
21a00 6e 2c 20 26 6e 52 65 63 79 63 6c 61 62 6c 65 29  n, &nRecyclable)
21a10 3b 0a 0a 20 20 70 52 65 74 20 3d 20 54 63 6c 5f  ;..  pRet = Tcl_
21a20 4e 65 77 4f 62 6a 28 29 3b 0a 20 20 54 63 6c 5f  NewObj();.  Tcl_
21a30 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65  ListObjAppendEle
21a40 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 52 65  ment(interp, pRe
21a50 74 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  t, Tcl_NewString
21a60 4f 62 6a 28 22 63 75 72 72 65 6e 74 22 2c 20 2d  Obj("current", -
21a70 31 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f  1));.  Tcl_ListO
21a80 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  bjAppendElement(
21a90 69 6e 74 65 72 70 2c 20 70 52 65 74 2c 20 54 63  interp, pRet, Tc
21aa0 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 6e 43 75 72  l_NewIntObj(nCur
21ab0 72 65 6e 74 29 29 3b 0a 20 20 54 63 6c 5f 4c 69  rent));.  Tcl_Li
21ac0 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65  stObjAppendEleme
21ad0 6e 74 28 69 6e 74 65 72 70 2c 20 70 52 65 74 2c  nt(interp, pRet,
21ae0 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
21af0 6a 28 22 6d 61 78 22 2c 20 2d 31 29 29 3b 0a 20  j("max", -1));. 
21b00 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65   Tcl_ListObjAppe
21b10 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70  ndElement(interp
21b20 2c 20 70 52 65 74 2c 20 54 63 6c 5f 4e 65 77 49  , pRet, Tcl_NewI
21b30 6e 74 4f 62 6a 28 6e 4d 61 78 29 29 3b 0a 20 20  ntObj(nMax));.  
21b40 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e  Tcl_ListObjAppen
21b50 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c  dElement(interp,
21b60 20 70 52 65 74 2c 20 54 63 6c 5f 4e 65 77 53 74   pRet, Tcl_NewSt
21b70 72 69 6e 67 4f 62 6a 28 22 6d 69 6e 22 2c 20 2d  ringObj("min", -
21b80 31 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f  1));.  Tcl_ListO
21b90 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  bjAppendElement(
21ba0 69 6e 74 65 72 70 2c 20 70 52 65 74 2c 20 54 63  interp, pRet, Tc
21bb0 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 6e 4d 69 6e  l_NewIntObj(nMin
21bc0 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62  ));.  Tcl_ListOb
21bd0 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  jAppendElement(i
21be0 6e 74 65 72 70 2c 20 70 52 65 74 2c 20 54 63 6c  nterp, pRet, Tcl
21bf0 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 72  _NewStringObj("r
21c00 65 63 79 63 6c 61 62 6c 65 22 2c 20 2d 31 29 29  ecyclable", -1))
21c10 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41  ;.  Tcl_ListObjA
21c20 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74  ppendElement(int
21c30 65 72 70 2c 20 70 52 65 74 2c 20 54 63 6c 5f 4e  erp, pRet, Tcl_N
21c40 65 77 49 6e 74 4f 62 6a 28 6e 52 65 63 79 63 6c  ewIntObj(nRecycl
21c50 61 62 6c 65 29 29 3b 0a 0a 20 20 54 63 6c 5f 53  able));..  Tcl_S
21c60 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
21c70 72 70 2c 20 70 52 65 74 29 3b 0a 0a 20 20 72 65  rp, pRet);..  re
21c80 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
21c90 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
21ca0 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49  ABLE_UNLOCK_NOTI
21cb0 46 59 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74  FY.static void t
21cc0 65 73 74 5f 75 6e 6c 6f 63 6b 5f 6e 6f 74 69 66  est_unlock_notif
21cd0 79 5f 63 62 28 76 6f 69 64 20 2a 2a 61 41 72 67  y_cb(void **aArg
21ce0 2c 20 69 6e 74 20 6e 41 72 67 29 7b 0a 20 20 69  , int nArg){.  i
21cf0 6e 74 20 69 69 3b 0a 20 20 66 6f 72 28 69 69 3d  nt ii;.  for(ii=
21d00 30 3b 20 69 69 3c 6e 41 72 67 3b 20 69 69 2b 2b  0; ii<nArg; ii++
21d10 29 7b 0a 20 20 20 20 54 63 6c 5f 45 76 61 6c 45  ){.    Tcl_EvalE
21d20 78 28 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 29  x((Tcl_Interp *)
21d30 61 41 72 67 5b 69 69 5d 2c 20 22 75 6e 6c 6f 63  aArg[ii], "unloc
21d40 6b 5f 6e 6f 74 69 66 79 22 2c 20 2d 31 2c 20 54  k_notify", -1, T
21d50 43 4c 5f 45 56 41 4c 5f 47 4c 4f 42 41 4c 29 3b  CL_EVAL_GLOBAL);
21d60 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  .  }.}.#endif /*
21d70 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55   SQLITE_ENABLE_U
21d80 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 20 2a 2f 0a  NLOCK_NOTIFY */.
21d90 0a 2f 2a 0a 2a 2a 20 74 63 6c 63 6d 64 3a 20 20  ./*.** tclcmd:  
21da0 73 71 6c 69 74 65 33 5f 75 6e 6c 6f 63 6b 5f 6e  sqlite3_unlock_n
21db0 6f 74 69 66 79 20 64 62 0a 2a 2f 0a 23 69 66 64  otify db.*/.#ifd
21dc0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
21dd0 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 73  _UNLOCK_NOTIFY.s
21de0 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 75  tatic int test_u
21df0 6e 6c 6f 63 6b 5f 6e 6f 74 69 66 79 28 0a 20 20  nlock_notify(.  
21e00 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e  ClientData clien
21e10 74 44 61 74 61 2c 20 2f 2a 20 55 6e 75 73 65 64  tData, /* Unused
21e20 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70   */.  Tcl_Interp
21e30 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
21e40 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
21e50 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
21e60 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
21e70 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20  .  int objc,    
21e80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
21e90 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
21ea0 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43   */.  Tcl_Obj *C
21eb0 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20  ONST objv[]  /* 
21ec0 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74  Command argument
21ed0 73 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65  s */.){.  sqlite
21ee0 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b  3 *db;.  int rc;
21ef0 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20  ..  if( objc!=2 
21f00 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67  ){.    Tcl_Wrong
21f10 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20  NumArgs(interp, 
21f20 31 2c 20 6f 62 6a 76 2c 20 22 44 42 22 29 3b 0a  1, objv, "DB");.
21f30 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
21f40 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  RROR;.  }..  if(
21f50 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e   getDbPointer(in
21f60 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
21f70 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64  ing(objv[1]), &d
21f80 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  b) ){.    return
21f90 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
21fa0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 75    rc = sqlite3_u
21fb0 6e 6c 6f 63 6b 5f 6e 6f 74 69 66 79 28 64 62 2c  nlock_notify(db,
21fc0 20 74 65 73 74 5f 75 6e 6c 6f 63 6b 5f 6e 6f 74   test_unlock_not
21fd0 69 66 79 5f 63 62 2c 20 28 76 6f 69 64 20 2a 29  ify_cb, (void *)
21fe0 69 6e 74 65 72 70 29 3b 0a 20 20 54 63 6c 5f 53  interp);.  Tcl_S
21ff0 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
22000 20 28 63 68 61 72 20 2a 29 74 31 45 72 72 6f 72   (char *)t1Error
22010 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54  Name(rc), TCL_ST
22020 41 54 49 43 29 3b 0a 20 20 72 65 74 75 72 6e 20  ATIC);.  return 
22030 54 43 4c 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66  TCL_OK;.}.#endif
22040 0a 0a 2f 2a 0a 2a 2a 20 74 63 6c 63 6d 64 3a 20  ../*.** tclcmd: 
22050 20 73 71 6c 69 74 65 33 5f 77 61 6c 5f 63 68 65   sqlite3_wal_che
22060 63 6b 70 6f 69 6e 74 20 64 62 20 3f 4e 41 4d 45  ckpoint db ?NAME
22070 3f 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ?.*/.static int 
22080 74 65 73 74 5f 77 61 6c 5f 63 68 65 63 6b 70 6f  test_wal_checkpo
22090 69 6e 74 28 0a 20 20 43 6c 69 65 6e 74 44 61 74  int(.  ClientDat
220a0 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 2f 2a  a clientData, /*
220b0 20 55 6e 75 73 65 64 20 2a 2f 0a 20 20 54 63 6c   Unused */.  Tcl
220c0 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
220d0 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69      /* The TCL i
220e0 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20  nterpreter that 
220f0 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d  invoked this com
22100 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62  mand */.  int ob
22110 6a 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  jc,             
22120 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
22130 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c  guments */.  Tcl
22140 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
22150 5b 5d 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61  []  /* Command a
22160 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20  rguments */.){. 
22170 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 30 3b 0a   char *zDb = 0;.
22180 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
22190 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20   int rc;..  if( 
221a0 6f 62 6a 63 21 3d 33 20 26 26 20 6f 62 6a 63 21  objc!=3 && objc!
221b0 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72  =2 ){.    Tcl_Wr
221c0 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72  ongNumArgs(inter
221d0 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 44 42 20  p, 1, objv, "DB 
221e0 3f 4e 41 4d 45 3f 22 29 3b 0a 20 20 20 20 72 65  ?NAME?");.    re
221f0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
22200 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 44 62    }..  if( getDb
22210 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
22220 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
22230 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 7b 0a  jv[1]), &db) ){.
22240 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
22250 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
22260 6f 62 6a 63 3d 3d 33 20 29 7b 0a 20 20 20 20 7a  objc==3 ){.    z
22270 44 62 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69  Db = Tcl_GetStri
22280 6e 67 28 6f 62 6a 76 5b 32 5d 29 3b 0a 20 20 7d  ng(objv[2]);.  }
22290 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
222a0 77 61 6c 5f 63 68 65 63 6b 70 6f 69 6e 74 28 64  wal_checkpoint(d
222b0 62 2c 20 7a 44 62 29 3b 0a 20 20 54 63 6c 5f 53  b, zDb);.  Tcl_S
222c0 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
222d0 20 28 63 68 61 72 20 2a 29 74 31 45 72 72 6f 72   (char *)t1Error
222e0 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54  Name(rc), TCL_ST
222f0 41 54 49 43 29 3b 0a 20 20 72 65 74 75 72 6e 20  ATIC);.  return 
22300 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a  TCL_OK;.}.../*.*
22310 2a 20 20 20 20 20 74 63 6c 5f 6f 62 6a 70 72 6f  *     tcl_objpro
22320 63 20 43 4f 4d 4d 41 4e 44 4e 41 4d 45 20 41 52  c COMMANDNAME AR
22330 47 53 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 52 75 6e 20  GS....**.** Run 
22340 61 20 54 43 4c 20 63 6f 6d 6d 61 6e 64 20 75 73  a TCL command us
22350 69 6e 67 20 69 74 73 20 6f 62 6a 50 72 6f 63 20  ing its objProc 
22360 69 6e 74 65 72 66 61 63 65 2e 20 20 54 68 72 6f  interface.  Thro
22370 77 20 61 6e 20 65 72 72 6f 72 20 69 66 0a 2a 2a  w an error if.**
22380 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 68 61 73   the command has
22390 20 6e 6f 20 6f 62 6a 50 72 6f 63 20 69 6e 74 65   no objProc inte
223a0 72 66 61 63 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  rface..*/.static
223b0 20 69 6e 74 20 72 75 6e 41 73 4f 62 6a 50 72 6f   int runAsObjPro
223c0 63 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  c(.  void * clie
223d0 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
223e0 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
223f0 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
22400 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
22410 5d 0a 29 7b 0a 20 20 54 63 6c 5f 43 6d 64 49 6e  ].){.  Tcl_CmdIn
22420 66 6f 20 63 6d 64 49 6e 66 6f 3b 0a 20 20 69 66  fo cmdInfo;.  if
22430 28 20 6f 62 6a 63 3c 32 20 29 7b 0a 20 20 20 20  ( objc<2 ){.    
22440 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73  Tcl_WrongNumArgs
22450 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76  (interp, 1, objv
22460 2c 20 22 43 4f 4d 4d 41 4e 44 20 2e 2e 2e 22 29  , "COMMAND ...")
22470 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
22480 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
22490 28 20 21 54 63 6c 5f 47 65 74 43 6f 6d 6d 61 6e  ( !Tcl_GetComman
224a0 64 49 6e 66 6f 28 69 6e 74 65 72 70 2c 20 54 63  dInfo(interp, Tc
224b0 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
224c0 5b 31 5d 29 2c 20 26 63 6d 64 49 6e 66 6f 29 20  [1]), &cmdInfo) 
224d0 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
224e0 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
224f0 22 63 6f 6d 6d 61 6e 64 20 6e 6f 74 20 66 6f 75  "command not fou
22500 6e 64 3a 20 22 2c 0a 20 20 20 20 20 20 20 20 20  nd: ",.         
22510 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28    Tcl_GetString(
22520 6f 62 6a 76 5b 31 5d 29 2c 20 28 63 68 61 72 2a  objv[1]), (char*
22530 29 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  )0);.    return 
22540 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
22550 20 69 66 28 20 63 6d 64 49 6e 66 6f 2e 6f 62 6a   if( cmdInfo.obj
22560 50 72 6f 63 3d 3d 30 20 29 7b 0a 20 20 20 20 54  Proc==0 ){.    T
22570 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
22580 69 6e 74 65 72 70 2c 20 22 63 6f 6d 6d 61 6e 64  interp, "command
22590 20 68 61 73 20 6e 6f 20 6f 62 6a 50 72 6f 63 3a   has no objProc:
225a0 20 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 54   ",.           T
225b0 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
225c0 76 5b 31 5d 29 2c 20 28 63 68 61 72 2a 29 30 29  v[1]), (char*)0)
225d0 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
225e0 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 65  _ERROR;.  }.  re
225f0 74 75 72 6e 20 63 6d 64 49 6e 66 6f 2e 6f 62 6a  turn cmdInfo.obj
22600 50 72 6f 63 28 63 6d 64 49 6e 66 6f 2e 6f 62 6a  Proc(cmdInfo.obj
22610 43 6c 69 65 6e 74 44 61 74 61 2c 20 69 6e 74 65  ClientData, inte
22620 72 70 2c 20 6f 62 6a 63 2d 31 2c 20 6f 62 6a 76  rp, objc-1, objv
22630 2b 31 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 52  +1);.}.../*.** R
22640 65 67 69 73 74 65 72 20 63 6f 6d 6d 61 6e 64 73  egister commands
22650 20 77 69 74 68 20 74 68 65 20 54 43 4c 20 69 6e   with the TCL in
22660 74 65 72 70 72 65 74 65 72 2e 0a 2a 2f 0a 69 6e  terpreter..*/.in
22670 74 20 53 71 6c 69 74 65 74 65 73 74 31 5f 49 6e  t Sqlitetest1_In
22680 69 74 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  it(Tcl_Interp *i
22690 6e 74 65 72 70 29 7b 0a 20 20 65 78 74 65 72 6e  nterp){.  extern
226a0 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 65 61   int sqlite3_sea
226b0 72 63 68 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74  rch_count;.  ext
226c0 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ern int sqlite3_
226d0 66 6f 75 6e 64 5f 63 6f 75 6e 74 3b 0a 20 20 65  found_count;.  e
226e0 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
226f0 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  3_interrupt_coun
22700 74 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20  t;.  extern int 
22710 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 66 69 6c  sqlite3_open_fil
22720 65 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72  e_count;.  exter
22730 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f  n int sqlite3_so
22740 72 74 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65  rt_count;.  exte
22750 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 63  rn int sqlite3_c
22760 75 72 72 65 6e 74 5f 74 69 6d 65 3b 0a 23 69 66  urrent_time;.#if
22770 20 53 51 4c 49 54 45 5f 4f 53 5f 55 4e 49 58 20   SQLITE_OS_UNIX 
22780 26 26 20 64 65 66 69 6e 65 64 28 5f 5f 41 50 50  && defined(__APP
22790 4c 45 5f 5f 29 20 26 26 20 53 51 4c 49 54 45 5f  LE__) && SQLITE_
227a0 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53  ENABLE_LOCKING_S
227b0 54 59 4c 45 0a 20 20 65 78 74 65 72 6e 20 69 6e  TYLE.  extern in
227c0 74 20 73 71 6c 69 74 65 33 5f 68 6f 73 74 69 64  t sqlite3_hostid
227d0 5f 6e 75 6d 3b 0a 23 65 6e 64 69 66 0a 20 20 65  _num;.#endif.  e
227e0 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
227f0 33 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a 65 3b 0a  3_max_blobsize;.
22800 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c    extern int sql
22810 69 74 65 33 42 74 72 65 65 53 68 61 72 65 64 43  ite3BtreeSharedC
22820 61 63 68 65 52 65 70 6f 72 74 28 76 6f 69 64 2a  acheReport(void*
22830 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
22840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22850 20 20 20 20 20 20 20 20 20 20 20 20 54 63 6c 5f              Tcl_
22860 49 6e 74 65 72 70 2a 2c 69 6e 74 2c 54 63 6c 5f  Interp*,int,Tcl_
22870 4f 62 6a 2a 43 4f 4e 53 54 2a 29 3b 0a 20 20 73  Obj*CONST*);.  s
22880 74 61 74 69 63 20 73 74 72 75 63 74 20 7b 0a 20  tatic struct {. 
22890 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
228a0 0a 20 20 20 20 20 54 63 6c 5f 43 6d 64 50 72 6f  .     Tcl_CmdPro
228b0 63 20 2a 78 50 72 6f 63 3b 0a 20 20 7d 20 61 43  c *xProc;.  } aC
228c0 6d 64 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 7b 20  md[] = {.     { 
228d0 22 64 62 5f 65 6e 74 65 72 22 2c 20 20 20 20 20  "db_enter",     
228e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228f0 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 64   (Tcl_CmdProc*)d
22900 62 5f 65 6e 74 65 72 20 20 20 20 20 20 20 20 20  b_enter         
22910 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20        },.     { 
22920 22 64 62 5f 6c 65 61 76 65 22 2c 20 20 20 20 20  "db_leave",     
22930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22940 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 64   (Tcl_CmdProc*)d
22950 62 5f 6c 65 61 76 65 20 20 20 20 20 20 20 20 20  b_leave         
22960 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20        },.     { 
22970 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  "sqlite3_mprintf
22980 5f 69 6e 74 22 2c 20 20 20 20 20 20 20 20 20 20  _int",          
22990 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73   (Tcl_CmdProc*)s
229a0 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69  qlite3_mprintf_i
229b0 6e 74 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20  nt    },.     { 
229c0 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  "sqlite3_mprintf
229d0 5f 69 6e 74 36 34 22 2c 20 20 20 20 20 20 20 20  _int64",        
229e0 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73   (Tcl_CmdProc*)s
229f0 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69  qlite3_mprintf_i
22a00 6e 74 36 34 20 20 7d 2c 0a 20 20 20 20 20 7b 20  nt64  },.     { 
22a10 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  "sqlite3_mprintf
22a20 5f 6c 6f 6e 67 22 2c 20 20 20 20 20 20 20 20 20  _long",         
22a30 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73   (Tcl_CmdProc*)s
22a40 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 6c  qlite3_mprintf_l
22a50 6f 6e 67 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20  ong   },.     { 
22a60 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  "sqlite3_mprintf
22a70 5f 73 74 72 22 2c 20 20 20 20 20 20 20 20 20 20  _str",          
22a80 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73   (Tcl_CmdProc*)s
22a90 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73  qlite3_mprintf_s
22aa0 74 72 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20  tr    },.     { 
22ab0 22 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74  "sqlite3_snprint
22ac0 66 5f 73 74 72 22 2c 20 20 20 20 20 20 20 20 20  f_str",         
22ad0 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73   (Tcl_CmdProc*)s
22ae0 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 5f  qlite3_snprintf_
22af0 73 74 72 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20  str   },.     { 
22b00 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  "sqlite3_mprintf
22b10 5f 73 74 72 6f 6e 6c 79 22 2c 20 20 20 20 20 20  _stronly",      
22b20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73   (Tcl_CmdProc*)s
22b30 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73  qlite3_mprintf_s
22b40 74 72 6f 6e 6c 79 7d 2c 0a 20 20 20 20 20 7b 20  tronly},.     { 
22b50 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  "sqlite3_mprintf
22b60 5f 64 6f 75 62 6c 65 22 2c 20 20 20 20 20 20 20  _double",       
22b70 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73   (Tcl_CmdProc*)s
22b80 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 64  qlite3_mprintf_d
22b90 6f 75 62 6c 65 20 7d 2c 0a 20 20 20 20 20 7b 20  ouble },.     { 
22ba0 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  "sqlite3_mprintf
22bb0 5f 73 63 61 6c 65 64 22 2c 20 20 20 20 20 20 20  _scaled",       
22bc0 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73   (Tcl_CmdProc*)s
22bd0 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73  qlite3_mprintf_s
22be0 63 61 6c 65 64 20 7d 2c 0a 20 20 20 20 20 7b 20  caled },.     { 
22bf0 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  "sqlite3_mprintf
22c00 5f 68 65 78 64 6f 75 62 6c 65 22 2c 20 20 20 28  _hexdouble",   (
22c10 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c  Tcl_CmdProc*)sql
22c20 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 68 65 78  ite3_mprintf_hex
22c30 64 6f 75 62 6c 65 7d 2c 0a 20 20 20 20 20 7b 20  double},.     { 
22c40 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  "sqlite3_mprintf
22c50 5f 7a 5f 74 65 73 74 22 2c 20 20 20 20 20 20 20  _z_test",       
22c60 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74   (Tcl_CmdProc*)t
22c70 65 73 74 5f 6d 70 72 69 6e 74 66 5f 7a 20 20 20  est_mprintf_z   
22c80 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22       },.     { "
22c90 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
22ca0 6e 5f 74 65 73 74 22 2c 20 20 20 20 20 20 20 20  n_test",        
22cb0 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65  (Tcl_CmdProc*)te
22cc0 73 74 5f 6d 70 72 69 6e 74 66 5f 6e 20 20 20 20  st_mprintf_n    
22cd0 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73      },.     { "s
22ce0 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 5f  qlite3_snprintf_
22cf0 69 6e 74 22 2c 20 20 20 20 20 20 20 20 20 20 28  int",          (
22d00 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73  Tcl_CmdProc*)tes
22d10 74 5f 73 6e 70 72 69 6e 74 66 5f 69 6e 74 20 20  t_snprintf_int  
22d20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71     },.     { "sq
22d30 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72  lite3_last_inser
22d40 74 5f 72 6f 77 69 64 22 2c 20 20 20 20 20 28 54  t_rowid",     (T
22d50 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74  cl_CmdProc*)test
22d60 5f 6c 61 73 74 5f 72 6f 77 69 64 20 20 20 20 20  _last_rowid     
22d70 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c    },.     { "sql
22d80 69 74 65 33 5f 65 78 65 63 5f 70 72 69 6e 74 66  ite3_exec_printf
22d90 22 2c 20 20 20 20 20 20 20 20 20 20 20 28 54 63  ",           (Tc
22da0 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f  l_CmdProc*)test_
22db0 65 78 65 63 5f 70 72 69 6e 74 66 20 20 20 20 20  exec_printf     
22dc0 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
22dd0 74 65 33 5f 65 78 65 63 5f 68 65 78 22 2c 20 20  te3_exec_hex",  
22de0 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c              (Tcl
22df0 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 65  _CmdProc*)test_e
22e00 78 65 63 5f 68 65 78 20 20 20 20 20 20 20 20 20  xec_hex         
22e10 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
22e20 65 33 5f 65 78 65 63 22 2c 20 20 20 20 20 20 20  e3_exec",       
22e30 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f             (Tcl_
22e40 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 65 78  CmdProc*)test_ex
22e50 65 63 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  ec             }
22e60 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
22e70 33 5f 65 78 65 63 5f 6e 72 22 2c 20 20 20 20 20  3_exec_nr",     
22e80 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43            (Tcl_C
22e90 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 65 78 65  mdProc*)test_exe
22ea0 63 5f 6e 72 20 20 20 20 20 20 20 20 20 20 7d 2c  c_nr          },
22eb0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
22ec0 4f 4d 49 54 5f 47 45 54 5f 54 41 42 4c 45 0a 20  OMIT_GET_TABLE. 
22ed0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 67      { "sqlite3_g
22ee0 65 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74 66 22  et_table_printf"
22ef0 2c 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50  ,      (Tcl_CmdP
22f00 72 6f 63 2a 29 74 65 73 74 5f 67 65 74 5f 74 61  roc*)test_get_ta
22f10 62 6c 65 5f 70 72 69 6e 74 66 20 7d 2c 0a 23 65  ble_printf },.#e
22f20 6e 64 69 66 0a 20 20 20 20 20 7b 20 22 73 71 6c  ndif.     { "sql
22f30 69 74 65 33 5f 63 6c 6f 73 65 22 2c 20 20 20 20  ite3_close",    
22f40 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63               (Tc
22f50 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74  l_CmdProc*)sqlit
22f60 65 5f 74 65 73 74 5f 63 6c 6f 73 65 20 20 20 20  e_test_close    
22f70 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
22f80 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
22f90 69 6f 6e 22 2c 20 20 20 20 20 20 20 28 54 63 6c  ion",       (Tcl
22fa0 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 63  _CmdProc*)test_c
22fb0 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 20 20  reate_function  
22fc0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
22fd0 65 33 5f 63 72 65 61 74 65 5f 61 67 67 72 65 67  e3_create_aggreg
22fe0 61 74 65 22 2c 20 20 20 20 20 20 28 54 63 6c 5f  ate",      (Tcl_
22ff0 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 63 72  CmdProc*)test_cr
23000 65 61 74 65 5f 61 67 67 72 65 67 61 74 65 20 7d  eate_aggregate }
23010 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
23020 5f 72 65 67 69 73 74 65 72 5f 74 65 73 74 5f 66  _register_test_f
23030 75 6e 63 74 69 6f 6e 22 2c 20 28 54 63 6c 5f 43  unction", (Tcl_C
23040 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 72 65 67  mdProc*)test_reg
23050 69 73 74 65 72 5f 66 75 6e 63 20 20 20 20 7d 2c  ister_func    },
23060 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 5f  .     { "sqlite_
23070 61 62 6f 72 74 22 2c 20 20 20 20 20 20 20 20 20  abort",         
23080 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d           (Tcl_Cm
23090 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 5f 61 62  dProc*)sqlite_ab
230a0 6f 72 74 20 20 20 20 20 20 20 20 20 20 7d 2c 0a  ort          },.
230b0 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 5f 62       { "sqlite_b
230c0 69 6e 64 22 2c 20 20 20 20 20 20 20 20 20 20 20  ind",           
230d0 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64          (Tcl_Cmd
230e0 50 72 6f 63 2a 29 74 65 73 74 5f 62 69 6e 64 20  Proc*)test_bind 
230f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
23100 20 20 20 20 7b 20 22 62 72 65 61 6b 70 6f 69 6e      { "breakpoin
23110 74 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  t",             
23120 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
23130 72 6f 63 2a 29 74 65 73 74 5f 62 72 65 61 6b 70  roc*)test_breakp
23140 6f 69 6e 74 20 20 20 20 20 20 20 7d 2c 0a 20 20  oint       },.  
23150 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6b 65     { "sqlite3_ke
23160 79 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  y",             
23170 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72        (Tcl_CmdPr
23180 6f 63 2a 29 74 65 73 74 5f 6b 65 79 20 20 20 20  oc*)test_key    
23190 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
231a0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 72 65 6b    { "sqlite3_rek
231b0 65 79 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  ey",            
231c0 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f       (Tcl_CmdPro
231d0 63 2a 29 74 65 73 74 5f 72 65 6b 65 79 20 20 20  c*)test_rekey   
231e0 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20           },.    
231f0 20 7b 20 22 73 71 6c 69 74 65 5f 73 65 74 5f 6d   { "sqlite_set_m
23200 61 67 69 63 22 2c 20 20 20 20 20 20 20 20 20 20  agic",          
23210 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63      (Tcl_CmdProc
23220 2a 29 73 71 6c 69 74 65 5f 73 65 74 5f 6d 61 67  *)sqlite_set_mag
23230 69 63 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20  ic      },.     
23240 7b 20 22 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  { "sqlite3_inter
23250 72 75 70 74 22 2c 20 20 20 20 20 20 20 20 20 20  rupt",          
23260 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
23270 29 74 65 73 74 5f 69 6e 74 65 72 72 75 70 74 20  )test_interrupt 
23280 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b         },.     {
23290 20 22 73 71 6c 69 74 65 5f 64 65 6c 65 74 65 5f   "sqlite_delete_
232a0 66 75 6e 63 74 69 6f 6e 22 2c 20 20 20 20 20 20  function",      
232b0 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29    (Tcl_CmdProc*)
232c0 64 65 6c 65 74 65 5f 66 75 6e 63 74 69 6f 6e 20  delete_function 
232d0 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20        },.     { 
232e0 22 73 71 6c 69 74 65 5f 64 65 6c 65 74 65 5f 63  "sqlite_delete_c
232f0 6f 6c 6c 61 74 69 6f 6e 22 2c 20 20 20 20 20 20  ollation",      
23300 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 64   (Tcl_CmdProc*)d
23310 65 6c 65 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 20  elete_collation 
23320 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22       },.     { "
23330 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f  sqlite3_get_auto
23340 63 6f 6d 6d 69 74 22 2c 20 20 20 20 20 20 20 20  commit",        
23350 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 67 65  (Tcl_CmdProc*)ge
23360 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 20 20 20  t_autocommit    
23370 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73      },.     { "s
23380 71 6c 69 74 65 33 5f 73 74 61 63 6b 5f 75 73 65  qlite3_stack_use
23390 64 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 28  d",            (
233a0 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73  Tcl_CmdProc*)tes
233b0 74 5f 73 74 61 63 6b 5f 75 73 65 64 20 20 20 20  t_stack_used    
233c0 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71     },.     { "sq
233d0 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f  lite3_busy_timeo
233e0 75 74 22 2c 20 20 20 20 20 20 20 20 20 20 28 54  ut",          (T
233f0 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74  cl_CmdProc*)test
23400 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 20 20 20  _busy_timeout   
23410 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 70 72 69    },.     { "pri
23420 6e 74 66 22 2c 20 20 20 20 20 20 20 20 20 20 20  ntf",           
23430 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63               (Tc
23440 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f  l_CmdProc*)test_
23450 70 72 69 6e 74 66 20 20 20 20 20 20 20 20 20 20  printf          
23460 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
23470 74 65 33 49 6f 54 72 61 63 65 22 2c 20 20 20 20  te3IoTrace",    
23480 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43            (Tcl_C
23490 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 69 6f 5f  mdProc*)test_io_
234a0 74 72 61 63 65 20 20 20 20 20 20 20 20 20 7d 2c  trace         },
234b0 0a 20 20 7d 3b 0a 20 20 73 74 61 74 69 63 20 73  .  };.  static s
234c0 74 72 75 63 74 20 7b 0a 20 20 20 20 20 63 68 61  truct {.     cha
234d0 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20 20 54  r *zName;.     T
234e0 63 6c 5f 4f 62 6a 43 6d 64 50 72 6f 63 20 2a 78  cl_ObjCmdProc *x
234f0 50 72 6f 63 3b 0a 20 20 20 20 20 76 6f 69 64 20  Proc;.     void 
23500 2a 63 6c 69 65 6e 74 44 61 74 61 3b 0a 20 20 7d  *clientData;.  }
23510 20 61 4f 62 6a 43 6d 64 5b 5d 20 3d 20 7b 0a 20   aObjCmd[] = {. 
23520 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63      { "sqlite3_c
23530 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65  onnection_pointe
23540 72 22 2c 20 20 20 20 67 65 74 5f 73 71 6c 69 74  r",    get_sqlit
23550 65 5f 70 6f 69 6e 74 65 72 2c 20 30 20 7d 2c 0a  e_pointer, 0 },.
23560 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
23570 62 69 6e 64 5f 69 6e 74 22 2c 20 20 20 20 20 20  bind_int",      
23580 20 20 20 20 20 20 20 20 74 65 73 74 5f 62 69 6e          test_bin
23590 64 5f 69 6e 74 2c 20 20 20 20 20 20 30 20 7d 2c  d_int,      0 },
235a0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
235b0 5f 62 69 6e 64 5f 7a 65 72 6f 62 6c 6f 62 22 2c  _bind_zeroblob",
235c0 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 62 69           test_bi
235d0 6e 64 5f 7a 65 72 6f 62 6c 6f 62 2c 20 30 20 7d  nd_zeroblob, 0 }
235e0 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
235f0 33 5f 62 69 6e 64 5f 69 6e 74 36 34 22 2c 20 20  3_bind_int64",  
23600 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 62            test_b
23610 69 6e 64 5f 69 6e 74 36 34 2c 20 20 20 20 30 20  ind_int64,    0 
23620 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
23630 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 22 2c  e3_bind_double",
23640 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f             test_
23650 62 69 6e 64 5f 64 6f 75 62 6c 65 2c 20 20 20 30  bind_double,   0
23660 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
23670 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 22 2c 20  te3_bind_null", 
23680 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
23690 5f 62 69 6e 64 5f 6e 75 6c 6c 20 20 20 20 20 2c  _bind_null     ,
236a0 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
236b0 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 22 2c  ite3_bind_text",
236c0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73               tes
236d0 74 5f 62 69 6e 64 5f 74 65 78 74 20 20 20 20 20  t_bind_text     
236e0 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  ,0 },.     { "sq
236f0 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 31  lite3_bind_text1
23700 36 22 2c 20 20 20 20 20 20 20 20 20 20 20 74 65  6",           te
23710 73 74 5f 62 69 6e 64 5f 74 65 78 74 31 36 20 20  st_bind_text16  
23720 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73   ,0 },.     { "s
23730 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62  qlite3_bind_blob
23740 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 74  ",             t
23750 65 73 74 5f 62 69 6e 64 5f 62 6c 6f 62 20 20 20  est_bind_blob   
23760 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22    ,0 },.     { "
23770 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
23780 61 6d 65 74 65 72 5f 63 6f 75 6e 74 22 2c 20 20  ameter_count",  
23790 74 65 73 74 5f 62 69 6e 64 5f 70 61 72 61 6d 65  test_bind_parame
237a0 74 65 72 5f 63 6f 75 6e 74 2c 20 30 7d 2c 0a 20  ter_count, 0},. 
237b0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62      { "sqlite3_b
237c0 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61  ind_parameter_na
237d0 6d 65 22 2c 20 20 20 74 65 73 74 5f 62 69 6e 64  me",   test_bind
237e0 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 2c  _parameter_name,
237f0 20 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71    0},.     { "sq
23800 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
23810 65 74 65 72 5f 69 6e 64 65 78 22 2c 20 20 74 65  eter_index",  te
23820 73 74 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  st_bind_paramete
23830 72 5f 69 6e 64 65 78 2c 20 30 7d 2c 0a 20 20 20  r_index, 0},.   
23840 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6c 65    { "sqlite3_cle
23850 61 72 5f 62 69 6e 64 69 6e 67 73 22 2c 20 20 20  ar_bindings",   
23860 20 20 20 20 20 74 65 73 74 5f 63 6c 65 61 72 5f       test_clear_
23870 62 69 6e 64 69 6e 67 73 2c 20 30 7d 2c 0a 20 20  bindings, 0},.  
23880 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 73 6c     { "sqlite3_sl
23890 65 65 70 22 2c 20 20 20 20 20 20 20 20 20 20 20  eep",           
238a0 20 20 20 20 20 20 74 65 73 74 5f 73 6c 65 65 70        test_sleep
238b0 2c 20 20 20 20 20 20 20 20 20 20 30 7d 2c 0a 20  ,          0},. 
238c0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 65      { "sqlite3_e
238d0 72 72 63 6f 64 65 22 2c 20 20 20 20 20 20 20 20  rrcode",        
238e0 20 20 20 20 20 20 20 74 65 73 74 5f 65 72 72 63         test_errc
238f0 6f 64 65 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a  ode       ,0 },.
23900 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
23910 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65  extended_errcode
23920 22 2c 20 20 20 20 20 20 74 65 73 74 5f 65 78 5f  ",      test_ex_
23930 65 72 72 63 6f 64 65 20 20 20 20 2c 30 20 7d 2c  errcode    ,0 },
23940 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
23950 5f 65 72 72 6d 73 67 22 2c 20 20 20 20 20 20 20  _errmsg",       
23960 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 65 72           test_er
23970 72 6d 73 67 20 20 20 20 20 20 20 20 2c 30 20 7d  rmsg        ,0 }
23980 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
23990 33 5f 65 72 72 6d 73 67 31 36 22 2c 20 20 20 20  3_errmsg16",    
239a0 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 65            test_e
239b0 72 72 6d 73 67 31 36 20 20 20 20 20 20 2c 30 20  rrmsg16      ,0 
239c0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
239d0 65 33 5f 6f 70 65 6e 22 2c 20 20 20 20 20 20 20  e3_open",       
239e0 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f             test_
239f0 6f 70 65 6e 20 20 20 20 20 20 20 20 20 20 2c 30  open          ,0
23a00 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
23a10 74 65 33 5f 6f 70 65 6e 31 36 22 2c 20 20 20 20  te3_open16",    
23a20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
23a30 5f 6f 70 65 6e 31 36 20 20 20 20 20 20 20 20 2c  _open16        ,
23a40 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
23a50 69 74 65 33 5f 63 6f 6d 70 6c 65 74 65 31 36 22  ite3_complete16"
23a60 2c 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73  ,            tes
23a70 74 5f 63 6f 6d 70 6c 65 74 65 31 36 20 20 20 20  t_complete16    
23a80 2c 30 20 7d 2c 0a 0a 20 20 20 20 20 7b 20 22 73  ,0 },..     { "s
23a90 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 22 2c  qlite3_prepare",
23aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
23ab0 65 73 74 5f 70 72 65 70 61 72 65 20 20 20 20 20  est_prepare     
23ac0 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22    ,0 },.     { "
23ad0 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31  sqlite3_prepare1
23ae0 36 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  6",             
23af0 74 65 73 74 5f 70 72 65 70 61 72 65 31 36 20 20  test_prepare16  
23b00 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20     ,0 },.     { 
23b10 22 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  "sqlite3_prepare
23b20 5f 76 32 22 2c 20 20 20 20 20 20 20 20 20 20 20  _v2",           
23b30 20 74 65 73 74 5f 70 72 65 70 61 72 65 5f 76 32   test_prepare_v2
23b40 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b      ,0 },.     {
23b50 20 22 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   "sqlite3_prepar
23b60 65 5f 74 6b 74 33 31 33 34 22 2c 20 20 20 20 20  e_tkt3134",     
23b70 20 20 74 65 73 74 5f 70 72 65 70 61 72 65 5f 74    test_prepare_t
23b80 6b 74 33 31 33 34 2c 20 30 7d 2c 0a 20 20 20 20  kt3134, 0},.    
23b90 20 7b 20 22 73 71 6c 69 74 65 33 5f 70 72 65 70   { "sqlite3_prep
23ba0 61 72 65 31 36 5f 76 32 22 2c 20 20 20 20 20 20  are16_v2",      
23bb0 20 20 20 20 74 65 73 74 5f 70 72 65 70 61 72 65      test_prepare
23bc0 31 36 5f 76 32 20 20 2c 30 20 7d 2c 0a 20 20 20  16_v2  ,0 },.   
23bd0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 66 69 6e    { "sqlite3_fin
23be0 61 6c 69 7a 65 22 2c 20 20 20 20 20 20 20 20 20  alize",         
23bf0 20 20 20 20 20 74 65 73 74 5f 66 69 6e 61 6c 69       test_finali
23c00 7a 65 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20  ze      ,0 },.  
23c10 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 73 74     { "sqlite3_st
23c20 6d 74 5f 73 74 61 74 75 73 22 2c 20 20 20 20 20  mt_status",     
23c30 20 20 20 20 20 20 74 65 73 74 5f 73 74 6d 74 5f        test_stmt_
23c40 73 74 61 74 75 73 20 20 20 2c 30 20 7d 2c 0a 20  status   ,0 },. 
23c50 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 72      { "sqlite3_r
23c60 65 73 65 74 22 2c 20 20 20 20 20 20 20 20 20 20  eset",          
23c70 20 20 20 20 20 20 20 74 65 73 74 5f 72 65 73 65         test_rese
23c80 74 20 20 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a  t         ,0 },.
23c90 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
23ca0 65 78 70 69 72 65 64 22 2c 20 20 20 20 20 20 20  expired",       
23cb0 20 20 20 20 20 20 20 20 74 65 73 74 5f 65 78 70          test_exp
23cc0 69 72 65 64 20 20 20 20 20 20 20 2c 30 20 7d 2c  ired       ,0 },
23cd0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
23ce0 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e 64 69 6e  _transfer_bindin
23cf0 67 73 22 2c 20 20 20 20 20 74 65 73 74 5f 74 72  gs",     test_tr
23d00 61 6e 73 66 65 72 5f 62 69 6e 64 20 2c 30 20 7d  ansfer_bind ,0 }
23d10 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
23d20 33 5f 63 68 61 6e 67 65 73 22 2c 20 20 20 20 20  3_changes",     
23d30 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 63            test_c
23d40 68 61 6e 67 65 73 20 20 20 20 20 20 20 2c 30 20  hanges       ,0 
23d50 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
23d60 65 33 5f 73 74 65 70 22 2c 20 20 20 20 20 20 20  e3_step",       
23d70 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f             test_
23d80 73 74 65 70 20 20 20 20 20 20 20 20 20 20 2c 30  step          ,0
23d90 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
23da0 74 65 33 5f 73 71 6c 22 2c 20 20 20 20 20 20 20  te3_sql",       
23db0 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
23dc0 5f 73 71 6c 20 20 20 20 20 20 20 20 20 20 20 2c  _sql           ,
23dd0 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
23de0 69 74 65 33 5f 6e 65 78 74 5f 73 74 6d 74 22 2c  ite3_next_stmt",
23df0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73               tes
23e00 74 5f 6e 65 78 74 5f 73 74 6d 74 20 20 20 20 20  t_next_stmt     
23e10 2c 30 20 7d 2c 0a 0a 20 20 20 20 20 7b 20 22 73  ,0 },..     { "s
23e20 71 6c 69 74 65 33 5f 72 65 6c 65 61 73 65 5f 6d  qlite3_release_m
23e30 65 6d 6f 72 79 22 2c 20 20 20 20 20 20 20 20 74  emory",        t
23e40 65 73 74 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f  est_release_memo
23e50 72 79 2c 20 20 20 20 20 30 7d 2c 0a 20 20 20 20  ry,     0},.    
23e60 20 7b 20 22 73 71 6c 69 74 65 33 5f 73 6f 66 74   { "sqlite3_soft
23e70 5f 68 65 61 70 5f 6c 69 6d 69 74 22 2c 20 20 20  _heap_limit",   
23e80 20 20 20 20 74 65 73 74 5f 73 6f 66 74 5f 68 65      test_soft_he
23e90 61 70 5f 6c 69 6d 69 74 2c 20 20 20 20 30 7d 2c  ap_limit,    0},
23ea0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
23eb0 5f 74 68 72 65 61 64 5f 63 6c 65 61 6e 75 70 22  _thread_cleanup"
23ec0 2c 20 20 20 20 20 20 20 20 74 65 73 74 5f 74 68  ,        test_th
23ed0 72 65 61 64 5f 63 6c 65 61 6e 75 70 2c 20 20 20  read_cleanup,   
23ee0 20 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71    0},.     { "sq
23ef0 6c 69 74 65 33 5f 70 61 67 65 72 5f 72 65 66 63  lite3_pager_refc
23f00 6f 75 6e 74 73 22 2c 20 20 20 20 20 20 20 74 65  ounts",       te
23f10 73 74 5f 70 61 67 65 72 5f 72 65 66 63 6f 75 6e  st_pager_refcoun
23f20 74 73 2c 20 20 20 20 30 7d 2c 0a 0a 20 20 20 20  ts,    0},..    
23f30 20 7b 20 22 73 71 6c 69 74 65 33 5f 6c 6f 61 64   { "sqlite3_load
23f40 5f 65 78 74 65 6e 73 69 6f 6e 22 2c 20 20 20 20  _extension",    
23f50 20 20 20 20 74 65 73 74 5f 6c 6f 61 64 5f 65 78      test_load_ex
23f60 74 65 6e 73 69 6f 6e 2c 20 20 20 20 20 30 7d 2c  tension,     0},
23f70 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
23f80 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65 78 74  _enable_load_ext
23f90 65 6e 73 69 6f 6e 22 2c 20 74 65 73 74 5f 65 6e  ension", test_en
23fa0 61 62 6c 65 5f 6c 6f 61 64 2c 20 20 20 20 20 20  able_load,      
23fb0 20 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71    0},.     { "sq
23fc0 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 72  lite3_extended_r
23fd0 65 73 75 6c 74 5f 63 6f 64 65 73 22 2c 20 74 65  esult_codes", te
23fe0 73 74 5f 65 78 74 65 6e 64 65 64 5f 72 65 73 75  st_extended_resu
23ff0 6c 74 5f 63 6f 64 65 73 2c 20 30 7d 2c 0a 20 20  lt_codes, 0},.  
24000 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6c 69     { "sqlite3_li
24010 6d 69 74 22 2c 20 20 20 20 20 20 20 20 20 20 20  mit",           
24020 20 20 20 20 20 20 74 65 73 74 5f 6c 69 6d 69 74        test_limit
24030 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
24040 20 20 30 7d 2c 0a 0a 20 20 20 20 20 7b 20 22 73    0},..     { "s
24050 61 76 65 5f 70 72 6e 67 5f 73 74 61 74 65 22 2c  ave_prng_state",
24060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
24070 61 76 65 5f 70 72 6e 67 5f 73 74 61 74 65 2c 20  ave_prng_state, 
24080 20 20 20 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22     0 },.     { "
24090 72 65 73 74 6f 72 65 5f 70 72 6e 67 5f 73 74 61  restore_prng_sta
240a0 74 65 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  te",            
240b0 72 65 73 74 6f 72 65 5f 70 72 6e 67 5f 73 74 61  restore_prng_sta
240c0 74 65 2c 20 30 20 7d 2c 0a 20 20 20 20 20 7b 20  te, 0 },.     { 
240d0 22 72 65 73 65 74 5f 70 72 6e 67 5f 73 74 61 74  "reset_prng_stat
240e0 65 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  e",             
240f0 20 72 65 73 65 74 5f 70 72 6e 67 5f 73 74 61 74   reset_prng_stat
24100 65 2c 20 20 20 30 20 7d 2c 0a 20 20 20 20 20 7b  e,   0 },.     {
24110 20 22 74 63 6c 5f 6f 62 6a 70 72 6f 63 22 2c 20   "tcl_objproc", 
24120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24130 20 20 72 75 6e 41 73 4f 62 6a 50 72 6f 63 2c 20    runAsObjProc, 
24140 20 20 20 20 20 20 30 20 7d 2c 0a 0a 20 20 20 20        0 },..    
24150 20 2f 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75   /* sqlite3_colu
24160 6d 6e 5f 2a 28 29 20 41 50 49 20 2a 2f 0a 20 20  mn_*() API */.  
24170 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f     { "sqlite3_co
24180 6c 75 6d 6e 5f 63 6f 75 6e 74 22 2c 20 20 20 20  lumn_count",    
24190 20 20 20 20 20 20 74 65 73 74 5f 63 6f 6c 75 6d        test_colum
241a0 6e 5f 63 6f 75 6e 74 20 20 2c 30 20 7d 2c 0a 20  n_count  ,0 },. 
241b0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 64      { "sqlite3_d
241c0 61 74 61 5f 63 6f 75 6e 74 22 2c 20 20 20 20 20  ata_count",     
241d0 20 20 20 20 20 20 20 74 65 73 74 5f 64 61 74 61         test_data
241e0 5f 63 6f 75 6e 74 20 20 20 20 2c 30 20 7d 2c 0a  _count    ,0 },.
241f0 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
24200 63 6f 6c 75 6d 6e 5f 74 79 70 65 22 2c 20 20 20  column_type",   
24210 20 20 20 20 20 20 20 20 74 65 73 74 5f 63 6f 6c          test_col
24220 75 6d 6e 5f 74 79 70 65 20 20 20 2c 30 20 7d 2c  umn_type   ,0 },
24230 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
24240 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 22 2c 20 20  _column_blob",  
24250 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 63 6f           test_co
24260 6c 75 6d 6e 5f 62 6c 6f 62 20 20 20 2c 30 20 7d  lumn_blob   ,0 }
24270 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
24280 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 22  3_column_double"
24290 2c 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 63  ,         test_c
242a0 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 20 2c 30 20  olumn_double ,0 
242b0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
242c0 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 22  e3_column_int64"
242d0 2c 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f  ,          test_
242e0 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 20 20 2c 30  column_int64  ,0
242f0 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
24300 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 22  te3_column_text"
24310 2c 20 20 20 74 65 73 74 5f 73 74 6d 74 5f 75 74  ,   test_stmt_ut
24320 66 38 2c 20 20 28 76 6f 69 64 2a 29 73 71 6c 69  f8,  (void*)sqli
24330 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 20  te3_column_text 
24340 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
24350 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 22 2c  e3_column_name",
24360 20 20 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66     test_stmt_utf
24370 38 2c 20 20 28 76 6f 69 64 2a 29 73 71 6c 69 74  8,  (void*)sqlit
24380 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 20 7d  e3_column_name }
24390 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
243a0 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 22 2c 20 20  3_column_int",  
243b0 20 20 74 65 73 74 5f 73 74 6d 74 5f 69 6e 74 2c    test_stmt_int,
243c0 20 20 20 28 76 6f 69 64 2a 29 73 71 6c 69 74 65     (void*)sqlite
243d0 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 20 7d 2c  3_column_int  },
243e0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
243f0 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 22 2c 20  _column_bytes", 
24400 20 74 65 73 74 5f 73 74 6d 74 5f 69 6e 74 2c 20   test_stmt_int, 
24410 20 20 28 76 6f 69 64 2a 29 73 71 6c 69 74 65 33    (void*)sqlite3
24420 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 7d 2c 0a  _column_bytes},.
24430 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
24440 4d 49 54 5f 44 45 43 4c 54 59 50 45 0a 20 20 20  MIT_DECLTYPE.   
24450 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c    { "sqlite3_col
24460 75 6d 6e 5f 64 65 63 6c 74 79 70 65 22 2c 74 65  umn_decltype",te
24470 73 74 5f 73 74 6d 74 5f 75 74 66 38 2c 28 76 6f  st_stmt_utf8,(vo
24480 69 64 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75  id*)sqlite3_colu
24490 6d 6e 5f 64 65 63 6c 74 79 70 65 7d 2c 0a 23 65  mn_decltype},.#e
244a0 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
244b0 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e  TE_ENABLE_COLUMN
244c0 5f 4d 45 54 41 44 41 54 41 0a 7b 20 22 73 71 6c  _METADATA.{ "sql
244d0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61  ite3_column_data
244e0 62 61 73 65 5f 6e 61 6d 65 22 2c 74 65 73 74 5f  base_name",test_
244f0 73 74 6d 74 5f 75 74 66 38 2c 28 76 6f 69 64 2a  stmt_utf8,(void*
24500 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  )sqlite3_column_
24510 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 7d 2c 0a  database_name},.
24520 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  { "sqlite3_colum
24530 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 22 2c 74 65  n_table_name",te
24540 73 74 5f 73 74 6d 74 5f 75 74 66 38 2c 28 76 6f  st_stmt_utf8,(vo
24550 69 64 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75  id*)sqlite3_colu
24560 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 7d 2c 0a  mn_table_name},.
24570 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  { "sqlite3_colum
24580 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 22 2c 74  n_origin_name",t
24590 65 73 74 5f 73 74 6d 74 5f 75 74 66 38 2c 28 76  est_stmt_utf8,(v
245a0 6f 69 64 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c  oid*)sqlite3_col
245b0 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 7d  umn_origin_name}
245c0 2c 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ,.#endif..#ifnde
245d0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
245e0 46 31 36 0a 20 20 20 20 20 7b 20 22 73 71 6c 69  F16.     { "sqli
245f0 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73  te3_column_bytes
24600 31 36 22 2c 20 74 65 73 74 5f 73 74 6d 74 5f 69  16", test_stmt_i
24610 6e 74 2c 20 28 76 6f 69 64 2a 29 73 71 6c 69 74  nt, (void*)sqlit
24620 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 31  e3_column_bytes1
24630 36 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  6 },.     { "sql
24640 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
24650 31 36 22 2c 20 20 74 65 73 74 5f 73 74 6d 74 5f  16",  test_stmt_
24660 75 74 66 31 36 2c 20 28 76 6f 69 64 2a 29 73 71  utf16, (void*)sq
24670 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
24680 74 31 36 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  t16},.     { "sq
24690 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  lite3_column_nam
246a0 65 31 36 22 2c 20 20 74 65 73 74 5f 73 74 6d 74  e16",  test_stmt
246b0 5f 75 74 66 31 36 2c 20 28 76 6f 69 64 2a 29 73  _utf16, (void*)s
246c0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
246d0 6d 65 31 36 7d 2c 0a 20 20 20 20 20 7b 20 22 61  me16},.     { "a
246e0 64 64 5f 61 6c 69 67 6e 6d 65 6e 74 5f 74 65 73  dd_alignment_tes
246f0 74 5f 63 6f 6c 6c 61 74 69 6f 6e 73 22 2c 20 61  t_collations", a
24700 64 64 5f 61 6c 69 67 6e 6d 65 6e 74 5f 74 65 73  dd_alignment_tes
24710 74 5f 63 6f 6c 6c 61 74 69 6f 6e 73 2c 20 30 20  t_collations, 0 
24720 20 20 20 20 20 7d 2c 0a 23 69 66 6e 64 65 66 20       },.#ifndef 
24730 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 43 4c  SQLITE_OMIT_DECL
24740 54 59 50 45 0a 20 20 20 20 20 7b 20 22 73 71 6c  TYPE.     { "sql
24750 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c  ite3_column_decl
24760 74 79 70 65 31 36 22 2c 74 65 73 74 5f 73 74 6d  type16",test_stm
24770 74 5f 75 74 66 31 36 2c 28 76 6f 69 64 2a 29 73  t_utf16,(void*)s
24780 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65  qlite3_column_de
24790 63 6c 74 79 70 65 31 36 7d 2c 0a 23 65 6e 64 69  cltype16},.#endi
247a0 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
247b0 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45  ENABLE_COLUMN_ME
247c0 54 41 44 41 54 41 0a 7b 22 73 71 6c 69 74 65 33  TADATA.{"sqlite3
247d0 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65  _column_database
247e0 5f 6e 61 6d 65 31 36 22 2c 0a 20 20 74 65 73 74  _name16",.  test
247f0 5f 73 74 6d 74 5f 75 74 66 31 36 2c 20 73 71 6c  _stmt_utf16, sql
24800 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61  ite3_column_data
24810 62 61 73 65 5f 6e 61 6d 65 31 36 7d 2c 0a 7b 22  base_name16},.{"
24820 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
24830 61 62 6c 65 5f 6e 61 6d 65 31 36 22 2c 20 74 65  able_name16", te
24840 73 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c 20 28  st_stmt_utf16, (
24850 76 6f 69 64 2a 29 73 71 6c 69 74 65 33 5f 63 6f  void*)sqlite3_co
24860 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 31  lumn_table_name1
24870 36 7d 2c 0a 7b 22 73 71 6c 69 74 65 33 5f 63 6f  6},.{"sqlite3_co
24880 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65  lumn_origin_name
24890 31 36 22 2c 20 74 65 73 74 5f 73 74 6d 74 5f 75  16", test_stmt_u
248a0 74 66 31 36 2c 20 28 76 6f 69 64 2a 29 73 71 6c  tf16, (void*)sql
248b0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67  ite3_column_orig
248c0 69 6e 5f 6e 61 6d 65 31 36 7d 2c 0a 23 65 6e 64  in_name16},.#end
248d0 69 66 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 7b  if.#endif.     {
248e0 20 22 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65   "sqlite3_create
248f0 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 76 32 22 2c 20  _collation_v2", 
24900 74 65 73 74 5f 63 72 65 61 74 65 5f 63 6f 6c 6c  test_create_coll
24910 61 74 69 6f 6e 5f 76 32 2c 20 30 20 7d 2c 0a 20  ation_v2, 0 },. 
24920 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 67      { "sqlite3_g
24930 6c 6f 62 61 6c 5f 72 65 63 6f 76 65 72 22 2c 20  lobal_recover", 
24940 20 20 20 20 74 65 73 74 5f 67 6c 6f 62 61 6c 5f      test_global_
24950 72 65 63 6f 76 65 72 2c 20 30 20 20 20 7d 2c 0a  recover, 0   },.
24960 20 20 20 20 20 7b 20 22 77 6f 72 6b 69 6e 67 5f       { "working_
24970 36 34 62 69 74 5f 69 6e 74 22 2c 20 20 20 20 20  64bit_int",     
24980 20 20 20 20 20 77 6f 72 6b 69 6e 67 5f 36 34 62       working_64b
24990 69 74 5f 69 6e 74 2c 20 20 20 30 20 20 20 7d 2c  it_int,   0   },
249a0 0a 20 20 20 20 20 7b 20 22 76 66 73 5f 75 6e 6c  .     { "vfs_unl
249b0 69 6e 6b 5f 74 65 73 74 22 2c 20 20 20 20 20 20  ink_test",      
249c0 20 20 20 20 20 20 76 66 73 5f 75 6e 6c 69 6e 6b        vfs_unlink
249d0 5f 74 65 73 74 2c 20 20 20 20 20 30 20 20 20 7d  _test,     0   }
249e0 2c 0a 20 20 20 20 20 7b 20 22 76 66 73 5f 69 6e  ,.     { "vfs_in
249f0 69 74 66 61 69 6c 5f 74 65 73 74 22 2c 20 20 20  itfail_test",   
24a00 20 20 20 20 20 20 20 76 66 73 5f 69 6e 69 74 66         vfs_initf
24a10 61 69 6c 5f 74 65 73 74 2c 20 20 20 30 20 20 20  ail_test,   0   
24a20 7d 2c 0a 20 20 20 20 20 7b 20 22 76 66 73 5f 75  },.     { "vfs_u
24a30 6e 72 65 67 69 73 74 65 72 5f 61 6c 6c 22 2c 20  nregister_all", 
24a40 20 20 20 20 20 20 20 20 76 66 73 5f 75 6e 72 65          vfs_unre
24a50 67 69 73 74 65 72 5f 61 6c 6c 2c 20 20 30 20 20  gister_all,  0  
24a60 20 7d 2c 0a 20 20 20 20 20 7b 20 22 76 66 73 5f   },.     { "vfs_
24a70 72 65 72 65 67 69 73 74 65 72 5f 61 6c 6c 22 2c  reregister_all",
24a80 20 20 20 20 20 20 20 20 20 76 66 73 5f 72 65 72           vfs_rer
24a90 65 67 69 73 74 65 72 5f 61 6c 6c 2c 20 20 30 20  egister_all,  0 
24aa0 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 66 69 6c    },.     { "fil
24ab0 65 5f 63 6f 6e 74 72 6f 6c 5f 74 65 73 74 22 2c  e_control_test",
24ac0 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 5f 63            file_c
24ad0 6f 6e 74 72 6f 6c 5f 74 65 73 74 2c 20 20 20 30  ontrol_test,   0
24ae0 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 66 69     },.     { "fi
24af0 6c 65 5f 63 6f 6e 74 72 6f 6c 5f 6c 61 73 74 65  le_control_laste
24b00 72 72 6e 6f 5f 74 65 73 74 22 2c 20 66 69 6c 65  rrno_test", file
24b10 5f 63 6f 6e 74 72 6f 6c 5f 6c 61 73 74 65 72 72  _control_lasterr
24b20 6e 6f 5f 74 65 73 74 2c 20 20 30 20 20 20 7d 2c  no_test,  0   },
24b30 0a 20 20 20 20 20 7b 20 22 66 69 6c 65 5f 63 6f  .     { "file_co
24b40 6e 74 72 6f 6c 5f 6c 6f 63 6b 70 72 6f 78 79 5f  ntrol_lockproxy_
24b50 74 65 73 74 22 2c 20 66 69 6c 65 5f 63 6f 6e 74  test", file_cont
24b60 72 6f 6c 5f 6c 6f 63 6b 70 72 6f 78 79 5f 74 65  rol_lockproxy_te
24b70 73 74 2c 20 20 30 20 20 20 7d 2c 0a 20 20 20 20  st,  0   },.    
24b80 20 7b 20 22 73 71 6c 69 74 65 33 5f 76 66 73 5f   { "sqlite3_vfs_
24b90 6c 69 73 74 22 2c 20 20 20 20 20 20 20 20 20 20  list",          
24ba0 20 76 66 73 5f 6c 69 73 74 2c 20 20 20 20 20 30   vfs_list,     0
24bb0 20 20 20 7d 2c 0a 0a 20 20 20 20 20 2f 2a 20 46     },..     /* F
24bc0 75 6e 63 74 69 6f 6e 73 20 66 72 6f 6d 20 6f 73  unctions from os
24bd0 2e 68 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  .h */.#ifndef SQ
24be0 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
24bf0 20 20 20 20 20 7b 20 22 61 64 64 5f 74 65 73 74       { "add_test
24c00 5f 63 6f 6c 6c 61 74 65 22 2c 20 20 20 20 20 20  _collate",      
24c10 20 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 2c 20    test_collate, 
24c20 30 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a  0            },.
24c30 20 20 20 20 20 7b 20 22 61 64 64 5f 74 65 73 74       { "add_test
24c40 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64 22  _collate_needed"
24c50 2c 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e  , test_collate_n
24c60 65 65 64 65 64 2c 20 30 20 20 20 20 20 7d 2c 0a  eeded, 0     },.
24c70 20 20 20 20 20 7b 20 22 61 64 64 5f 74 65 73 74       { "add_test
24c80 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 20 20 20 20  _function",     
24c90 20 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 2c    test_function,
24ca0 20 30 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a   0           },.
24cb0 23 65 6e 64 69 66 0a 20 20 20 20 20 7b 20 22 73  #endif.     { "s
24cc0 71 6c 69 74 65 33 5f 74 65 73 74 5f 65 72 72 73  qlite3_test_errs
24cd0 74 72 22 2c 20 20 20 20 20 74 65 73 74 5f 65 72  tr",     test_er
24ce0 72 73 74 72 2c 20 30 20 20 20 20 20 20 20 20 20  rstr, 0         
24cf0 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 74      },.     { "t
24d00 63 6c 5f 76 61 72 69 61 62 6c 65 5f 74 79 70 65  cl_variable_type
24d10 22 2c 20 20 20 20 20 20 20 74 63 6c 5f 76 61 72  ",       tcl_var
24d20 69 61 62 6c 65 5f 74 79 70 65 2c 20 30 20 20 20  iable_type, 0   
24d30 20 20 20 20 7d 2c 0a 23 69 66 6e 64 65 66 20 53      },.#ifndef S
24d40 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
24d50 44 5f 43 41 43 48 45 0a 20 20 20 20 20 7b 20 22  D_CACHE.     { "
24d60 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 73  sqlite3_enable_s
24d70 68 61 72 65 64 5f 63 61 63 68 65 22 2c 20 74 65  hared_cache", te
24d80 73 74 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64  st_enable_shared
24d90 2c 20 30 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22  , 0  },.     { "
24da0 73 71 6c 69 74 65 33 5f 73 68 61 72 65 64 5f 63  sqlite3_shared_c
24db0 61 63 68 65 5f 72 65 70 6f 72 74 22 2c 20 73 71  ache_report", sq
24dc0 6c 69 74 65 33 42 74 72 65 65 53 68 61 72 65 64  lite3BtreeShared
24dd0 43 61 63 68 65 52 65 70 6f 72 74 2c 20 30 7d 2c  CacheReport, 0},
24de0 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 7b 20 22  .#endif.     { "
24df0 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69  sqlite3_libversi
24e00 6f 6e 5f 6e 75 6d 62 65 72 22 2c 20 74 65 73 74  on_number", test
24e10 5f 6c 69 62 76 65 72 73 69 6f 6e 5f 6e 75 6d 62  _libversion_numb
24e20 65 72 2c 20 30 20 20 7d 2c 0a 23 69 66 64 65 66  er, 0  },.#ifdef
24e30 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43   SQLITE_ENABLE_C
24e40 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41 54 41 0a 20  OLUMN_METADATA. 
24e50 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 74      { "sqlite3_t
24e60 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61  able_column_meta
24e70 64 61 74 61 22 2c 20 74 65 73 74 5f 74 61 62 6c  data", test_tabl
24e80 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74  e_column_metadat
24e90 61 2c 20 30 20 20 7d 2c 0a 23 65 6e 64 69 66 0a  a, 0  },.#endif.
24ea0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
24eb0 4d 49 54 5f 49 4e 43 52 42 4c 4f 42 0a 20 20 20  MIT_INCRBLOB.   
24ec0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 6c 6f    { "sqlite3_blo
24ed0 62 5f 72 65 61 64 22 2c 20 20 74 65 73 74 5f 62  b_read",  test_b
24ee0 6c 6f 62 5f 72 65 61 64 2c 20 30 20 20 7d 2c 0a  lob_read, 0  },.
24ef0 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
24f00 62 6c 6f 62 5f 77 72 69 74 65 22 2c 20 74 65 73  blob_write", tes
24f10 74 5f 62 6c 6f 62 5f 77 72 69 74 65 2c 20 30 20  t_blob_write, 0 
24f20 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 20 20 20   },.#endif.     
24f30 7b 20 22 70 63 61 63 68 65 5f 73 74 61 74 73 22  { "pcache_stats"
24f40 2c 20 20 20 20 20 20 20 74 65 73 74 5f 70 63 61  ,       test_pca
24f50 63 68 65 5f 73 74 61 74 73 2c 20 30 20 20 7d 2c  che_stats, 0  },
24f60 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
24f70 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54  NABLE_UNLOCK_NOT
24f80 49 46 59 0a 20 20 20 20 20 7b 20 22 73 71 6c 69  IFY.     { "sqli
24f90 74 65 33 5f 75 6e 6c 6f 63 6b 5f 6e 6f 74 69 66  te3_unlock_notif
24fa0 79 22 2c 20 74 65 73 74 5f 75 6e 6c 6f 63 6b 5f  y", test_unlock_
24fb0 6e 6f 74 69 66 79 2c 20 30 20 20 7d 2c 0a 23 65  notify, 0  },.#e
24fc0 6e 64 69 66 0a 20 20 20 20 20 7b 20 22 73 71 6c  ndif.     { "sql
24fd0 69 74 65 33 5f 77 61 6c 5f 63 68 65 63 6b 70 6f  ite3_wal_checkpo
24fe0 69 6e 74 22 2c 20 74 65 73 74 5f 77 61 6c 5f 63  int", test_wal_c
24ff0 68 65 63 6b 70 6f 69 6e 74 2c 20 30 20 20 7d 2c  heckpoint, 0  },
25000 0a 20 20 7d 3b 0a 20 20 73 74 61 74 69 63 20 69  .  };.  static i
25010 6e 74 20 62 69 74 6d 61 73 6b 5f 73 69 7a 65 20  nt bitmask_size 
25020 3d 20 73 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b  = sizeof(Bitmask
25030 29 2a 38 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  )*8;.  int i;.  
25040 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74  extern int sqlit
25050 65 33 5f 73 79 6e 63 5f 63 6f 75 6e 74 2c 20 73  e3_sync_count, s
25060 71 6c 69 74 65 33 5f 66 75 6c 6c 73 79 6e 63 5f  qlite3_fullsync_
25070 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20  count;.  extern 
25080 69 6e 74 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e  int sqlite3_open
25090 74 65 6d 70 5f 63 6f 75 6e 74 3b 0a 20 20 65 78  temp_count;.  ex
250a0 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
250b0 5f 6c 69 6b 65 5f 63 6f 75 6e 74 3b 0a 20 20 65  _like_count;.  e
250c0 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
250d0 33 5f 78 66 65 72 6f 70 74 5f 63 6f 75 6e 74 3b  3_xferopt_count;
250e0 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
250f0 6c 69 74 65 33 5f 70 61 67 65 72 5f 72 65 61 64  lite3_pager_read
25100 64 62 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65  db_count;.  exte
25110 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 70  rn int sqlite3_p
25120 61 67 65 72 5f 77 72 69 74 65 64 62 5f 63 6f 75  ager_writedb_cou
25130 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74  nt;.  extern int
25140 20 73 71 6c 69 74 65 33 5f 70 61 67 65 72 5f 77   sqlite3_pager_w
25150 72 69 74 65 6a 5f 63 6f 75 6e 74 3b 0a 23 69 66  ritej_count;.#if
25160 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 0a 20   SQLITE_OS_WIN. 
25170 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69   extern int sqli
25180 74 65 33 5f 6f 73 5f 74 79 70 65 3b 0a 23 65 6e  te3_os_type;.#en
25190 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
251a0 45 5f 44 45 42 55 47 0a 20 20 65 78 74 65 72 6e  E_DEBUG.  extern
251b0 20 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72   int sqlite3Wher
251c0 65 54 72 61 63 65 3b 0a 20 20 65 78 74 65 72 6e  eTrace;.  extern
251d0 20 69 6e 74 20 73 71 6c 69 74 65 33 4f 53 54 72   int sqlite3OSTr
251e0 61 63 65 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e  ace;.  extern in
251f0 74 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  t sqlite3VdbeAdd
25200 6f 70 54 72 61 63 65 3b 0a 20 20 65 78 74 65 72  opTrace;.  exter
25210 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  n int sqlite3Wal
25220 54 72 61 63 65 3b 0a 23 65 6e 64 69 66 0a 23 69  Trace;.#endif.#i
25230 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
25240 0a 20 20 65 78 74 65 72 6e 20 63 68 61 72 20 73  .  extern char s
25250 71 6c 69 74 65 33 5f 71 75 65 72 79 5f 70 6c 61  qlite3_query_pla
25260 6e 5b 5d 3b 0a 20 20 73 74 61 74 69 63 20 63 68  n[];.  static ch
25270 61 72 20 2a 71 75 65 72 79 5f 70 6c 61 6e 20 3d  ar *query_plan =
25280 20 73 71 6c 69 74 65 33 5f 71 75 65 72 79 5f 70   sqlite3_query_p
25290 6c 61 6e 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  lan;.#ifdef SQLI
252a0 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 0a 20  TE_ENABLE_FTS3. 
252b0 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69   extern int sqli
252c0 74 65 33 5f 66 74 73 33 5f 65 6e 61 62 6c 65 5f  te3_fts3_enable_
252d0 70 61 72 65 6e 74 68 65 73 65 73 3b 0a 23 65 6e  parentheses;.#en
252e0 64 69 66 0a 23 65 6e 64 69 66 0a 0a 20 20 66 6f  dif.#endif..  fo
252f0 72 28 69 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28  r(i=0; i<sizeof(
25300 61 43 6d 64 29 2f 73 69 7a 65 6f 66 28 61 43 6d  aCmd)/sizeof(aCm
25310 64 5b 30 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20 20  d[0]); i++){.   
25320 20 54 63 6c 5f 43 72 65 61 74 65 43 6f 6d 6d 61   Tcl_CreateComma
25330 6e 64 28 69 6e 74 65 72 70 2c 20 61 43 6d 64 5b  nd(interp, aCmd[
25340 69 5d 2e 7a 4e 61 6d 65 2c 20 61 43 6d 64 5b 69  i].zName, aCmd[i
25350 5d 2e 78 50 72 6f 63 2c 20 30 2c 20 30 29 3b 0a  ].xProc, 0, 0);.
25360 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69    }.  for(i=0; i
25370 3c 73 69 7a 65 6f 66 28 61 4f 62 6a 43 6d 64 29  <sizeof(aObjCmd)
25380 2f 73 69 7a 65 6f 66 28 61 4f 62 6a 43 6d 64 5b  /sizeof(aObjCmd[
25390 30 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 54  0]); i++){.    T
253a0 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d 6d  cl_CreateObjComm
253b0 61 6e 64 28 69 6e 74 65 72 70 2c 20 61 4f 62 6a  and(interp, aObj
253c0 43 6d 64 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 0a 20  Cmd[i].zName, . 
253d0 20 20 20 20 20 20 20 61 4f 62 6a 43 6d 64 5b 69         aObjCmd[i
253e0 5d 2e 78 50 72 6f 63 2c 20 61 4f 62 6a 43 6d 64  ].xProc, aObjCmd
253f0 5b 69 5d 2e 63 6c 69 65 6e 74 44 61 74 61 2c 20  [i].clientData, 
25400 30 29 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 4c 69  0);.  }.  Tcl_Li
25410 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73  nkVar(interp, "s
25420 71 6c 69 74 65 5f 73 65 61 72 63 68 5f 63 6f 75  qlite_search_cou
25430 6e 74 22 2c 20 0a 20 20 20 20 20 20 28 63 68 61  nt", .      (cha
25440 72 2a 29 26 73 71 6c 69 74 65 33 5f 73 65 61 72  r*)&sqlite3_sear
25450 63 68 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49  ch_count, TCL_LI
25460 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c  NK_INT);.  Tcl_L
25470 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22  inkVar(interp, "
25480 73 71 6c 69 74 65 5f 66 6f 75 6e 64 5f 63 6f 75  sqlite_found_cou
25490 6e 74 22 2c 20 0a 20 20 20 20 20 20 28 63 68 61  nt", .      (cha
254a0 72 2a 29 26 73 71 6c 69 74 65 33 5f 66 6f 75 6e  r*)&sqlite3_foun
254b0 64 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e  d_count, TCL_LIN
254c0 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69  K_INT);.  Tcl_Li
254d0 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73  nkVar(interp, "s
254e0 71 6c 69 74 65 5f 73 6f 72 74 5f 63 6f 75 6e 74  qlite_sort_count
254f0 22 2c 20 0a 20 20 20 20 20 20 28 63 68 61 72 2a  ", .      (char*
25500 29 26 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63  )&sqlite3_sort_c
25510 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49  ount, TCL_LINK_I
25520 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56  NT);.  Tcl_LinkV
25530 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  ar(interp, "sqli
25540 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a 65  te3_max_blobsize
25550 22 2c 20 0a 20 20 20 20 20 20 28 63 68 61 72 2a  ", .      (char*
25560 29 26 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  )&sqlite3_max_bl
25570 6f 62 73 69 7a 65 2c 20 54 43 4c 5f 4c 49 4e 4b  obsize, TCL_LINK
25580 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e  _INT);.  Tcl_Lin
25590 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71  kVar(interp, "sq
255a0 6c 69 74 65 5f 6c 69 6b 65 5f 63 6f 75 6e 74 22  lite_like_count"
255b0 2c 20 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29  , .      (char*)
255c0 26 73 71 6c 69 74 65 33 5f 6c 69 6b 65 5f 63 6f  &sqlite3_like_co
255d0 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e  unt, TCL_LINK_IN
255e0 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61  T);.  Tcl_LinkVa
255f0 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  r(interp, "sqlit
25600 65 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  e_interrupt_coun
25610 74 22 2c 20 0a 20 20 20 20 20 20 28 63 68 61 72  t", .      (char
25620 2a 29 26 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  *)&sqlite3_inter
25630 72 75 70 74 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f  rupt_count, TCL_
25640 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c  LINK_INT);.  Tcl
25650 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c  _LinkVar(interp,
25660 20 22 73 71 6c 69 74 65 5f 6f 70 65 6e 5f 66 69   "sqlite_open_fi
25670 6c 65 5f 63 6f 75 6e 74 22 2c 20 0a 20 20 20 20  le_count", .    
25680 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65    (char*)&sqlite
25690 33 5f 6f 70 65 6e 5f 66 69 6c 65 5f 63 6f 75 6e  3_open_file_coun
256a0 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29  t, TCL_LINK_INT)
256b0 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  ;.  Tcl_LinkVar(
256c0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
256d0 63 75 72 72 65 6e 74 5f 74 69 6d 65 22 2c 20 0a  current_time", .
256e0 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71        (char*)&sq
256f0 6c 69 74 65 33 5f 63 75 72 72 65 6e 74 5f 74 69  lite3_current_ti
25700 6d 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54  me, TCL_LINK_INT
25710 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 4f 53  );.#if SQLITE_OS
25720 5f 55 4e 49 58 20 26 26 20 64 65 66 69 6e 65 64  _UNIX && defined
25730 28 5f 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 53  (__APPLE__) && S
25740 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43  QLITE_ENABLE_LOC
25750 4b 49 4e 47 5f 53 54 59 4c 45 0a 20 20 54 63 6c  KING_STYLE.  Tcl
25760 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c  _LinkVar(interp,
25770 20 22 73 71 6c 69 74 65 5f 68 6f 73 74 69 64 5f   "sqlite_hostid_
25780 6e 75 6d 22 2c 20 0a 20 20 20 20 20 20 28 63 68  num", .      (ch
25790 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 68 6f 73  ar*)&sqlite3_hos
257a0 74 69 64 5f 6e 75 6d 2c 20 54 43 4c 5f 4c 49 4e  tid_num, TCL_LIN
257b0 4b 5f 49 4e 54 29 3b 0a 23 65 6e 64 69 66 0a 20  K_INT);.#endif. 
257c0 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
257d0 65 72 70 2c 20 22 73 71 6c 69 74 65 33 5f 78 66  erp, "sqlite3_xf
257e0 65 72 6f 70 74 5f 63 6f 75 6e 74 22 2c 0a 20 20  eropt_count",.  
257f0 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69      (char*)&sqli
25800 74 65 33 5f 78 66 65 72 6f 70 74 5f 63 6f 75 6e  te3_xferopt_coun
25810 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29  t, TCL_LINK_INT)
25820 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  ;.  Tcl_LinkVar(
25830 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 33  interp, "sqlite3
25840 5f 70 61 67 65 72 5f 72 65 61 64 64 62 5f 63 6f  _pager_readdb_co
25850 75 6e 74 22 2c 0a 20 20 20 20 20 20 28 63 68 61  unt",.      (cha
25860 72 2a 29 26 73 71 6c 69 74 65 33 5f 70 61 67 65  r*)&sqlite3_page
25870 72 5f 72 65 61 64 64 62 5f 63 6f 75 6e 74 2c 20  r_readdb_count, 
25880 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20  TCL_LINK_INT);. 
25890 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
258a0 65 72 70 2c 20 22 73 71 6c 69 74 65 33 5f 70 61  erp, "sqlite3_pa
258b0 67 65 72 5f 77 72 69 74 65 64 62 5f 63 6f 75 6e  ger_writedb_coun
258c0 74 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a  t",.      (char*
258d0 29 26 73 71 6c 69 74 65 33 5f 70 61 67 65 72 5f  )&sqlite3_pager_
258e0 77 72 69 74 65 64 62 5f 63 6f 75 6e 74 2c 20 54  writedb_count, T
258f0 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20  CL_LINK_INT);.  
25900 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
25910 72 70 2c 20 22 73 71 6c 69 74 65 33 5f 70 61 67  rp, "sqlite3_pag
25920 65 72 5f 77 72 69 74 65 6a 5f 63 6f 75 6e 74 22  er_writej_count"
25930 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26  ,.      (char*)&
25940 73 71 6c 69 74 65 33 5f 70 61 67 65 72 5f 77 72  sqlite3_pager_wr
25950 69 74 65 6a 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f  itej_count, TCL_
25960 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23 69 66 6e 64  LINK_INT);.#ifnd
25970 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
25980 54 46 31 36 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56  TF16.  Tcl_LinkV
25990 61 72 28 69 6e 74 65 72 70 2c 20 22 75 6e 61 6c  ar(interp, "unal
259a0 69 67 6e 65 64 5f 73 74 72 69 6e 67 5f 63 6f 75  igned_string_cou
259b0 6e 74 65 72 22 2c 0a 20 20 20 20 20 20 28 63 68  nter",.      (ch
259c0 61 72 2a 29 26 75 6e 61 6c 69 67 6e 65 64 5f 73  ar*)&unaligned_s
259d0 74 72 69 6e 67 5f 63 6f 75 6e 74 65 72 2c 20 54  tring_counter, T
259e0 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23 65  CL_LINK_INT);.#e
259f0 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
25a00 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20  ITE_OMIT_UTF16. 
25a10 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
25a20 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6c 61 73  erp, "sqlite_las
25a30 74 5f 6e 65 65 64 65 64 5f 63 6f 6c 6c 61 74 69  t_needed_collati
25a40 6f 6e 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72  on",.      (char
25a50 2a 29 26 70 7a 4e 65 65 64 65 64 43 6f 6c 6c 61  *)&pzNeededColla
25a60 74 69 6f 6e 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 53  tion, TCL_LINK_S
25a70 54 52 49 4e 47 7c 54 43 4c 5f 4c 49 4e 4b 5f 52  TRING|TCL_LINK_R
25a80 45 41 44 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  EAD_ONLY);.#endi
25a90 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 4f 53 5f  f.#if SQLITE_OS_
25aa0 57 49 4e 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61  WIN.  Tcl_LinkVa
25ab0 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  r(interp, "sqlit
25ac0 65 5f 6f 73 5f 74 79 70 65 22 2c 0a 20 20 20 20  e_os_type",.    
25ad0 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65    (char*)&sqlite
25ae0 33 5f 6f 73 5f 74 79 70 65 2c 20 54 43 4c 5f 4c  3_os_type, TCL_L
25af0 49 4e 4b 5f 49 4e 54 29 3b 0a 23 65 6e 64 69 66  INK_INT);.#endif
25b00 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
25b10 45 53 54 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61  EST.  Tcl_LinkVa
25b20 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  r(interp, "sqlit
25b30 65 5f 71 75 65 72 79 5f 70 6c 61 6e 22 2c 0a 20  e_query_plan",. 
25b40 20 20 20 20 20 28 63 68 61 72 2a 29 26 71 75 65       (char*)&que
25b50 72 79 5f 70 6c 61 6e 2c 20 54 43 4c 5f 4c 49 4e  ry_plan, TCL_LIN
25b60 4b 5f 53 54 52 49 4e 47 7c 54 43 4c 5f 4c 49 4e  K_STRING|TCL_LIN
25b70 4b 5f 52 45 41 44 5f 4f 4e 4c 59 29 3b 0a 23 65  K_READ_ONLY);.#e
25b80 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
25b90 54 45 5f 44 45 42 55 47 0a 20 20 54 63 6c 5f 4c  TE_DEBUG.  Tcl_L
25ba0 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22  inkVar(interp, "
25bb0 73 71 6c 69 74 65 5f 61 64 64 6f 70 5f 74 72 61  sqlite_addop_tra
25bc0 63 65 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72  ce",.      (char
25bd0 2a 29 26 73 71 6c 69 74 65 33 56 64 62 65 41 64  *)&sqlite3VdbeAd
25be0 64 6f 70 54 72 61 63 65 2c 20 54 43 4c 5f 4c 49  dopTrace, TCL_LI
25bf0 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c  NK_INT);.  Tcl_L
25c00 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22  inkVar(interp, "
25c10 73 71 6c 69 74 65 5f 77 68 65 72 65 5f 74 72 61  sqlite_where_tra
25c20 63 65 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72  ce",.      (char
25c30 2a 29 26 73 71 6c 69 74 65 33 57 68 65 72 65 54  *)&sqlite3WhereT
25c40 72 61 63 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49  race, TCL_LINK_I
25c50 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56  NT);.  Tcl_LinkV
25c60 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  ar(interp, "sqli
25c70 74 65 5f 6f 73 5f 74 72 61 63 65 22 2c 0a 20 20  te_os_trace",.  
25c80 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69      (char*)&sqli
25c90 74 65 33 4f 53 54 72 61 63 65 2c 20 54 43 4c 5f  te3OSTrace, TCL_
25ca0 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23 69 66 6e 64  LINK_INT);.#ifnd
25cb0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
25cc0 41 4c 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72  AL.  Tcl_LinkVar
25cd0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
25ce0 5f 77 61 6c 5f 74 72 61 63 65 22 2c 0a 20 20 20  _wal_trace",.   
25cf0 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74     (char*)&sqlit
25d00 65 33 57 61 6c 54 72 61 63 65 2c 20 54 43 4c 5f  e3WalTrace, TCL_
25d10 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23 65 6e 64 69  LINK_INT);.#endi
25d20 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
25d30 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 49 53   SQLITE_OMIT_DIS
25d40 4b 49 4f 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61  KIO.  Tcl_LinkVa
25d50 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  r(interp, "sqlit
25d60 65 5f 6f 70 65 6e 74 65 6d 70 5f 63 6f 75 6e 74  e_opentemp_count
25d70 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29  ",.      (char*)
25d80 26 73 71 6c 69 74 65 33 5f 6f 70 65 6e 74 65 6d  &sqlite3_opentem
25d90 70 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e  p_count, TCL_LIN
25da0 4b 5f 49 4e 54 29 3b 0a 23 65 6e 64 69 66 0a 20  K_INT);.#endif. 
25db0 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
25dc0 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 73 74 61  erp, "sqlite_sta
25dd0 74 69 63 5f 62 69 6e 64 5f 76 61 6c 75 65 22 2c  tic_bind_value",
25de0 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73  .      (char*)&s
25df0 71 6c 69 74 65 5f 73 74 61 74 69 63 5f 62 69 6e  qlite_static_bin
25e00 64 5f 76 61 6c 75 65 2c 20 54 43 4c 5f 4c 49 4e  d_value, TCL_LIN
25e10 4b 5f 53 54 52 49 4e 47 29 3b 0a 20 20 54 63 6c  K_STRING);.  Tcl
25e20 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c  _LinkVar(interp,
25e30 20 22 73 71 6c 69 74 65 5f 73 74 61 74 69 63 5f   "sqlite_static_
25e40 62 69 6e 64 5f 6e 62 79 74 65 22 2c 0a 20 20 20  bind_nbyte",.   
25e50 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74     (char*)&sqlit
25e60 65 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f 6e 62  e_static_bind_nb
25e70 79 74 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e  yte, TCL_LINK_IN
25e80 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61  T);.  Tcl_LinkVa
25e90 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  r(interp, "sqlit
25ea0 65 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79  e_temp_directory
25eb0 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29  ",.      (char*)
25ec0 26 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69  &sqlite3_temp_di
25ed0 72 65 63 74 6f 72 79 2c 20 54 43 4c 5f 4c 49 4e  rectory, TCL_LIN
25ee0 4b 5f 53 54 52 49 4e 47 29 3b 0a 20 20 54 63 6c  K_STRING);.  Tcl
25ef0 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c  _LinkVar(interp,
25f00 20 22 62 69 74 6d 61 73 6b 5f 73 69 7a 65 22 2c   "bitmask_size",
25f10 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 62  .      (char*)&b
25f20 69 74 6d 61 73 6b 5f 73 69 7a 65 2c 20 54 43 4c  itmask_size, TCL
25f30 5f 4c 49 4e 4b 5f 49 4e 54 7c 54 43 4c 5f 4c 49  _LINK_INT|TCL_LI
25f40 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59 29 3b 0a 20  NK_READ_ONLY);. 
25f50 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
25f60 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 73 79 6e  erp, "sqlite_syn
25f70 63 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20 20 20  c_count",.      
25f80 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f  (char*)&sqlite3_
25f90 73 79 6e 63 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f  sync_count, TCL_
25fa0 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c  LINK_INT);.  Tcl
25fb0 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c  _LinkVar(interp,
25fc0 20 22 73 71 6c 69 74 65 5f 66 75 6c 6c 73 79 6e   "sqlite_fullsyn
25fd0 63 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20 20 20  c_count",.      
25fe0 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f  (char*)&sqlite3_
25ff0 66 75 6c 6c 73 79 6e 63 5f 63 6f 75 6e 74 2c 20  fullsync_count, 
26000 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23  TCL_LINK_INT);.#
26010 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
26020 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26  E_ENABLE_FTS3) &
26030 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
26040 5f 54 45 53 54 29 0a 20 20 54 63 6c 5f 4c 69 6e  _TEST).  Tcl_Lin
26050 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71  kVar(interp, "sq
26060 6c 69 74 65 5f 66 74 73 33 5f 65 6e 61 62 6c 65  lite_fts3_enable
26070 5f 70 61 72 65 6e 74 68 65 73 65 73 22 2c 0a 20  _parentheses",. 
26080 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c       (char*)&sql
26090 69 74 65 33 5f 66 74 73 33 5f 65 6e 61 62 6c 65  ite3_fts3_enable
260a0 5f 70 61 72 65 6e 74 68 65 73 65 73 2c 20 54 43  _parentheses, TC
260b0 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23 65 6e  L_LINK_INT);.#en
260c0 64 69 66 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  dif.  return TCL
260d0 5f 4f 4b 3b 0a 7d 0a                             _OK;.}.