/ Hex Artifact Content
Login

Artifact f43580b00e3f764015acd52892690ee4f28ce775:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 43 6f 64 65 20 66  ******.** Code f
0180: 6f 72 20 74 65 73 74 69 6e 67 20 61 6c 6c 20 73  or testing all s
0190: 6f 72 74 73 20 6f 66 20 53 51 4c 69 74 65 20 69  orts of SQLite i
01a0: 6e 74 65 72 66 61 63 65 73 2e 20 20 54 68 69 73  nterfaces.  This
01b0: 20 63 6f 64 65 0a 2a 2a 20 69 73 20 6e 6f 74 20   code.** is not 
01c0: 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20  included in the 
01d0: 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 20  SQLite library. 
01e0: 20 49 74 20 69 73 20 75 73 65 64 20 66 6f 72 20   It is used for 
01f0: 61 75 74 6f 6d 61 74 65 64 0a 2a 2a 20 74 65 73  automated.** tes
0200: 74 69 6e 67 20 6f 66 20 74 68 65 20 53 51 4c 69  ting of the SQLi
0210: 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a  te library..**.*
0220: 2a 20 24 49 64 3a 20 74 65 73 74 31 2e 63 2c 76  * $Id: test1.c,v
0230: 20 31 2e 32 37 34 20 32 30 30 37 2f 30 39 2f 30   1.274 2007/09/0
0240: 31 20 31 31 3a 30 34 3a 32 36 20 64 61 6e 69 65  1 11:04:26 danie
0250: 6c 6b 31 39 37 37 20 45 78 70 20 24 0a 2a 2f 0a  lk1977 Exp $.*/.
0260: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
0270: 49 6e 74 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  Int.h".#include 
0280: 22 74 63 6c 2e 68 22 0a 23 69 6e 63 6c 75 64 65  "tcl.h".#include
0290: 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63   <stdlib.h>.#inc
02a0: 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a  lude <string.h>.
02b0: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61  ./*.** This is a
02c0: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 66 69 72   copy of the fir
02d0: 73 74 20 70 61 72 74 20 6f 66 20 74 68 65 20 53  st part of the S
02e0: 71 6c 69 74 65 44 62 20 73 74 72 75 63 74 75 72  qliteDb structur
02f0: 65 20 69 6e 20 0a 2a 2a 20 74 63 6c 73 71 6c 69  e in .** tclsqli
0300: 74 65 2e 63 2e 20 20 57 65 20 6e 65 65 64 20 69  te.c.  We need i
0310: 74 20 68 65 72 65 20 73 6f 20 74 68 61 74 20 74  t here so that t
0320: 68 65 20 67 65 74 5f 73 71 6c 69 74 65 5f 70 6f  he get_sqlite_po
0330: 69 6e 74 65 72 20 72 6f 75 74 69 6e 65 0a 2a 2a  inter routine.**
0340: 20 63 61 6e 20 65 78 74 72 61 63 74 20 74 68 65   can extract the
0350: 20 73 71 6c 69 74 65 33 2a 20 70 6f 69 6e 74 65   sqlite3* pointe
0360: 72 20 66 72 6f 6d 20 61 6e 20 65 78 69 73 74 69  r from an existi
0370: 6e 67 20 54 63 6c 20 53 51 4c 69 74 65 0a 2a 2a  ng Tcl SQLite.**
0380: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 2a 2f 0a   connection..*/.
0390: 73 74 72 75 63 74 20 53 71 6c 69 74 65 44 62 20  struct SqliteDb 
03a0: 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
03b0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65  .};../*.** Conve
03c0: 72 74 20 74 65 78 74 20 67 65 6e 65 72 61 74 65  rt text generate
03d0: 64 20 62 79 20 74 68 65 20 22 25 70 22 20 63 6f  d by the "%p" co
03e0: 6e 76 65 72 73 69 6f 6e 20 66 6f 72 6d 61 74 20  nversion format 
03f0: 62 61 63 6b 20 69 6e 74 6f 0a 2a 2a 20 61 20 70  back into.** a p
0400: 6f 69 6e 74 65 72 2e 0a 2a 2f 0a 73 74 61 74 69  ointer..*/.stati
0410: 63 20 69 6e 74 20 74 65 73 74 48 65 78 54 6f 49  c int testHexToI
0420: 6e 74 28 69 6e 74 20 68 29 7b 0a 20 20 69 66 28  nt(int h){.  if(
0430: 20 68 3e 3d 27 30 27 20 26 26 20 68 3c 3d 27 39   h>='0' && h<='9
0440: 27 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ' ){.    return 
0450: 68 20 2d 20 27 30 27 3b 0a 20 20 7d 65 6c 73 65  h - '0';.  }else
0460: 20 69 66 28 20 68 3e 3d 27 61 27 20 26 26 20 68   if( h>='a' && h
0470: 3c 3d 27 66 27 20 29 7b 0a 20 20 20 20 72 65 74  <='f' ){.    ret
0480: 75 72 6e 20 68 20 2d 20 27 61 27 20 2b 20 31 30  urn h - 'a' + 10
0490: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
04a0: 73 73 65 72 74 28 20 68 3e 3d 27 41 27 20 26 26  ssert( h>='A' &&
04b0: 20 68 3c 3d 27 46 27 20 29 3b 0a 20 20 20 20 72   h<='F' );.    r
04c0: 65 74 75 72 6e 20 68 20 2d 20 27 41 27 20 2b 20  eturn h - 'A' + 
04d0: 31 30 3b 0a 20 20 7d 0a 7d 0a 76 6f 69 64 20 2a  10;.  }.}.void *
04e0: 73 71 6c 69 74 65 33 54 65 78 74 54 6f 50 74 72  sqlite3TextToPtr
04f0: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b  (const char *z){
0500: 0a 20 20 76 6f 69 64 20 2a 70 3b 0a 20 20 75 36  .  void *p;.  u6
0510: 34 20 76 3b 0a 20 20 75 33 32 20 76 32 3b 0a 20  4 v;.  u32 v2;. 
0520: 20 69 66 28 20 7a 5b 30 5d 3d 3d 27 30 27 20 26   if( z[0]=='0' &
0530: 26 20 7a 5b 31 5d 3d 3d 27 78 27 20 29 7b 0a 20  & z[1]=='x' ){. 
0540: 20 20 20 7a 20 2b 3d 20 32 3b 0a 20 20 7d 0a 20     z += 2;.  }. 
0550: 20 76 20 3d 20 30 3b 0a 20 20 77 68 69 6c 65 28   v = 0;.  while(
0560: 20 2a 7a 20 29 7b 0a 20 20 20 20 76 20 3d 20 28   *z ){.    v = (
0570: 76 3c 3c 34 29 20 2b 20 74 65 73 74 48 65 78 54  v<<4) + testHexT
0580: 6f 49 6e 74 28 2a 7a 29 3b 0a 20 20 20 20 7a 2b  oInt(*z);.    z+
0590: 2b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 69 7a  +;.  }.  if( siz
05a0: 65 6f 66 28 70 29 3d 3d 73 69 7a 65 6f 66 28 76  eof(p)==sizeof(v
05b0: 29 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28  ) ){.    memcpy(
05c0: 26 70 2c 20 26 76 2c 20 73 69 7a 65 6f 66 28 70  &p, &v, sizeof(p
05d0: 29 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ));.  }else{.   
05e0: 20 61 73 73 65 72 74 28 20 73 69 7a 65 6f 66 28   assert( sizeof(
05f0: 70 29 3d 3d 73 69 7a 65 6f 66 28 76 32 29 20 29  p)==sizeof(v2) )
0600: 3b 0a 20 20 20 20 76 32 20 3d 20 28 75 33 32 29  ;.    v2 = (u32)
0610: 76 3b 0a 20 20 20 20 6d 65 6d 63 70 79 28 26 70  v;.    memcpy(&p
0620: 2c 20 26 76 32 2c 20 73 69 7a 65 6f 66 28 70 29  , &v2, sizeof(p)
0630: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
0640: 70 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20 54  p;.}.../*.** A T
0650: 43 4c 20 63 6f 6d 6d 61 6e 64 20 74 68 61 74 20  CL command that 
0660: 72 65 74 75 72 6e 73 20 74 68 65 20 61 64 64 72  returns the addr
0670: 65 73 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74  ess of the sqlit
0680: 65 2a 20 70 6f 69 6e 74 65 72 0a 2a 2a 20 66 6f  e* pointer.** fo
0690: 72 20 61 6e 20 73 71 6c 69 74 65 20 63 6f 6e 6e  r an sqlite conn
06a0: 65 63 74 69 6f 6e 20 69 6e 73 74 61 6e 63 65 2e  ection instance.
06b0: 20 20 42 61 64 20 74 68 69 6e 67 73 20 68 61 70    Bad things hap
06c0: 70 65 6e 20 69 66 20 74 68 65 0a 2a 2a 20 69 6e  pen if the.** in
06d0: 70 75 74 20 69 73 20 6e 6f 74 20 61 6e 20 73 71  put is not an sq
06e0: 6c 69 74 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  lite connection.
06f0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 67  .*/.static int g
0700: 65 74 5f 73 71 6c 69 74 65 5f 70 6f 69 6e 74 65  et_sqlite_pointe
0710: 72 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  r(.  void * clie
0720: 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
0730: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
0740: 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
0750: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
0760: 5d 0a 29 7b 0a 20 20 73 74 72 75 63 74 20 53 71  ].){.  struct Sq
0770: 6c 69 74 65 44 62 20 2a 70 3b 0a 20 20 54 63 6c  liteDb *p;.  Tcl
0780: 5f 43 6d 64 49 6e 66 6f 20 63 6d 64 49 6e 66 6f  _CmdInfo cmdInfo
0790: 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 31 30  ;.  char zBuf[10
07a0: 30 5d 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  0];.  if( objc!=
07b0: 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f  2 ){.    Tcl_Wro
07c0: 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
07d0: 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 53 51 4c 49  , 1, objv, "SQLI
07e0: 54 45 2d 43 4f 4e 4e 45 43 54 49 4f 4e 22 29 3b  TE-CONNECTION");
07f0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
0800: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
0810: 20 21 54 63 6c 5f 47 65 74 43 6f 6d 6d 61 6e 64   !Tcl_GetCommand
0820: 49 6e 66 6f 28 69 6e 74 65 72 70 2c 20 54 63 6c  Info(interp, Tcl
0830: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
0840: 31 5d 29 2c 20 26 63 6d 64 49 6e 66 6f 29 20 29  1]), &cmdInfo) )
0850: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
0860: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
0870: 63 6f 6d 6d 61 6e 64 20 6e 6f 74 20 66 6f 75 6e  command not foun
0880: 64 3a 20 22 2c 0a 20 20 20 20 20 20 20 20 20 20  d: ",.          
0890: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
08a0: 62 6a 76 5b 31 5d 29 2c 20 28 63 68 61 72 2a 29  bjv[1]), (char*)
08b0: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
08c0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
08d0: 70 20 3d 20 28 73 74 72 75 63 74 20 53 71 6c 69  p = (struct Sqli
08e0: 74 65 44 62 2a 29 63 6d 64 49 6e 66 6f 2e 6f 62  teDb*)cmdInfo.ob
08f0: 6a 43 6c 69 65 6e 74 44 61 74 61 3b 0a 20 20 73  jClientData;.  s
0900: 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 25 70  printf(zBuf, "%p
0910: 22 2c 20 70 2d 3e 64 62 29 3b 0a 20 20 69 66 28  ", p->db);.  if(
0920: 20 73 74 72 6e 63 6d 70 28 7a 42 75 66 2c 22 30   strncmp(zBuf,"0
0930: 78 22 2c 32 29 20 29 7b 0a 20 20 20 20 73 70 72  x",2) ){.    spr
0940: 69 6e 74 66 28 7a 42 75 66 2c 20 22 30 78 25 70  intf(zBuf, "0x%p
0950: 22 2c 20 70 2d 3e 64 62 29 3b 0a 20 20 7d 0a 20  ", p->db);.  }. 
0960: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
0970: 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20  t(interp, zBuf, 
0980: 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  0);.  return TCL
0990: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 65  _OK;.}../*.** De
09a0: 63 6f 64 65 20 61 20 70 6f 69 6e 74 65 72 20 74  code a pointer t
09b0: 6f 20 61 6e 20 73 71 6c 69 74 65 33 20 6f 62 6a  o an sqlite3 obj
09c0: 65 63 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ect..*/.static i
09d0: 6e 74 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  nt getDbPointer(
09e0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
09f0: 72 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  rp, const char *
0a00: 7a 41 2c 20 73 71 6c 69 74 65 33 20 2a 2a 70 70  zA, sqlite3 **pp
0a10: 44 62 29 7b 0a 20 20 73 74 72 75 63 74 20 53 71  Db){.  struct Sq
0a20: 6c 69 74 65 44 62 20 2a 70 3b 0a 20 20 54 63 6c  liteDb *p;.  Tcl
0a30: 5f 43 6d 64 49 6e 66 6f 20 63 6d 64 49 6e 66 6f  _CmdInfo cmdInfo
0a40: 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 43  ;.  if( Tcl_GetC
0a50: 6f 6d 6d 61 6e 64 49 6e 66 6f 28 69 6e 74 65 72  ommandInfo(inter
0a60: 70 2c 20 7a 41 2c 20 26 63 6d 64 49 6e 66 6f 29  p, zA, &cmdInfo)
0a70: 20 29 7b 0a 20 20 20 20 70 20 3d 20 28 73 74 72   ){.    p = (str
0a80: 75 63 74 20 53 71 6c 69 74 65 44 62 2a 29 63 6d  uct SqliteDb*)cm
0a90: 64 49 6e 66 6f 2e 6f 62 6a 43 6c 69 65 6e 74 44  dInfo.objClientD
0aa0: 61 74 61 3b 0a 20 20 20 20 2a 70 70 44 62 20 3d  ata;.    *ppDb =
0ab0: 20 70 2d 3e 64 62 3b 0a 20 20 7d 65 6c 73 65 7b   p->db;.  }else{
0ac0: 0a 20 20 20 20 2a 70 70 44 62 20 3d 20 28 73 71  .    *ppDb = (sq
0ad0: 6c 69 74 65 33 2a 29 73 71 6c 69 74 65 33 54 65  lite3*)sqlite3Te
0ae0: 78 74 54 6f 50 74 72 28 7a 41 29 3b 0a 20 20 7d  xtToPtr(zA);.  }
0af0: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
0b00: 3b 0a 7d 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72  ;.}...const char
0b10: 20 2a 73 71 6c 69 74 65 33 54 65 73 74 45 72 72   *sqlite3TestErr
0b20: 6f 72 4e 61 6d 65 28 69 6e 74 20 72 63 29 7b 0a  orName(int rc){.
0b30: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e    const char *zN
0b40: 61 6d 65 20 3d 20 30 3b 0a 20 20 73 77 69 74 63  ame = 0;.  switc
0b50: 68 28 20 72 63 20 26 20 30 78 66 66 20 29 7b 0a  h( rc & 0xff ){.
0b60: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
0b70: 4f 4b 3a 20 20 20 20 20 20 20 20 20 7a 4e 61 6d  OK:         zNam
0b80: 65 20 3d 20 22 53 51 4c 49 54 45 5f 4f 4b 22 3b  e = "SQLITE_OK";
0b90: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
0ba0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
0bb0: 5f 45 52 52 4f 52 3a 20 20 20 20 20 20 7a 4e 61  _ERROR:      zNa
0bc0: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 45 52 52  me = "SQLITE_ERR
0bd0: 4f 52 22 3b 20 20 20 20 20 20 20 62 72 65 61 6b  OR";       break
0be0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
0bf0: 45 5f 50 45 52 4d 3a 20 20 20 20 20 20 20 7a 4e  E_PERM:       zN
0c00: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 50 45  ame = "SQLITE_PE
0c10: 52 4d 22 3b 20 20 20 20 20 20 20 20 62 72 65 61  RM";        brea
0c20: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
0c30: 54 45 5f 41 42 4f 52 54 3a 20 20 20 20 20 20 7a  TE_ABORT:      z
0c40: 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 41  Name = "SQLITE_A
0c50: 42 4f 52 54 22 3b 20 20 20 20 20 20 20 62 72 65  BORT";       bre
0c60: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
0c70: 49 54 45 5f 42 55 53 59 3a 20 20 20 20 20 20 20  ITE_BUSY:       
0c80: 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f  zName = "SQLITE_
0c90: 42 55 53 59 22 3b 20 20 20 20 20 20 20 20 62 72  BUSY";        br
0ca0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
0cb0: 4c 49 54 45 5f 4c 4f 43 4b 45 44 3a 20 20 20 20  LITE_LOCKED:    
0cc0: 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45   zName = "SQLITE
0cd0: 5f 4c 4f 43 4b 45 44 22 3b 20 20 20 20 20 20 62  _LOCKED";      b
0ce0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
0cf0: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3a 20 20 20 20  QLITE_NOMEM:    
0d00: 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54    zName = "SQLIT
0d10: 45 5f 4e 4f 4d 45 4d 22 3b 20 20 20 20 20 20 20  E_NOMEM";       
0d20: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
0d30: 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3a  SQLITE_READONLY:
0d40: 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49     zName = "SQLI
0d50: 54 45 5f 52 45 41 44 4f 4e 4c 59 22 3b 20 20 20  TE_READONLY";   
0d60: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
0d70: 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50   SQLITE_INTERRUP
0d80: 54 3a 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c  T:  zName = "SQL
0d90: 49 54 45 5f 49 4e 54 45 52 52 55 50 54 22 3b 20  ITE_INTERRUPT"; 
0da0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0db0: 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 3a 20  e SQLITE_IOERR: 
0dc0: 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51       zName = "SQ
0dd0: 4c 49 54 45 5f 49 4f 45 52 52 22 3b 20 20 20 20  LITE_IOERR";    
0de0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
0df0: 73 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  se SQLITE_CORRUP
0e00: 54 3a 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53  T:    zName = "S
0e10: 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 22 3b 20  QLITE_CORRUPT"; 
0e20: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
0e30: 61 73 65 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3a  ase SQLITE_FULL:
0e40: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
0e50: 53 51 4c 49 54 45 5f 46 55 4c 4c 22 3b 20 20 20  SQLITE_FULL";   
0e60: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
0e70: 63 61 73 65 20 53 51 4c 49 54 45 5f 43 41 4e 54  case SQLITE_CANT
0e80: 4f 50 45 4e 3a 20 20 20 7a 4e 61 6d 65 20 3d 20  OPEN:   zName = 
0e90: 22 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e  "SQLITE_CANTOPEN
0ea0: 22 3b 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ";    break;.   
0eb0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 50 52 4f   case SQLITE_PRO
0ec0: 54 4f 43 4f 4c 3a 20 20 20 7a 4e 61 6d 65 20 3d  TOCOL:   zName =
0ed0: 20 22 53 51 4c 49 54 45 5f 50 52 4f 54 4f 43 4f   "SQLITE_PROTOCO
0ee0: 4c 22 3b 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  L";    break;.  
0ef0: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 45 4d    case SQLITE_EM
0f00: 50 54 59 3a 20 20 20 20 20 20 7a 4e 61 6d 65 20  PTY:      zName 
0f10: 3d 20 22 53 51 4c 49 54 45 5f 45 4d 50 54 59 22  = "SQLITE_EMPTY"
0f20: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
0f30: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 53     case SQLITE_S
0f40: 43 48 45 4d 41 3a 20 20 20 20 20 7a 4e 61 6d 65  CHEMA:     zName
0f50: 20 3d 20 22 53 51 4c 49 54 45 5f 53 43 48 45 4d   = "SQLITE_SCHEM
0f60: 41 22 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  A";      break;.
0f70: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
0f80: 43 4f 4e 53 54 52 41 49 4e 54 3a 20 7a 4e 61 6d  CONSTRAINT: zNam
0f90: 65 20 3d 20 22 53 51 4c 49 54 45 5f 43 4f 4e 53  e = "SQLITE_CONS
0fa0: 54 52 41 49 4e 54 22 3b 20 20 62 72 65 61 6b 3b  TRAINT";  break;
0fb0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
0fc0: 5f 4d 49 53 4d 41 54 43 48 3a 20 20 20 7a 4e 61  _MISMATCH:   zNa
0fd0: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4d 49 53  me = "SQLITE_MIS
0fe0: 4d 41 54 43 48 22 3b 20 20 20 20 62 72 65 61 6b  MATCH";    break
0ff0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
1000: 45 5f 4d 49 53 55 53 45 3a 20 20 20 20 20 7a 4e  E_MISUSE:     zN
1010: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4d 49  ame = "SQLITE_MI
1020: 53 55 53 45 22 3b 20 20 20 20 20 20 62 72 65 61  SUSE";      brea
1030: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
1040: 54 45 5f 4e 4f 4c 46 53 3a 20 20 20 20 20 20 7a  TE_NOLFS:      z
1050: 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4e  Name = "SQLITE_N
1060: 4f 4c 46 53 22 3b 20 20 20 20 20 20 20 62 72 65  OLFS";       bre
1070: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
1080: 49 54 45 5f 41 55 54 48 3a 20 20 20 20 20 20 20  ITE_AUTH:       
1090: 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f  zName = "SQLITE_
10a0: 41 55 54 48 22 3b 20 20 20 20 20 20 20 20 62 72  AUTH";        br
10b0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
10c0: 4c 49 54 45 5f 46 4f 52 4d 41 54 3a 20 20 20 20  LITE_FORMAT:    
10d0: 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45   zName = "SQLITE
10e0: 5f 46 4f 52 4d 41 54 22 3b 20 20 20 20 20 20 62  _FORMAT";      b
10f0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
1100: 51 4c 49 54 45 5f 52 41 4e 47 45 3a 20 20 20 20  QLITE_RANGE:    
1110: 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54    zName = "SQLIT
1120: 45 5f 52 41 4e 47 45 22 3b 20 20 20 20 20 20 20  E_RANGE";       
1130: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
1140: 53 51 4c 49 54 45 5f 52 4f 57 3a 20 20 20 20 20  SQLITE_ROW:     
1150: 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49     zName = "SQLI
1160: 54 45 5f 52 4f 57 22 3b 20 20 20 20 20 20 20 20  TE_ROW";        
1170: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
1180: 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3a 20 20 20   SQLITE_DONE:   
1190: 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c      zName = "SQL
11a0: 49 54 45 5f 44 4f 4e 45 22 3b 20 20 20 20 20 20  ITE_DONE";      
11b0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
11c0: 65 20 53 51 4c 49 54 45 5f 4e 4f 54 41 44 42 3a  e SQLITE_NOTADB:
11d0: 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51       zName = "SQ
11e0: 4c 49 54 45 5f 4e 4f 54 41 44 42 22 3b 20 20 20  LITE_NOTADB";   
11f0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65     break;.    de
1200: 66 61 75 6c 74 3a 20 20 20 20 20 20 20 20 20 20  fault:          
1210: 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53        zName = "S
1220: 51 4c 49 54 45 5f 55 6e 6b 6e 6f 77 6e 22 3b 20  QLITE_Unknown"; 
1230: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
1240: 20 72 65 74 75 72 6e 20 7a 4e 61 6d 65 3b 0a 7d   return zName;.}
1250: 0a 23 64 65 66 69 6e 65 20 74 31 45 72 72 6f 72  .#define t1Error
1260: 4e 61 6d 65 20 73 71 6c 69 74 65 33 54 65 73 74  Name sqlite3Test
1270: 45 72 72 6f 72 4e 61 6d 65 0a 0a 2f 2a 0a 2a 2a  ErrorName../*.**
1280: 20 43 6f 6e 76 65 72 74 20 61 6e 20 73 71 6c 69   Convert an sqli
1290: 74 65 33 5f 73 74 6d 74 2a 20 69 6e 74 6f 20 61  te3_stmt* into a
12a0: 6e 20 73 71 6c 69 74 65 33 2a 2e 20 20 54 68 69  n sqlite3*.  Thi
12b0: 73 20 64 65 70 65 6e 64 73 20 6f 6e 20 74 68 65  s depends on the
12c0: 0a 2a 2a 20 66 61 63 74 20 74 68 61 74 20 74 68  .** fact that th
12d0: 65 20 73 71 6c 69 74 65 33 2a 20 69 73 20 74 68  e sqlite3* is th
12e0: 65 20 66 69 72 73 74 20 66 69 65 6c 64 20 69 6e  e first field in
12f0: 20 74 68 65 20 56 64 62 65 20 73 74 72 75 63 74   the Vdbe struct
1300: 75 72 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ure..*/.#define 
1310: 53 74 6d 74 54 6f 44 62 28 58 29 20 20 20 73 71  StmtToDb(X)   sq
1320: 6c 69 74 65 33 5f 64 62 5f 68 61 6e 64 6c 65 28  lite3_db_handle(
1330: 58 29 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20  X)../*.** Check 
1340: 61 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 74  a return value t
1350: 6f 20 6d 61 6b 65 20 73 75 72 65 20 69 74 20 61  o make sure it a
1360: 67 72 65 65 73 20 77 69 74 68 20 74 68 65 20 72  grees with the r
1370: 65 73 75 6c 74 73 0a 2a 2a 20 66 72 6f 6d 20 73  esults.** from s
1380: 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 2e 0a  qlite3_errcode..
1390: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65  */.int sqlite3Te
13a0: 73 74 45 72 72 43 6f 64 65 28 54 63 6c 5f 49 6e  stErrCode(Tcl_In
13b0: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 73 71  terp *interp, sq
13c0: 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 20 72  lite3 *db, int r
13d0: 63 29 7b 0a 20 20 69 66 28 20 72 63 21 3d 53 51  c){.  if( rc!=SQ
13e0: 4c 49 54 45 5f 4d 49 53 55 53 45 20 26 26 20 72  LITE_MISUSE && r
13f0: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c!=SQLITE_OK && 
1400: 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28  sqlite3_errcode(
1410: 64 62 29 21 3d 72 63 20 29 7b 0a 20 20 20 20 63  db)!=rc ){.    c
1420: 68 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20  har zBuf[200];. 
1430: 20 20 20 69 6e 74 20 72 32 20 3d 20 73 71 6c 69     int r2 = sqli
1440: 74 65 33 5f 65 72 72 63 6f 64 65 28 64 62 29 3b  te3_errcode(db);
1450: 0a 20 20 20 20 73 70 72 69 6e 74 66 28 7a 42 75  .    sprintf(zBu
1460: 66 2c 20 22 65 72 72 6f 72 20 63 6f 64 65 20 25  f, "error code %
1470: 73 20 28 25 64 29 20 64 6f 65 73 20 6e 6f 74 20  s (%d) does not 
1480: 6d 61 74 63 68 20 73 71 6c 69 74 65 33 5f 65 72  match sqlite3_er
1490: 72 63 6f 64 65 20 25 73 20 28 25 64 29 22 2c 0a  rcode %s (%d)",.
14a0: 20 20 20 20 20 20 20 74 31 45 72 72 6f 72 4e 61         t1ErrorNa
14b0: 6d 65 28 72 63 29 2c 20 72 63 2c 20 74 31 45 72  me(rc), rc, t1Er
14c0: 72 6f 72 4e 61 6d 65 28 72 32 29 2c 20 72 32 29  rorName(r2), r2)
14d0: 3b 0a 20 20 20 20 54 63 6c 5f 52 65 73 65 74 52  ;.    Tcl_ResetR
14e0: 65 73 75 6c 74 28 69 6e 74 65 72 70 29 3b 0a 20  esult(interp);. 
14f0: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
1500: 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66  ult(interp, zBuf
1510: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
1520: 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e   1;.  }.  return
1530: 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 65 63   0;.}../*.** Dec
1540: 6f 64 65 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  ode a pointer to
1550: 20 61 6e 20 73 71 6c 69 74 65 33 5f 73 74 6d 74   an sqlite3_stmt
1560: 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 73 74 61 74   object..*/.stat
1570: 69 63 20 69 6e 74 20 67 65 74 53 74 6d 74 50 6f  ic int getStmtPo
1580: 69 6e 74 65 72 28 0a 20 20 54 63 6c 5f 49 6e 74  inter(.  Tcl_Int
1590: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 0a 20 20  erp *interp, .  
15a0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 72 67  const char *zArg
15b0: 2c 20 20 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  ,  .  sqlite3_st
15c0: 6d 74 20 2a 2a 70 70 53 74 6d 74 0a 29 7b 0a 20  mt **ppStmt.){. 
15d0: 20 2a 70 70 53 74 6d 74 20 3d 20 28 73 71 6c 69   *ppStmt = (sqli
15e0: 74 65 33 5f 73 74 6d 74 2a 29 73 71 6c 69 74 65  te3_stmt*)sqlite
15f0: 33 54 65 78 74 54 6f 50 74 72 28 7a 41 72 67 29  3TextToPtr(zArg)
1600: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
1610: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e 65  K;.}../*.** Gene
1620: 72 61 74 65 20 61 20 74 65 78 74 20 72 65 70 72  rate a text repr
1630: 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 20  esentation of a 
1640: 70 6f 69 6e 74 65 72 20 74 68 61 74 20 63 61 6e  pointer that can
1650: 20 62 65 20 75 6e 64 65 72 73 74 6f 6f 64 0a 2a   be understood.*
1660: 2a 20 62 79 20 74 68 65 20 67 65 74 44 62 50 6f  * by the getDbPo
1670: 69 6e 74 65 72 20 61 6e 64 20 67 65 74 56 6d 50  inter and getVmP
1680: 6f 69 6e 74 65 72 20 72 6f 75 74 69 6e 65 73 20  ointer routines 
1690: 61 62 6f 76 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  above..**.** The
16a0: 20 70 72 6f 62 6c 65 6d 20 69 73 2c 20 6f 6e 20   problem is, on 
16b0: 73 6f 6d 65 20 6d 61 63 68 69 6e 65 73 20 28 53  some machines (S
16c0: 6f 6c 61 72 69 73 29 20 69 66 20 79 6f 75 20 64  olaris) if you d
16d0: 6f 20 61 20 70 72 69 6e 74 66 20 77 69 74 68 0a  o a printf with.
16e0: 2a 2a 20 22 25 70 22 20 79 6f 75 20 63 61 6e 6e  ** "%p" you cann
16f0: 6f 74 20 74 75 72 6e 20 61 72 6f 75 6e 64 20 61  ot turn around a
1700: 6e 64 20 64 6f 20 61 20 73 63 61 6e 66 20 77 69  nd do a scanf wi
1710: 74 68 20 74 68 65 20 73 61 6d 65 20 22 25 70 22  th the same "%p"
1720: 20 61 6e 64 0a 2a 2a 20 67 65 74 20 79 6f 75 72   and.** get your
1730: 20 70 6f 69 6e 74 65 72 20 62 61 63 6b 2e 20 20   pointer back.  
1740: 59 6f 75 20 68 61 76 65 20 74 6f 20 70 72 65 70  You have to prep
1750: 65 6e 64 20 61 20 22 30 78 22 20 62 65 66 6f 72  end a "0x" befor
1760: 65 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 77 6f 72  e it will.** wor
1770: 6b 2e 20 20 4f 72 20 61 74 20 6c 65 61 73 74 20  k.  Or at least 
1780: 74 68 61 74 20 69 73 20 77 68 61 74 20 69 73 20  that is what is 
1790: 72 65 70 6f 72 74 65 64 20 74 6f 20 6d 65 20 28  reported to me (
17a0: 64 72 68 29 2e 20 20 42 75 74 20 74 68 69 73 0a  drh).  But this.
17b0: 2a 2a 20 62 65 68 61 76 69 6f 72 20 76 61 72 69  ** behavior vari
17c0: 65 73 20 66 72 6f 6d 20 6d 61 63 68 69 6e 65 20  es from machine 
17d0: 74 6f 20 6d 61 63 68 69 6e 65 2e 20 20 54 68 65  to machine.  The
17e0: 20 73 6f 6c 75 74 69 6f 6e 20 75 73 65 64 20 68   solution used h
17f0: 65 72 20 69 73 0a 2a 2a 20 74 6f 20 74 65 73 74  er is.** to test
1800: 20 74 68 65 20 73 74 72 69 6e 67 20 72 69 67 68   the string righ
1810: 74 20 61 66 74 65 72 20 69 74 20 69 73 20 67 65  t after it is ge
1820: 6e 65 72 61 74 65 64 20 74 6f 20 73 65 65 20 69  nerated to see i
1830: 66 20 69 74 20 63 61 6e 20 62 65 0a 2a 2a 20 75  f it can be.** u
1840: 6e 64 65 72 73 74 6f 6f 64 20 62 79 20 73 63 61  nderstood by sca
1850: 6e 66 2c 20 61 6e 64 20 69 66 20 6e 6f 74 2c 20  nf, and if not, 
1860: 74 72 79 20 70 72 65 70 65 6e 64 69 6e 67 20 61  try prepending a
1870: 6e 20 22 30 78 22 20 74 6f 20 73 65 65 20 69 66  n "0x" to see if
1880: 0a 2a 2a 20 74 68 61 74 20 68 65 6c 70 73 2e 20  .** that helps. 
1890: 20 49 66 20 6e 6f 74 68 69 6e 67 20 77 6f 72 6b   If nothing work
18a0: 73 2c 20 61 20 66 61 74 61 6c 20 65 72 72 6f 72  s, a fatal error
18b0: 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e 0a 2a   is generated..*
18c0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65 73  /.int sqlite3Tes
18d0: 74 4d 61 6b 65 50 6f 69 6e 74 65 72 53 74 72 28  tMakePointerStr(
18e0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
18f0: 72 70 2c 20 63 68 61 72 20 2a 7a 50 74 72 2c 20  rp, char *zPtr, 
1900: 76 6f 69 64 20 2a 70 29 7b 0a 20 20 73 71 6c 69  void *p){.  sqli
1910: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30  te3_snprintf(100
1920: 2c 20 7a 50 74 72 2c 20 22 25 70 22 2c 20 70 29  , zPtr, "%p", p)
1930: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
1940: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  K;.}../*.** The 
1950: 63 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69 6e 65  callback routine
1960: 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 65 78 65   for sqlite3_exe
1970: 63 5f 70 72 69 6e 74 66 28 29 2e 0a 2a 2f 0a 73  c_printf()..*/.s
1980: 74 61 74 69 63 20 69 6e 74 20 65 78 65 63 5f 70  tatic int exec_p
1990: 72 69 6e 74 66 5f 63 62 28 76 6f 69 64 20 2a 70  rintf_cb(void *p
19a0: 41 72 67 2c 20 69 6e 74 20 61 72 67 63 2c 20 63  Arg, int argc, c
19b0: 68 61 72 20 2a 2a 61 72 67 76 2c 20 63 68 61 72  har **argv, char
19c0: 20 2a 2a 6e 61 6d 65 29 7b 0a 20 20 54 63 6c 5f   **name){.  Tcl_
19d0: 44 53 74 72 69 6e 67 20 2a 73 74 72 20 3d 20 28  DString *str = (
19e0: 54 63 6c 5f 44 53 74 72 69 6e 67 2a 29 70 41 72  Tcl_DString*)pAr
19f0: 67 3b 0a 20 20 69 6e 74 20 69 3b 0a 0a 20 20 69  g;.  int i;..  i
1a00: 66 28 20 54 63 6c 5f 44 53 74 72 69 6e 67 4c 65  f( Tcl_DStringLe
1a10: 6e 67 74 68 28 73 74 72 29 3d 3d 30 20 29 7b 0a  ngth(str)==0 ){.
1a20: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 61      for(i=0; i<a
1a30: 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  rgc; i++){.     
1a40: 20 54 63 6c 5f 44 53 74 72 69 6e 67 41 70 70 65   Tcl_DStringAppe
1a50: 6e 64 45 6c 65 6d 65 6e 74 28 73 74 72 2c 20 6e  ndElement(str, n
1a60: 61 6d 65 5b 69 5d 20 3f 20 6e 61 6d 65 5b 69 5d  ame[i] ? name[i]
1a70: 20 3a 20 22 4e 55 4c 4c 22 29 3b 0a 20 20 20 20   : "NULL");.    
1a80: 7d 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 3b  }.  }.  for(i=0;
1a90: 20 69 3c 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20   i<argc; i++){. 
1aa0: 20 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 41 70     Tcl_DStringAp
1ab0: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 73 74 72 2c  pendElement(str,
1ac0: 20 61 72 67 76 5b 69 5d 20 3f 20 61 72 67 76 5b   argv[i] ? argv[
1ad0: 69 5d 20 3a 20 22 4e 55 4c 4c 22 29 3b 0a 20 20  i] : "NULL");.  
1ae0: 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a  }.  return 0;.}.
1af0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 49 2f 4f 20 74  ./*.** The I/O t
1b00: 72 61 63 69 6e 67 20 63 61 6c 6c 62 61 63 6b 2e  racing callback.
1b10: 0a 2a 2f 0a 73 74 61 74 69 63 20 46 49 4c 45 20  .*/.static FILE 
1b20: 2a 69 6f 74 72 61 63 65 5f 66 69 6c 65 20 3d 20  *iotrace_file = 
1b30: 30 3b 0a 73 74 61 74 69 63 20 76 6f 69 64 20 69  0;.static void i
1b40: 6f 5f 74 72 61 63 65 5f 63 61 6c 6c 62 61 63 6b  o_trace_callback
1b50: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f  (const char *zFo
1b60: 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61  rmat, ...){.  va
1b70: 5f 6c 69 73 74 20 61 70 3b 0a 20 20 76 61 5f 73  _list ap;.  va_s
1b80: 74 61 72 74 28 61 70 2c 20 7a 46 6f 72 6d 61 74  tart(ap, zFormat
1b90: 29 3b 0a 20 20 76 66 70 72 69 6e 74 66 28 69 6f  );.  vfprintf(io
1ba0: 74 72 61 63 65 5f 66 69 6c 65 2c 20 7a 46 6f 72  trace_file, zFor
1bb0: 6d 61 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65  mat, ap);.  va_e
1bc0: 6e 64 28 61 70 29 3b 0a 20 20 66 66 6c 75 73 68  nd(ap);.  fflush
1bd0: 28 69 6f 74 72 61 63 65 5f 66 69 6c 65 29 3b 0a  (iotrace_file);.
1be0: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
1bf0: 20 69 6f 5f 74 72 61 63 65 20 46 49 4c 45 4e 41   io_trace FILENA
1c00: 4d 45 0a 2a 2a 0a 2a 2a 20 54 75 72 6e 20 49 2f  ME.**.** Turn I/
1c10: 4f 20 74 72 61 63 69 6e 67 20 6f 6e 20 6f 72 20  O tracing on or 
1c20: 6f 66 66 2e 20 20 49 66 20 46 49 4c 45 4e 41 4d  off.  If FILENAM
1c30: 45 20 69 73 20 6e 6f 74 20 61 6e 20 65 6d 70 74  E is not an empt
1c40: 79 20 73 74 72 69 6e 67 2c 0a 2a 2a 20 49 2f 4f  y string,.** I/O
1c50: 20 74 72 61 63 69 6e 67 20 62 65 67 69 6e 73 20   tracing begins 
1c60: 67 6f 69 6e 67 20 69 6e 74 6f 20 46 49 4c 45 4e  going into FILEN
1c70: 41 4d 45 2e 20 49 66 20 46 49 4c 45 4e 41 4d 45  AME. If FILENAME
1c80: 20 69 73 20 61 6e 20 65 6d 70 74 79 0a 2a 2a 20   is an empty.** 
1c90: 73 74 72 69 6e 67 2c 20 49 2f 4f 20 74 72 61 63  string, I/O trac
1ca0: 69 6e 67 20 69 73 20 74 75 72 6e 65 64 20 6f 66  ing is turned of
1cb0: 66 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  f..*/.static int
1cc0: 20 74 65 73 74 5f 69 6f 5f 74 72 61 63 65 28 0a   test_io_trace(.
1cd0: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
1ce0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
1cf0: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
1d00: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
1d10: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
1d20: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
1d30: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
1d40: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1d50: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
1d60: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
1d70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
1d80: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
1d90: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61  nt */.){.  if( a
1da0: 72 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  rgc!=2 ){.    Tc
1db0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
1dc0: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
1dd0: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
1de0: 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20  \"", argv[0],.  
1df0: 20 20 20 20 20 20 20 20 22 20 46 49 4c 45 4e 41          " FILENA
1e00: 4d 45 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72  ME\"", 0);.    r
1e10: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
1e20: 0a 20 20 7d 0a 20 20 69 66 28 20 69 6f 74 72 61  .  }.  if( iotra
1e30: 63 65 5f 66 69 6c 65 20 29 7b 0a 20 20 20 20 69  ce_file ){.    i
1e40: 66 28 20 69 6f 74 72 61 63 65 5f 66 69 6c 65 21  f( iotrace_file!
1e50: 3d 73 74 64 6f 75 74 20 26 26 20 69 6f 74 72 61  =stdout && iotra
1e60: 63 65 5f 66 69 6c 65 21 3d 73 74 64 65 72 72 20  ce_file!=stderr 
1e70: 29 7b 0a 20 20 20 20 20 20 66 63 6c 6f 73 65 28  ){.      fclose(
1e80: 69 6f 74 72 61 63 65 5f 66 69 6c 65 29 3b 0a 20  iotrace_file);. 
1e90: 20 20 20 7d 0a 20 20 20 20 69 6f 74 72 61 63 65     }.    iotrace
1ea0: 5f 66 69 6c 65 20 3d 20 30 3b 0a 20 20 20 20 73  _file = 0;.    s
1eb0: 71 6c 69 74 65 33 5f 69 6f 5f 74 72 61 63 65 20  qlite3_io_trace 
1ec0: 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 61  = 0;.  }.  if( a
1ed0: 72 67 76 5b 31 5d 5b 30 5d 20 29 7b 0a 20 20 20  rgv[1][0] ){.   
1ee0: 20 69 66 28 20 73 74 72 63 6d 70 28 61 72 67 76   if( strcmp(argv
1ef0: 5b 31 5d 2c 22 73 74 64 6f 75 74 22 29 3d 3d 30  [1],"stdout")==0
1f00: 20 29 7b 0a 20 20 20 20 20 20 69 6f 74 72 61 63   ){.      iotrac
1f10: 65 5f 66 69 6c 65 20 3d 20 73 74 64 6f 75 74 3b  e_file = stdout;
1f20: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73  .    }else if( s
1f30: 74 72 63 6d 70 28 61 72 67 76 5b 31 5d 2c 22 73  trcmp(argv[1],"s
1f40: 74 64 65 72 72 22 29 3d 3d 30 20 29 7b 0a 20 20  tderr")==0 ){.  
1f50: 20 20 20 20 69 6f 74 72 61 63 65 5f 66 69 6c 65      iotrace_file
1f60: 20 3d 20 73 74 64 65 72 72 3b 0a 20 20 20 20 7d   = stderr;.    }
1f70: 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6f 74 72  else{.      iotr
1f80: 61 63 65 5f 66 69 6c 65 20 3d 20 66 6f 70 65 6e  ace_file = fopen
1f90: 28 61 72 67 76 5b 31 5d 2c 20 22 77 22 29 3b 0a  (argv[1], "w");.
1fa0: 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
1fb0: 33 5f 69 6f 5f 74 72 61 63 65 20 3d 20 69 6f 5f  3_io_trace = io_
1fc0: 74 72 61 63 65 5f 63 61 6c 6c 62 61 63 6b 3b 0a  trace_callback;.
1fd0: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 53 51 4c    }.  return SQL
1fe0: 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a  ITE_OK;.}.../*.*
1ff0: 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
2000: 33 5f 65 78 65 63 5f 70 72 69 6e 74 66 20 20 44  3_exec_printf  D
2010: 42 20 20 46 4f 52 4d 41 54 20 20 53 54 52 49 4e  B  FORMAT  STRIN
2020: 47 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  G.**.** Invoke t
2030: 68 65 20 73 71 6c 69 74 65 33 5f 65 78 65 63 5f  he sqlite3_exec_
2040: 70 72 69 6e 74 66 28 29 20 69 6e 74 65 72 66 61  printf() interfa
2050: 63 65 20 75 73 69 6e 67 20 74 68 65 20 6f 70 65  ce using the ope
2060: 6e 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 44 42  n database.** DB
2070: 2e 20 20 54 68 65 20 53 51 4c 20 69 73 20 74 68  .  The SQL is th
2080: 65 20 73 74 72 69 6e 67 20 46 4f 52 4d 41 54 2e  e string FORMAT.
2090: 20 20 54 68 65 20 66 6f 72 6d 61 74 20 73 74 72    The format str
20a0: 69 6e 67 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61  ing should conta
20b0: 69 6e 0a 2a 2a 20 6f 6e 65 20 25 73 20 6f 72 20  in.** one %s or 
20c0: 25 71 2e 20 20 53 54 52 49 4e 47 20 69 73 20 74  %q.  STRING is t
20d0: 68 65 20 76 61 6c 75 65 20 69 6e 73 65 72 74 65  he value inserte
20e0: 64 20 69 6e 74 6f 20 25 73 20 6f 72 20 25 71 2e  d into %s or %q.
20f0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
2100: 65 73 74 5f 65 78 65 63 5f 70 72 69 6e 74 66 28  est_exec_printf(
2110: 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64  .  void *NotUsed
2120: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
2130: 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
2140: 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
2150: 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
2160: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
2170: 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20   int argc,      
2180: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
2190: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
21a0: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20  /.  char **argv 
21b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
21c0: 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d  xt of each argum
21d0: 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69  ent */.){.  sqli
21e0: 74 65 33 20 2a 64 62 3b 0a 20 20 54 63 6c 5f 44  te3 *db;.  Tcl_D
21f0: 53 74 72 69 6e 67 20 73 74 72 3b 0a 20 20 69 6e  String str;.  in
2200: 74 20 72 63 3b 0a 20 20 63 68 61 72 20 2a 7a 45  t rc;.  char *zE
2210: 72 72 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 2a  rr = 0;.  char *
2220: 7a 53 71 6c 3b 0a 20 20 63 68 61 72 20 7a 42 75  zSql;.  char zBu
2230: 66 5b 33 30 5d 3b 0a 20 20 69 66 28 20 61 72 67  f[30];.  if( arg
2240: 63 21 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=4 ){.    Tcl_
2250: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
2260: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
2270: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
2280: 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20  ", argv[0], .   
2290: 20 20 20 20 22 20 44 42 20 46 4f 52 4d 41 54 20      " DB FORMAT 
22a0: 53 54 52 49 4e 47 22 2c 20 30 29 3b 0a 20 20 20  STRING", 0);.   
22b0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
22c0: 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74  R;.  }.  if( get
22d0: 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  DbPointer(interp
22e0: 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20  , argv[1], &db) 
22f0: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
2300: 4f 52 3b 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e  OR;.  Tcl_DStrin
2310: 67 49 6e 69 74 28 26 73 74 72 29 3b 0a 20 20 7a  gInit(&str);.  z
2320: 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  Sql = sqlite3_mp
2330: 72 69 6e 74 66 28 61 72 67 76 5b 32 5d 2c 20 61  rintf(argv[2], a
2340: 72 67 76 5b 33 5d 29 3b 0a 20 20 72 63 20 3d 20  rgv[3]);.  rc = 
2350: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c  sqlite3_exec(db,
2360: 20 7a 53 71 6c 2c 20 65 78 65 63 5f 70 72 69 6e   zSql, exec_prin
2370: 74 66 5f 63 62 2c 20 26 73 74 72 2c 20 26 7a 45  tf_cb, &str, &zE
2380: 72 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66  rr);.  sqlite3_f
2390: 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 73 70 72  ree(zSql);.  spr
23a0: 69 6e 74 66 28 7a 42 75 66 2c 20 22 25 64 22 2c  intf(zBuf, "%d",
23b0: 20 72 63 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65   rc);.  Tcl_Appe
23c0: 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70  ndElement(interp
23d0: 2c 20 7a 42 75 66 29 3b 0a 20 20 54 63 6c 5f 41  , zBuf);.  Tcl_A
23e0: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74  ppendElement(int
23f0: 65 72 70 2c 20 72 63 3d 3d 53 51 4c 49 54 45 5f  erp, rc==SQLITE_
2400: 4f 4b 20 3f 20 54 63 6c 5f 44 53 74 72 69 6e 67  OK ? Tcl_DString
2410: 56 61 6c 75 65 28 26 73 74 72 29 20 3a 20 7a 45  Value(&str) : zE
2420: 72 72 29 3b 0a 20 20 54 63 6c 5f 44 53 74 72 69  rr);.  Tcl_DStri
2430: 6e 67 46 72 65 65 28 26 73 74 72 29 3b 0a 20 20  ngFree(&str);.  
2440: 69 66 28 20 7a 45 72 72 20 29 20 73 71 6c 69 74  if( zErr ) sqlit
2450: 65 33 5f 66 72 65 65 28 7a 45 72 72 29 3b 0a 20  e3_free(zErr);. 
2460: 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74   if( sqlite3Test
2470: 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20  ErrCode(interp, 
2480: 64 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e  db, rc) ) return
2490: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65   TCL_ERROR;.  re
24a0: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
24b0: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 64 62  /*.** Usage:  db
24c0: 5f 65 6e 74 65 72 20 44 42 0a 2a 2a 20 20 20 20  _enter DB.**    
24d0: 20 20 20 20 20 64 62 5f 6c 65 61 76 65 20 44 42       db_leave DB
24e0: 0a 2a 2a 0a 2a 2a 20 45 6e 74 65 72 20 6f 72 20  .**.** Enter or 
24f0: 6c 65 61 76 65 20 74 68 65 20 6d 75 74 65 78 20  leave the mutex 
2500: 6f 6e 20 61 20 64 61 74 61 62 61 73 65 20 63 6f  on a database co
2510: 6e 6e 65 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61  nnection..*/.sta
2520: 74 69 63 20 69 6e 74 20 64 62 5f 65 6e 74 65 72  tic int db_enter
2530: 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65  (.  void *NotUse
2540: 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  d,.  Tcl_Interp 
2550: 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
2560: 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
2570: 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
2580: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
2590: 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20    int argc,     
25a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
25b0: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
25c0: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  */.  char **argv
25d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
25e0: 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75  ext of each argu
25f0: 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c  ment */.){.  sql
2600: 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 66 28 20  ite3 *db;.  if( 
2610: 61 72 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  argc!=2 ){.    T
2620: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
2630: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
2640: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
2650: 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a   \"", argv[0], .
2660: 20 20 20 20 20 20 20 22 20 44 42 22 2c 20 30 29         " DB", 0)
2670: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
2680: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
2690: 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69  ( getDbPointer(i
26a0: 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20  nterp, argv[1], 
26b0: 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
26c0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 73 71 6c 69 74  L_ERROR;.  sqlit
26d0: 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 64  e3_mutex_enter(d
26e0: 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65 74  b->mutex);.  ret
26f0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 73 74  urn TCL_OK;.}.st
2700: 61 74 69 63 20 69 6e 74 20 64 62 5f 6c 65 61 76  atic int db_leav
2710: 65 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73  e(.  void *NotUs
2720: 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ed,.  Tcl_Interp
2730: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
2740: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
2750: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
2760: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
2770: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20  .  int argc,    
2780: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
2790: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
27a0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67   */.  char **arg
27b0: 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  v            /* 
27c0: 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67  Text of each arg
27d0: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71  ument */.){.  sq
27e0: 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 66 28  lite3 *db;.  if(
27f0: 20 61 72 67 63 21 3d 32 20 29 7b 0a 20 20 20 20   argc!=2 ){.    
2800: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
2810: 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
2820: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
2830: 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20  e \"", argv[0], 
2840: 0a 20 20 20 20 20 20 20 22 20 44 42 22 2c 20 30  .       " DB", 0
2850: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
2860: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
2870: 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
2880: 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c  interp, argv[1],
2890: 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
28a0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 73 71 6c 69  CL_ERROR;.  sqli
28b0: 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28  te3_mutex_leave(
28c0: 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65  db->mutex);.  re
28d0: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
28e0: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
28f0: 6c 69 74 65 33 5f 65 78 65 63 20 20 44 42 20 20  lite3_exec  DB  
2900: 53 51 4c 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65  SQL.**.** Invoke
2910: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 65 78 65   the sqlite3_exe
2920: 63 20 69 6e 74 65 72 66 61 63 65 20 75 73 69 6e  c interface usin
2930: 67 20 74 68 65 20 6f 70 65 6e 20 64 61 74 61 62  g the open datab
2940: 61 73 65 20 44 42 0a 2a 2f 0a 73 74 61 74 69 63  ase DB.*/.static
2950: 20 69 6e 74 20 74 65 73 74 5f 65 78 65 63 28 0a   int test_exec(.
2960: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
2970: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
2980: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
2990: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
29a0: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
29b0: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
29c0: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
29d0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
29e0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
29f0: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
2a00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
2a10: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
2a20: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74  nt */.){.  sqlit
2a30: 65 33 20 2a 64 62 3b 0a 20 20 54 63 6c 5f 44 53  e3 *db;.  Tcl_DS
2a40: 74 72 69 6e 67 20 73 74 72 3b 0a 20 20 69 6e 74  tring str;.  int
2a50: 20 72 63 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72   rc;.  char *zEr
2a60: 72 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 2a 7a  r = 0;.  char *z
2a70: 53 71 6c 3b 0a 20 20 69 6e 74 20 69 2c 20 6a 3b  Sql;.  int i, j;
2a80: 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 33 30 5d  .  char zBuf[30]
2a90: 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 33 20  ;.  if( argc!=3 
2aa0: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
2ab0: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
2ac0: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
2ad0: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72  hould be \"", ar
2ae0: 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 22  gv[0], .       "
2af0: 20 44 42 20 53 51 4c 22 2c 20 30 29 3b 0a 20 20   DB SQL", 0);.  
2b00: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
2b10: 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
2b20: 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tDbPointer(inter
2b30: 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29  p, argv[1], &db)
2b40: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
2b50: 52 4f 52 3b 0a 20 20 54 63 6c 5f 44 53 74 72 69  ROR;.  Tcl_DStri
2b60: 6e 67 49 6e 69 74 28 26 73 74 72 29 3b 0a 20 20  ngInit(&str);.  
2b70: 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d  zSql = sqlite3_m
2b80: 70 72 69 6e 74 66 28 22 25 73 22 2c 20 61 72 67  printf("%s", arg
2b90: 76 5b 32 5d 29 3b 0a 20 20 66 6f 72 28 69 3d 6a  v[2]);.  for(i=j
2ba0: 3d 30 3b 20 7a 53 71 6c 5b 69 5d 3b 29 7b 0a 20  =0; zSql[i];){. 
2bb0: 20 20 20 69 66 28 20 7a 53 71 6c 5b 69 5d 3d 3d     if( zSql[i]==
2bc0: 27 25 27 20 29 7b 0a 20 20 20 20 20 20 7a 53 71  '%' ){.      zSq
2bd0: 6c 5b 6a 2b 2b 5d 20 3d 20 28 74 65 73 74 48 65  l[j++] = (testHe
2be0: 78 54 6f 49 6e 74 28 7a 53 71 6c 5b 69 2b 31 5d  xToInt(zSql[i+1]
2bf0: 29 3c 3c 34 29 20 2b 20 74 65 73 74 48 65 78 54  )<<4) + testHexT
2c00: 6f 49 6e 74 28 7a 53 71 6c 5b 69 2b 32 5d 29 3b  oInt(zSql[i+2]);
2c10: 0a 20 20 20 20 20 20 69 20 2b 3d 20 33 3b 0a 20  .      i += 3;. 
2c20: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2c30: 7a 53 71 6c 5b 6a 2b 2b 5d 20 3d 20 7a 53 71 6c  zSql[j++] = zSql
2c40: 5b 69 2b 2b 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d  [i++];.    }.  }
2c50: 0a 20 20 7a 53 71 6c 5b 6a 5d 20 3d 20 30 3b 0a  .  zSql[j] = 0;.
2c60: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65    rc = sqlite3_e
2c70: 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20 65 78  xec(db, zSql, ex
2c80: 65 63 5f 70 72 69 6e 74 66 5f 63 62 2c 20 26 73  ec_printf_cb, &s
2c90: 74 72 2c 20 26 7a 45 72 72 29 3b 0a 20 20 73 71  tr, &zErr);.  sq
2ca0: 6c 69 74 65 33 5f 66 72 65 65 28 7a 53 71 6c 29  lite3_free(zSql)
2cb0: 3b 0a 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66  ;.  sprintf(zBuf
2cc0: 2c 20 22 25 64 22 2c 20 72 63 29 3b 0a 20 20 54  , "%d", rc);.  T
2cd0: 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  cl_AppendElement
2ce0: 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 29 3b 0a  (interp, zBuf);.
2cf0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d    Tcl_AppendElem
2d00: 65 6e 74 28 69 6e 74 65 72 70 2c 20 72 63 3d 3d  ent(interp, rc==
2d10: 53 51 4c 49 54 45 5f 4f 4b 20 3f 20 54 63 6c 5f  SQLITE_OK ? Tcl_
2d20: 44 53 74 72 69 6e 67 56 61 6c 75 65 28 26 73 74  DStringValue(&st
2d30: 72 29 20 3a 20 7a 45 72 72 29 3b 0a 20 20 54 63  r) : zErr);.  Tc
2d40: 6c 5f 44 53 74 72 69 6e 67 46 72 65 65 28 26 73  l_DStringFree(&s
2d50: 74 72 29 3b 0a 20 20 69 66 28 20 7a 45 72 72 20  tr);.  if( zErr 
2d60: 29 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a  ) sqlite3_free(z
2d70: 45 72 72 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  Err);.  if( sqli
2d80: 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69  te3TestErrCode(i
2d90: 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29  nterp, db, rc) )
2da0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
2db0: 52 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  R;.  return TCL_
2dc0: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
2dd0: 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 65 78 65  ge:  sqlite3_exe
2de0: 63 5f 6e 72 20 20 44 42 20 20 53 51 4c 0a 2a 2a  c_nr  DB  SQL.**
2df0: 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 73  .** Invoke the s
2e00: 71 6c 69 74 65 33 5f 65 78 65 63 20 69 6e 74 65  qlite3_exec inte
2e10: 72 66 61 63 65 20 75 73 69 6e 67 20 74 68 65 20  rface using the 
2e20: 6f 70 65 6e 20 64 61 74 61 62 61 73 65 20 44 42  open database DB
2e30: 2e 20 20 44 69 73 63 61 72 64 0a 2a 2a 20 61 6c  .  Discard.** al
2e40: 6c 20 72 65 73 75 6c 74 73 0a 2a 2f 0a 73 74 61  l results.*/.sta
2e50: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 65 78 65  tic int test_exe
2e60: 63 5f 6e 72 28 0a 20 20 76 6f 69 64 20 2a 4e 6f  c_nr(.  void *No
2e70: 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74  tUsed,.  Tcl_Int
2e80: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
2e90: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
2ea0: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
2eb0: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
2ec0: 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20   */.  int argc, 
2ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2ee0: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
2ef0: 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  nts */.  char **
2f00: 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20  argv            
2f10: 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20  /* Text of each 
2f20: 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20  argument */.){. 
2f30: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
2f40: 69 6e 74 20 72 63 3b 0a 20 20 63 68 61 72 20 2a  int rc;.  char *
2f50: 7a 45 72 72 20 3d 20 30 3b 0a 20 20 69 66 28 20  zErr = 0;.  if( 
2f60: 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54  argc!=3 ){.    T
2f70: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
2f80: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
2f90: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
2fa0: 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a   \"", argv[0], .
2fb0: 20 20 20 20 20 20 20 22 20 44 42 20 53 51 4c 22         " DB SQL"
2fc0: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
2fd0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
2fe0: 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74    if( getDbPoint
2ff0: 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  er(interp, argv[
3000: 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72  1], &db) ) retur
3010: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72  n TCL_ERROR;.  r
3020: 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63  c = sqlite3_exec
3030: 28 64 62 2c 20 61 72 67 76 5b 32 5d 2c 20 30 2c  (db, argv[2], 0,
3040: 20 30 2c 20 26 7a 45 72 72 29 3b 0a 20 20 69 66   0, &zErr);.  if
3050: 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72  ( sqlite3TestErr
3060: 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c  Code(interp, db,
3070: 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43   rc) ) return TC
3080: 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74 75 72  L_ERROR;.  retur
3090: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
30a0: 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
30b0: 65 33 5f 6d 70 72 69 6e 74 66 5f 7a 5f 74 65 73  e3_mprintf_z_tes
30c0: 74 20 20 53 45 50 41 52 41 54 4f 52 20 20 41 52  t  SEPARATOR  AR
30d0: 47 30 20 20 41 52 47 31 20 2e 2e 2e 0a 2a 2a 0a  G0  ARG1 ....**.
30e0: 2a 2a 20 54 65 73 74 20 74 68 65 20 25 7a 20 66  ** Test the %z f
30f0: 6f 72 6d 61 74 20 6f 66 20 73 71 6c 69 74 65 4d  ormat of sqliteM
3100: 50 72 69 6e 74 66 28 29 2e 20 20 55 73 65 20 6d  Printf().  Use m
3110: 75 6c 74 69 70 6c 65 20 6d 70 72 69 6e 74 66 28  ultiple mprintf(
3120: 29 20 63 61 6c 6c 73 20 74 6f 20 0a 2a 2a 20 63  ) calls to .** c
3130: 6f 6e 63 61 74 65 6e 61 74 65 20 61 72 67 30 20  oncatenate arg0 
3140: 74 68 72 6f 75 67 68 20 61 72 67 6e 20 75 73 69  through argn usi
3150: 6e 67 20 73 65 70 61 72 61 74 6f 72 20 61 73 20  ng separator as 
3160: 74 68 65 20 73 65 70 61 72 61 74 6f 72 2e 0a 2a  the separator..*
3170: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 72 65 73  * Return the res
3180: 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ult..*/.static i
3190: 6e 74 20 74 65 73 74 5f 6d 70 72 69 6e 74 66 5f  nt test_mprintf_
31a0: 7a 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73  z(.  void *NotUs
31b0: 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ed,.  Tcl_Interp
31c0: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
31d0: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
31e0: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
31f0: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
3200: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20  .  int argc,    
3210: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
3220: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
3230: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67   */.  char **arg
3240: 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  v            /* 
3250: 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67  Text of each arg
3260: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 63 68  ument */.){.  ch
3270: 61 72 20 2a 7a 52 65 73 75 6c 74 20 3d 20 30 3b  ar *zResult = 0;
3280: 0a 20 20 69 6e 74 20 69 3b 0a 0a 20 20 66 6f 72  .  int i;..  for
3290: 28 69 3d 32 3b 20 69 3c 61 72 67 63 20 26 26 20  (i=2; i<argc && 
32a0: 28 69 3d 3d 32 20 7c 7c 20 7a 52 65 73 75 6c 74  (i==2 || zResult
32b0: 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 7a 52 65  ); i++){.    zRe
32c0: 73 75 6c 74 20 3d 20 73 71 6c 69 74 65 33 4d 50  sult = sqlite3MP
32d0: 72 69 6e 74 66 28 30 2c 20 22 25 7a 25 73 25 73  rintf(0, "%z%s%s
32e0: 22 2c 20 7a 52 65 73 75 6c 74 2c 20 61 72 67 76  ", zResult, argv
32f0: 5b 31 5d 2c 20 61 72 67 76 5b 69 5d 29 3b 0a 20  [1], argv[i]);. 
3300: 20 7d 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52   }.  Tcl_AppendR
3310: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 52  esult(interp, zR
3320: 65 73 75 6c 74 2c 20 30 29 3b 0a 20 20 73 71 6c  esult, 0);.  sql
3330: 69 74 65 33 5f 66 72 65 65 28 7a 52 65 73 75 6c  ite3_free(zResul
3340: 74 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  t);.  return TCL
3350: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
3360: 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70  age:  sqlite3_mp
3370: 72 69 6e 74 66 5f 6e 5f 74 65 73 74 20 20 53 54  rintf_n_test  ST
3380: 52 49 4e 47 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20  RING.**.** Test 
3390: 74 68 65 20 25 6e 20 66 6f 72 6d 61 74 20 6f 66  the %n format of
33a0: 20 73 71 6c 69 74 65 4d 50 72 69 6e 74 66 28 29   sqliteMPrintf()
33b0: 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20 6c 65  .  Return the le
33c0: 6e 67 74 68 20 6f 66 20 74 68 65 0a 2a 2a 20 69  ngth of the.** i
33d0: 6e 70 75 74 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a  nput string..*/.
33e0: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
33f0: 6d 70 72 69 6e 74 66 5f 6e 28 0a 20 20 76 6f 69  mprintf_n(.  voi
3400: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63  d *NotUsed,.  Tc
3410: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
3420: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
3430: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
3440: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
3450: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61  mmand */.  int a
3460: 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  rgc,            
3470: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
3480: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68  rguments */.  ch
3490: 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20  ar **argv       
34a0: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
34b0: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f  each argument */
34c0: 0a 29 7b 0a 20 20 63 68 61 72 20 2a 7a 53 74 72  .){.  char *zStr
34d0: 3b 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20  ;.  int n = 0;. 
34e0: 20 7a 53 74 72 20 3d 20 73 71 6c 69 74 65 33 4d   zStr = sqlite3M
34f0: 50 72 69 6e 74 66 28 30 2c 20 22 25 73 25 6e 22  Printf(0, "%s%n"
3500: 2c 20 61 72 67 76 5b 31 5d 2c 20 26 6e 29 3b 0a  , argv[1], &n);.
3510: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
3520: 53 74 72 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f  Str);.  Tcl_SetO
3530: 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
3540: 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 6e   Tcl_NewIntObj(n
3550: 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ));.  return TCL
3560: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
3570: 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 73 6e  age:  sqlite3_sn
3580: 70 72 69 6e 74 66 5f 69 6e 74 20 20 53 49 5a 45  printf_int  SIZE
3590: 20 46 4f 52 4d 41 54 20 20 49 4e 54 0a 2a 2a 0a   FORMAT  INT.**.
35a0: 2a 2a 20 54 65 73 74 20 74 68 65 20 6f 66 20 73  ** Test the of s
35b0: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
35c0: 29 20 72 6f 75 74 69 6e 65 2e 20 20 53 49 5a 45  ) routine.  SIZE
35d0: 20 69 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20   is the size of 
35e0: 74 68 65 0a 2a 2a 20 6f 75 74 70 75 74 20 62 75  the.** output bu
35f0: 66 66 65 72 20 69 6e 20 62 79 74 65 73 2e 20 20  ffer in bytes.  
3600: 54 68 65 20 6d 61 78 69 6d 75 6d 20 73 69 7a 65  The maximum size
3610: 20 69 73 20 31 30 30 2e 20 20 46 4f 52 4d 41 54   is 100.  FORMAT
3620: 20 69 73 20 74 68 65 0a 2a 2a 20 66 6f 72 6d 61   is the.** forma
3630: 74 20 73 74 72 69 6e 67 2e 20 20 49 4e 54 20 69  t string.  INT i
3640: 73 20 61 20 73 69 6e 67 6c 65 20 69 6e 74 65 67  s a single integ
3650: 65 72 20 61 72 67 75 6d 65 6e 74 2e 20 20 54 68  er argument.  Th
3660: 65 20 46 4f 52 4d 41 54 0a 2a 2a 20 73 74 72 69  e FORMAT.** stri
3670: 6e 67 20 6d 75 73 74 20 72 65 71 75 69 72 65 20  ng must require 
3680: 6e 6f 20 6d 6f 72 65 20 74 68 61 6e 20 74 68 69  no more than thi
3690: 73 20 6f 6e 65 20 69 6e 74 65 67 65 72 20 61 72  s one integer ar
36a0: 67 75 6d 65 6e 74 2e 20 20 49 66 0a 2a 2a 20 59  gument.  If.** Y
36b0: 6f 75 20 70 61 73 73 20 69 6e 20 61 20 66 6f 72  ou pass in a for
36c0: 6d 61 74 20 73 74 72 69 6e 67 20 74 68 61 74 20  mat string that 
36d0: 72 65 71 75 69 72 65 73 20 6d 6f 72 65 20 74 68  requires more th
36e0: 61 6e 20 6f 6e 65 20 61 72 67 75 6d 65 6e 74 2c  an one argument,
36f0: 0a 2a 2a 20 62 61 64 20 74 68 69 6e 67 73 20 77  .** bad things w
3700: 69 6c 6c 20 68 61 70 70 65 6e 2e 0a 2a 2f 0a 73  ill happen..*/.s
3710: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 73  tatic int test_s
3720: 6e 70 72 69 6e 74 66 5f 69 6e 74 28 0a 20 20 76  nprintf_int(.  v
3730: 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20  oid *NotUsed,.  
3740: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
3750: 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43  rp,    /* The TC
3760: 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68  L interpreter th
3770: 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20  at invoked this 
3780: 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74  command */.  int
3790: 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20   argc,          
37a0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
37b0: 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
37c0: 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20  char **argv     
37d0: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f         /* Text o
37e0: 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20  f each argument 
37f0: 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20 7a 53 74  */.){.  char zSt
3800: 72 5b 31 30 30 5d 3b 0a 20 20 69 6e 74 20 6e 20  r[100];.  int n 
3810: 3d 20 61 74 6f 69 28 61 72 67 76 5b 31 5d 29 3b  = atoi(argv[1]);
3820: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
3830: 46 6f 72 6d 61 74 20 3d 20 61 72 67 76 5b 32 5d  Format = argv[2]
3840: 3b 0a 20 20 69 6e 74 20 61 31 20 3d 20 61 74 6f  ;.  int a1 = ato
3850: 69 28 61 72 67 76 5b 33 5d 29 3b 0a 20 20 69 66  i(argv[3]);.  if
3860: 28 20 6e 3e 73 69 7a 65 6f 66 28 7a 53 74 72 29  ( n>sizeof(zStr)
3870: 20 29 20 6e 20 3d 20 73 69 7a 65 6f 66 28 7a 53   ) n = sizeof(zS
3880: 74 72 29 3b 0a 20 20 73 74 72 63 70 79 28 7a 53  tr);.  strcpy(zS
3890: 74 72 2c 20 22 61 62 63 64 65 66 67 68 69 6a 6b  tr, "abcdefghijk
38a0: 6c 6d 6e 6f 70 71 72 73 74 75 76 77 78 79 7a 22  lmnopqrstuvwxyz"
38b0: 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  );.  sqlite3_snp
38c0: 72 69 6e 74 66 28 6e 2c 20 7a 53 74 72 2c 20 7a  rintf(n, zStr, z
38d0: 46 6f 72 6d 61 74 2c 20 61 31 29 3b 0a 20 20 54  Format, a1);.  T
38e0: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
38f0: 69 6e 74 65 72 70 2c 20 7a 53 74 72 2c 20 30 29  interp, zStr, 0)
3900: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
3910: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
3920: 65 3a 20 20 73 71 6c 69 74 65 33 5f 67 65 74 5f  e:  sqlite3_get_
3930: 74 61 62 6c 65 5f 70 72 69 6e 74 66 20 20 44 42  table_printf  DB
3940: 20 20 46 4f 52 4d 41 54 20 20 53 54 52 49 4e 47    FORMAT  STRING
3950: 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68  .**.** Invoke th
3960: 65 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 74 61  e sqlite3_get_ta
3970: 62 6c 65 5f 70 72 69 6e 74 66 28 29 20 69 6e 74  ble_printf() int
3980: 65 72 66 61 63 65 20 75 73 69 6e 67 20 74 68 65  erface using the
3990: 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 0a 2a   open database.*
39a0: 2a 20 44 42 2e 20 20 54 68 65 20 53 51 4c 20 69  * DB.  The SQL i
39b0: 73 20 74 68 65 20 73 74 72 69 6e 67 20 46 4f 52  s the string FOR
39c0: 4d 41 54 2e 20 20 54 68 65 20 66 6f 72 6d 61 74  MAT.  The format
39d0: 20 73 74 72 69 6e 67 20 73 68 6f 75 6c 64 20 63   string should c
39e0: 6f 6e 74 61 69 6e 0a 2a 2a 20 6f 6e 65 20 25 73  ontain.** one %s
39f0: 20 6f 72 20 25 71 2e 20 20 53 54 52 49 4e 47 20   or %q.  STRING 
3a00: 69 73 20 74 68 65 20 76 61 6c 75 65 20 69 6e 73  is the value ins
3a10: 65 72 74 65 64 20 69 6e 74 6f 20 25 73 20 6f 72  erted into %s or
3a20: 20 25 71 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69   %q..*/.static i
3a30: 6e 74 20 74 65 73 74 5f 67 65 74 5f 74 61 62 6c  nt test_get_tabl
3a40: 65 5f 70 72 69 6e 74 66 28 0a 20 20 76 6f 69 64  e_printf(.  void
3a50: 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c   *NotUsed,.  Tcl
3a60: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
3a70: 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69      /* The TCL i
3a80: 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20  nterpreter that 
3a90: 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d  invoked this com
3aa0: 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72  mand */.  int ar
3ab0: 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  gc,             
3ac0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
3ad0: 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61  guments */.  cha
3ae0: 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20  r **argv        
3af0: 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65      /* Text of e
3b00: 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  ach argument */.
3b10: 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
3b20: 3b 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 20  ;.  Tcl_DString 
3b30: 73 74 72 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  str;.  int rc;. 
3b40: 20 63 68 61 72 20 2a 7a 45 72 72 20 3d 20 30 3b   char *zErr = 0;
3b50: 0a 20 20 69 6e 74 20 6e 52 6f 77 2c 20 6e 43 6f  .  int nRow, nCo
3b60: 6c 3b 0a 20 20 63 68 61 72 20 2a 2a 61 52 65 73  l;.  char **aRes
3b70: 75 6c 74 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  ult;.  int i;.  
3b80: 63 68 61 72 20 7a 42 75 66 5b 33 30 5d 3b 0a 20  char zBuf[30];. 
3b90: 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 69   char *zSql;.  i
3ba0: 66 28 20 61 72 67 63 21 3d 34 20 29 7b 0a 20 20  f( argc!=4 ){.  
3bb0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
3bc0: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
3bd0: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
3be0: 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
3bf0: 2c 20 0a 20 20 20 20 20 20 20 22 20 44 42 20 46  , .       " DB F
3c00: 4f 52 4d 41 54 20 53 54 52 49 4e 47 22 2c 20 30  ORMAT STRING", 0
3c10: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
3c20: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
3c30: 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
3c40: 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c  interp, argv[1],
3c50: 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
3c60: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f  CL_ERROR;.  Tcl_
3c70: 44 53 74 72 69 6e 67 49 6e 69 74 28 26 73 74 72  DStringInit(&str
3c80: 29 3b 0a 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69  );.  zSql = sqli
3c90: 74 65 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76  te3_mprintf(argv
3ca0: 5b 32 5d 2c 61 72 67 76 5b 33 5d 29 3b 0a 20 20  [2],argv[3]);.  
3cb0: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 67 65 74  rc = sqlite3_get
3cc0: 5f 74 61 62 6c 65 28 64 62 2c 20 7a 53 71 6c 2c  _table(db, zSql,
3cd0: 20 26 61 52 65 73 75 6c 74 2c 20 26 6e 52 6f 77   &aResult, &nRow
3ce0: 2c 20 26 6e 43 6f 6c 2c 20 26 7a 45 72 72 29 3b  , &nCol, &zErr);
3cf0: 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  .  sqlite3_free(
3d00: 7a 53 71 6c 29 3b 0a 20 20 73 70 72 69 6e 74 66  zSql);.  sprintf
3d10: 28 7a 42 75 66 2c 20 22 25 64 22 2c 20 72 63 29  (zBuf, "%d", rc)
3d20: 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c  ;.  Tcl_AppendEl
3d30: 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 7a 42  ement(interp, zB
3d40: 75 66 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  uf);.  if( rc==S
3d50: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
3d60: 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 25  sprintf(zBuf, "%
3d70: 64 22 2c 20 6e 52 6f 77 29 3b 0a 20 20 20 20 54  d", nRow);.    T
3d80: 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  cl_AppendElement
3d90: 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 29 3b 0a  (interp, zBuf);.
3da0: 20 20 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66      sprintf(zBuf
3db0: 2c 20 22 25 64 22 2c 20 6e 43 6f 6c 29 3b 0a 20  , "%d", nCol);. 
3dc0: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65     Tcl_AppendEle
3dd0: 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 7a 42 75  ment(interp, zBu
3de0: 66 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b  f);.    for(i=0;
3df0: 20 69 3c 28 6e 52 6f 77 2b 31 29 2a 6e 43 6f 6c   i<(nRow+1)*nCol
3e00: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 54 63  ; i++){.      Tc
3e10: 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  l_AppendElement(
3e20: 69 6e 74 65 72 70 2c 20 61 52 65 73 75 6c 74 5b  interp, aResult[
3e30: 69 5d 20 3f 20 61 52 65 73 75 6c 74 5b 69 5d 20  i] ? aResult[i] 
3e40: 3a 20 22 4e 55 4c 4c 22 29 3b 0a 20 20 20 20 7d  : "NULL");.    }
3e50: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 54 63  .  }else{.    Tc
3e60: 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  l_AppendElement(
3e70: 69 6e 74 65 72 70 2c 20 7a 45 72 72 29 3b 0a 20  interp, zErr);. 
3e80: 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65   }.  sqlite3_fre
3e90: 65 5f 74 61 62 6c 65 28 61 52 65 73 75 6c 74 29  e_table(aResult)
3ea0: 3b 0a 20 20 69 66 28 20 7a 45 72 72 20 29 20 73  ;.  if( zErr ) s
3eb0: 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72  qlite3_free(zErr
3ec0: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
3ed0: 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65  TestErrCode(inte
3ee0: 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65  rp, db, rc) ) re
3ef0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
3f00: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
3f10: 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  .}.../*.** Usage
3f20: 3a 20 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f  :  sqlite3_last_
3f30: 69 6e 73 65 72 74 5f 72 6f 77 69 64 20 44 42 0a  insert_rowid DB.
3f40: 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 73 20 74 68  **.** Returns th
3f50: 65 20 69 6e 74 65 67 65 72 20 52 4f 57 49 44 20  e integer ROWID 
3f60: 6f 66 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  of the most rece
3f70: 6e 74 20 69 6e 73 65 72 74 2e 0a 2a 2f 0a 73 74  nt insert..*/.st
3f80: 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 6c 61  atic int test_la
3f90: 73 74 5f 72 6f 77 69 64 28 0a 20 20 76 6f 69 64  st_rowid(.  void
3fa0: 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c   *NotUsed,.  Tcl
3fb0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
3fc0: 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69      /* The TCL i
3fd0: 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20  nterpreter that 
3fe0: 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d  invoked this com
3ff0: 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72  mand */.  int ar
4000: 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  gc,             
4010: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
4020: 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61  guments */.  cha
4030: 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20  r **argv        
4040: 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65      /* Text of e
4050: 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  ach argument */.
4060: 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
4070: 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 33 30  ;.  char zBuf[30
4080: 5d 3b 0a 0a 20 20 69 66 28 20 61 72 67 63 21 3d  ];..  if( argc!=
4090: 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  2 ){.    Tcl_App
40a0: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
40b0: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
40c0: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
40d0: 61 72 67 76 5b 30 5d 2c 20 22 20 44 42 5c 22 22  argv[0], " DB\""
40e0: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
40f0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
4100: 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74    if( getDbPoint
4110: 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  er(interp, argv[
4120: 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72  1], &db) ) retur
4130: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 73  n TCL_ERROR;.  s
4140: 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 25 6c  printf(zBuf, "%l
4150: 6c 64 22 2c 20 73 71 6c 69 74 65 33 5f 6c 61 73  ld", sqlite3_las
4160: 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 64  t_insert_rowid(d
4170: 62 29 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e  b));.  Tcl_Appen
4180: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
4190: 7a 42 75 66 2c 20 30 29 3b 0a 20 20 72 65 74 75  zBuf, 0);.  retu
41a0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a  rn SQLITE_OK;.}.
41b0: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
41c0: 71 6c 69 74 65 33 5f 6b 65 79 20 44 42 20 4b 45  qlite3_key DB KE
41d0: 59 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  Y.**.** Set the 
41e0: 63 6f 64 65 63 20 6b 65 79 2e 0a 2a 2f 0a 73 74  codec key..*/.st
41f0: 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 6b 65  atic int test_ke
4200: 79 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73  y(.  void *NotUs
4210: 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ed,.  Tcl_Interp
4220: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
4230: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
4240: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
4250: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
4260: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20  .  int argc,    
4270: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
4280: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
4290: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67   */.  char **arg
42a0: 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  v            /* 
42b0: 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67  Text of each arg
42c0: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71  ument */.){.  sq
42d0: 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e  lite3 *db;.  con
42e0: 73 74 20 63 68 61 72 20 2a 7a 4b 65 79 3b 0a 20  st char *zKey;. 
42f0: 20 69 6e 74 20 6e 4b 65 79 3b 0a 20 20 69 66 28   int nKey;.  if(
4300: 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20   argc!=3 ){.    
4310: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
4320: 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
4330: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
4340: 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a  e \"", argv[0],.
4350: 20 20 20 20 20 20 20 22 20 46 49 4c 45 4e 41 4d         " FILENAM
4360: 45 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  E\"", 0);.    re
4370: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
4380: 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
4390: 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61  ointer(interp, a
43a0: 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72  rgv[1], &db) ) r
43b0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
43c0: 0a 20 20 7a 4b 65 79 20 3d 20 61 72 67 76 5b 32  .  zKey = argv[2
43d0: 5d 3b 0a 20 20 6e 4b 65 79 20 3d 20 73 74 72 6c  ];.  nKey = strl
43e0: 65 6e 28 7a 4b 65 79 29 3b 0a 23 69 66 64 65 66  en(zKey);.#ifdef
43f0: 20 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45   SQLITE_HAS_CODE
4400: 43 0a 20 20 73 71 6c 69 74 65 33 5f 6b 65 79 28  C.  sqlite3_key(
4410: 64 62 2c 20 7a 4b 65 79 2c 20 6e 4b 65 79 29 3b  db, zKey, nKey);
4420: 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e  .#endif.  return
4430: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
4440: 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
4450: 33 5f 72 65 6b 65 79 20 44 42 20 4b 45 59 0a 2a  3_rekey DB KEY.*
4460: 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68 65 20  *.** Change the 
4470: 63 6f 64 65 63 20 6b 65 79 2e 0a 2a 2f 0a 73 74  codec key..*/.st
4480: 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 72 65  atic int test_re
4490: 6b 65 79 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74  key(.  void *Not
44a0: 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Used,.  Tcl_Inte
44b0: 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
44c0: 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
44d0: 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
44e0: 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
44f0: 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20  */.  int argc,  
4500: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
4510: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
4520: 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  ts */.  char **a
4530: 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f  rgv            /
4540: 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61  * Text of each a
4550: 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20  rgument */.){.  
4560: 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 63  sqlite3 *db;.  c
4570: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65 79 3b  onst char *zKey;
4580: 0a 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20 20 69  .  int nKey;.  i
4590: 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20  f( argc!=3 ){.  
45a0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
45b0: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
45c0: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
45d0: 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
45e0: 2c 0a 20 20 20 20 20 20 20 22 20 46 49 4c 45 4e  ,.       " FILEN
45f0: 41 4d 45 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20  AME\"", 0);.    
4600: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
4610: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44  ;.  }.  if( getD
4620: 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  bPointer(interp,
4630: 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29   argv[1], &db) )
4640: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
4650: 52 3b 0a 20 20 7a 4b 65 79 20 3d 20 61 72 67 76  R;.  zKey = argv
4660: 5b 32 5d 3b 0a 20 20 6e 4b 65 79 20 3d 20 73 74  [2];.  nKey = st
4670: 72 6c 65 6e 28 7a 4b 65 79 29 3b 0a 23 69 66 64  rlen(zKey);.#ifd
4680: 65 66 20 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f  ef SQLITE_HAS_CO
4690: 44 45 43 0a 20 20 73 71 6c 69 74 65 33 5f 72 65  DEC.  sqlite3_re
46a0: 6b 65 79 28 64 62 2c 20 7a 4b 65 79 2c 20 6e 4b  key(db, zKey, nK
46b0: 65 79 29 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65  ey);.#endif.  re
46c0: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
46d0: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
46e0: 6c 69 74 65 33 5f 63 6c 6f 73 65 20 44 42 0a 2a  lite3_close DB.*
46f0: 2a 0a 2a 2a 20 43 6c 6f 73 65 73 20 74 68 65 20  *.** Closes the 
4700: 64 61 74 61 62 61 73 65 20 6f 70 65 6e 65 64 20  database opened 
4710: 62 79 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 2e  by sqlite3_open.
4720: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73  .*/.static int s
4730: 71 6c 69 74 65 5f 74 65 73 74 5f 63 6c 6f 73 65  qlite_test_close
4740: 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65  (.  void *NotUse
4750: 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  d,.  Tcl_Interp 
4760: 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
4770: 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
4780: 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
4790: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
47a0: 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20    int argc,     
47b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
47c0: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
47d0: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  */.  char **argv
47e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
47f0: 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75  ext of each argu
4800: 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c  ment */.){.  sql
4810: 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20  ite3 *db;.  int 
4820: 72 63 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d  rc;.  if( argc!=
4830: 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  2 ){.    Tcl_App
4840: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
4850: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
4860: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
4870: 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20  argv[0],.       
4880: 22 20 46 49 4c 45 4e 41 4d 45 5c 22 22 2c 20 30  " FILENAME\"", 0
4890: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
48a0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
48b0: 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
48c0: 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c  interp, argv[1],
48d0: 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
48e0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d  CL_ERROR;.  rc =
48f0: 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 64   sqlite3_close(d
4900: 62 29 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65 73  b);.  Tcl_SetRes
4910: 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61  ult(interp, (cha
4920: 72 20 2a 29 74 31 45 72 72 6f 72 4e 61 6d 65 28  r *)t1ErrorName(
4930: 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43 29  rc), TCL_STATIC)
4940: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
4950: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c  K;.}../*.** Impl
4960: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  ementation of th
4970: 65 20 78 5f 63 6f 61 6c 65 73 63 65 28 29 20 66  e x_coalesce() f
4980: 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 20 52 65 74 75  unction..** Retu
4990: 72 6e 20 74 68 65 20 66 69 72 73 74 20 61 72 67  rn the first arg
49a0: 75 6d 65 6e 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61  ument non-NULL a
49b0: 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 61 74  rgument..*/.stat
49c0: 69 63 20 76 6f 69 64 20 74 31 5f 69 66 6e 75 6c  ic void t1_ifnul
49d0: 6c 46 75 6e 63 28 0a 20 20 73 71 6c 69 74 65 33  lFunc(.  sqlite3
49e0: 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78  _context *contex
49f0: 74 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a 20  t,.  int argc,. 
4a00: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
4a10: 2a 61 72 67 76 0a 29 7b 0a 20 20 69 6e 74 20 69  *argv.){.  int i
4a20: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 61  ;.  for(i=0; i<a
4a30: 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  rgc; i++){.    i
4a40: 66 28 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 21 3d  f( SQLITE_NULL!=
4a50: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79  sqlite3_value_ty
4a60: 70 65 28 61 72 67 76 5b 69 5d 29 20 29 7b 0a 20  pe(argv[i]) ){. 
4a70: 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 73 71 6c       int n = sql
4a80: 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73  ite3_value_bytes
4a90: 28 61 72 67 76 5b 69 5d 29 3b 0a 20 20 20 20 20  (argv[i]);.     
4aa0: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
4ab0: 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 28 63  text(context, (c
4ac0: 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c  har*)sqlite3_val
4ad0: 75 65 5f 74 65 78 74 28 61 72 67 76 5b 69 5d 29  ue_text(argv[i])
4ae0: 2c 0a 20 20 20 20 20 20 20 20 20 20 6e 2c 20 53  ,.          n, S
4af0: 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29  QLITE_TRANSIENT)
4b00: 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
4b10: 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a     }.  }.}../*.*
4b20: 2a 20 54 68 65 73 65 20 61 72 65 20 74 65 73 74  * These are test
4b30: 20 66 75 6e 63 74 69 6f 6e 73 2e 20 20 20 20 68   functions.    h
4b40: 65 78 38 28 29 20 69 6e 74 65 72 70 72 65 74 73  ex8() interprets
4b50: 20 69 74 73 20 61 72 67 75 6d 65 6e 74 20 61 73   its argument as
4b60: 0a 2a 2a 20 55 54 46 38 20 61 6e 64 20 72 65 74  .** UTF8 and ret
4b70: 75 72 6e 73 20 61 20 68 65 78 20 65 6e 63 6f 64  urns a hex encod
4b80: 69 6e 67 2e 20 20 68 65 78 31 36 6c 65 28 29 20  ing.  hex16le() 
4b90: 69 6e 74 65 72 70 72 65 74 73 20 69 74 73 20 61  interprets its a
4ba0: 72 67 75 6d 65 6e 74 0a 2a 2a 20 61 73 20 55 54  rgument.** as UT
4bb0: 46 31 36 6c 65 20 61 6e 64 20 72 65 74 75 72 6e  F16le and return
4bc0: 73 20 61 20 68 65 78 20 65 6e 63 6f 64 69 6e 67  s a hex encoding
4bd0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
4be0: 20 68 65 78 38 46 75 6e 63 28 73 71 6c 69 74 65   hex8Func(sqlite
4bf0: 33 5f 63 6f 6e 74 65 78 74 20 2a 70 2c 20 69 6e  3_context *p, in
4c00: 74 20 61 72 67 63 2c 20 73 71 6c 69 74 65 33 5f  t argc, sqlite3_
4c10: 76 61 6c 75 65 20 2a 2a 61 72 67 76 29 7b 0a 20  value **argv){. 
4c20: 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
4c30: 63 68 61 72 20 2a 7a 3b 0a 20 20 69 6e 74 20 69  char *z;.  int i
4c40: 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 32 30  ;.  char zBuf[20
4c50: 30 5d 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65  0];.  z = sqlite
4c60: 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67  3_value_text(arg
4c70: 76 5b 30 5d 29 3b 0a 20 20 66 6f 72 28 69 3d 30  v[0]);.  for(i=0
4c80: 3b 20 69 3c 73 69 7a 65 6f 66 28 7a 42 75 66 29  ; i<sizeof(zBuf)
4c90: 2f 32 20 2d 20 32 20 26 26 20 7a 5b 69 5d 3b 20  /2 - 2 && z[i]; 
4ca0: 69 2b 2b 29 7b 0a 20 20 20 20 73 70 72 69 6e 74  i++){.    sprint
4cb0: 66 28 26 7a 42 75 66 5b 69 2a 32 5d 2c 20 22 25  f(&zBuf[i*2], "%
4cc0: 30 32 78 22 2c 20 7a 5b 69 5d 26 30 78 66 66 29  02x", z[i]&0xff)
4cd0: 3b 0a 20 20 7d 0a 20 20 7a 42 75 66 5b 69 2a 32  ;.  }.  zBuf[i*2
4ce0: 5d 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33  ] = 0;.  sqlite3
4cf0: 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 70 2c 20  _result_text(p, 
4d00: 28 63 68 61 72 2a 29 7a 42 75 66 2c 20 2d 31 2c  (char*)zBuf, -1,
4d10: 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
4d20: 54 29 3b 0a 7d 0a 23 69 66 6e 64 65 66 20 53 51  T);.}.#ifndef SQ
4d30: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
4d40: 73 74 61 74 69 63 20 76 6f 69 64 20 68 65 78 31  static void hex1
4d50: 36 46 75 6e 63 28 73 71 6c 69 74 65 33 5f 63 6f  6Func(sqlite3_co
4d60: 6e 74 65 78 74 20 2a 70 2c 20 69 6e 74 20 61 72  ntext *p, int ar
4d70: 67 63 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  gc, sqlite3_valu
4d80: 65 20 2a 2a 61 72 67 76 29 7b 0a 20 20 63 6f 6e  e **argv){.  con
4d90: 73 74 20 75 6e 73 69 67 6e 65 64 20 73 68 6f 72  st unsigned shor
4da0: 74 20 69 6e 74 20 2a 7a 3b 0a 20 20 69 6e 74 20  t int *z;.  int 
4db0: 69 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 34  i;.  char zBuf[4
4dc0: 30 30 5d 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74  00];.  z = sqlit
4dd0: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 28  e3_value_text16(
4de0: 61 72 67 76 5b 30 5d 29 3b 0a 20 20 66 6f 72 28  argv[0]);.  for(
4df0: 69 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28 7a 42  i=0; i<sizeof(zB
4e00: 75 66 29 2f 34 20 2d 20 34 20 26 26 20 7a 5b 69  uf)/4 - 4 && z[i
4e10: 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73 70 72  ]; i++){.    spr
4e20: 69 6e 74 66 28 26 7a 42 75 66 5b 69 2a 34 5d 2c  intf(&zBuf[i*4],
4e30: 20 22 25 30 34 78 22 2c 20 7a 5b 69 5d 26 30 78   "%04x", z[i]&0x
4e40: 66 66 29 3b 0a 20 20 7d 0a 20 20 7a 42 75 66 5b  ff);.  }.  zBuf[
4e50: 69 2a 34 5d 20 3d 20 30 3b 0a 20 20 73 71 6c 69  i*4] = 0;.  sqli
4e60: 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28  te3_result_text(
4e70: 70 2c 20 28 63 68 61 72 2a 29 7a 42 75 66 2c 20  p, (char*)zBuf, 
4e80: 2d 31 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  -1, SQLITE_TRANS
4e90: 49 45 4e 54 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a  IENT);.}.#endif.
4ea0: 0a 2f 2a 0a 2a 2a 20 41 20 73 74 72 75 63 74 75  ./*.** A structu
4eb0: 72 65 20 69 6e 74 6f 20 77 68 69 63 68 20 74 6f  re into which to
4ec0: 20 61 63 63 75 6d 75 6c 61 74 65 20 74 65 78 74   accumulate text
4ed0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 64 73 74 72  ..*/.struct dstr
4ee0: 20 7b 0a 20 20 69 6e 74 20 6e 41 6c 6c 6f 63 3b   {.  int nAlloc;
4ef0: 20 20 2f 2a 20 53 70 61 63 65 20 61 6c 6c 6f 63    /* Space alloc
4f00: 61 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 55  ated */.  int nU
4f10: 73 65 64 3b 20 20 20 2f 2a 20 53 70 61 63 65 20  sed;   /* Space 
4f20: 75 73 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  used */.  char *
4f30: 7a 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 73 70  z;     /* The sp
4f40: 61 63 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ace */.};../*.**
4f50: 20 41 70 70 65 6e 64 20 74 65 78 74 20 74 6f 20   Append text to 
4f60: 61 20 64 73 74 72 0a 2a 2f 0a 73 74 61 74 69 63  a dstr.*/.static
4f70: 20 76 6f 69 64 20 64 73 74 72 41 70 70 65 6e 64   void dstrAppend
4f80: 28 73 74 72 75 63 74 20 64 73 74 72 20 2a 70 2c  (struct dstr *p,
4f90: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20   const char *z, 
4fa0: 69 6e 74 20 64 69 76 69 64 65 72 29 7b 0a 20 20  int divider){.  
4fb0: 69 6e 74 20 6e 20 3d 20 73 74 72 6c 65 6e 28 7a  int n = strlen(z
4fc0: 29 3b 0a 20 20 69 66 28 20 70 2d 3e 6e 55 73 65  );.  if( p->nUse
4fd0: 64 20 2b 20 6e 20 2b 20 32 20 3e 20 70 2d 3e 6e  d + n + 2 > p->n
4fe0: 41 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 63 68 61  Alloc ){.    cha
4ff0: 72 20 2a 7a 4e 65 77 3b 0a 20 20 20 20 70 2d 3e  r *zNew;.    p->
5000: 6e 41 6c 6c 6f 63 20 3d 20 70 2d 3e 6e 41 6c 6c  nAlloc = p->nAll
5010: 6f 63 2a 32 20 2b 20 6e 20 2b 20 32 30 30 3b 0a  oc*2 + n + 200;.
5020: 20 20 20 20 7a 4e 65 77 20 3d 20 73 71 6c 69 74      zNew = sqlit
5030: 65 33 5f 72 65 61 6c 6c 6f 63 28 70 2d 3e 7a 2c  e3_realloc(p->z,
5040: 20 70 2d 3e 6e 41 6c 6c 6f 63 29 3b 0a 20 20 20   p->nAlloc);.   
5050: 20 69 66 28 20 7a 4e 65 77 3d 3d 30 20 29 7b 0a   if( zNew==0 ){.
5060: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
5070: 65 65 28 70 2d 3e 7a 29 3b 0a 20 20 20 20 20 20  ee(p->z);.      
5080: 6d 65 6d 73 65 74 28 70 2c 20 30 2c 20 73 69 7a  memset(p, 0, siz
5090: 65 6f 66 28 2a 70 29 29 3b 0a 20 20 20 20 20 20  eof(*p));.      
50a0: 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20  return;.    }.  
50b0: 20 20 70 2d 3e 7a 20 3d 20 7a 4e 65 77 3b 0a 20    p->z = zNew;. 
50c0: 20 7d 0a 20 20 69 66 28 20 64 69 76 69 64 65 72   }.  if( divider
50d0: 20 26 26 20 70 2d 3e 6e 55 73 65 64 3e 30 20 29   && p->nUsed>0 )
50e0: 7b 0a 20 20 20 20 70 2d 3e 7a 5b 70 2d 3e 6e 55  {.    p->z[p->nU
50f0: 73 65 64 2b 2b 5d 20 3d 20 64 69 76 69 64 65 72  sed++] = divider
5100: 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26  ;.  }.  memcpy(&
5110: 70 2d 3e 7a 5b 70 2d 3e 6e 55 73 65 64 5d 2c 20  p->z[p->nUsed], 
5120: 7a 2c 20 6e 2b 31 29 3b 0a 20 20 70 2d 3e 6e 55  z, n+1);.  p->nU
5130: 73 65 64 20 2b 3d 20 6e 3b 0a 7d 0a 0a 2f 2a 0a  sed += n;.}../*.
5140: 2a 2a 20 49 6e 76 6f 6b 65 64 20 66 6f 72 20 65  ** Invoked for e
5150: 61 63 68 20 63 61 6c 6c 62 61 63 6b 20 66 72 6f  ach callback fro
5160: 6d 20 73 71 6c 69 74 65 33 45 78 65 63 46 75 6e  m sqlite3ExecFun
5170: 63 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  c.*/.static int 
5180: 65 78 65 63 46 75 6e 63 43 61 6c 6c 62 61 63 6b  execFuncCallback
5190: 28 76 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e  (void *pData, in
51a0: 74 20 61 72 67 63 2c 20 63 68 61 72 20 2a 2a 61  t argc, char **a
51b0: 72 67 76 2c 20 63 68 61 72 20 2a 2a 4e 6f 74 55  rgv, char **NotU
51c0: 73 65 64 29 7b 0a 20 20 73 74 72 75 63 74 20 64  sed){.  struct d
51d0: 73 74 72 20 2a 70 20 3d 20 28 73 74 72 75 63 74  str *p = (struct
51e0: 20 64 73 74 72 2a 29 70 44 61 74 61 3b 0a 20 20   dstr*)pData;.  
51f0: 69 6e 74 20 69 3b 0a 20 20 66 6f 72 28 69 3d 30  int i;.  for(i=0
5200: 3b 20 69 3c 61 72 67 63 3b 20 69 2b 2b 29 7b 0a  ; i<argc; i++){.
5210: 20 20 20 20 69 66 28 20 61 72 67 76 5b 69 5d 3d      if( argv[i]=
5220: 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 73 74 72  =0 ){.      dstr
5230: 41 70 70 65 6e 64 28 70 2c 20 22 4e 55 4c 4c 22  Append(p, "NULL"
5240: 2c 20 27 20 27 29 3b 0a 20 20 20 20 7d 65 6c 73  , ' ');.    }els
5250: 65 7b 0a 20 20 20 20 20 20 64 73 74 72 41 70 70  e{.      dstrApp
5260: 65 6e 64 28 70 2c 20 61 72 67 76 5b 69 5d 2c 20  end(p, argv[i], 
5270: 27 20 27 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  ' ');.    }.  }.
5280: 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f    return 0;.}../
5290: 2a 0a 2a 2a 20 49 6d 70 6c 65 6d 65 6e 74 61 74  *.** Implementat
52a0: 69 6f 6e 20 6f 66 20 74 68 65 20 78 5f 73 71 6c  ion of the x_sql
52b0: 69 74 65 5f 65 78 65 63 28 29 20 66 75 6e 63 74  ite_exec() funct
52c0: 69 6f 6e 2e 20 20 54 68 69 73 20 66 75 6e 63 74  ion.  This funct
52d0: 69 6f 6e 20 74 61 6b 65 73 0a 2a 2a 20 61 20 73  ion takes.** a s
52e0: 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 20 61  ingle argument a
52f0: 6e 64 20 61 74 74 65 6d 70 74 73 20 74 6f 20 65  nd attempts to e
5300: 78 65 63 75 74 65 20 74 68 61 74 20 61 72 67 75  xecute that argu
5310: 6d 65 6e 74 20 61 73 20 53 51 4c 20 63 6f 64 65  ment as SQL code
5320: 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 69 6c 6c  ..** This is ill
5330: 65 67 61 6c 20 61 6e 64 20 73 68 6f 75 6c 64 20  egal and should 
5340: 73 65 74 20 74 68 65 20 53 51 4c 49 54 45 5f 4d  set the SQLITE_M
5350: 49 53 55 53 45 20 66 6c 61 67 20 6f 6e 20 74 68  ISUSE flag on th
5360: 65 20 64 61 74 61 62 61 73 65 2e 0a 2a 2a 0a 2a  e database..**.*
5370: 2a 20 32 30 30 34 2d 4a 61 6e 2d 30 37 3a 20 20  * 2004-Jan-07:  
5380: 57 65 20 68 61 76 65 20 63 68 61 6e 67 65 64 20  We have changed 
5390: 74 68 69 73 20 74 6f 20 6d 61 6b 65 20 69 74 20  this to make it 
53a0: 6c 65 67 61 6c 20 74 6f 20 63 61 6c 6c 20 73 71  legal to call sq
53b0: 6c 69 74 65 33 5f 65 78 65 63 28 29 0a 2a 2a 20  lite3_exec().** 
53c0: 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 66 75  from within a fu
53d0: 6e 63 74 69 6f 6e 20 63 61 6c 6c 2e 20 20 0a 2a  nction call.  .*
53e0: 2a 20 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69  * .** This routi
53f0: 6e 65 20 73 69 6d 75 6c 61 74 65 73 20 74 68 65  ne simulates the
5400: 20 65 66 66 65 63 74 20 6f 66 20 68 61 76 69 6e   effect of havin
5410: 67 20 74 77 6f 20 74 68 72 65 61 64 73 20 61 74  g two threads at
5420: 74 65 6d 70 74 20 74 6f 0a 2a 2a 20 75 73 65 20  tempt to.** use 
5430: 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73  the same databas
5440: 65 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69  e at the same ti
5450: 6d 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  me..*/.static vo
5460: 69 64 20 73 71 6c 69 74 65 33 45 78 65 63 46 75  id sqlite3ExecFu
5470: 6e 63 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  nc(.  sqlite3_co
5480: 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c 20  ntext *context, 
5490: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 0a 20  .  int argc,  . 
54a0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
54b0: 2a 61 72 67 76 0a 29 7b 0a 20 20 73 74 72 75 63  *argv.){.  struc
54c0: 74 20 64 73 74 72 20 78 3b 0a 20 20 6d 65 6d 73  t dstr x;.  mems
54d0: 65 74 28 26 78 2c 20 30 2c 20 73 69 7a 65 6f 66  et(&x, 0, sizeof
54e0: 28 78 29 29 3b 0a 20 20 28 76 6f 69 64 29 73 71  (x));.  (void)sq
54f0: 6c 69 74 65 33 5f 65 78 65 63 28 28 73 71 6c 69  lite3_exec((sqli
5500: 74 65 33 2a 29 73 71 6c 69 74 65 33 5f 75 73 65  te3*)sqlite3_use
5510: 72 5f 64 61 74 61 28 63 6f 6e 74 65 78 74 29 2c  r_data(context),
5520: 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 73 71  .      (char*)sq
5530: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
5540: 28 61 72 67 76 5b 30 5d 29 2c 0a 20 20 20 20 20  (argv[0]),.     
5550: 20 65 78 65 63 46 75 6e 63 43 61 6c 6c 62 61 63   execFuncCallbac
5560: 6b 2c 20 26 78 2c 20 30 29 3b 0a 20 20 73 71 6c  k, &x, 0);.  sql
5570: 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74  ite3_result_text
5580: 28 63 6f 6e 74 65 78 74 2c 20 78 2e 7a 2c 20 78  (context, x.z, x
5590: 2e 6e 55 73 65 64 2c 20 53 51 4c 49 54 45 5f 54  .nUsed, SQLITE_T
55a0: 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 73 71 6c  RANSIENT);.  sql
55b0: 69 74 65 33 5f 66 72 65 65 28 78 2e 7a 29 3b 0a  ite3_free(x.z);.
55c0: 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c 65 6d 65  }../*.** Impleme
55d0: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 6b 74 32 32  ntation of tkt22
55e0: 31 33 66 75 6e 63 28 29 2c 20 61 20 73 63 61 6c  13func(), a scal
55f0: 61 72 20 66 75 6e 63 74 69 6f 6e 20 74 68 61 74  ar function that
5600: 20 74 61 6b 65 73 20 65 78 61 63 74 6c 79 0a 2a   takes exactly.*
5610: 2a 20 6f 6e 65 20 61 72 67 75 6d 65 6e 74 2e 20  * one argument. 
5620: 49 74 20 68 61 73 20 74 77 6f 20 69 6e 74 65 72  It has two inter
5630: 65 73 74 69 6e 67 20 66 65 61 74 75 72 65 73 3a  esting features:
5640: 0a 2a 2a 0a 2a 2a 20 2a 20 49 74 20 63 61 6c 6c  .**.** * It call
5650: 73 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s sqlite3_value_
5660: 74 65 78 74 28 29 20 33 20 74 69 6d 65 73 20 6f  text() 3 times o
5670: 6e 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 73  n the argument s
5680: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2e 0a 2a  qlite3_value*..*
5690: 2a 20 20 20 49 66 20 74 68 65 20 74 68 72 65 65  *   If the three
56a0: 20 70 6f 69 6e 74 65 72 73 20 72 65 74 75 72 6e   pointers return
56b0: 65 64 20 61 72 65 20 6e 6f 74 20 74 68 65 20 73  ed are not the s
56c0: 61 6d 65 20 61 6e 20 53 51 4c 20 65 72 72 6f 72  ame an SQL error
56d0: 20 69 73 20 72 61 69 73 65 64 2e 0a 2a 2a 0a 2a   is raised..**.*
56e0: 2a 20 2a 20 4f 74 68 65 72 77 69 73 65 20 69 74  * * Otherwise it
56f0: 20 72 65 74 75 72 6e 73 20 61 20 63 6f 70 79 20   returns a copy 
5700: 6f 66 20 74 68 65 20 74 65 78 74 20 72 65 70 72  of the text repr
5710: 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 69 74  esentation of it
5720: 27 73 20 0a 2a 2a 20 20 20 61 72 67 75 6d 65 6e  's .**   argumen
5730: 74 20 69 6e 20 73 75 63 68 20 61 20 77 61 79 20  t in such a way 
5740: 61 73 20 74 68 65 20 56 44 42 45 20 72 65 70 72  as the VDBE repr
5750: 65 73 65 6e 74 61 74 69 6f 6e 20 69 73 20 61 20  esentation is a 
5760: 4d 65 6d 2a 20 63 65 6c 6c 20 0a 2a 2a 20 20 20  Mem* cell .**   
5770: 77 69 74 68 20 74 68 65 20 4d 45 4d 5f 54 65 72  with the MEM_Ter
5780: 6d 20 66 6c 61 67 20 63 6c 65 61 72 2e 20 0a 2a  m flag clear. .*
5790: 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23 32 32 31  *.** Ticket #221
57a0: 33 20 63 61 6e 20 74 68 65 72 65 66 6f 72 65 20  3 can therefore 
57b0: 62 65 20 74 65 73 74 65 64 20 62 79 20 65 76 61  be tested by eva
57c0: 6c 75 61 74 69 6e 67 20 74 68 65 20 66 6f 6c 6c  luating the foll
57d0: 6f 77 69 6e 67 0a 2a 2a 20 53 51 4c 20 65 78 70  owing.** SQL exp
57e0: 72 65 73 73 69 6f 6e 3a 0a 2a 2a 0a 2a 2a 20 20  ression:.**.**  
57f0: 20 74 6b 74 32 32 31 33 66 75 6e 63 28 74 6b 74   tkt2213func(tkt
5800: 32 32 31 33 66 75 6e 63 28 27 61 20 73 74 72 69  2213func('a stri
5810: 6e 67 27 29 29 3b 0a 2a 2f 0a 73 74 61 74 69 63  ng'));.*/.static
5820: 20 76 6f 69 64 20 74 6b 74 32 32 31 33 46 75 6e   void tkt2213Fun
5830: 63 74 69 6f 6e 28 0a 20 20 73 71 6c 69 74 65 33  ction(.  sqlite3
5840: 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78  _context *contex
5850: 74 2c 20 0a 20 20 69 6e 74 20 61 72 67 63 2c 20  t, .  int argc, 
5860: 20 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75   .  sqlite3_valu
5870: 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 69 6e  e **argv.){.  in
5880: 74 20 6e 54 65 78 74 3b 0a 20 20 75 6e 73 69 67  t nText;.  unsig
5890: 6e 65 64 20 63 68 61 72 20 63 6f 6e 73 74 20 2a  ned char const *
58a0: 7a 54 65 78 74 31 3b 0a 20 20 75 6e 73 69 67 6e  zText1;.  unsign
58b0: 65 64 20 63 68 61 72 20 63 6f 6e 73 74 20 2a 7a  ed char const *z
58c0: 54 65 78 74 32 3b 0a 20 20 75 6e 73 69 67 6e 65  Text2;.  unsigne
58d0: 64 20 63 68 61 72 20 63 6f 6e 73 74 20 2a 7a 54  d char const *zT
58e0: 65 78 74 33 3b 0a 0a 20 20 6e 54 65 78 74 20 3d  ext3;..  nText =
58f0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62   sqlite3_value_b
5900: 79 74 65 73 28 61 72 67 76 5b 30 5d 29 3b 0a 20  ytes(argv[0]);. 
5910: 20 7a 54 65 78 74 31 20 3d 20 73 71 6c 69 74 65   zText1 = sqlite
5920: 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67  3_value_text(arg
5930: 76 5b 30 5d 29 3b 0a 20 20 7a 54 65 78 74 32 20  v[0]);.  zText2 
5940: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  = sqlite3_value_
5950: 74 65 78 74 28 61 72 67 76 5b 30 5d 29 3b 0a 20  text(argv[0]);. 
5960: 20 7a 54 65 78 74 33 20 3d 20 73 71 6c 69 74 65   zText3 = sqlite
5970: 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67  3_value_text(arg
5980: 76 5b 30 5d 29 3b 0a 0a 20 20 69 66 28 20 7a 54  v[0]);..  if( zT
5990: 65 78 74 31 21 3d 7a 54 65 78 74 32 20 7c 7c 20  ext1!=zText2 || 
59a0: 7a 54 65 78 74 32 21 3d 7a 54 65 78 74 33 20 29  zText2!=zText3 )
59b0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65  {.    sqlite3_re
59c0: 73 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65  sult_error(conte
59d0: 78 74 2c 20 22 74 6b 74 32 32 31 33 20 69 73 20  xt, "tkt2213 is 
59e0: 6e 6f 74 20 66 69 78 65 64 22 2c 20 2d 31 29 3b  not fixed", -1);
59f0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63 68  .  }else{.    ch
5a00: 61 72 20 2a 7a 43 6f 70 79 20 3d 20 28 63 68 61  ar *zCopy = (cha
5a10: 72 20 2a 29 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  r *)sqlite3_mall
5a20: 6f 63 28 6e 54 65 78 74 29 3b 0a 20 20 20 20 6d  oc(nText);.    m
5a30: 65 6d 63 70 79 28 7a 43 6f 70 79 2c 20 7a 54 65  emcpy(zCopy, zTe
5a40: 78 74 31 2c 20 6e 54 65 78 74 29 3b 0a 20 20 20  xt1, nText);.   
5a50: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
5a60: 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 7a 43  text(context, zC
5a70: 6f 70 79 2c 20 6e 54 65 78 74 2c 20 73 71 6c 69  opy, nText, sqli
5a80: 74 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 7d  te3_free);.  }.}
5a90: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
5aa0: 6f 77 69 6e 67 20 53 51 4c 20 66 75 6e 63 74 69  owing SQL functi
5ab0: 6f 6e 20 74 61 6b 65 73 20 34 20 61 72 67 75 6d  on takes 4 argum
5ac0: 65 6e 74 73 2e 20 20 54 68 65 20 32 6e 64 20 61  ents.  The 2nd a
5ad0: 6e 64 0a 2a 2a 20 34 74 68 20 61 72 67 75 6d 65  nd.** 4th argume
5ae0: 6e 74 20 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f  nt must be one o
5af0: 66 20 74 68 65 73 65 20 73 74 72 69 6e 67 73 3a  f these strings:
5b00: 20 20 27 74 65 78 74 27 2c 20 27 74 65 78 74 31    'text', 'text1
5b10: 36 27 2c 0a 2a 2a 20 6f 72 20 27 62 6c 6f 62 27  6',.** or 'blob'
5b20: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
5b30: 6f 20 41 50 49 20 66 75 6e 63 74 69 6f 6e 73 0a  o API functions.
5b40: 2a 2a 0a 2a 2a 20 20 20 20 20 20 73 71 6c 69 74  **.**      sqlit
5b50: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 29 0a  e3_value_text().
5b60: 2a 2a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  **      sqlite3_
5b70: 76 61 6c 75 65 5f 74 65 78 74 31 36 28 29 0a 2a  value_text16().*
5b80: 2a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76  *      sqlite3_v
5b90: 61 6c 75 65 5f 62 6c 6f 62 28 29 0a 2a 2a 0a 2a  alue_blob().**.*
5ba0: 2a 20 54 68 65 20 74 68 69 72 64 20 61 72 67 75  * The third argu
5bb0: 6d 65 6e 74 20 69 73 20 61 20 73 74 72 69 6e 67  ment is a string
5bc0: 2c 20 65 69 74 68 65 72 20 27 62 79 74 65 73 27  , either 'bytes'
5bd0: 20 6f 72 20 27 62 79 74 65 73 31 36 27 20 6f 72   or 'bytes16' or
5be0: 20 27 6e 6f 6f 70 27 2c 0a 2a 2a 20 63 6f 72 72   'noop',.** corr
5bf0: 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 41 50 49  esponding to API
5c00: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 73 71  s:.**.**      sq
5c10: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65  lite3_value_byte
5c20: 73 28 29 0a 2a 2a 20 20 20 20 20 20 73 71 6c 69  s().**      sqli
5c30: 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 31  te3_value_bytes1
5c40: 36 28 29 0a 2a 2a 20 20 20 20 20 20 6e 6f 6f 70  6().**      noop
5c50: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 41 50 49 73 20  .**.** The APIs 
5c60: 64 65 73 69 67 6e 61 74 65 64 20 62 79 20 74 68  designated by th
5c70: 65 20 32 6e 64 20 74 68 72 6f 75 67 68 20 34 74  e 2nd through 4t
5c80: 68 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20  h arguments are 
5c90: 61 70 70 6c 69 65 64 0a 2a 2a 20 74 6f 20 74 68  applied.** to th
5ca0: 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  e first argument
5cb0: 20 69 6e 20 6f 72 64 65 72 2e 20 20 49 66 20 74   in order.  If t
5cc0: 68 65 20 70 6f 69 6e 74 65 72 73 20 72 65 74 75  he pointers retu
5cd0: 72 6e 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73  rned by the.** s
5ce0: 65 63 6f 6e 64 20 61 6e 64 20 66 6f 75 72 74 68  econd and fourth
5cf0: 20 61 72 65 20 64 69 66 66 65 72 65 6e 74 2c 20   are different, 
5d00: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74  this routine ret
5d10: 75 72 6e 73 20 31 2e 20 20 4f 74 68 65 72 77 69  urns 1.  Otherwi
5d20: 73 65 2c 0a 2a 2a 20 74 68 69 73 20 72 6f 75 74  se,.** this rout
5d30: 69 6e 65 20 72 65 74 75 72 6e 73 20 30 2e 0a 2a  ine returns 0..*
5d40: 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69  *.** This functi
5d50: 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 74 65  on is used to te
5d60: 73 74 20 74 6f 20 73 65 65 20 77 68 65 6e 20 72  st to see when r
5d70: 65 74 75 72 6e 65 64 20 70 6f 69 6e 74 65 72 73  eturned pointers
5d80: 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 5f 74 65   from.** the _te
5d90: 78 74 28 29 2c 20 5f 74 65 78 74 31 36 28 29 20  xt(), _text16() 
5da0: 61 6e 64 20 5f 62 6c 6f 62 28 29 20 41 50 49 73  and _blob() APIs
5db0: 20 62 65 63 6f 6d 65 20 69 6e 76 61 6c 69 64 61   become invalida
5dc0: 74 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  ted..*/.static v
5dd0: 6f 69 64 20 70 74 72 43 68 6e 67 46 75 6e 63 74  oid ptrChngFunct
5de0: 69 6f 6e 28 0a 20 20 73 71 6c 69 74 65 33 5f 63  ion(.  sqlite3_c
5df0: 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c  ontext *context,
5e00: 20 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 0a   .  int argc,  .
5e10: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
5e20: 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 63 6f 6e 73  **argv.){.  cons
5e30: 74 20 76 6f 69 64 20 2a 70 31 2c 20 2a 70 32 3b  t void *p1, *p2;
5e40: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
5e50: 43 6d 64 3b 0a 20 20 69 66 28 20 61 72 67 63 21  Cmd;.  if( argc!
5e60: 3d 34 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 7a  =4 ) return;.  z
5e70: 43 6d 64 20 3d 20 28 63 6f 6e 73 74 20 63 68 61  Cmd = (const cha
5e80: 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  r*)sqlite3_value
5e90: 5f 74 65 78 74 28 61 72 67 76 5b 31 5d 29 3b 0a  _text(argv[1]);.
5ea0: 20 20 69 66 28 20 7a 43 6d 64 3d 3d 30 20 29 20    if( zCmd==0 ) 
5eb0: 72 65 74 75 72 6e 3b 0a 20 20 69 66 28 20 73 74  return;.  if( st
5ec0: 72 63 6d 70 28 7a 43 6d 64 2c 22 74 65 78 74 22  rcmp(zCmd,"text"
5ed0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 31 20 3d  )==0 ){.    p1 =
5ee0: 20 28 63 6f 6e 73 74 20 76 6f 69 64 2a 29 73 71   (const void*)sq
5ef0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
5f00: 28 61 72 67 76 5b 30 5d 29 3b 0a 23 69 66 6e 64  (argv[0]);.#ifnd
5f10: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
5f20: 54 46 31 36 0a 20 20 7d 65 6c 73 65 20 69 66 28  TF16.  }else if(
5f30: 20 73 74 72 63 6d 70 28 7a 43 6d 64 2c 20 22 74   strcmp(zCmd, "t
5f40: 65 78 74 31 36 22 29 3d 3d 30 20 29 7b 0a 20 20  ext16")==0 ){.  
5f50: 20 20 70 31 20 3d 20 28 63 6f 6e 73 74 20 76 6f    p1 = (const vo
5f60: 69 64 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75  id*)sqlite3_valu
5f70: 65 5f 74 65 78 74 31 36 28 61 72 67 76 5b 30 5d  e_text16(argv[0]
5f80: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73  );.#endif.  }els
5f90: 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 43 6d  e if( strcmp(zCm
5fa0: 64 2c 20 22 62 6c 6f 62 22 29 3d 3d 30 20 29 7b  d, "blob")==0 ){
5fb0: 0a 20 20 20 20 70 31 20 3d 20 28 63 6f 6e 73 74  .    p1 = (const
5fc0: 20 76 6f 69 64 2a 29 73 71 6c 69 74 65 33 5f 76   void*)sqlite3_v
5fd0: 61 6c 75 65 5f 62 6c 6f 62 28 61 72 67 76 5b 30  alue_blob(argv[0
5fe0: 5d 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ]);.  }else{.   
5ff0: 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 20 20 7a   return;.  }.  z
6000: 43 6d 64 20 3d 20 28 63 6f 6e 73 74 20 63 68 61  Cmd = (const cha
6010: 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  r*)sqlite3_value
6020: 5f 74 65 78 74 28 61 72 67 76 5b 32 5d 29 3b 0a  _text(argv[2]);.
6030: 20 20 69 66 28 20 7a 43 6d 64 3d 3d 30 20 29 20    if( zCmd==0 ) 
6040: 72 65 74 75 72 6e 3b 0a 20 20 69 66 28 20 73 74  return;.  if( st
6050: 72 63 6d 70 28 7a 43 6d 64 2c 22 62 79 74 65 73  rcmp(zCmd,"bytes
6060: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  ")==0 ){.    sql
6070: 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73  ite3_value_bytes
6080: 28 61 72 67 76 5b 30 5d 29 3b 0a 23 69 66 6e 64  (argv[0]);.#ifnd
6090: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
60a0: 54 46 31 36 0a 20 20 7d 65 6c 73 65 20 69 66 28  TF16.  }else if(
60b0: 20 73 74 72 63 6d 70 28 7a 43 6d 64 2c 20 22 62   strcmp(zCmd, "b
60c0: 79 74 65 73 31 36 22 29 3d 3d 30 20 29 7b 0a 20  ytes16")==0 ){. 
60d0: 20 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65     sqlite3_value
60e0: 5f 62 79 74 65 73 31 36 28 61 72 67 76 5b 30 5d  _bytes16(argv[0]
60f0: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73  );.#endif.  }els
6100: 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 43 6d  e if( strcmp(zCm
6110: 64 2c 20 22 6e 6f 6f 70 22 29 3d 3d 30 20 29 7b  d, "noop")==0 ){
6120: 0a 20 20 20 20 2f 2a 20 64 6f 20 6e 6f 74 68 69  .    /* do nothi
6130: 6e 67 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20  ng */.  }else{. 
6140: 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 20     return;.  }. 
6150: 20 7a 43 6d 64 20 3d 20 28 63 6f 6e 73 74 20 63   zCmd = (const c
6160: 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c  har*)sqlite3_val
6170: 75 65 5f 74 65 78 74 28 61 72 67 76 5b 33 5d 29  ue_text(argv[3])
6180: 3b 0a 20 20 69 66 28 20 7a 43 6d 64 3d 3d 30 20  ;.  if( zCmd==0 
6190: 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28 20  ) return;.  if( 
61a0: 73 74 72 63 6d 70 28 7a 43 6d 64 2c 22 74 65 78  strcmp(zCmd,"tex
61b0: 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 32  t")==0 ){.    p2
61c0: 20 3d 20 28 63 6f 6e 73 74 20 76 6f 69 64 2a 29   = (const void*)
61d0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
61e0: 78 74 28 61 72 67 76 5b 30 5d 29 3b 0a 23 69 66  xt(argv[0]);.#if
61f0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
6200: 5f 55 54 46 31 36 0a 20 20 7d 65 6c 73 65 20 69  _UTF16.  }else i
6210: 66 28 20 73 74 72 63 6d 70 28 7a 43 6d 64 2c 20  f( strcmp(zCmd, 
6220: 22 74 65 78 74 31 36 22 29 3d 3d 30 20 29 7b 0a  "text16")==0 ){.
6230: 20 20 20 20 70 32 20 3d 20 28 63 6f 6e 73 74 20      p2 = (const 
6240: 76 6f 69 64 2a 29 73 71 6c 69 74 65 33 5f 76 61  void*)sqlite3_va
6250: 6c 75 65 5f 74 65 78 74 31 36 28 61 72 67 76 5b  lue_text16(argv[
6260: 30 5d 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65  0]);.#endif.  }e
6270: 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
6280: 43 6d 64 2c 20 22 62 6c 6f 62 22 29 3d 3d 30 20  Cmd, "blob")==0 
6290: 29 7b 0a 20 20 20 20 70 32 20 3d 20 28 63 6f 6e  ){.    p2 = (con
62a0: 73 74 20 76 6f 69 64 2a 29 73 71 6c 69 74 65 33  st void*)sqlite3
62b0: 5f 76 61 6c 75 65 5f 62 6c 6f 62 28 61 72 67 76  _value_blob(argv
62c0: 5b 30 5d 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  [0]);.  }else{. 
62d0: 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 20     return;.  }. 
62e0: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
62f0: 69 6e 74 28 63 6f 6e 74 65 78 74 2c 20 70 31 21  int(context, p1!
6300: 3d 70 32 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  =p2);.}.../*.** 
6310: 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 5f 74  Usage:  sqlite_t
6320: 65 73 74 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  est_create_funct
6330: 69 6f 6e 20 44 42 0a 2a 2a 0a 2a 2a 20 43 61 6c  ion DB.**.** Cal
6340: 6c 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63 72  l the sqlite3_cr
6350: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 20 41 50  eate_function AP
6360: 49 20 6f 6e 20 74 68 65 20 67 69 76 65 6e 20 64  I on the given d
6370: 61 74 61 62 61 73 65 20 69 6e 20 6f 72 64 65 72  atabase in order
6380: 0a 2a 2a 20 74 6f 20 63 72 65 61 74 65 20 61 20  .** to create a 
6390: 66 75 6e 63 74 69 6f 6e 20 6e 61 6d 65 64 20 22  function named "
63a0: 78 5f 63 6f 61 6c 65 73 63 65 22 2e 20 20 54 68  x_coalesce".  Th
63b0: 69 73 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73  is function does
63c0: 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67 0a   the same thing.
63d0: 2a 2a 20 61 73 20 74 68 65 20 22 63 6f 61 6c 65  ** as the "coale
63e0: 73 63 65 22 20 66 75 6e 63 74 69 6f 6e 2e 20 20  sce" function.  
63f0: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 61 6c  This function al
6400: 73 6f 20 72 65 67 69 73 74 65 72 73 20 61 6e 20  so registers an 
6410: 53 51 4c 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20  SQL function.** 
6420: 6e 61 6d 65 64 20 22 78 5f 73 71 6c 69 74 65 5f  named "x_sqlite_
6430: 65 78 65 63 22 20 74 68 61 74 20 69 6e 76 6f 6b  exec" that invok
6440: 65 73 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28  es sqlite3_exec(
6450: 29 2e 20 20 49 6e 76 6f 6b 69 6e 67 20 73 71 6c  ).  Invoking sql
6460: 69 74 65 33 5f 65 78 65 63 28 29 0a 2a 2a 20 69  ite3_exec().** i
6470: 6e 20 74 68 69 73 20 77 61 79 20 69 73 20 69 6c  n this way is il
6480: 6c 65 67 61 6c 20 72 65 63 75 72 73 69 6f 6e 20  legal recursion 
6490: 61 6e 64 20 73 68 6f 75 6c 64 20 72 61 69 73 65  and should raise
64a0: 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53   an SQLITE_MISUS
64b0: 45 20 65 72 72 6f 72 2e 0a 2a 2a 20 54 68 65 20  E error..** The 
64c0: 65 66 66 65 63 74 20 69 73 20 73 69 6d 69 6c 61  effect is simila
64d0: 72 20 74 6f 20 74 72 79 69 6e 67 20 74 6f 20 75  r to trying to u
64e0: 73 65 20 74 68 65 20 73 61 6d 65 20 64 61 74 61  se the same data
64f0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
6500: 66 72 6f 6d 0a 2a 2a 20 74 77 6f 20 74 68 72 65  from.** two thre
6510: 61 64 73 20 61 74 20 74 68 65 20 73 61 6d 65 20  ads at the same 
6520: 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  time..**.** The 
6530: 6f 72 69 67 69 6e 61 6c 20 6d 6f 74 69 76 61 74  original motivat
6540: 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 72 6f 75  ion for this rou
6550: 74 69 6e 65 20 77 61 73 20 74 6f 20 62 65 20 61  tine was to be a
6560: 62 6c 65 20 74 6f 20 63 61 6c 6c 20 74 68 65 0a  ble to call the.
6570: 2a 2a 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  ** sqlite3_creat
6580: 65 5f 66 75 6e 63 74 69 6f 6e 20 66 75 6e 63 74  e_function funct
6590: 69 6f 6e 20 77 68 69 6c 65 20 61 20 71 75 65 72  ion while a quer
65a0: 79 20 69 73 20 69 6e 20 70 72 6f 67 72 65 73 73  y is in progress
65b0: 20 69 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20   in order.** to 
65c0: 74 65 73 74 20 74 68 65 20 53 51 4c 49 54 45 5f  test the SQLITE_
65d0: 4d 49 53 55 53 45 20 64 65 74 65 63 74 69 6f 6e  MISUSE detection
65e0: 20 6c 6f 67 69 63 2e 0a 2a 2f 0a 73 74 61 74 69   logic..*/.stati
65f0: 63 20 69 6e 74 20 74 65 73 74 5f 63 72 65 61 74  c int test_creat
6600: 65 5f 66 75 6e 63 74 69 6f 6e 28 0a 20 20 76 6f  e_function(.  vo
6610: 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54  id *NotUsed,.  T
6620: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
6630: 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c  p,    /* The TCL
6640: 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61   interpreter tha
6650: 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63  t invoked this c
6660: 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  ommand */.  int 
6670: 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20  argc,           
6680: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
6690: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63  arguments */.  c
66a0: 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20  har **argv      
66b0: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
66c0: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a   each argument *
66d0: 2f 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  /.){.  int rc;. 
66e0: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
66f0: 65 78 74 65 72 6e 20 76 6f 69 64 20 4d 64 35 5f  extern void Md5_
6700: 52 65 67 69 73 74 65 72 28 73 71 6c 69 74 65 33  Register(sqlite3
6710: 2a 29 3b 0a 0a 20 20 69 66 28 20 61 72 67 63 21  *);..  if( argc!
6720: 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =2 ){.    Tcl_Ap
6730: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
6740: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
6750: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
6760: 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20   argv[0],.      
6770: 20 22 20 44 42 5c 22 22 2c 20 30 29 3b 0a 20 20   " DB\"", 0);.  
6780: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
6790: 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
67a0: 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tDbPointer(inter
67b0: 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29  p, argv[1], &db)
67c0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
67d0: 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ROR;.  rc = sqli
67e0: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
67f0: 69 6f 6e 28 64 62 2c 20 22 78 5f 63 6f 61 6c 65  ion(db, "x_coale
6800: 73 63 65 22 2c 20 2d 31 2c 20 53 51 4c 49 54 45  sce", -1, SQLITE
6810: 5f 41 4e 59 2c 20 30 2c 20 0a 20 20 20 20 20 20  _ANY, 0, .      
6820: 20 20 74 31 5f 69 66 6e 75 6c 6c 46 75 6e 63 2c    t1_ifnullFunc,
6830: 20 30 2c 20 30 29 3b 0a 20 20 69 66 28 20 72 63   0, 0);.  if( rc
6840: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
6850: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
6860: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
6870: 64 62 2c 20 22 68 65 78 38 22 2c 20 31 2c 20 53  db, "hex8", 1, S
6880: 51 4c 49 54 45 5f 41 4e 59 2c 20 30 2c 20 0a 20  QLITE_ANY, 0, . 
6890: 20 20 20 20 20 20 20 20 20 68 65 78 38 46 75 6e           hex8Fun
68a0: 63 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 23 69  c, 0, 0);.  }.#i
68b0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
68c0: 54 5f 55 54 46 31 36 0a 20 20 69 66 28 20 72 63  T_UTF16.  if( rc
68d0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
68e0: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
68f0: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
6900: 64 62 2c 20 22 68 65 78 31 36 22 2c 20 31 2c 20  db, "hex16", 1, 
6910: 53 51 4c 49 54 45 5f 41 4e 59 2c 20 30 2c 20 0a  SQLITE_ANY, 0, .
6920: 20 20 20 20 20 20 20 20 20 20 68 65 78 31 36 46            hex16F
6930: 75 6e 63 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a  unc, 0, 0);.  }.
6940: 23 65 6e 64 69 66 0a 20 20 69 66 28 20 72 63 3d  #endif.  if( rc=
6950: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
6960: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63    rc = sqlite3_c
6970: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64  reate_function(d
6980: 62 2c 20 22 74 6b 74 32 32 31 33 66 75 6e 63 22  b, "tkt2213func"
6990: 2c 20 31 2c 20 53 51 4c 49 54 45 5f 41 4e 59 2c  , 1, SQLITE_ANY,
69a0: 20 30 2c 20 0a 20 20 20 20 20 20 20 20 20 20 74   0, .          t
69b0: 6b 74 32 32 31 33 46 75 6e 63 74 69 6f 6e 2c 20  kt2213Function, 
69c0: 30 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66 28  0, 0);.  }.  if(
69d0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
69e0: 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
69f0: 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
6a00: 6f 6e 28 64 62 2c 20 22 70 6f 69 6e 74 65 72 5f  on(db, "pointer_
6a10: 63 68 61 6e 67 65 22 2c 20 34 2c 20 53 51 4c 49  change", 4, SQLI
6a20: 54 45 5f 41 4e 59 2c 20 30 2c 20 0a 20 20 20 20  TE_ANY, 0, .    
6a30: 20 20 20 20 20 20 70 74 72 43 68 6e 67 46 75 6e        ptrChngFun
6a40: 63 74 69 6f 6e 2c 20 30 2c 20 30 29 3b 0a 20 20  ction, 0, 0);.  
6a50: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
6a60: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 2f  E_OMIT_UTF16.  /
6a70: 2a 20 55 73 65 20 74 68 65 20 73 71 6c 69 74 65  * Use the sqlite
6a80: 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
6a90: 6e 31 36 28 29 20 41 50 49 20 68 65 72 65 2e 20  n16() API here. 
6aa0: 4d 61 69 6e 6c 79 20 66 6f 72 20 66 75 6e 2c 20  Mainly for fun, 
6ab0: 62 75 74 20 61 6c 73 6f 20 0a 20 20 2a 2a 20 62  but also .  ** b
6ac0: 65 63 61 75 73 65 20 69 74 20 69 73 20 6e 6f 74  ecause it is not
6ad0: 20 74 65 73 74 65 64 20 61 6e 79 77 68 65 72 65   tested anywhere
6ae0: 20 65 6c 73 65 2e 20 2a 2f 0a 20 20 69 66 28 20   else. */.  if( 
6af0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
6b00: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  .    sqlite3_val
6b10: 75 65 20 2a 70 56 61 6c 3b 0a 20 20 20 20 73 71  ue *pVal;.    sq
6b20: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65  lite3_mutex_ente
6b30: 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20  r(db->mutex);.  
6b40: 20 20 70 56 61 6c 20 3d 20 73 71 6c 69 74 65 33    pVal = sqlite3
6b50: 56 61 6c 75 65 4e 65 77 28 64 62 29 3b 0a 20 20  ValueNew(db);.  
6b60: 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65    sqlite3ValueSe
6b70: 74 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c 20 22  tStr(pVal, -1, "
6b80: 78 5f 73 71 6c 69 74 65 5f 65 78 65 63 22 2c 20  x_sqlite_exec", 
6b90: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
6ba0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
6bb0: 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46   if( db->mallocF
6bc0: 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 20 20 72  ailed ){.      r
6bd0: 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  c = SQLITE_NOMEM
6be0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
6bf0: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
6c00: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 31  create_function1
6c10: 36 28 64 62 2c 20 0a 20 20 20 20 20 20 20 20 20  6(db, .         
6c20: 20 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75       sqlite3Valu
6c30: 65 54 65 78 74 28 70 56 61 6c 2c 20 53 51 4c 49  eText(pVal, SQLI
6c40: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 29 2c  TE_UTF16NATIVE),
6c50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31  .              1
6c60: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 2c 20  , SQLITE_UTF16, 
6c70: 64 62 2c 20 73 71 6c 69 74 65 33 45 78 65 63 46  db, sqlite3ExecF
6c80: 75 6e 63 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  unc, 0, 0);.    
6c90: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c  }.    sqlite3Val
6ca0: 75 65 46 72 65 65 28 70 56 61 6c 29 3b 0a 20 20  ueFree(pVal);.  
6cb0: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
6cc0: 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78 29  leave(db->mutex)
6cd0: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  ;.  }.#endif..  
6ce0: 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45  if( sqlite3TestE
6cf0: 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64  rrCode(interp, d
6d00: 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20  b, rc) ) return 
6d10: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c  TCL_ERROR;.  Tcl
6d20: 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
6d30: 70 2c 20 28 63 68 61 72 20 2a 29 74 31 45 72 72  p, (char *)t1Err
6d40: 6f 72 4e 61 6d 65 28 72 63 29 2c 20 30 29 3b 0a  orName(rc), 0);.
6d50: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
6d60: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e  .}../*.** Routin
6d70: 65 73 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  es to implement 
6d80: 74 68 65 20 78 5f 63 6f 75 6e 74 28 29 20 61 67  the x_count() ag
6d90: 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
6da0: 2e 0a 2a 2a 0a 2a 2a 20 78 5f 63 6f 75 6e 74 28  ..**.** x_count(
6db0: 29 20 63 6f 75 6e 74 73 20 74 68 65 20 6e 75 6d  ) counts the num
6dc0: 62 65 72 20 6f 66 20 6e 6f 6e 2d 6e 75 6c 6c 20  ber of non-null 
6dd0: 61 72 67 75 6d 65 6e 74 73 2e 20 20 42 75 74 20  arguments.  But 
6de0: 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 73 6f 6d  there are.** som
6df0: 65 20 74 77 69 73 74 73 20 66 6f 72 20 74 65 73  e twists for tes
6e00: 74 69 6e 67 20 70 75 72 70 6f 73 65 73 2e 0a 2a  ting purposes..*
6e10: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 61 72 67 75  *.** If the argu
6e20: 6d 65 6e 74 20 74 6f 20 78 5f 63 6f 75 6e 74 28  ment to x_count(
6e30: 29 20 69 73 20 34 30 20 74 68 65 6e 20 61 20 55  ) is 40 then a U
6e40: 54 46 2d 38 20 65 72 72 6f 72 20 69 73 20 72 65  TF-8 error is re
6e50: 70 6f 72 74 65 64 0a 2a 2a 20 6f 6e 20 74 68 65  ported.** on the
6e60: 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 2e 20   step function. 
6e70: 20 49 66 20 78 5f 63 6f 75 6e 74 28 34 31 29 20   If x_count(41) 
6e80: 69 73 20 73 65 65 6e 2c 20 74 68 65 6e 20 61 20  is seen, then a 
6e90: 55 54 46 2d 31 36 20 65 72 72 6f 72 0a 2a 2a 20  UTF-16 error.** 
6ea0: 69 73 20 72 65 70 6f 72 74 65 64 20 6f 6e 20 74  is reported on t
6eb0: 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  he step function
6ec0: 2e 20 20 49 66 20 74 68 65 20 74 6f 74 61 6c 20  .  If the total 
6ed0: 63 6f 75 6e 74 20 69 73 20 34 32 2c 20 74 68 65  count is 42, the
6ee0: 6e 0a 2a 2a 20 61 20 55 54 46 2d 38 20 65 72 72  n.** a UTF-8 err
6ef0: 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64 20 6f  or is reported o
6f00: 6e 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 20 66  n the finalize f
6f10: 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65  unction..*/.type
6f20: 64 65 66 20 73 74 72 75 63 74 20 74 31 43 6f 75  def struct t1Cou
6f30: 6e 74 43 74 78 20 74 31 43 6f 75 6e 74 43 74 78  ntCtx t1CountCtx
6f40: 3b 0a 73 74 72 75 63 74 20 74 31 43 6f 75 6e 74  ;.struct t1Count
6f50: 43 74 78 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 7d  Ctx {.  int n;.}
6f60: 3b 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74 31  ;.static void t1
6f70: 43 6f 75 6e 74 53 74 65 70 28 0a 20 20 73 71 6c  CountStep(.  sql
6f80: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f  ite3_context *co
6f90: 6e 74 65 78 74 2c 0a 20 20 69 6e 74 20 61 72 67  ntext,.  int arg
6fa0: 63 2c 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  c,.  sqlite3_val
6fb0: 75 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 74  ue **argv.){.  t
6fc0: 31 43 6f 75 6e 74 43 74 78 20 2a 70 3b 0a 20 20  1CountCtx *p;.  
6fd0: 70 20 3d 20 73 71 6c 69 74 65 33 5f 61 67 67 72  p = sqlite3_aggr
6fe0: 65 67 61 74 65 5f 63 6f 6e 74 65 78 74 28 63 6f  egate_context(co
6ff0: 6e 74 65 78 74 2c 20 73 69 7a 65 6f 66 28 2a 70  ntext, sizeof(*p
7000: 29 29 3b 0a 20 20 69 66 28 20 28 61 72 67 63 3d  ));.  if( (argc=
7010: 3d 30 20 7c 7c 20 53 51 4c 49 54 45 5f 4e 55 4c  =0 || SQLITE_NUL
7020: 4c 21 3d 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  L!=sqlite3_value
7030: 5f 74 79 70 65 28 61 72 67 76 5b 30 5d 29 20 29  _type(argv[0]) )
7040: 20 26 26 20 70 20 29 7b 0a 20 20 20 20 70 2d 3e   && p ){.    p->
7050: 6e 2b 2b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 61  n++;.  }.  if( a
7060: 72 67 63 3e 30 20 29 7b 0a 20 20 20 20 69 6e 74  rgc>0 ){.    int
7070: 20 76 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c   v = sqlite3_val
7080: 75 65 5f 69 6e 74 28 61 72 67 76 5b 30 5d 29 3b  ue_int(argv[0]);
7090: 0a 20 20 20 20 69 66 28 20 76 3d 3d 34 30 20 29  .    if( v==40 )
70a0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
70b0: 72 65 73 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e  result_error(con
70c0: 74 65 78 74 2c 20 22 76 61 6c 75 65 20 6f 66 20  text, "value of 
70d0: 34 30 20 68 61 6e 64 65 64 20 74 6f 20 78 5f 63  40 handed to x_c
70e0: 6f 75 6e 74 22 2c 20 2d 31 29 3b 0a 23 69 66 6e  ount", -1);.#ifn
70f0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
7100: 55 54 46 31 36 0a 20 20 20 20 7d 65 6c 73 65 20  UTF16.    }else 
7110: 69 66 28 20 76 3d 3d 34 31 20 29 7b 0a 20 20 20  if( v==41 ){.   
7120: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 7a 55     const char zU
7130: 74 66 31 36 45 72 72 4d 73 67 5b 5d 20 3d 20 7b  tf16ErrMsg[] = {
7140: 20 30 2c 20 30 78 36 31 2c 20 30 2c 20 30 78 36   0, 0x61, 0, 0x6
7150: 32 2c 20 30 2c 20 30 78 36 33 2c 20 30 2c 20 30  2, 0, 0x63, 0, 0
7160: 2c 20 30 7d 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 0};.      sqli
7170: 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72  te3_result_error
7180: 31 36 28 63 6f 6e 74 65 78 74 2c 20 26 7a 55 74  16(context, &zUt
7190: 66 31 36 45 72 72 4d 73 67 5b 31 2d 53 51 4c 49  f16ErrMsg[1-SQLI
71a0: 54 45 5f 42 49 47 45 4e 44 49 41 4e 5d 2c 20 2d  TE_BIGENDIAN], -
71b0: 31 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d  1);.#endif.    }
71c0: 0a 20 20 7d 0a 7d 20 20 20 0a 73 74 61 74 69 63  .  }.}   .static
71d0: 20 76 6f 69 64 20 74 31 43 6f 75 6e 74 46 69 6e   void t1CountFin
71e0: 61 6c 69 7a 65 28 73 71 6c 69 74 65 33 5f 63 6f  alize(sqlite3_co
71f0: 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78 74 29 7b  ntext *context){
7200: 0a 20 20 74 31 43 6f 75 6e 74 43 74 78 20 2a 70  .  t1CountCtx *p
7210: 3b 0a 20 20 70 20 3d 20 73 71 6c 69 74 65 33 5f  ;.  p = sqlite3_
7220: 61 67 67 72 65 67 61 74 65 5f 63 6f 6e 74 65 78  aggregate_contex
7230: 74 28 63 6f 6e 74 65 78 74 2c 20 73 69 7a 65 6f  t(context, sizeo
7240: 66 28 2a 70 29 29 3b 0a 20 20 69 66 28 20 70 20  f(*p));.  if( p 
7250: 29 7b 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e 3d  ){.    if( p->n=
7260: 3d 34 32 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  =42 ){.      sql
7270: 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f  ite3_result_erro
7280: 72 28 63 6f 6e 74 65 78 74 2c 20 22 78 5f 63 6f  r(context, "x_co
7290: 75 6e 74 20 74 6f 74 61 6c 73 20 74 6f 20 34 32  unt totals to 42
72a0: 22 2c 20 2d 31 29 3b 0a 20 20 20 20 7d 65 6c 73  ", -1);.    }els
72b0: 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e{.      sqlite3
72c0: 5f 72 65 73 75 6c 74 5f 69 6e 74 28 63 6f 6e 74  _result_int(cont
72d0: 65 78 74 2c 20 70 20 3f 20 70 2d 3e 6e 20 3a 20  ext, p ? p->n : 
72e0: 30 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a  0);.    }.  }.}.
72f0: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
7300: 71 6c 69 74 65 5f 74 65 73 74 5f 63 72 65 61 74  qlite_test_creat
7310: 65 5f 61 67 67 72 65 67 61 74 65 20 44 42 0a 2a  e_aggregate DB.*
7320: 2a 0a 2a 2a 20 43 61 6c 6c 20 74 68 65 20 73 71  *.** Call the sq
7330: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
7340: 63 74 69 6f 6e 20 41 50 49 20 6f 6e 20 74 68 65  ction API on the
7350: 20 67 69 76 65 6e 20 64 61 74 61 62 61 73 65 20   given database 
7360: 69 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 63  in order.** to c
7370: 72 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e  reate a function
7380: 20 6e 61 6d 65 64 20 22 78 5f 63 6f 75 6e 74 22   named "x_count"
7390: 2e 20 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  .  This function
73a0: 20 64 6f 65 73 20 74 68 65 20 73 61 6d 65 20 74   does the same t
73b0: 68 69 6e 67 0a 2a 2a 20 61 73 20 74 68 65 20 22  hing.** as the "
73c0: 6d 64 35 73 75 6d 22 20 66 75 6e 63 74 69 6f 6e  md5sum" function
73d0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6f 72 69 67  ..**.** The orig
73e0: 69 6e 61 6c 20 6d 6f 74 69 76 61 74 69 6f 6e 20  inal motivation 
73f0: 66 6f 72 20 74 68 69 73 20 72 6f 75 74 69 6e 65  for this routine
7400: 20 77 61 73 20 74 6f 20 62 65 20 61 62 6c 65 20   was to be able 
7410: 74 6f 20 63 61 6c 6c 20 74 68 65 0a 2a 2a 20 73  to call the.** s
7420: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 61 67  qlite3_create_ag
7430: 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
7440: 20 77 68 69 6c 65 20 61 20 71 75 65 72 79 20 69   while a query i
7450: 73 20 69 6e 20 70 72 6f 67 72 65 73 73 20 69 6e  s in progress in
7460: 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 74 65 73   order.** to tes
7470: 74 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 49 53  t the SQLITE_MIS
7480: 55 53 45 20 64 65 74 65 63 74 69 6f 6e 20 6c 6f  USE detection lo
7490: 67 69 63 2e 20 20 53 65 65 20 6d 69 73 75 73 65  gic.  See misuse
74a0: 2e 74 65 73 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  .test..**.** Thi
74b0: 73 20 72 6f 75 74 69 6e 65 20 77 61 73 20 6c 61  s routine was la
74c0: 74 65 72 20 65 78 74 65 6e 64 65 64 20 74 6f 20  ter extended to 
74d0: 74 65 73 74 20 74 68 65 20 75 73 65 20 6f 66 20  test the use of 
74e0: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65  sqlite3_result_e
74f0: 72 72 6f 72 28 29 0a 2a 2a 20 77 69 74 68 69 6e  rror().** within
7500: 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
7510: 69 6f 6e 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ions..*/.static 
7520: 69 6e 74 20 74 65 73 74 5f 63 72 65 61 74 65 5f  int test_create_
7530: 61 67 67 72 65 67 61 74 65 28 0a 20 20 76 6f 69  aggregate(.  voi
7540: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63  d *NotUsed,.  Tc
7550: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
7560: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
7570: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
7580: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
7590: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61  mmand */.  int a
75a0: 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  rgc,            
75b0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
75c0: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68  rguments */.  ch
75d0: 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20  ar **argv       
75e0: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
75f0: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f  each argument */
7600: 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  .){.  sqlite3 *d
7610: 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69  b;.  int rc;.  i
7620: 66 28 20 61 72 67 63 21 3d 32 20 29 7b 0a 20 20  f( argc!=2 ){.  
7630: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
7640: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
7650: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
7660: 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
7670: 2c 0a 20 20 20 20 20 20 20 22 20 46 49 4c 45 4e  ,.       " FILEN
7680: 41 4d 45 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20  AME\"", 0);.    
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 7d 0a 20 20 69 66 28 20 67 65 74 44  ;.  }.  if( getD
76b0: 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  bPointer(interp,
76c0: 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29   argv[1], &db) )
76d0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
76e0: 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  R;.  rc = sqlite
76f0: 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
7700: 6e 28 64 62 2c 20 22 78 5f 63 6f 75 6e 74 22 2c  n(db, "x_count",
7710: 20 30 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c   0, SQLITE_UTF8,
7720: 20 30 2c 20 30 2c 0a 20 20 20 20 20 20 74 31 43   0, 0,.      t1C
7730: 6f 75 6e 74 53 74 65 70 2c 74 31 43 6f 75 6e 74  ountStep,t1Count
7740: 46 69 6e 61 6c 69 7a 65 29 3b 0a 20 20 69 66 28  Finalize);.  if(
7750: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
7760: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72  {.    sqlite3_cr
7770: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62  eate_function(db
7780: 2c 20 22 78 5f 63 6f 75 6e 74 22 2c 20 31 2c 20  , "x_count", 1, 
7790: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 20  SQLITE_UTF8, 0, 
77a0: 30 2c 0a 20 20 20 20 20 20 20 20 74 31 43 6f 75  0,.        t1Cou
77b0: 6e 74 53 74 65 70 2c 74 31 43 6f 75 6e 74 46 69  ntStep,t1CountFi
77c0: 6e 61 6c 69 7a 65 29 3b 0a 20 20 7d 0a 20 20 69  nalize);.  }.  i
77d0: 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72  f( sqlite3TestEr
77e0: 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62  rCode(interp, db
77f0: 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54  , rc) ) return T
7800: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74 75  CL_ERROR;.  retu
7810: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f  rn TCL_OK;.}.../
7820: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 70 72 69  *.** Usage:  pri
7830: 6e 74 66 20 54 45 58 54 0a 2a 2a 0a 2a 2a 20 53  ntf TEXT.**.** S
7840: 65 6e 64 20 6f 75 74 70 75 74 20 74 6f 20 70 72  end output to pr
7850: 69 6e 74 66 2e 20 20 55 73 65 20 74 68 69 73 20  intf.  Use this 
7860: 72 61 74 68 65 72 20 74 68 61 6e 20 70 75 74 73  rather than puts
7870: 20 74 6f 20 6d 65 72 67 65 20 74 68 65 20 6f 75   to merge the ou
7880: 74 70 75 74 0a 2a 2a 20 69 6e 20 74 68 65 20 63  tput.** in the c
7890: 6f 72 72 65 63 74 20 73 65 71 75 65 6e 63 65 20  orrect sequence 
78a0: 77 69 74 68 20 64 65 62 75 67 67 69 6e 67 20 70  with debugging p
78b0: 72 69 6e 74 66 73 20 69 6e 73 65 72 74 65 64 20  rintfs inserted 
78c0: 69 6e 74 6f 20 43 20 63 6f 64 65 2e 0a 2a 2a 20  into C code..** 
78d0: 50 75 74 73 20 75 73 65 73 20 61 20 73 65 70 61  Puts uses a sepa
78e0: 72 61 74 65 20 62 75 66 66 65 72 20 61 6e 64 20  rate buffer and 
78f0: 64 65 62 75 67 67 69 6e 67 20 73 74 61 74 65 6d  debugging statem
7900: 65 6e 74 73 20 77 69 6c 6c 20 62 65 20 6f 75 74  ents will be out
7910: 20 6f 66 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20   of.** sequence 
7920: 69 66 20 69 74 20 69 73 20 75 73 65 64 2e 0a 2a  if it is used..*
7930: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
7940: 74 5f 70 72 69 6e 74 66 28 0a 20 20 76 6f 69 64  t_printf(.  void
7950: 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c   *NotUsed,.  Tcl
7960: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
7970: 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69      /* The TCL i
7980: 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20  nterpreter that 
7990: 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d  invoked this com
79a0: 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72  mand */.  int ar
79b0: 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  gc,             
79c0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
79d0: 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61  guments */.  cha
79e0: 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20  r **argv        
79f0: 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65      /* Text of e
7a00: 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  ach argument */.
7a10: 29 7b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 32  ){.  if( argc!=2
7a20: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
7a30: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
7a40: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
7a50: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61  should be \"", a
7a60: 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22  rgv[0],.       "
7a70: 20 54 45 58 54 5c 22 22 2c 20 30 29 3b 0a 20 20   TEXT\"", 0);.  
7a80: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
7a90: 4f 52 3b 0a 20 20 7d 0a 20 20 70 72 69 6e 74 66  OR;.  }.  printf
7aa0: 28 22 25 73 5c 6e 22 2c 20 61 72 67 76 5b 31 5d  ("%s\n", argv[1]
7ab0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
7ac0: 4f 4b 3b 0a 7d 0a 0a 0a 0a 2f 2a 0a 2a 2a 20 55  OK;.}..../*.** U
7ad0: 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d  sage:  sqlite3_m
7ae0: 70 72 69 6e 74 66 5f 69 6e 74 20 46 4f 52 4d 41  printf_int FORMA
7af0: 54 20 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45  T INTEGER INTEGE
7b00: 52 20 49 4e 54 45 47 45 52 0a 2a 2a 0a 2a 2a 20  R INTEGER.**.** 
7b10: 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77 69 74  Call mprintf wit
7b20: 68 20 74 68 72 65 65 20 69 6e 74 65 67 65 72 20  h three integer 
7b30: 61 72 67 75 6d 65 6e 74 73 0a 2a 2f 0a 73 74 61  arguments.*/.sta
7b40: 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  tic int sqlite3_
7b50: 6d 70 72 69 6e 74 66 5f 69 6e 74 28 0a 20 20 76  mprintf_int(.  v
7b60: 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20  oid *NotUsed,.  
7b70: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
7b80: 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43  rp,    /* The TC
7b90: 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68  L interpreter th
7ba0: 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20  at invoked this 
7bb0: 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74  command */.  int
7bc0: 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20   argc,          
7bd0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
7be0: 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
7bf0: 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20  char **argv     
7c00: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f         /* Text o
7c10: 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20  f each argument 
7c20: 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 61 5b 33 5d  */.){.  int a[3]
7c30: 2c 20 69 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a  , i;.  char *z;.
7c40: 20 20 69 66 28 20 61 72 67 63 21 3d 35 20 29 7b    if( argc!=5 ){
7c50: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
7c60: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
7c70: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
7c80: 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76  uld be \"", argv
7c90: 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 4f  [0],.       " FO
7ca0: 52 4d 41 54 20 49 4e 54 20 49 4e 54 20 49 4e 54  RMAT INT INT INT
7cb0: 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  \"", 0);.    ret
7cc0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
7cd0: 20 7d 0a 20 20 66 6f 72 28 69 3d 32 3b 20 69 3c   }.  for(i=2; i<
7ce0: 35 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28  5; i++){.    if(
7cf0: 20 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74 65   Tcl_GetInt(inte
7d00: 72 70 2c 20 61 72 67 76 5b 69 5d 2c 20 26 61 5b  rp, argv[i], &a[
7d10: 69 2d 32 5d 29 20 29 20 72 65 74 75 72 6e 20 54  i-2]) ) return T
7d20: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
7d30: 7a 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  z = sqlite3_mpri
7d40: 6e 74 66 28 61 72 67 76 5b 31 5d 2c 20 61 5b 30  ntf(argv[1], a[0
7d50: 5d 2c 20 61 5b 31 5d 2c 20 61 5b 32 5d 29 3b 0a  ], a[1], a[2]);.
7d60: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
7d70: 6c 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29  lt(interp, z, 0)
7d80: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65  ;.  sqlite3_free
7d90: 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  (z);.  return TC
7da0: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49  L_OK;.}../*.** I
7db0: 66 20 7a 4e 75 6d 20 72 65 70 72 65 73 65 6e 74  f zNum represent
7dc0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
7dd0: 74 20 77 69 6c 6c 20 66 69 74 20 69 6e 20 36 34  t will fit in 64
7de0: 2d 62 69 74 73 2c 20 74 68 65 6e 20 73 65 74 0a  -bits, then set.
7df0: 2a 2a 20 2a 70 56 61 6c 75 65 20 74 6f 20 74 68  ** *pValue to th
7e00: 61 74 20 69 6e 74 65 67 65 72 20 61 6e 64 20 72  at integer and r
7e10: 65 74 75 72 6e 20 74 72 75 65 2e 20 20 4f 74 68  eturn true.  Oth
7e20: 65 72 77 69 73 65 20 72 65 74 75 72 6e 20 66 61  erwise return fa
7e30: 6c 73 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  lse..*/.static i
7e40: 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74  nt sqlite3GetInt
7e50: 36 34 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  64(const char *z
7e60: 4e 75 6d 2c 20 69 36 34 20 2a 70 56 61 6c 75 65  Num, i64 *pValue
7e70: 29 7b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ){.  if( sqlite3
7e80: 46 69 74 73 49 6e 36 34 42 69 74 73 28 7a 4e 75  FitsIn64Bits(zNu
7e90: 6d 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  m) ){.    sqlite
7ea0: 33 41 74 6f 69 36 34 28 7a 4e 75 6d 2c 20 70 56  3Atoi64(zNum, pV
7eb0: 61 6c 75 65 29 3b 0a 20 20 20 20 72 65 74 75 72  alue);.    retur
7ec0: 6e 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  n 1;.  }.  retur
7ed0: 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  n 0;.}../*.** Us
7ee0: 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70  age:  sqlite3_mp
7ef0: 72 69 6e 74 66 5f 69 6e 74 36 34 20 46 4f 52 4d  rintf_int64 FORM
7f00: 41 54 20 49 4e 54 45 47 45 52 20 49 4e 54 45 47  AT INTEGER INTEG
7f10: 45 52 20 49 4e 54 45 47 45 52 0a 2a 2a 0a 2a 2a  ER INTEGER.**.**
7f20: 20 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77 69   Call mprintf wi
7f30: 74 68 20 74 68 72 65 65 20 36 34 2d 62 69 74 20  th three 64-bit 
7f40: 69 6e 74 65 67 65 72 20 61 72 67 75 6d 65 6e 74  integer argument
7f50: 73 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  s.*/.static int 
7f60: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
7f70: 69 6e 74 36 34 28 0a 20 20 76 6f 69 64 20 2a 4e  int64(.  void *N
7f80: 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e  otUsed,.  Tcl_In
7f90: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
7fa0: 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
7fb0: 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
7fc0: 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
7fd0: 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c  d */.  int argc,
7fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7ff0: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
8000: 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ents */.  char *
8010: 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20  *argv           
8020: 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68   /* Text of each
8030: 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a   argument */.){.
8040: 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74    int i;.  sqlit
8050: 65 5f 69 6e 74 36 34 20 61 5b 33 5d 3b 0a 20 20  e_int64 a[3];.  
8060: 63 68 61 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61  char *z;.  if( a
8070: 72 67 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63  rgc!=5 ){.    Tc
8080: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
8090: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
80a0: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
80b0: 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20  \"", argv[0],.  
80c0: 20 20 20 20 20 22 20 46 4f 52 4d 41 54 20 49 4e       " FORMAT IN
80d0: 54 20 49 4e 54 20 49 4e 54 5c 22 22 2c 20 30 29  T INT INT\"", 0)
80e0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
80f0: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 66 6f  _ERROR;.  }.  fo
8100: 72 28 69 3d 32 3b 20 69 3c 35 3b 20 69 2b 2b 29  r(i=2; i<5; i++)
8110: 7b 0a 20 20 20 20 69 66 28 20 21 73 71 6c 69 74  {.    if( !sqlit
8120: 65 33 47 65 74 49 6e 74 36 34 28 61 72 67 76 5b  e3GetInt64(argv[
8130: 69 5d 2c 20 26 61 5b 69 2d 32 5d 29 20 29 7b 0a  i], &a[i-2]) ){.
8140: 20 20 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64        Tcl_Append
8150: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
8160: 61 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20  argument is not 
8170: 61 20 76 61 6c 69 64 20 36 34 2d 62 69 74 20 69  a valid 64-bit i
8180: 6e 74 65 67 65 72 22 2c 20 30 29 3b 0a 20 20 20  nteger", 0);.   
8190: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
81a0: 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  ROR;.    }.  }. 
81b0: 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72   z = sqlite3_mpr
81c0: 69 6e 74 66 28 61 72 67 76 5b 31 5d 2c 20 61 5b  intf(argv[1], a[
81d0: 30 5d 2c 20 61 5b 31 5d 2c 20 61 5b 32 5d 29 3b  0], a[1], a[2]);
81e0: 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73  .  Tcl_AppendRes
81f0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30  ult(interp, z, 0
8200: 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65  );.  sqlite3_fre
8210: 65 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  e(z);.  return T
8220: 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
8230: 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f  Usage:  sqlite3_
8240: 6d 70 72 69 6e 74 66 5f 73 74 72 20 46 4f 52 4d  mprintf_str FORM
8250: 41 54 20 49 4e 54 45 47 45 52 20 49 4e 54 45 47  AT INTEGER INTEG
8260: 45 52 20 53 54 52 49 4e 47 0a 2a 2a 0a 2a 2a 20  ER STRING.**.** 
8270: 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77 69 74  Call mprintf wit
8280: 68 20 74 77 6f 20 69 6e 74 65 67 65 72 20 61 72  h two integer ar
8290: 67 75 6d 65 6e 74 73 20 61 6e 64 20 6f 6e 65 20  guments and one 
82a0: 73 74 72 69 6e 67 20 61 72 67 75 6d 65 6e 74 0a  string argument.
82b0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71  */.static int sq
82c0: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74  lite3_mprintf_st
82d0: 72 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73  r(.  void *NotUs
82e0: 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ed,.  Tcl_Interp
82f0: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
8300: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
8310: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
8320: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
8330: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20  .  int argc,    
8340: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
8350: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
8360: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67   */.  char **arg
8370: 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  v            /* 
8380: 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67  Text of each arg
8390: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e  ument */.){.  in
83a0: 74 20 61 5b 33 5d 2c 20 69 3b 0a 20 20 63 68 61  t a[3], i;.  cha
83b0: 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72 67 63  r *z;.  if( argc
83c0: 3c 34 20 7c 7c 20 61 72 67 63 3e 35 20 29 7b 0a  <4 || argc>5 ){.
83d0: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
83e0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
83f0: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
8400: 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
8410: 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 4f 52  0],.       " FOR
8420: 4d 41 54 20 49 4e 54 20 49 4e 54 20 3f 53 54 52  MAT INT INT ?STR
8430: 49 4e 47 3f 5c 22 22 2c 20 30 29 3b 0a 20 20 20  ING?\"", 0);.   
8440: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
8450: 52 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 32  R;.  }.  for(i=2
8460: 3b 20 69 3c 34 3b 20 69 2b 2b 29 7b 0a 20 20 20  ; i<4; i++){.   
8470: 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 28   if( Tcl_GetInt(
8480: 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 69 5d 2c  interp, argv[i],
8490: 20 26 61 5b 69 2d 32 5d 29 20 29 20 72 65 74 75   &a[i-2]) ) retu
84a0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
84b0: 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f  }.  z = sqlite3_
84c0: 6d 70 72 69 6e 74 66 28 61 72 67 76 5b 31 5d 2c  mprintf(argv[1],
84d0: 20 61 5b 30 5d 2c 20 61 5b 31 5d 2c 20 61 72 67   a[0], a[1], arg
84e0: 63 3e 34 20 3f 20 61 72 67 76 5b 34 5d 20 3a 20  c>4 ? argv[4] : 
84f0: 4e 55 4c 4c 29 3b 0a 20 20 54 63 6c 5f 41 70 70  NULL);.  Tcl_App
8500: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
8510: 2c 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74  , z, 0);.  sqlit
8520: 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65  e3_free(z);.  re
8530: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
8540: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
8550: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 5f 73  lite3_snprintf_s
8560: 74 72 20 49 4e 54 45 47 45 52 20 46 4f 52 4d 41  tr INTEGER FORMA
8570: 54 20 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45  T INTEGER INTEGE
8580: 52 20 53 54 52 49 4e 47 0a 2a 2a 0a 2a 2a 20 43  R STRING.**.** C
8590: 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77 69 74 68  all mprintf with
85a0: 20 74 77 6f 20 69 6e 74 65 67 65 72 20 61 72 67   two integer arg
85b0: 75 6d 65 6e 74 73 20 61 6e 64 20 6f 6e 65 20 73  uments and one s
85c0: 74 72 69 6e 67 20 61 72 67 75 6d 65 6e 74 0a 2a  tring argument.*
85d0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c  /.static int sql
85e0: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 5f 73 74  ite3_snprintf_st
85f0: 72 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73  r(.  void *NotUs
8600: 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ed,.  Tcl_Interp
8610: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
8620: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
8630: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
8640: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
8650: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20  .  int argc,    
8660: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
8670: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
8680: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67   */.  char **arg
8690: 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  v            /* 
86a0: 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67  Text of each arg
86b0: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e  ument */.){.  in
86c0: 74 20 61 5b 33 5d 2c 20 69 3b 0a 20 20 69 6e 74  t a[3], i;.  int
86d0: 20 6e 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20   n;.  char *z;. 
86e0: 20 69 66 28 20 61 72 67 63 3c 35 20 7c 7c 20 61   if( argc<5 || a
86f0: 72 67 63 3e 36 20 29 7b 0a 20 20 20 20 54 63 6c  rgc>6 ){.    Tcl
8700: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
8710: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
8720: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
8730: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20  "", argv[0],.   
8740: 20 20 20 20 22 20 49 4e 54 20 46 4f 52 4d 41 54      " INT FORMAT
8750: 20 49 4e 54 20 49 4e 54 20 3f 53 54 52 49 4e 47   INT INT ?STRING
8760: 3f 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  ?\"", 0);.    re
8770: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
8780: 20 20 7d 0a 20 20 69 66 28 20 54 63 6c 5f 47 65    }.  if( Tcl_Ge
8790: 74 49 6e 74 28 69 6e 74 65 72 70 2c 20 61 72 67  tInt(interp, arg
87a0: 76 5b 31 5d 2c 20 26 6e 29 20 29 20 72 65 74 75  v[1], &n) ) retu
87b0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
87c0: 69 66 28 20 6e 3c 30 20 29 7b 0a 20 20 20 20 54  if( n<0 ){.    T
87d0: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
87e0: 69 6e 74 65 72 70 2c 20 22 4e 20 6d 75 73 74 20  interp, "N must 
87f0: 62 65 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 22  be non-negative"
8800: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
8810: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
8820: 20 20 66 6f 72 28 69 3d 33 3b 20 69 3c 35 3b 20    for(i=3; i<5; 
8830: 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 54 63  i++){.    if( Tc
8840: 6c 5f 47 65 74 49 6e 74 28 69 6e 74 65 72 70 2c  l_GetInt(interp,
8850: 20 61 72 67 76 5b 69 5d 2c 20 26 61 5b 69 2d 33   argv[i], &a[i-3
8860: 5d 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  ]) ) return TCL_
8870: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a 20 3d  ERROR;.  }.  z =
8880: 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28   sqlite3_malloc(
8890: 20 6e 2b 31 20 29 3b 0a 20 20 73 71 6c 69 74 65   n+1 );.  sqlite
88a0: 33 5f 73 6e 70 72 69 6e 74 66 28 6e 2c 20 7a 2c  3_snprintf(n, z,
88b0: 20 61 72 67 76 5b 32 5d 2c 20 61 5b 30 5d 2c 20   argv[2], a[0], 
88c0: 61 5b 31 5d 2c 20 61 72 67 63 3e 34 20 3f 20 61  a[1], argc>4 ? a
88d0: 72 67 76 5b 35 5d 20 3a 20 4e 55 4c 4c 29 3b 0a  rgv[5] : NULL);.
88e0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
88f0: 6c 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29  lt(interp, z, 0)
8900: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65  ;.  sqlite3_free
8910: 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  (z);.  return TC
8920: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
8930: 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d  sage:  sqlite3_m
8940: 70 72 69 6e 74 66 5f 64 6f 75 62 6c 65 20 46 4f  printf_double FO
8950: 52 4d 41 54 20 49 4e 54 45 47 45 52 20 49 4e 54  RMAT INTEGER INT
8960: 45 47 45 52 20 44 4f 55 42 4c 45 0a 2a 2a 0a 2a  EGER DOUBLE.**.*
8970: 2a 20 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77  * Call mprintf w
8980: 69 74 68 20 74 77 6f 20 69 6e 74 65 67 65 72 20  ith two integer 
8990: 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 6f 6e  arguments and on
89a0: 65 20 64 6f 75 62 6c 65 20 61 72 67 75 6d 65 6e  e double argumen
89b0: 74 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  t.*/.static int 
89c0: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
89d0: 64 6f 75 62 6c 65 28 0a 20 20 76 6f 69 64 20 2a  double(.  void *
89e0: 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49  NotUsed,.  Tcl_I
89f0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20  nterp *interp,  
8a00: 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74    /* The TCL int
8a10: 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e  erpreter that in
8a20: 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61  voked this comma
8a30: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63  nd */.  int argc
8a40: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
8a50: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
8a60: 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20  ments */.  char 
8a70: 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20  **argv          
8a80: 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63    /* Text of eac
8a90: 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b  h argument */.){
8aa0: 0a 20 20 69 6e 74 20 61 5b 33 5d 2c 20 69 3b 0a  .  int a[3], i;.
8ab0: 20 20 64 6f 75 62 6c 65 20 72 3b 0a 20 20 63 68    double r;.  ch
8ac0: 61 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72 67  ar *z;.  if( arg
8ad0: 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=5 ){.    Tcl_
8ae0: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
8af0: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
8b00: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
8b10: 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20  ", argv[0],.    
8b20: 20 20 20 22 20 46 4f 52 4d 41 54 20 49 4e 54 20     " FORMAT INT 
8b30: 49 4e 54 20 44 4f 55 42 4c 45 5c 22 22 2c 20 30  INT DOUBLE\"", 0
8b40: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
8b50: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 66  L_ERROR;.  }.  f
8b60: 6f 72 28 69 3d 32 3b 20 69 3c 34 3b 20 69 2b 2b  or(i=2; i<4; i++
8b70: 29 7b 0a 20 20 20 20 69 66 28 20 54 63 6c 5f 47  ){.    if( Tcl_G
8b80: 65 74 49 6e 74 28 69 6e 74 65 72 70 2c 20 61 72  etInt(interp, ar
8b90: 67 76 5b 69 5d 2c 20 26 61 5b 69 2d 32 5d 29 20  gv[i], &a[i-2]) 
8ba0: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
8bb0: 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 54 63  OR;.  }.  if( Tc
8bc0: 6c 5f 47 65 74 44 6f 75 62 6c 65 28 69 6e 74 65  l_GetDouble(inte
8bd0: 72 70 2c 20 61 72 67 76 5b 34 5d 2c 20 26 72 29  rp, argv[4], &r)
8be0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
8bf0: 52 4f 52 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74  ROR;.  z = sqlit
8c00: 65 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b  e3_mprintf(argv[
8c10: 31 5d 2c 20 61 5b 30 5d 2c 20 61 5b 31 5d 2c 20  1], a[0], a[1], 
8c20: 72 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64  r);.  Tcl_Append
8c30: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a  Result(interp, z
8c40: 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  , 0);.  sqlite3_
8c50: 66 72 65 65 28 7a 29 3b 0a 20 20 72 65 74 75 72  free(z);.  retur
8c60: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
8c70: 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
8c80: 65 33 5f 6d 70 72 69 6e 74 66 5f 73 63 61 6c 65  e3_mprintf_scale
8c90: 64 20 46 4f 52 4d 41 54 20 44 4f 55 42 4c 45 20  d FORMAT DOUBLE 
8ca0: 44 4f 55 42 4c 45 0a 2a 2a 0a 2a 2a 20 43 61 6c  DOUBLE.**.** Cal
8cb0: 6c 20 6d 70 72 69 6e 74 66 20 77 69 74 68 20 61  l mprintf with a
8cc0: 20 73 69 6e 67 6c 65 20 64 6f 75 62 6c 65 20 61   single double a
8cd0: 72 67 75 6d 65 6e 74 20 77 68 69 63 68 20 69 73  rgument which is
8ce0: 20 74 68 65 20 70 72 6f 64 75 63 74 20 6f 66 20   the product of 
8cf0: 74 68 65 0a 2a 2a 20 74 77 6f 20 61 72 67 75 6d  the.** two argum
8d00: 65 6e 74 73 20 67 69 76 65 6e 20 61 62 6f 76 65  ents given above
8d10: 2e 20 20 54 68 69 73 20 69 73 20 75 73 65 64 20  .  This is used 
8d20: 74 6f 20 67 65 6e 65 72 61 74 65 20 6f 76 65 72  to generate over
8d30: 66 6c 6f 77 20 61 6e 64 20 75 6e 64 65 72 66 6c  flow and underfl
8d40: 6f 77 0a 2a 2a 20 64 6f 75 62 6c 65 73 20 74 6f  ow.** doubles to
8d50: 20 74 65 73 74 20 74 68 61 74 20 74 68 65 79 20   test that they 
8d60: 61 72 65 20 63 6f 6e 76 65 72 74 65 64 20 70 72  are converted pr
8d70: 6f 70 65 72 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69  operly..*/.stati
8d80: 63 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 70  c int sqlite3_mp
8d90: 72 69 6e 74 66 5f 73 63 61 6c 65 64 28 0a 20 20  rintf_scaled(.  
8da0: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
8db0: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
8dc0: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
8dd0: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
8de0: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
8df0: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
8e00: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
8e10: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
8e20: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
8e30: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
8e40: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
8e50: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
8e60: 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a   */.){.  int i;.
8e70: 20 20 64 6f 75 62 6c 65 20 72 5b 32 5d 3b 0a 20    double r[2];. 
8e80: 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69 66 28 20   char *z;.  if( 
8e90: 61 72 67 63 21 3d 34 20 29 7b 0a 20 20 20 20 54  argc!=4 ){.    T
8ea0: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
8eb0: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
8ec0: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
8ed0: 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20   \"", argv[0],. 
8ee0: 20 20 20 20 20 20 22 20 46 4f 52 4d 41 54 20 44        " FORMAT D
8ef0: 4f 55 42 4c 45 20 44 4f 55 42 4c 45 5c 22 22 2c  OUBLE DOUBLE\"",
8f00: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
8f10: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
8f20: 20 66 6f 72 28 69 3d 32 3b 20 69 3c 34 3b 20 69   for(i=2; i<4; i
8f30: 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 54 63 6c  ++){.    if( Tcl
8f40: 5f 47 65 74 44 6f 75 62 6c 65 28 69 6e 74 65 72  _GetDouble(inter
8f50: 70 2c 20 61 72 67 76 5b 69 5d 2c 20 26 72 5b 69  p, argv[i], &r[i
8f60: 2d 32 5d 29 20 29 20 72 65 74 75 72 6e 20 54 43  -2]) ) return TC
8f70: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a  L_ERROR;.  }.  z
8f80: 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
8f90: 74 66 28 61 72 67 76 5b 31 5d 2c 20 72 5b 30 5d  tf(argv[1], r[0]
8fa0: 2a 72 5b 31 5d 29 3b 0a 20 20 54 63 6c 5f 41 70  *r[1]);.  Tcl_Ap
8fb0: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
8fc0: 70 2c 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69  p, z, 0);.  sqli
8fd0: 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72  te3_free(z);.  r
8fe0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
8ff0: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
9000: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73  qlite3_mprintf_s
9010: 74 72 6f 6e 6c 79 20 46 4f 52 4d 41 54 20 53 54  tronly FORMAT ST
9020: 52 49 4e 47 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20  RING.**.** Call 
9030: 6d 70 72 69 6e 74 66 20 77 69 74 68 20 61 20 73  mprintf with a s
9040: 69 6e 67 6c 65 20 64 6f 75 62 6c 65 20 61 72 67  ingle double arg
9050: 75 6d 65 6e 74 20 77 68 69 63 68 20 69 73 20 74  ument which is t
9060: 68 65 20 70 72 6f 64 75 63 74 20 6f 66 20 74 68  he product of th
9070: 65 0a 2a 2a 20 74 77 6f 20 61 72 67 75 6d 65 6e  e.** two argumen
9080: 74 73 20 67 69 76 65 6e 20 61 62 6f 76 65 2e 20  ts given above. 
9090: 20 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f   This is used to
90a0: 20 67 65 6e 65 72 61 74 65 20 6f 76 65 72 66 6c   generate overfl
90b0: 6f 77 20 61 6e 64 20 75 6e 64 65 72 66 6c 6f 77  ow and underflow
90c0: 0a 2a 2a 20 64 6f 75 62 6c 65 73 20 74 6f 20 74  .** doubles to t
90d0: 65 73 74 20 74 68 61 74 20 74 68 65 79 20 61 72  est that they ar
90e0: 65 20 63 6f 6e 76 65 72 74 65 64 20 70 72 6f 70  e converted prop
90f0: 65 72 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  erly..*/.static 
9100: 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  int sqlite3_mpri
9110: 6e 74 66 5f 73 74 72 6f 6e 6c 79 28 0a 20 20 76  ntf_stronly(.  v
9120: 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20  oid *NotUsed,.  
9130: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
9140: 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43  rp,    /* The TC
9150: 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68  L interpreter th
9160: 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20  at invoked this 
9170: 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74  command */.  int
9180: 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20   argc,          
9190: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
91a0: 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
91b0: 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20  char **argv     
91c0: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f         /* Text o
91d0: 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20  f each argument 
91e0: 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20 2a 7a 3b  */.){.  char *z;
91f0: 0a 20 20 69 66 28 20 61 72 67 63 21 3d 33 20 29  .  if( argc!=3 )
9200: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
9210: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
9220: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
9230: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
9240: 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46  v[0],.       " F
9250: 4f 52 4d 41 54 20 53 54 52 49 4e 47 5c 22 22 2c  ORMAT STRING\"",
9260: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
9270: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
9280: 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72   z = sqlite3_mpr
9290: 69 6e 74 66 28 61 72 67 76 5b 31 5d 2c 20 61 72  intf(argv[1], ar
92a0: 67 76 5b 32 5d 29 3b 0a 20 20 54 63 6c 5f 41 70  gv[2]);.  Tcl_Ap
92b0: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
92c0: 70 2c 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69  p, z, 0);.  sqli
92d0: 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72  te3_free(z);.  r
92e0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
92f0: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
9300: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 68  qlite3_mprintf_h
9310: 65 78 64 6f 75 62 6c 65 20 46 4f 52 4d 41 54 20  exdouble FORMAT 
9320: 48 45 58 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d  HEX.**.** Call m
9330: 70 72 69 6e 74 66 20 77 69 74 68 20 61 20 73 69  printf with a si
9340: 6e 67 6c 65 20 64 6f 75 62 6c 65 20 61 72 67 75  ngle double argu
9350: 6d 65 6e 74 20 77 68 69 63 68 20 69 73 20 64 65  ment which is de
9360: 72 69 76 65 64 20 66 72 6f 6d 20 74 68 65 0a 2a  rived from the.*
9370: 2a 20 68 65 78 61 64 65 63 69 6d 61 6c 20 65 6e  * hexadecimal en
9380: 63 6f 64 69 6e 67 20 6f 66 20 61 6e 20 49 45 45  coding of an IEE
9390: 45 20 64 6f 75 62 6c 65 2e 0a 2a 2f 0a 73 74 61  E double..*/.sta
93a0: 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  tic int sqlite3_
93b0: 6d 70 72 69 6e 74 66 5f 68 65 78 64 6f 75 62 6c  mprintf_hexdoubl
93c0: 65 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73  e(.  void *NotUs
93d0: 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ed,.  Tcl_Interp
93e0: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
93f0: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
9400: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
9410: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
9420: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20  .  int argc,    
9430: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
9440: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
9450: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67   */.  char **arg
9460: 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  v            /* 
9470: 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67  Text of each arg
9480: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 63 68  ument */.){.  ch
9490: 61 72 20 2a 7a 3b 0a 20 20 64 6f 75 62 6c 65 20  ar *z;.  double 
94a0: 72 3b 0a 20 20 75 6e 73 69 67 6e 65 64 20 20 78  r;.  unsigned  x
94b0: 31 2c 20 78 32 3b 0a 20 20 6c 6f 6e 67 20 6c 6f  1, x2;.  long lo
94c0: 6e 67 20 75 6e 73 69 67 6e 65 64 20 64 3b 0a 20  ng unsigned d;. 
94d0: 20 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a   if( argc!=3 ){.
94e0: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
94f0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
9500: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
9510: 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
9520: 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 4f 52  0],.       " FOR
9530: 4d 41 54 20 53 54 52 49 4e 47 5c 22 22 2c 20 30  MAT STRING\"", 0
9540: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
9550: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
9560: 66 28 20 73 73 63 61 6e 66 28 61 72 67 76 5b 32  f( sscanf(argv[2
9570: 5d 2c 20 22 25 30 38 78 25 30 38 78 22 2c 20 26  ], "%08x%08x", &
9580: 78 32 2c 20 26 78 31 29 21 3d 32 20 29 7b 0a 20  x2, &x1)!=2 ){. 
9590: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
95a0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 32 6e 64  ult(interp, "2nd
95b0: 20 61 72 67 75 6d 65 6e 74 20 73 68 6f 75 6c 64   argument should
95c0: 20 62 65 20 31 36 2d 63 68 61 72 61 63 74 65 72   be 16-character
95d0: 73 20 6f 66 20 68 65 78 22 2c 20 30 29 3b 0a 20  s of hex", 0);. 
95e0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
95f0: 52 4f 52 3b 0a 20 20 7d 0a 20 20 64 20 3d 20 78  ROR;.  }.  d = x
9600: 32 3b 0a 20 20 64 20 3d 20 28 64 3c 3c 33 32 29  2;.  d = (d<<32)
9610: 20 2b 20 78 31 3b 0a 20 20 6d 65 6d 63 70 79 28   + x1;.  memcpy(
9620: 26 72 2c 20 26 64 2c 20 73 69 7a 65 6f 66 28 72  &r, &d, sizeof(r
9630: 29 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65  ));.  z = sqlite
9640: 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b 31  3_mprintf(argv[1
9650: 5d 2c 20 72 29 3b 0a 20 20 54 63 6c 5f 41 70 70  ], r);.  Tcl_App
9660: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
9670: 2c 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74  , z, 0);.  sqlit
9680: 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65  e3_free(z);.  re
9690: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
96a0: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  /*.** Usage: sql
96b0: 69 74 65 33 5f 65 6e 61 62 6c 65 5f 73 68 61 72  ite3_enable_shar
96c0: 65 64 5f 63 61 63 68 65 20 20 20 20 20 20 42 4f  ed_cache      BO
96d0: 4f 4c 45 41 4e 0a 2a 2a 0a 2a 2f 0a 23 69 66 20  OLEAN.**.*/.#if 
96e0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
96f0: 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
9700: 45 29 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  E).static int te
9710: 73 74 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64  st_enable_shared
9720: 28 0a 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63  (.  ClientData c
9730: 6c 69 65 6e 74 44 61 74 61 2c 20 2f 2a 20 50 6f  lientData, /* Po
9740: 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33  inter to sqlite3
9750: 5f 65 6e 61 62 6c 65 5f 58 58 58 20 66 75 6e 63  _enable_XXX func
9760: 74 69 6f 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e  tion */.  Tcl_In
9770: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
9780: 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
9790: 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
97a0: 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
97b0: 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  d */.  int objc,
97c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
97d0: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
97e0: 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62  ents */.  Tcl_Ob
97f0: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20  j *CONST objv[] 
9800: 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75   /* Command argu
9810: 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e  ments */.){.  in
9820: 74 20 72 63 3b 0a 20 20 69 6e 74 20 65 6e 61 62  t rc;.  int enab
9830: 6c 65 3b 0a 20 20 69 6e 74 20 72 65 74 20 3d 20  le;.  int ret = 
9840: 30 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20  0;.  extern int 
9850: 73 71 6c 69 74 65 33 53 68 61 72 65 64 43 61 63  sqlite3SharedCac
9860: 68 65 45 6e 61 62 6c 65 64 3b 0a 0a 20 20 69 66  heEnabled;..  if
9870: 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
9880: 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67   Tcl_WrongNumArg
9890: 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a  s(interp, 1, obj
98a0: 76 2c 20 22 42 4f 4f 4c 45 41 4e 22 29 3b 0a 20  v, "BOOLEAN");. 
98b0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
98c0: 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 54  ROR;.  }.  if( T
98d0: 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f  cl_GetBooleanFro
98e0: 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
98f0: 76 5b 31 5d 2c 20 26 65 6e 61 62 6c 65 29 20 29  v[1], &enable) )
9900: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  {.    return TCL
9910: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 65  _ERROR;.  }.  re
9920: 74 20 3d 20 73 71 6c 69 74 65 33 53 68 61 72 65  t = sqlite3Share
9930: 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b 0a 20  dCacheEnabled;. 
9940: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 6e   rc = sqlite3_en
9950: 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68  able_shared_cach
9960: 65 28 65 6e 61 62 6c 65 29 3b 0a 20 20 69 66 28  e(enable);.  if(
9970: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
9980: 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73  {.    Tcl_SetRes
9990: 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61  ult(interp, (cha
99a0: 72 20 2a 29 73 71 6c 69 74 65 33 45 72 72 53 74  r *)sqlite3ErrSt
99b0: 72 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49  r(rc), TCL_STATI
99c0: 43 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  C);.    return T
99d0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
99e0: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
99f0: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
9a00: 42 6f 6f 6c 65 61 6e 4f 62 6a 28 72 65 74 29 29  BooleanObj(ret))
9a10: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
9a20: 4b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 0a 2f  K;.}.#endif..../
9a30: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69  *.** Usage: sqli
9a40: 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 72 65 73  te3_extended_res
9a50: 75 6c 74 5f 63 6f 64 65 73 20 20 20 44 42 20 20  ult_codes   DB  
9a60: 20 20 42 4f 4f 4c 45 41 4e 0a 2a 2a 0a 2a 2f 0a    BOOLEAN.**.*/.
9a70: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
9a80: 65 78 74 65 6e 64 65 64 5f 72 65 73 75 6c 74 5f  extended_result_
9a90: 63 6f 64 65 73 28 0a 20 20 43 6c 69 65 6e 74 44  codes(.  ClientD
9aa0: 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 20  ata clientData, 
9ab0: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 71  /* Pointer to sq
9ac0: 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 58 58 58  lite3_enable_XXX
9ad0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54   function */.  T
9ae0: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
9af0: 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c  p,    /* The TCL
9b00: 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61   interpreter tha
9b10: 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63  t invoked this c
9b20: 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  ommand */.  int 
9b30: 6f 62 6a 63 2c 20 20 20 20 20 20 20 20 20 20 20  objc,           
9b40: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
9b50: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 54  arguments */.  T
9b60: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
9b70: 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64  jv[]  /* Command
9b80: 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b   arguments */.){
9b90: 0a 20 20 69 6e 74 20 65 6e 61 62 6c 65 3b 0a 20  .  int enable;. 
9ba0: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 0a 20   sqlite3 *db;.. 
9bb0: 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a   if( objc!=3 ){.
9bc0: 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d      Tcl_WrongNum
9bd0: 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20  Args(interp, 1, 
9be0: 6f 62 6a 76 2c 20 22 44 42 20 42 4f 4f 4c 45 41  objv, "DB BOOLEA
9bf0: 4e 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  N");.    return 
9c00: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
9c10: 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
9c20: 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
9c30: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
9c40: 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
9c50: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  TCL_ERROR;.  if(
9c60: 20 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46   Tcl_GetBooleanF
9c70: 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
9c80: 62 6a 76 5b 32 5d 2c 20 26 65 6e 61 62 6c 65 29  bjv[2], &enable)
9c90: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
9ca0: 52 4f 52 3b 0a 20 20 73 71 6c 69 74 65 33 5f 65  ROR;.  sqlite3_e
9cb0: 78 74 65 6e 64 65 64 5f 72 65 73 75 6c 74 5f 63  xtended_result_c
9cc0: 6f 64 65 73 28 64 62 2c 20 65 6e 61 62 6c 65 29  odes(db, enable)
9cd0: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
9ce0: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
9cf0: 65 3a 20 73 71 6c 69 74 65 33 5f 6c 69 62 76 65  e: sqlite3_libve
9d00: 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 0a 2a 2a 0a  rsion_number.**.
9d10: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
9d20: 73 74 5f 6c 69 62 76 65 72 73 69 6f 6e 5f 6e 75  st_libversion_nu
9d30: 6d 62 65 72 28 0a 20 20 43 6c 69 65 6e 74 44 61  mber(.  ClientDa
9d40: 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 2f  ta clientData, /
9d50: 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 71 6c  * Pointer to sql
9d60: 69 74 65 33 5f 65 6e 61 62 6c 65 5f 58 58 58 20  ite3_enable_XXX 
9d70: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 63  function */.  Tc
9d80: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
9d90: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
9da0: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
9db0: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
9dc0: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6f  mmand */.  int o
9dd0: 62 6a 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  bjc,            
9de0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
9df0: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 54 63  rguments */.  Tc
9e00: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
9e10: 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20  v[]  /* Command 
9e20: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a  arguments */.){.
9e30: 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
9e40: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
9e50: 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33  ewIntObj(sqlite3
9e60: 5f 6c 69 62 76 65 72 73 69 6f 6e 5f 6e 75 6d 62  _libversion_numb
9e70: 65 72 28 29 29 29 3b 0a 20 20 72 65 74 75 72 6e  er()));.  return
9e80: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
9e90: 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33  * Usage: sqlite3
9ea0: 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65  _table_column_me
9eb0: 74 61 64 61 74 61 20 44 42 20 64 62 6e 61 6d 65  tadata DB dbname
9ec0: 20 74 62 6c 6e 61 6d 65 20 63 6f 6c 6e 61 6d 65   tblname colname
9ed0: 0a 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  .**.*/.#ifdef SQ
9ee0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55  LITE_ENABLE_COLU
9ef0: 4d 4e 5f 4d 45 54 41 44 41 54 41 0a 73 74 61 74  MN_METADATA.stat
9f00: 69 63 20 69 6e 74 20 74 65 73 74 5f 74 61 62 6c  ic int test_tabl
9f10: 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74  e_column_metadat
9f20: 61 28 0a 20 20 43 6c 69 65 6e 74 44 61 74 61 20  a(.  ClientData 
9f30: 63 6c 69 65 6e 74 44 61 74 61 2c 20 2f 2a 20 50  clientData, /* P
9f40: 6f 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ointer to sqlite
9f50: 33 5f 65 6e 61 62 6c 65 5f 58 58 58 20 66 75 6e  3_enable_XXX fun
9f60: 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49  ction */.  Tcl_I
9f70: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20  nterp *interp,  
9f80: 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74    /* The TCL int
9f90: 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e  erpreter that in
9fa0: 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61  voked this comma
9fb0: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63  nd */.  int objc
9fc0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
9fd0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
9fe0: 6d 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f  ments */.  Tcl_O
9ff0: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
a000: 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67    /* Command arg
a010: 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 73  uments */.){.  s
a020: 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f  qlite3 *db;.  co
a030: 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 0a 20  nst char *zDb;. 
a040: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 62   const char *zTb
a050: 6c 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  l;.  const char 
a060: 2a 7a 43 6f 6c 3b 0a 20 20 69 6e 74 20 72 63 3b  *zCol;.  int rc;
a070: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 52 65 74  .  Tcl_Obj *pRet
a080: 3b 0a 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  ;..  const char 
a090: 2a 7a 44 61 74 61 74 79 70 65 3b 0a 20 20 63 6f  *zDatatype;.  co
a0a0: 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 73  nst char *zColls
a0b0: 65 71 3b 0a 20 20 69 6e 74 20 6e 6f 74 6e 75 6c  eq;.  int notnul
a0c0: 6c 3b 0a 20 20 69 6e 74 20 70 72 69 6d 61 72 79  l;.  int primary
a0d0: 6b 65 79 3b 0a 20 20 69 6e 74 20 61 75 74 6f 69  key;.  int autoi
a0e0: 6e 63 72 65 6d 65 6e 74 3b 0a 0a 20 20 69 66 28  ncrement;..  if(
a0f0: 20 6f 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20   objc!=5 ){.    
a100: 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73  Tcl_WrongNumArgs
a110: 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76  (interp, 1, objv
a120: 2c 20 22 44 42 20 64 62 6e 61 6d 65 20 74 62 6c  , "DB dbname tbl
a130: 6e 61 6d 65 20 63 6f 6c 6e 61 6d 65 22 29 3b 0a  name colname");.
a140: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
a150: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
a160: 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
a170: 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
a180: 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62  ng(objv[1]), &db
a190: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
a1a0: 52 52 4f 52 3b 0a 20 20 7a 44 62 20 3d 20 54 63  RROR;.  zDb = Tc
a1b0: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
a1c0: 5b 32 5d 29 3b 0a 20 20 7a 54 62 6c 20 3d 20 54  [2]);.  zTbl = T
a1d0: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
a1e0: 76 5b 33 5d 29 3b 0a 20 20 7a 43 6f 6c 20 3d 20  v[3]);.  zCol = 
a1f0: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
a200: 6a 76 5b 34 5d 29 3b 0a 0a 20 20 69 66 28 20 73  jv[4]);..  if( s
a210: 74 72 6c 65 6e 28 7a 44 62 29 3d 3d 30 20 29 20  trlen(zDb)==0 ) 
a220: 7a 44 62 20 3d 20 30 3b 0a 0a 20 20 72 63 20 3d  zDb = 0;..  rc =
a230: 20 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63   sqlite3_table_c
a240: 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 28 64  olumn_metadata(d
a250: 62 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c 20 7a 43  b, zDb, zTbl, zC
a260: 6f 6c 2c 20 0a 20 20 20 20 20 20 26 7a 44 61 74  ol, .      &zDat
a270: 61 74 79 70 65 2c 20 26 7a 43 6f 6c 6c 73 65 71  atype, &zCollseq
a280: 2c 20 26 6e 6f 74 6e 75 6c 6c 2c 20 26 70 72 69  , &notnull, &pri
a290: 6d 61 72 79 6b 65 79 2c 20 26 61 75 74 6f 69 6e  marykey, &autoin
a2a0: 63 72 65 6d 65 6e 74 29 3b 0a 0a 20 20 69 66 28  crement);..  if(
a2b0: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
a2c0: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
a2d0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 73  Result(interp, s
a2e0: 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62  qlite3_errmsg(db
a2f0: 29 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ), 0);.    retur
a300: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
a310: 0a 0a 20 20 70 52 65 74 20 3d 20 54 63 6c 5f 4e  ..  pRet = Tcl_N
a320: 65 77 4f 62 6a 28 29 3b 0a 20 20 54 63 6c 5f 4c  ewObj();.  Tcl_L
a330: 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d  istObjAppendElem
a340: 65 6e 74 28 30 2c 20 70 52 65 74 2c 20 54 63 6c  ent(0, pRet, Tcl
a350: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 7a 44  _NewStringObj(zD
a360: 61 74 61 74 79 70 65 2c 20 2d 31 29 29 3b 0a 20  atatype, -1));. 
a370: 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65   Tcl_ListObjAppe
a380: 6e 64 45 6c 65 6d 65 6e 74 28 30 2c 20 70 52 65  ndElement(0, pRe
a390: 74 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  t, Tcl_NewString
a3a0: 4f 62 6a 28 7a 43 6f 6c 6c 73 65 71 2c 20 2d 31  Obj(zCollseq, -1
a3b0: 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62  ));.  Tcl_ListOb
a3c0: 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 30  jAppendElement(0
a3d0: 2c 20 70 52 65 74 2c 20 54 63 6c 5f 4e 65 77 49  , pRet, Tcl_NewI
a3e0: 6e 74 4f 62 6a 28 6e 6f 74 6e 75 6c 6c 29 29 3b  ntObj(notnull));
a3f0: 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70  .  Tcl_ListObjAp
a400: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 30 2c 20 70  pendElement(0, p
a410: 52 65 74 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f  Ret, Tcl_NewIntO
a420: 62 6a 28 70 72 69 6d 61 72 79 6b 65 79 29 29 3b  bj(primarykey));
a430: 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70  .  Tcl_ListObjAp
a440: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 30 2c 20 70  pendElement(0, p
a450: 52 65 74 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f  Ret, Tcl_NewIntO
a460: 62 6a 28 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  bj(autoincrement
a470: 29 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a  ));.  Tcl_SetObj
a480: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 70  Result(interp, p
a490: 52 65 74 29 3b 0a 0a 20 20 72 65 74 75 72 6e 20  Ret);..  return 
a4a0: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66  TCL_OK;.}.#endif
a4b0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
a4c0: 5f 4f 4d 49 54 5f 49 4e 43 52 42 4c 4f 42 0a 0a  _OMIT_INCRBLOB..
a4d0: 2f 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 62 6c  /*.** sqlite3_bl
a4e0: 6f 62 5f 72 65 61 64 20 20 43 48 41 4e 4e 45 4c  ob_read  CHANNEL
a4f0: 20 4f 46 46 53 45 54 20 4e 0a 2a 2a 0a 2a 2a 20   OFFSET N.**.** 
a500: 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20 69    This command i
a510: 73 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 74  s used to test t
a520: 68 65 20 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f  he sqlite3_blob_
a530: 72 65 61 64 28 29 20 69 6e 20 77 61 79 73 20 74  read() in ways t
a540: 68 61 74 0a 2a 2a 20 20 20 74 68 65 20 54 63 6c  hat.**   the Tcl
a550: 20 63 68 61 6e 6e 65 6c 20 69 6e 74 65 72 66 61   channel interfa
a560: 63 65 20 64 6f 65 73 20 6e 6f 74 2e 20 54 68 65  ce does not. The
a570: 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20   first argument 
a580: 73 68 6f 75 6c 64 0a 2a 2a 20 20 20 62 65 20 74  should.**   be t
a590: 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 61 6c  he name of a val
a5a0: 69 64 20 63 68 61 6e 6e 65 6c 20 63 72 65 61 74  id channel creat
a5b0: 65 64 20 62 79 20 74 68 65 20 5b 69 6e 63 72 62  ed by the [incrb
a5c0: 6c 6f 62 5d 20 6d 65 74 68 6f 64 0a 2a 2a 20 20  lob] method.**  
a5d0: 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 20 68   of a database h
a5e0: 61 6e 64 6c 65 2e 20 54 68 69 73 20 66 75 6e 63  andle. This func
a5f0: 74 69 6f 6e 20 63 61 6c 6c 73 20 73 71 6c 69 74  tion calls sqlit
a600: 65 33 5f 62 6c 6f 62 5f 72 65 61 64 28 29 0a 2a  e3_blob_read().*
a610: 2a 20 20 20 74 6f 20 72 65 61 64 20 4e 20 62 79  *   to read N by
a620: 74 65 73 20 66 72 6f 6d 20 6f 66 66 73 65 74 20  tes from offset 
a630: 4f 46 46 53 45 54 20 66 72 6f 6d 20 74 68 65 20  OFFSET from the 
a640: 75 6e 64 65 72 6c 79 69 6e 67 20 53 51 4c 69 74  underlying SQLit
a650: 65 0a 2a 2a 20 20 20 62 6c 6f 62 20 68 61 6e 64  e.**   blob hand
a660: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 4f 6e 20 73  le..**.**   On s
a670: 75 63 63 65 73 73 2c 20 61 20 62 79 74 65 2d 61  uccess, a byte-a
a680: 72 72 61 79 20 6f 62 6a 65 63 74 20 63 6f 6e 74  rray object cont
a690: 61 69 6e 69 6e 67 20 74 68 65 20 72 65 61 64 20  aining the read 
a6a0: 64 61 74 61 20 69 73 20 0a 2a 2a 20 20 20 72 65  data is .**   re
a6b0: 74 75 72 6e 65 64 2e 20 4f 6e 20 66 61 69 6c 75  turned. On failu
a6c0: 72 65 2c 20 74 68 65 20 69 6e 74 65 72 70 72 65  re, the interpre
a6d0: 74 65 72 20 72 65 73 75 6c 74 20 69 73 20 73 65  ter result is se
a6e0: 74 20 74 6f 20 74 68 65 0a 2a 2a 20 20 20 74 65  t to the.**   te
a6f0: 78 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  xt representatio
a700: 6e 20 6f 66 20 74 68 65 20 72 65 74 75 72 6e 65  n of the returne
a710: 64 20 65 72 72 6f 72 20 63 6f 64 65 20 28 69 2e  d error code (i.
a720: 65 2e 20 22 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  e. "SQLITE_NOMEM
a730: 22 29 0a 2a 2a 20 20 20 61 6e 64 20 61 20 54 63  ").**   and a Tc
a740: 6c 20 65 78 63 65 70 74 69 6f 6e 20 69 73 20 74  l exception is t
a750: 68 72 6f 77 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63  hrown..*/.static
a760: 20 69 6e 74 20 74 65 73 74 5f 62 6c 6f 62 5f 72   int test_blob_r
a770: 65 61 64 28 0a 20 20 43 6c 69 65 6e 74 44 61 74  ead(.  ClientDat
a780: 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 2f 2a  a clientData, /*
a790: 20 4e 6f 74 20 75 73 65 64 20 2a 2f 0a 20 20 54   Not used */.  T
a7a0: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
a7b0: 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c  p,    /* The TCL
a7c0: 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61   interpreter tha
a7d0: 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63  t invoked this c
a7e0: 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  ommand */.  int 
a7f0: 6f 62 6a 63 2c 20 20 20 20 20 20 20 20 20 20 20  objc,           
a800: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
a810: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 54  arguments */.  T
a820: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
a830: 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64  jv[]  /* Command
a840: 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b   arguments */.){
a850: 0a 20 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 20 63  .  Tcl_Channel c
a860: 68 61 6e 6e 65 6c 3b 0a 20 20 43 6c 69 65 6e 74  hannel;.  Client
a870: 44 61 74 61 20 69 6e 73 74 61 6e 63 65 44 61 74  Data instanceDat
a880: 61 3b 0a 20 20 73 71 6c 69 74 65 33 5f 62 6c 6f  a;.  sqlite3_blo
a890: 62 20 2a 70 42 6c 6f 62 3b 0a 20 20 69 6e 74 20  b *pBlob;.  int 
a8a0: 6e 6f 74 55 73 65 64 3b 0a 20 20 69 6e 74 20 6e  notUsed;.  int n
a8b0: 42 79 74 65 3b 0a 20 20 69 6e 74 20 69 4f 66 66  Byte;.  int iOff
a8c0: 73 65 74 3b 0a 20 20 75 6e 73 69 67 6e 65 64 20  set;.  unsigned 
a8d0: 63 68 61 72 20 2a 7a 42 75 66 3b 0a 20 20 69 6e  char *zBuf;.  in
a8e0: 74 20 72 63 3b 0a 20 20 0a 20 20 69 66 28 20 6f  t rc;.  .  if( o
a8f0: 62 6a 63 21 3d 34 20 29 7b 0a 20 20 20 20 54 63  bjc!=4 ){.    Tc
a900: 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69  l_WrongNumArgs(i
a910: 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20  nterp, 1, objv, 
a920: 22 43 48 41 4e 4e 45 4c 20 4f 46 46 53 45 54 20  "CHANNEL OFFSET 
a930: 4e 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  N");.    return 
a940: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
a950: 20 20 63 68 61 6e 6e 65 6c 20 3d 20 54 63 6c 5f    channel = Tcl_
a960: 47 65 74 43 68 61 6e 6e 65 6c 28 69 6e 74 65 72  GetChannel(inter
a970: 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
a980: 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 6e 6f 74 55  (objv[1]), &notU
a990: 73 65 64 29 3b 0a 20 20 69 66 28 20 21 63 68 61  sed);.  if( !cha
a9a0: 6e 6e 65 6c 0a 20 20 20 7c 7c 20 54 43 4c 5f 4f  nnel.   || TCL_O
a9b0: 4b 21 3d 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f  K!=Tcl_GetIntFro
a9c0: 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
a9d0: 76 5b 32 5d 2c 20 26 69 4f 66 66 73 65 74 29 0a  v[2], &iOffset).
a9e0: 20 20 20 7c 7c 20 54 43 4c 5f 4f 4b 21 3d 54 63     || TCL_OK!=Tc
a9f0: 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
aa00: 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c  interp, objv[3],
aa10: 20 26 6e 42 79 74 65 29 0a 20 20 20 7c 7c 20 6e   &nByte).   || n
aa20: 42 79 74 65 3c 30 20 7c 7c 20 69 4f 66 66 73 65  Byte<0 || iOffse
aa30: 74 3c 30 0a 20 20 29 7b 20 0a 20 20 20 20 72 65  t<0.  ){ .    re
aa40: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
aa50: 20 20 7d 0a 0a 20 20 69 6e 73 74 61 6e 63 65 44    }..  instanceD
aa60: 61 74 61 20 3d 20 54 63 6c 5f 47 65 74 43 68 61  ata = Tcl_GetCha
aa70: 6e 6e 65 6c 49 6e 73 74 61 6e 63 65 44 61 74 61  nnelInstanceData
aa80: 28 63 68 61 6e 6e 65 6c 29 3b 0a 20 20 70 42 6c  (channel);.  pBl
aa90: 6f 62 20 3d 20 2a 28 28 73 71 6c 69 74 65 33 5f  ob = *((sqlite3_
aaa0: 62 6c 6f 62 20 2a 2a 29 69 6e 73 74 61 6e 63 65  blob **)instance
aab0: 44 61 74 61 29 3b 0a 0a 20 20 7a 42 75 66 20 3d  Data);..  zBuf =
aac0: 20 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20   (unsigned char 
aad0: 2a 29 54 63 6c 5f 41 6c 6c 6f 63 28 6e 42 79 74  *)Tcl_Alloc(nByt
aae0: 65 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  e);.  rc = sqlit
aaf0: 65 33 5f 62 6c 6f 62 5f 72 65 61 64 28 70 42 6c  e3_blob_read(pBl
ab00: 6f 62 2c 20 7a 42 75 66 2c 20 6e 42 79 74 65 2c  ob, zBuf, nByte,
ab10: 20 69 4f 66 66 73 65 74 29 3b 0a 20 20 69 66 28   iOffset);.  if(
ab20: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
ab30: 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 4f 62 6a  {.    Tcl_SetObj
ab40: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
ab50: 63 6c 5f 4e 65 77 42 79 74 65 41 72 72 61 79 4f  cl_NewByteArrayO
ab60: 62 6a 28 7a 42 75 66 2c 20 6e 42 79 74 65 29 29  bj(zBuf, nByte))
ab70: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 54  ;.  }else{.    T
ab80: 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74  cl_SetResult(int
ab90: 65 72 70 2c 20 28 63 68 61 72 20 2a 29 73 71 6c  erp, (char *)sql
aba0: 69 74 65 33 54 65 73 74 45 72 72 6f 72 4e 61 6d  ite3TestErrorNam
abb0: 65 28 72 63 29 2c 20 54 43 4c 5f 56 4f 4c 41 54  e(rc), TCL_VOLAT
abc0: 49 4c 45 29 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f  ILE);.  }.  Tcl_
abd0: 46 72 65 65 28 28 63 68 61 72 20 2a 29 7a 42 75  Free((char *)zBu
abe0: 66 29 3b 0a 0a 20 20 72 65 74 75 72 6e 20 28 72  f);..  return (r
abf0: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 3f 20 54  c==SQLITE_OK ? T
ac00: 43 4c 5f 4f 4b 20 3a 20 54 43 4c 5f 45 52 52 4f  CL_OK : TCL_ERRO
ac10: 52 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 73 71 6c  R);.}../*.** sql
ac20: 69 74 65 33 5f 62 6c 6f 62 5f 77 72 69 74 65 20  ite3_blob_write 
ac30: 43 48 41 4e 4e 45 4c 20 4f 46 46 53 45 54 20 44  CHANNEL OFFSET D
ac40: 41 54 41 0a 2a 2a 0a 2a 2a 20 20 20 54 68 69 73  ATA.**.**   This
ac50: 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65 64   command is used
ac60: 20 74 6f 20 74 65 73 74 20 74 68 65 20 73 71 6c   to test the sql
ac70: 69 74 65 33 5f 62 6c 6f 62 5f 77 72 69 74 65 28  ite3_blob_write(
ac80: 29 20 69 6e 20 77 61 79 73 20 74 68 61 74 0a 2a  ) in ways that.*
ac90: 2a 20 20 20 74 68 65 20 54 63 6c 20 63 68 61 6e  *   the Tcl chan
aca0: 6e 65 6c 20 69 6e 74 65 72 66 61 63 65 20 64 6f  nel interface do
acb0: 65 73 20 6e 6f 74 2e 20 54 68 65 20 66 69 72 73  es not. The firs
acc0: 74 20 61 72 67 75 6d 65 6e 74 20 73 68 6f 75 6c  t argument shoul
acd0: 64 0a 2a 2a 20 20 20 62 65 20 74 68 65 20 6e 61  d.**   be the na
ace0: 6d 65 20 6f 66 20 61 20 76 61 6c 69 64 20 63 68  me of a valid ch
acf0: 61 6e 6e 65 6c 20 63 72 65 61 74 65 64 20 62 79  annel created by
ad00: 20 74 68 65 20 5b 69 6e 63 72 62 6c 6f 62 5d 20   the [incrblob] 
ad10: 6d 65 74 68 6f 64 0a 2a 2a 20 20 20 6f 66 20 61  method.**   of a
ad20: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
ad30: 2e 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  . This function 
ad40: 63 61 6c 6c 73 20 73 71 6c 69 74 65 33 5f 62 6c  calls sqlite3_bl
ad50: 6f 62 5f 77 72 69 74 65 28 29 0a 2a 2a 20 20 20  ob_write().**   
ad60: 74 6f 20 77 72 69 74 65 20 74 68 65 20 44 41 54  to write the DAT
ad70: 41 20 62 79 74 65 2d 61 72 72 61 79 20 74 6f 20  A byte-array to 
ad80: 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 53  the underlying S
ad90: 51 4c 69 74 65 20 62 6c 6f 62 20 68 61 6e 64 6c  QLite blob handl
ada0: 65 2e 0a 2a 2a 20 20 20 61 74 20 6f 66 66 73 65  e..**   at offse
adb0: 74 20 4f 46 46 53 45 54 2e 0a 2a 2a 0a 2a 2a 20  t OFFSET..**.** 
adc0: 20 20 4f 6e 20 73 75 63 63 65 73 73 2c 20 61 6e    On success, an
add0: 20 65 6d 70 74 79 20 73 74 72 69 6e 67 20 69 73   empty string is
ade0: 20 72 65 74 75 72 6e 65 64 2e 20 4f 6e 20 66 61   returned. On fa
adf0: 69 6c 75 72 65 2c 20 74 68 65 20 69 6e 74 65 72  ilure, the inter
ae00: 70 72 65 74 65 72 0a 2a 2a 20 20 20 72 65 73 75  preter.**   resu
ae10: 6c 74 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  lt is set to the
ae20: 20 74 65 78 74 20 72 65 70 72 65 73 65 6e 74 61   text representa
ae30: 74 69 6f 6e 20 6f 66 20 74 68 65 20 72 65 74 75  tion of the retu
ae40: 72 6e 65 64 20 65 72 72 6f 72 20 63 6f 64 65 20  rned error code 
ae50: 0a 2a 2a 20 20 20 28 69 2e 65 2e 20 22 53 51 4c  .**   (i.e. "SQL
ae60: 49 54 45 5f 4e 4f 4d 45 4d 22 29 20 61 6e 64 20  ITE_NOMEM") and 
ae70: 61 20 54 63 6c 20 65 78 63 65 70 74 69 6f 6e 20  a Tcl exception 
ae80: 69 73 20 74 68 72 6f 77 6e 2e 0a 2a 2f 0a 73 74  is thrown..*/.st
ae90: 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 6c  atic int test_bl
aea0: 6f 62 5f 77 72 69 74 65 28 0a 20 20 43 6c 69 65  ob_write(.  Clie
aeb0: 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74  ntData clientDat
aec0: 61 2c 20 2f 2a 20 4e 6f 74 20 75 73 65 64 20 2a  a, /* Not used *
aed0: 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  /.  Tcl_Interp *
aee0: 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
aef0: 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
af00: 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
af10: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
af20: 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20   int objc,      
af30: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
af40: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
af50: 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  /.  Tcl_Obj *CON
af60: 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f  ST objv[]  /* Co
af70: 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20  mmand arguments 
af80: 2a 2f 0a 29 7b 0a 20 20 54 63 6c 5f 43 68 61 6e  */.){.  Tcl_Chan
af90: 6e 65 6c 20 63 68 61 6e 6e 65 6c 3b 0a 20 20 43  nel channel;.  C
afa0: 6c 69 65 6e 74 44 61 74 61 20 69 6e 73 74 61 6e  lientData instan
afb0: 63 65 44 61 74 61 3b 0a 20 20 73 71 6c 69 74 65  ceData;.  sqlite
afc0: 33 5f 62 6c 6f 62 20 2a 70 42 6c 6f 62 3b 0a 20  3_blob *pBlob;. 
afd0: 20 69 6e 74 20 6e 6f 74 55 73 65 64 3b 0a 20 20   int notUsed;.  
afe0: 69 6e 74 20 69 4f 66 66 73 65 74 3b 0a 20 20 69  int iOffset;.  i
aff0: 6e 74 20 72 63 3b 0a 0a 20 20 75 6e 73 69 67 6e  nt rc;..  unsign
b000: 65 64 20 63 68 61 72 20 2a 7a 42 75 66 3b 0a 20  ed char *zBuf;. 
b010: 20 69 6e 74 20 6e 42 75 66 3b 0a 20 20 0a 20 20   int nBuf;.  .  
b020: 69 66 28 20 6f 62 6a 63 21 3d 34 20 29 7b 0a 20  if( objc!=4 ){. 
b030: 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41     Tcl_WrongNumA
b040: 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f  rgs(interp, 1, o
b050: 62 6a 76 2c 20 22 43 48 41 4e 4e 45 4c 20 4f 46  bjv, "CHANNEL OF
b060: 46 53 45 54 20 44 41 54 41 22 29 3b 0a 20 20 20  FSET DATA");.   
b070: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
b080: 52 3b 0a 20 20 7d 0a 0a 20 20 63 68 61 6e 6e 65  R;.  }..  channe
b090: 6c 20 3d 20 54 63 6c 5f 47 65 74 43 68 61 6e 6e  l = Tcl_GetChann
b0a0: 65 6c 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  el(interp, Tcl_G
b0b0: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
b0c0: 29 2c 20 26 6e 6f 74 55 73 65 64 29 3b 0a 20 20  ), &notUsed);.  
b0d0: 69 66 28 20 21 63 68 61 6e 6e 65 6c 0a 20 20 20  if( !channel.   
b0e0: 7c 7c 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47  || TCL_OK!=Tcl_G
b0f0: 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
b100: 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 69  erp, objv[2], &i
b110: 4f 66 66 73 65 74 29 0a 20 20 20 7c 7c 20 69 4f  Offset).   || iO
b120: 66 66 73 65 74 3c 30 0a 20 20 29 7b 20 0a 20 20  ffset<0.  ){ .  
b130: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
b140: 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 6e 73 74 61  OR;.  }..  insta
b150: 6e 63 65 44 61 74 61 20 3d 20 54 63 6c 5f 47 65  nceData = Tcl_Ge
b160: 74 43 68 61 6e 6e 65 6c 49 6e 73 74 61 6e 63 65  tChannelInstance
b170: 44 61 74 61 28 63 68 61 6e 6e 65 6c 29 3b 0a 20  Data(channel);. 
b180: 20 70 42 6c 6f 62 20 3d 20 2a 28 28 73 71 6c 69   pBlob = *((sqli
b190: 74 65 33 5f 62 6c 6f 62 20 2a 2a 29 69 6e 73 74  te3_blob **)inst
b1a0: 61 6e 63 65 44 61 74 61 29 3b 0a 0a 20 20 7a 42  anceData);..  zB
b1b0: 75 66 20 3d 20 54 63 6c 5f 47 65 74 42 79 74 65  uf = Tcl_GetByte
b1c0: 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28 6f 62 6a  ArrayFromObj(obj
b1d0: 76 5b 33 5d 2c 20 26 6e 42 75 66 29 3b 0a 20 20  v[3], &nBuf);.  
b1e0: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 6c 6f  rc = sqlite3_blo
b1f0: 62 5f 77 72 69 74 65 28 70 42 6c 6f 62 2c 20 7a  b_write(pBlob, z
b200: 42 75 66 2c 20 6e 42 75 66 2c 20 69 4f 66 66 73  Buf, nBuf, iOffs
b210: 65 74 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53  et);.  if( rc!=S
b220: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
b230: 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
b240: 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 73 71  terp, (char *)sq
b250: 6c 69 74 65 33 54 65 73 74 45 72 72 6f 72 4e 61  lite3TestErrorNa
b260: 6d 65 28 72 63 29 2c 20 54 43 4c 5f 56 4f 4c 41  me(rc), TCL_VOLA
b270: 54 49 4c 45 29 3b 0a 20 20 7d 0a 0a 20 20 72 65  TILE);.  }..  re
b280: 74 75 72 6e 20 28 72 63 3d 3d 53 51 4c 49 54 45  turn (rc==SQLITE
b290: 5f 4f 4b 20 3f 20 54 43 4c 5f 4f 4b 20 3a 20 54  _OK ? TCL_OK : T
b2a0: 43 4c 5f 45 52 52 4f 52 29 3b 0a 7d 0a 23 65 6e  CL_ERROR);.}.#en
b2b0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  dif../*.** Usage
b2c0: 3a 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  : sqlite3_create
b2d0: 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 76 32 20 44 42  _collation_v2 DB
b2e0: 2d 48 41 4e 44 4c 45 20 4e 41 4d 45 20 43 4d 50  -HANDLE NAME CMP
b2f0: 2d 50 52 4f 43 20 44 45 4c 2d 50 52 4f 43 0a 2a  -PROC DEL-PROC.*
b300: 2a 0a 2a 2a 20 20 20 54 68 69 73 20 54 63 6c 20  *.**   This Tcl 
b310: 70 72 6f 63 20 69 73 20 75 73 65 64 20 66 6f 72  proc is used for
b320: 20 74 65 73 74 69 6e 67 20 74 68 65 20 65 78 70   testing the exp
b330: 65 72 69 6d 65 6e 74 61 6c 0a 2a 2a 20 20 20 73  erimental.**   s
b340: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f  qlite3_create_co
b350: 6c 6c 61 74 69 6f 6e 5f 76 32 28 29 20 69 6e 74  llation_v2() int
b360: 65 72 66 61 63 65 2e 0a 2a 2f 0a 73 74 72 75 63  erface..*/.struc
b370: 74 20 54 65 73 74 43 6f 6c 6c 61 74 69 6f 6e 58  t TestCollationX
b380: 20 7b 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20   {.  Tcl_Interp 
b390: 2a 69 6e 74 65 72 70 3b 0a 20 20 54 63 6c 5f 4f  *interp;.  Tcl_O
b3a0: 62 6a 20 2a 70 43 6d 70 3b 0a 20 20 54 63 6c 5f  bj *pCmp;.  Tcl_
b3b0: 4f 62 6a 20 2a 70 44 65 6c 3b 0a 7d 3b 0a 74 79  Obj *pDel;.};.ty
b3c0: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 65 73  pedef struct Tes
b3d0: 74 43 6f 6c 6c 61 74 69 6f 6e 58 20 54 65 73 74  tCollationX Test
b3e0: 43 6f 6c 6c 61 74 69 6f 6e 58 3b 0a 73 74 61 74  CollationX;.stat
b3f0: 69 63 20 76 6f 69 64 20 74 65 73 74 43 72 65 61  ic void testCrea
b400: 74 65 43 6f 6c 6c 61 74 69 6f 6e 44 65 6c 28 76  teCollationDel(v
b410: 6f 69 64 20 2a 70 43 74 78 29 7b 0a 20 20 54 65  oid *pCtx){.  Te
b420: 73 74 43 6f 6c 6c 61 74 69 6f 6e 58 20 2a 70 20  stCollationX *p 
b430: 3d 20 28 54 65 73 74 43 6f 6c 6c 61 74 69 6f 6e  = (TestCollation
b440: 58 20 2a 29 70 43 74 78 3b 0a 0a 20 20 69 6e 74  X *)pCtx;..  int
b450: 20 72 63 20 3d 20 54 63 6c 5f 45 76 61 6c 4f 62   rc = Tcl_EvalOb
b460: 6a 45 78 28 70 2d 3e 69 6e 74 65 72 70 2c 20 70  jEx(p->interp, p
b470: 2d 3e 70 44 65 6c 2c 20 54 43 4c 5f 45 56 41 4c  ->pDel, TCL_EVAL
b480: 5f 44 49 52 45 43 54 7c 54 43 4c 5f 45 56 41 4c  _DIRECT|TCL_EVAL
b490: 5f 47 4c 4f 42 41 4c 29 3b 0a 20 20 69 66 28 20  _GLOBAL);.  if( 
b4a0: 72 63 21 3d 54 43 4c 5f 4f 4b 20 29 7b 0a 20 20  rc!=TCL_OK ){.  
b4b0: 20 20 54 63 6c 5f 42 61 63 6b 67 72 6f 75 6e 64    Tcl_Background
b4c0: 45 72 72 6f 72 28 70 2d 3e 69 6e 74 65 72 70 29  Error(p->interp)
b4d0: 3b 0a 20 20 7d 0a 0a 20 20 54 63 6c 5f 44 65 63  ;.  }..  Tcl_Dec
b4e0: 72 52 65 66 43 6f 75 6e 74 28 70 2d 3e 70 43 6d  rRefCount(p->pCm
b4f0: 70 29 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52 65  p);.  Tcl_DecrRe
b500: 66 43 6f 75 6e 74 28 70 2d 3e 70 44 65 6c 29 3b  fCount(p->pDel);
b510: 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  .  sqlite3_free(
b520: 28 76 6f 69 64 20 2a 29 70 29 3b 0a 7d 0a 73 74  (void *)p);.}.st
b530: 61 74 69 63 20 69 6e 74 20 74 65 73 74 43 72 65  atic int testCre
b540: 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 43 6d 70 28  ateCollationCmp(
b550: 0a 20 20 76 6f 69 64 20 2a 70 43 74 78 2c 0a 20  .  void *pCtx,. 
b560: 20 69 6e 74 20 6e 4c 65 66 74 2c 0a 20 20 63 6f   int nLeft,.  co
b570: 6e 73 74 20 76 6f 69 64 20 2a 7a 4c 65 66 74 2c  nst void *zLeft,
b580: 0a 20 20 69 6e 74 20 6e 52 69 67 68 74 2c 0a 20  .  int nRight,. 
b590: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 52 69   const void *zRi
b5a0: 67 68 74 0a 29 7b 0a 20 20 54 65 73 74 43 6f 6c  ght.){.  TestCol
b5b0: 6c 61 74 69 6f 6e 58 20 2a 70 20 3d 20 28 54 65  lationX *p = (Te
b5c0: 73 74 43 6f 6c 6c 61 74 69 6f 6e 58 20 2a 29 70  stCollationX *)p
b5d0: 43 74 78 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  Ctx;.  Tcl_Obj *
b5e0: 70 53 63 72 69 70 74 20 3d 20 54 63 6c 5f 44 75  pScript = Tcl_Du
b5f0: 70 6c 69 63 61 74 65 4f 62 6a 28 70 2d 3e 70 43  plicateObj(p->pC
b600: 6d 70 29 3b 0a 20 20 69 6e 74 20 69 52 65 73 20  mp);.  int iRes 
b610: 3d 20 30 3b 0a 0a 20 20 54 63 6c 5f 49 6e 63 72  = 0;..  Tcl_Incr
b620: 52 65 66 43 6f 75 6e 74 28 70 53 63 72 69 70 74  RefCount(pScript
b630: 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a  );.  Tcl_ListObj
b640: 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 30 2c  AppendElement(0,
b650: 20 70 53 63 72 69 70 74 2c 20 54 63 6c 5f 4e 65   pScript, Tcl_Ne
b660: 77 53 74 72 69 6e 67 4f 62 6a 28 28 63 68 61 72  wStringObj((char
b670: 20 2a 29 7a 4c 65 66 74 2c 20 6e 4c 65 66 74 29   *)zLeft, nLeft)
b680: 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a  );.  Tcl_ListObj
b690: 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 30 2c  AppendElement(0,
b6a0: 20 70 53 63 72 69 70 74 2c 20 54 63 6c 5f 4e 65   pScript, Tcl_Ne
b6b0: 77 53 74 72 69 6e 67 4f 62 6a 28 28 63 68 61 72  wStringObj((char
b6c0: 20 2a 29 7a 52 69 67 68 74 2c 6e 52 69 67 68 74   *)zRight,nRight
b6d0: 29 29 3b 0a 0a 20 20 69 66 28 20 54 43 4c 5f 4f  ));..  if( TCL_O
b6e0: 4b 21 3d 54 63 6c 5f 45 76 61 6c 4f 62 6a 45 78  K!=Tcl_EvalObjEx
b6f0: 28 70 2d 3e 69 6e 74 65 72 70 2c 20 70 53 63 72  (p->interp, pScr
b700: 69 70 74 2c 20 54 43 4c 5f 45 56 41 4c 5f 44 49  ipt, TCL_EVAL_DI
b710: 52 45 43 54 7c 54 43 4c 5f 45 56 41 4c 5f 47 4c  RECT|TCL_EVAL_GL
b720: 4f 42 41 4c 29 0a 20 20 20 7c 7c 20 54 43 4c 5f  OBAL).   || TCL_
b730: 4f 4b 21 3d 54 63 6c 5f 47 65 74 49 6e 74 46 72  OK!=Tcl_GetIntFr
b740: 6f 6d 4f 62 6a 28 70 2d 3e 69 6e 74 65 72 70 2c  omObj(p->interp,
b750: 20 54 63 6c 5f 47 65 74 4f 62 6a 52 65 73 75 6c   Tcl_GetObjResul
b760: 74 28 70 2d 3e 69 6e 74 65 72 70 29 2c 20 26 69  t(p->interp), &i
b770: 52 65 73 29 0a 20 20 29 7b 0a 20 20 20 20 54 63  Res).  ){.    Tc
b780: 6c 5f 42 61 63 6b 67 72 6f 75 6e 64 45 72 72 6f  l_BackgroundErro
b790: 72 28 70 2d 3e 69 6e 74 65 72 70 29 3b 0a 20 20  r(p->interp);.  
b7a0: 7d 0a 20 20 54 63 6c 5f 44 65 63 72 52 65 66 43  }.  Tcl_DecrRefC
b7b0: 6f 75 6e 74 28 70 53 63 72 69 70 74 29 3b 0a 0a  ount(pScript);..
b7c0: 20 20 72 65 74 75 72 6e 20 69 52 65 73 3b 0a 7d    return iRes;.}
b7d0: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
b7e0: 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f  _create_collatio
b7f0: 6e 5f 76 32 28 0a 20 20 43 6c 69 65 6e 74 44 61  n_v2(.  ClientDa
b800: 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 2f  ta clientData, /
b810: 2a 20 4e 6f 74 20 75 73 65 64 20 2a 2f 0a 20 20  * Not used */.  
b820: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
b830: 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43  rp,    /* The TC
b840: 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68  L interpreter th
b850: 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20  at invoked this 
b860: 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74  command */.  int
b870: 20 6f 62 6a 63 2c 20 20 20 20 20 20 20 20 20 20   objc,          
b880: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
b890: 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
b8a0: 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
b8b0: 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d 61 6e  bjv[]  /* Comman
b8c0: 64 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 29  d arguments */.)
b8d0: 7b 0a 20 20 54 65 73 74 43 6f 6c 6c 61 74 69 6f  {.  TestCollatio
b8e0: 6e 58 20 2a 70 3b 0a 20 20 73 71 6c 69 74 65 33  nX *p;.  sqlite3
b8f0: 20 2a 64 62 3b 0a 0a 20 20 69 66 28 20 6f 62 6a   *db;..  if( obj
b900: 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=5 ){.    Tcl_
b910: 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74  WrongNumArgs(int
b920: 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 44  erp, 1, objv, "D
b930: 42 2d 48 41 4e 44 4c 45 20 4e 41 4d 45 20 43 4d  B-HANDLE NAME CM
b940: 50 2d 50 52 4f 43 20 44 45 4c 2d 50 52 4f 43 22  P-PROC DEL-PROC"
b950: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
b960: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
b970: 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
b980: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
b990: 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
b9a0: 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
b9b0: 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 70 20 3d 20  L_ERROR;..  p = 
b9c0: 28 54 65 73 74 43 6f 6c 6c 61 74 69 6f 6e 58 20  (TestCollationX 
b9d0: 2a 29 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  *)sqlite3_malloc
b9e0: 28 73 69 7a 65 6f 66 28 54 65 73 74 43 6f 6c 6c  (sizeof(TestColl
b9f0: 61 74 69 6f 6e 58 29 29 3b 0a 20 20 70 2d 3e 70  ationX));.  p->p
ba00: 43 6d 70 20 3d 20 6f 62 6a 76 5b 33 5d 3b 0a 20  Cmp = objv[3];. 
ba10: 20 70 2d 3e 70 44 65 6c 20 3d 20 6f 62 6a 76 5b   p->pDel = objv[
ba20: 34 5d 3b 0a 20 20 70 2d 3e 69 6e 74 65 72 70 20  4];.  p->interp 
ba30: 3d 20 69 6e 74 65 72 70 3b 0a 20 20 54 63 6c 5f  = interp;.  Tcl_
ba40: 49 6e 63 72 52 65 66 43 6f 75 6e 74 28 70 2d 3e  IncrRefCount(p->
ba50: 70 43 6d 70 29 3b 0a 20 20 54 63 6c 5f 49 6e 63  pCmp);.  Tcl_Inc
ba60: 72 52 65 66 43 6f 75 6e 74 28 70 2d 3e 70 44 65  rRefCount(p->pDe
ba70: 6c 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33 5f 63  l);..  sqlite3_c
ba80: 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 5f  reate_collation_
ba90: 76 32 28 64 62 2c 20 54 63 6c 5f 47 65 74 53 74  v2(db, Tcl_GetSt
baa0: 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 2c 20 53  ring(objv[2]), S
bab0: 51 4c 49 54 45 5f 55 54 46 38 2c 20 0a 20 20 20  QLITE_UTF8, .   
bac0: 20 20 20 28 76 6f 69 64 20 2a 29 70 2c 20 74 65     (void *)p, te
bad0: 73 74 43 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f  stCreateCollatio
bae0: 6e 43 6d 70 2c 20 74 65 73 74 43 72 65 61 74 65  nCmp, testCreate
baf0: 43 6f 6c 6c 61 74 69 6f 6e 44 65 6c 0a 20 20 29  CollationDel.  )
bb00: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
bb10: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
bb20: 65 3a 20 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f  e: sqlite3_load_
bb30: 65 78 74 65 6e 73 69 6f 6e 20 44 42 2d 48 41 4e  extension DB-HAN
bb40: 44 4c 45 20 46 49 4c 45 20 3f 50 52 4f 43 3f 0a  DLE FILE ?PROC?.
bb50: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
bb60: 73 74 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  st_load_extensio
bb70: 6e 28 0a 20 20 43 6c 69 65 6e 74 44 61 74 61 20  n(.  ClientData 
bb80: 63 6c 69 65 6e 74 44 61 74 61 2c 20 2f 2a 20 4e  clientData, /* N
bb90: 6f 74 20 75 73 65 64 20 2a 2f 0a 20 20 54 63 6c  ot used */.  Tcl
bba0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
bbb0: 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69      /* The TCL i
bbc0: 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20  nterpreter that 
bbd0: 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d  invoked this com
bbe0: 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62  mand */.  int ob
bbf0: 6a 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  jc,             
bc00: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
bc10: 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c  guments */.  Tcl
bc20: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
bc30: 5b 5d 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61  []  /* Command a
bc40: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20  rguments */.){. 
bc50: 20 54 63 6c 5f 43 6d 64 49 6e 66 6f 20 63 6d 64   Tcl_CmdInfo cmd
bc60: 49 6e 66 6f 3b 0a 20 20 73 71 6c 69 74 65 33 20  Info;.  sqlite3 
bc70: 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  *db;.  int rc;. 
bc80: 20 63 68 61 72 20 2a 7a 44 62 3b 0a 20 20 63 68   char *zDb;.  ch
bc90: 61 72 20 2a 7a 46 69 6c 65 3b 0a 20 20 63 68 61  ar *zFile;.  cha
bca0: 72 20 2a 7a 50 72 6f 63 20 3d 20 30 3b 0a 20 20  r *zProc = 0;.  
bcb0: 63 68 61 72 20 2a 7a 45 72 72 20 3d 20 30 3b 0a  char *zErr = 0;.
bcc0: 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 34 20 26  .  if( objc!=4 &
bcd0: 26 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20  & objc!=3 ){.   
bce0: 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67   Tcl_WrongNumArg
bcf0: 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a  s(interp, 1, obj
bd00: 76 2c 20 22 44 42 2d 48 41 4e 44 4c 45 20 46 49  v, "DB-HANDLE FI
bd10: 4c 45 20 3f 50 52 4f 43 3f 22 29 3b 0a 20 20 20  LE ?PROC?");.   
bd20: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
bd30: 52 3b 0a 20 20 7d 0a 20 20 7a 44 62 20 3d 20 54  R;.  }.  zDb = T
bd40: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
bd50: 76 5b 31 5d 29 3b 0a 20 20 7a 46 69 6c 65 20 3d  v[1]);.  zFile =
bd60: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
bd70: 62 6a 76 5b 32 5d 29 3b 0a 20 20 69 66 28 20 6f  bjv[2]);.  if( o
bd80: 62 6a 63 3d 3d 34 20 29 7b 0a 20 20 20 20 7a 50  bjc==4 ){.    zP
bd90: 72 6f 63 20 3d 20 54 63 6c 5f 47 65 74 53 74 72  roc = Tcl_GetStr
bda0: 69 6e 67 28 6f 62 6a 76 5b 33 5d 29 3b 0a 20 20  ing(objv[3]);.  
bdb0: 7d 0a 0a 20 20 2f 2a 20 45 78 74 72 61 63 74 20  }..  /* Extract 
bdc0: 74 68 65 20 43 20 64 61 74 61 62 61 73 65 20 68  the C database h
bdd0: 61 6e 64 6c 65 20 66 72 6f 6d 20 74 68 65 20 54  andle from the T
bde0: 63 6c 20 63 6f 6d 6d 61 6e 64 20 6e 61 6d 65 20  cl command name 
bdf0: 2a 2f 0a 20 20 69 66 28 20 21 54 63 6c 5f 47 65  */.  if( !Tcl_Ge
be00: 74 43 6f 6d 6d 61 6e 64 49 6e 66 6f 28 69 6e 74  tCommandInfo(int
be10: 65 72 70 2c 20 7a 44 62 2c 20 26 63 6d 64 49 6e  erp, zDb, &cmdIn
be20: 66 6f 29 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  fo) ){.    Tcl_A
be30: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
be40: 72 70 2c 20 22 63 6f 6d 6d 61 6e 64 20 6e 6f 74  rp, "command not
be50: 20 66 6f 75 6e 64 3a 20 22 2c 20 7a 44 62 2c 20   found: ", zDb, 
be60: 28 63 68 61 72 2a 29 30 29 3b 0a 20 20 20 20 72  (char*)0);.    r
be70: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
be80: 0a 20 20 7d 0a 20 20 64 62 20 3d 20 28 28 73 74  .  }.  db = ((st
be90: 72 75 63 74 20 53 71 6c 69 74 65 44 62 2a 29 63  ruct SqliteDb*)c
bea0: 6d 64 49 6e 66 6f 2e 6f 62 6a 43 6c 69 65 6e 74  mdInfo.objClient
beb0: 44 61 74 61 29 2d 3e 64 62 3b 0a 20 20 61 73 73  Data)->db;.  ass
bec0: 65 72 74 28 64 62 29 3b 0a 0a 20 20 2f 2a 20 43  ert(db);..  /* C
bed0: 61 6c 6c 20 74 68 65 20 75 6e 64 65 72 6c 79 69  all the underlyi
bee0: 6e 67 20 43 20 66 75 6e 63 74 69 6f 6e 2e 20 49  ng C function. I
bef0: 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72  f an error occur
bf00: 73 2c 20 73 65 74 20 72 63 20 74 6f 20 0a 20 20  s, set rc to .  
bf10: 2a 2a 20 54 43 4c 5f 45 52 52 4f 52 20 61 6e 64  ** TCL_ERROR and
bf20: 20 6c 6f 61 64 20 61 6e 79 20 65 72 72 6f 72 20   load any error 
bf30: 73 74 72 69 6e 67 20 69 6e 74 6f 20 74 68 65 20  string into the 
bf40: 69 6e 74 65 72 70 72 65 74 65 72 2e 20 49 66 20  interpreter. If 
bf50: 6e 6f 20 0a 20 20 2a 2a 20 65 72 72 6f 72 20 6f  no .  ** error o
bf60: 63 63 75 72 73 2c 20 73 65 74 20 72 63 20 74 6f  ccurs, set rc to
bf70: 20 54 43 4c 5f 4f 4b 2e 0a 20 20 2a 2f 0a 23 69   TCL_OK..  */.#i
bf80: 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
bf90: 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a  _LOAD_EXTENSION.
bfa0: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
bfb0: 52 4f 52 3b 0a 20 20 7a 45 72 72 20 3d 20 73 71  ROR;.  zErr = sq
bfc0: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 74  lite3_mprintf("t
bfd0: 68 69 73 20 62 75 69 6c 64 20 6f 6d 69 74 73 20  his build omits 
bfe0: 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74  sqlite3_load_ext
bff0: 65 6e 73 69 6f 6e 28 29 22 29 3b 0a 23 65 6c 73  ension()");.#els
c000: 65 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  e.  rc = sqlite3
c010: 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28  _load_extension(
c020: 64 62 2c 20 7a 46 69 6c 65 2c 20 7a 50 72 6f 63  db, zFile, zProc
c030: 2c 20 26 7a 45 72 72 29 3b 0a 23 65 6e 64 69 66  , &zErr);.#endif
c040: 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
c050: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f  E_OK ){.    Tcl_
c060: 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70  SetResult(interp
c070: 2c 20 7a 45 72 72 20 3f 20 7a 45 72 72 20 3a 20  , zErr ? zErr : 
c080: 22 22 2c 20 54 43 4c 5f 56 4f 4c 41 54 49 4c 45  "", TCL_VOLATILE
c090: 29 3b 0a 20 20 20 20 72 63 20 3d 20 54 43 4c 5f  );.    rc = TCL_
c0a0: 45 52 52 4f 52 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ERROR;.  }else{.
c0b0: 20 20 20 20 72 63 20 3d 20 54 43 4c 5f 4f 4b 3b      rc = TCL_OK;
c0c0: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66  .  }.  sqlite3_f
c0d0: 72 65 65 28 7a 45 72 72 29 3b 0a 0a 20 20 72 65  ree(zErr);..  re
c0e0: 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a  turn rc;.}../*.*
c0f0: 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33  * Usage: sqlite3
c100: 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65 78 74  _enable_load_ext
c110: 65 6e 73 69 6f 6e 20 44 42 2d 48 41 4e 44 4c 45  ension DB-HANDLE
c120: 20 4f 4e 4f 46 46 0a 2a 2f 0a 73 74 61 74 69 63   ONOFF.*/.static
c130: 20 69 6e 74 20 74 65 73 74 5f 65 6e 61 62 6c 65   int test_enable
c140: 5f 6c 6f 61 64 28 0a 20 20 43 6c 69 65 6e 74 44  _load(.  ClientD
c150: 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 20  ata clientData, 
c160: 2f 2a 20 4e 6f 74 20 75 73 65 64 20 2a 2f 0a 20  /* Not used */. 
c170: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
c180: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
c190: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
c1a0: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
c1b0: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
c1c0: 74 20 6f 62 6a 63 2c 20 20 20 20 20 20 20 20 20  t objc,         
c1d0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
c1e0: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
c1f0: 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
c200: 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d 61  objv[]  /* Comma
c210: 6e 64 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  nd arguments */.
c220: 29 7b 0a 20 20 54 63 6c 5f 43 6d 64 49 6e 66 6f  ){.  Tcl_CmdInfo
c230: 20 63 6d 64 49 6e 66 6f 3b 0a 20 20 73 71 6c 69   cmdInfo;.  sqli
c240: 74 65 33 20 2a 64 62 3b 0a 20 20 63 68 61 72 20  te3 *db;.  char 
c250: 2a 7a 44 62 3b 0a 20 20 69 6e 74 20 6f 6e 6f 66  *zDb;.  int onof
c260: 66 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  f;..  if( objc!=
c270: 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f  3 ){.    Tcl_Wro
c280: 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
c290: 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 44 42 2d 48  , 1, objv, "DB-H
c2a0: 41 4e 44 4c 45 20 4f 4e 4f 46 46 22 29 3b 0a 20  ANDLE ONOFF");. 
c2b0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
c2c0: 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a 44 62 20 3d  ROR;.  }.  zDb =
c2d0: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
c2e0: 62 6a 76 5b 31 5d 29 3b 0a 0a 20 20 2f 2a 20 45  bjv[1]);..  /* E
c2f0: 78 74 72 61 63 74 20 74 68 65 20 43 20 64 61 74  xtract the C dat
c300: 61 62 61 73 65 20 68 61 6e 64 6c 65 20 66 72 6f  abase handle fro
c310: 6d 20 74 68 65 20 54 63 6c 20 63 6f 6d 6d 61 6e  m the Tcl comman
c320: 64 20 6e 61 6d 65 20 2a 2f 0a 20 20 69 66 28 20  d name */.  if( 
c330: 21 54 63 6c 5f 47 65 74 43 6f 6d 6d 61 6e 64 49  !Tcl_GetCommandI
c340: 6e 66 6f 28 69 6e 74 65 72 70 2c 20 7a 44 62 2c  nfo(interp, zDb,
c350: 20 26 63 6d 64 49 6e 66 6f 29 20 29 7b 0a 20 20   &cmdInfo) ){.  
c360: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
c370: 6c 74 28 69 6e 74 65 72 70 2c 20 22 63 6f 6d 6d  lt(interp, "comm
c380: 61 6e 64 20 6e 6f 74 20 66 6f 75 6e 64 3a 20 22  and not found: "
c390: 2c 20 7a 44 62 2c 20 28 63 68 61 72 2a 29 30 29  , zDb, (char*)0)
c3a0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
c3b0: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 64 62  _ERROR;.  }.  db
c3c0: 20 3d 20 28 28 73 74 72 75 63 74 20 53 71 6c 69   = ((struct Sqli
c3d0: 74 65 44 62 2a 29 63 6d 64 49 6e 66 6f 2e 6f 62  teDb*)cmdInfo.ob
c3e0: 6a 43 6c 69 65 6e 74 44 61 74 61 29 2d 3e 64 62  jClientData)->db
c3f0: 3b 0a 20 20 61 73 73 65 72 74 28 64 62 29 3b 0a  ;.  assert(db);.
c400: 0a 20 20 2f 2a 20 47 65 74 20 74 68 65 20 6f 6e  .  /* Get the on
c410: 6f 66 66 20 70 61 72 61 6d 65 74 65 72 20 2a 2f  off parameter */
c420: 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 42 6f  .  if( Tcl_GetBo
c430: 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74  oleanFromObj(int
c440: 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 6f  erp, objv[2], &o
c450: 6e 6f 66 66 29 20 29 7b 0a 20 20 20 20 72 65 74  noff) ){.    ret
c460: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
c470: 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54   }..#ifdef SQLIT
c480: 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45  E_OMIT_LOAD_EXTE
c490: 4e 53 49 4f 4e 0a 20 20 54 63 6c 5f 41 70 70 65  NSION.  Tcl_Appe
c4a0: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
c4b0: 20 22 74 68 69 73 20 62 75 69 6c 64 20 6f 6d 69   "this build omi
c4c0: 74 73 20 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f  ts sqlite3_load_
c4d0: 65 78 74 65 6e 73 69 6f 6e 28 29 22 29 3b 0a 20  extension()");. 
c4e0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
c4f0: 52 3b 0a 23 65 6c 73 65 0a 20 20 73 71 6c 69 74  R;.#else.  sqlit
c500: 65 33 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65  e3_enable_load_e
c510: 78 74 65 6e 73 69 6f 6e 28 64 62 2c 20 6f 6e 6f  xtension(db, ono
c520: 66 66 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  ff);.  return TC
c530: 4c 5f 4f 4b 3b 0a 23 65 6e 64 69 66 0a 7d 0a 0a  L_OK;.#endif.}..
c540: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
c550: 6c 69 74 65 5f 61 62 6f 72 74 0a 2a 2a 0a 2a 2a  lite_abort.**.**
c560: 20 53 68 75 74 64 6f 77 6e 20 74 68 65 20 70 72   Shutdown the pr
c570: 6f 63 65 73 73 20 69 6d 6d 65 64 69 61 74 65 6c  ocess immediatel
c580: 79 2e 20 20 54 68 69 73 20 69 73 20 6e 6f 74 20  y.  This is not 
c590: 61 20 63 6c 65 61 6e 20 73 68 75 74 64 6f 77 6e  a clean shutdown
c5a0: 2e 0a 2a 2a 20 54 68 69 73 20 63 6f 6d 6d 61 6e  ..** This comman
c5b0: 64 20 69 73 20 75 73 65 64 20 74 6f 20 74 65 73  d is used to tes
c5c0: 74 20 74 68 65 20 72 65 63 6f 76 65 72 61 62 69  t the recoverabi
c5d0: 6c 69 74 79 20 6f 66 20 61 20 64 61 74 61 62 61  lity of a databa
c5e0: 73 65 20 69 6e 0a 2a 2a 20 74 68 65 20 65 76 65  se in.** the eve
c5f0: 6e 74 20 6f 66 20 61 20 70 72 6f 67 72 61 6d 20  nt of a program 
c600: 63 72 61 73 68 2e 0a 2a 2f 0a 73 74 61 74 69 63  crash..*/.static
c610: 20 69 6e 74 20 73 71 6c 69 74 65 5f 61 62 6f 72   int sqlite_abor
c620: 74 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73  t(.  void *NotUs
c630: 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ed,.  Tcl_Interp
c640: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
c650: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
c660: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
c670: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
c680: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20  .  int argc,    
c690: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
c6a0: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
c6b0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67   */.  char **arg
c6c0: 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  v            /* 
c6d0: 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67  Text of each arg
c6e0: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 61 73  ument */.){.  as
c6f0: 73 65 72 74 28 20 69 6e 74 65 72 70 3d 3d 30 20  sert( interp==0 
c700: 29 3b 20 20 20 2f 2a 20 54 68 69 73 20 77 69 6c  );   /* This wil
c710: 6c 20 61 6c 77 61 79 73 20 66 61 69 6c 20 2a 2f  l always fail */
c720: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
c730: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  ;.}../*.** The f
c740: 6f 6c 6c 6f 77 69 6e 67 20 72 6f 75 74 69 6e 65  ollowing routine
c750: 20 69 73 20 61 20 75 73 65 72 2d 64 65 66 69 6e   is a user-defin
c760: 65 64 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  ed SQL function 
c770: 77 68 6f 73 65 20 70 75 72 70 6f 73 65 0a 2a 2a  whose purpose.**
c780: 20 69 73 20 74 6f 20 74 65 73 74 20 74 68 65 20   is to test the 
c790: 73 71 6c 69 74 65 5f 73 65 74 5f 72 65 73 75 6c  sqlite_set_resul
c7a0: 74 28 29 20 41 50 49 2e 0a 2a 2f 0a 73 74 61 74  t() API..*/.stat
c7b0: 69 63 20 76 6f 69 64 20 74 65 73 74 46 75 6e 63  ic void testFunc
c7c0: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
c7d0: 20 2a 63 6f 6e 74 65 78 74 2c 20 69 6e 74 20 61   *context, int a
c7e0: 72 67 63 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  rgc, sqlite3_val
c7f0: 75 65 20 2a 2a 61 72 67 76 29 7b 0a 20 20 77 68  ue **argv){.  wh
c800: 69 6c 65 28 20 61 72 67 63 3e 3d 32 20 29 7b 0a  ile( argc>=2 ){.
c810: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
c820: 7a 41 72 67 30 20 3d 20 28 63 68 61 72 2a 29 73  zArg0 = (char*)s
c830: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
c840: 74 28 61 72 67 76 5b 30 5d 29 3b 0a 20 20 20 20  t(argv[0]);.    
c850: 69 66 28 20 7a 41 72 67 30 20 29 7b 0a 20 20 20  if( zArg0 ){.   
c860: 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65     if( 0==sqlite
c870: 33 53 74 72 49 43 6d 70 28 7a 41 72 67 30 2c 20  3StrICmp(zArg0, 
c880: 22 69 6e 74 22 29 20 29 7b 0a 20 20 20 20 20 20  "int") ){.      
c890: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
c8a0: 5f 69 6e 74 28 63 6f 6e 74 65 78 74 2c 20 73 71  _int(context, sq
c8b0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28  lite3_value_int(
c8c0: 61 72 67 76 5b 31 5d 29 29 3b 0a 20 20 20 20 20  argv[1]));.     
c8d0: 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74   }else if( sqlit
c8e0: 65 33 53 74 72 49 43 6d 70 28 7a 41 72 67 30 2c  e3StrICmp(zArg0,
c8f0: 22 69 6e 74 36 34 22 29 3d 3d 30 20 29 7b 0a 20  "int64")==0 ){. 
c900: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72         sqlite3_r
c910: 65 73 75 6c 74 5f 69 6e 74 36 34 28 63 6f 6e 74  esult_int64(cont
c920: 65 78 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  ext, sqlite3_val
c930: 75 65 5f 69 6e 74 36 34 28 61 72 67 76 5b 31 5d  ue_int64(argv[1]
c940: 29 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  ));.      }else 
c950: 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43  if( sqlite3StrIC
c960: 6d 70 28 7a 41 72 67 30 2c 22 73 74 72 69 6e 67  mp(zArg0,"string
c970: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ")==0 ){.       
c980: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
c990: 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 28 63  text(context, (c
c9a0: 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c  har*)sqlite3_val
c9b0: 75 65 5f 74 65 78 74 28 61 72 67 76 5b 31 5d 29  ue_text(argv[1])
c9c0: 2c 20 2d 31 2c 0a 20 20 20 20 20 20 20 20 20 20  , -1,.          
c9d0: 20 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45    SQLITE_TRANSIE
c9e0: 4e 54 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  NT);.      }else
c9f0: 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49   if( sqlite3StrI
ca00: 43 6d 70 28 7a 41 72 67 30 2c 22 64 6f 75 62 6c  Cmp(zArg0,"doubl
ca10: 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  e")==0 ){.      
ca20: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
ca30: 5f 64 6f 75 62 6c 65 28 63 6f 6e 74 65 78 74 2c  _double(context,
ca40: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64   sqlite3_value_d
ca50: 6f 75 62 6c 65 28 61 72 67 76 5b 31 5d 29 29 3b  ouble(argv[1]));
ca60: 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
ca70: 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
ca80: 7a 41 72 67 30 2c 22 6e 75 6c 6c 22 29 3d 3d 30  zArg0,"null")==0
ca90: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
caa0: 74 65 33 5f 72 65 73 75 6c 74 5f 6e 75 6c 6c 28  te3_result_null(
cab0: 63 6f 6e 74 65 78 74 29 3b 0a 20 20 20 20 20 20  context);.      
cac0: 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65  }else if( sqlite
cad0: 33 53 74 72 49 43 6d 70 28 7a 41 72 67 30 2c 22  3StrICmp(zArg0,"
cae0: 76 61 6c 75 65 22 29 3d 3d 30 20 29 7b 0a 20 20  value")==0 ){.  
caf0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65        sqlite3_re
cb00: 73 75 6c 74 5f 76 61 6c 75 65 28 63 6f 6e 74 65  sult_value(conte
cb10: 78 74 2c 20 61 72 67 76 5b 73 71 6c 69 74 65 33  xt, argv[sqlite3
cb20: 5f 76 61 6c 75 65 5f 69 6e 74 28 61 72 67 76 5b  _value_int(argv[
cb30: 31 5d 29 5d 29 3b 0a 20 20 20 20 20 20 7d 65 6c  1])]);.      }el
cb40: 73 65 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f  se{.        goto
cb50: 20 65 72 72 6f 72 5f 6f 75 74 3b 0a 20 20 20 20   error_out;.    
cb60: 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
cb70: 20 20 20 20 20 67 6f 74 6f 20 65 72 72 6f 72 5f       goto error_
cb80: 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61  out;.    }.    a
cb90: 72 67 63 20 2d 3d 20 32 3b 0a 20 20 20 20 61 72  rgc -= 2;.    ar
cba0: 67 76 20 2b 3d 20 32 3b 0a 20 20 7d 0a 20 20 72  gv += 2;.  }.  r
cbb0: 65 74 75 72 6e 3b 0a 0a 65 72 72 6f 72 5f 6f 75  eturn;..error_ou
cbc0: 74 3a 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73  t:.  sqlite3_res
cbd0: 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78  ult_error(contex
cbe0: 74 2c 22 66 69 72 73 74 20 61 72 67 75 6d 65 6e  t,"first argumen
cbf0: 74 20 73 68 6f 75 6c 64 20 62 65 20 6f 6e 65 20  t should be one 
cc00: 6f 66 3a 20 22 0a 20 20 20 20 20 20 22 69 6e 74  of: ".      "int
cc10: 20 69 6e 74 36 34 20 73 74 72 69 6e 67 20 64 6f   int64 string do
cc20: 75 62 6c 65 20 6e 75 6c 6c 20 76 61 6c 75 65 22  uble null value"
cc30: 2c 20 2d 31 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  , -1);.}../*.** 
cc40: 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 5f  Usage:   sqlite_
cc50: 72 65 67 69 73 74 65 72 5f 74 65 73 74 5f 66 75  register_test_fu
cc60: 6e 63 74 69 6f 6e 20 20 44 42 20 20 4e 41 4d 45  nction  DB  NAME
cc70: 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
cc80: 74 68 65 20 74 65 73 74 20 53 51 4c 20 66 75 6e  the test SQL fun
cc90: 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74  ction on the dat
cca0: 61 62 61 73 65 20 44 42 20 75 6e 64 65 72 20 74  abase DB under t
ccb0: 68 65 20 6e 61 6d 65 20 4e 41 4d 45 2e 0a 2a 2f  he name NAME..*/
ccc0: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
ccd0: 5f 72 65 67 69 73 74 65 72 5f 66 75 6e 63 28 0a  _register_func(.
cce0: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
ccf0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
cd00: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
cd10: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
cd20: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
cd30: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
cd40: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
cd50: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
cd60: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
cd70: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
cd80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
cd90: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
cda0: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74  nt */.){.  sqlit
cdb0: 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63  e3 *db;.  int rc
cdc0: 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 33 20  ;.  if( argc!=3 
cdd0: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
cde0: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
cdf0: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
ce00: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72  hould be \"", ar
ce10: 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 22  gv[0], .       "
ce20: 20 44 42 20 46 55 4e 43 54 49 4f 4e 2d 4e 41 4d   DB FUNCTION-NAM
ce30: 45 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  E", 0);.    retu
ce40: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
ce50: 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  }.  if( getDbPoi
ce60: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67  nter(interp, arg
ce70: 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74  v[1], &db) ) ret
ce80: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
ce90: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72   rc = sqlite3_cr
cea0: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62  eate_function(db
ceb0: 2c 20 61 72 67 76 5b 32 5d 2c 20 2d 31 2c 20 53  , argv[2], -1, S
cec0: 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 20 0a  QLITE_UTF8, 0, .
ced0: 20 20 20 20 20 20 74 65 73 74 46 75 6e 63 2c 20        testFunc, 
cee0: 30 2c 20 30 29 3b 0a 20 20 69 66 28 20 72 63 21  0, 0);.  if( rc!
cef0: 3d 30 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =0 ){.    Tcl_Ap
cf00: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
cf10: 70 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74 72  p, sqlite3ErrStr
cf20: 28 72 63 29 2c 20 30 29 3b 0a 20 20 20 20 72 65  (rc), 0);.    re
cf30: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
cf40: 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65    }.  if( sqlite
cf50: 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74  3TestErrCode(int
cf60: 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72  erp, db, rc) ) r
cf70: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
cf80: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
cf90: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
cfa0: 3a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  :  sqlite3_final
cfb0: 69 7a 65 20 20 53 54 4d 54 20 0a 2a 2a 0a 2a 2a  ize  STMT .**.**
cfc0: 20 46 69 6e 61 6c 69 7a 65 20 61 20 73 74 61 74   Finalize a stat
cfd0: 65 6d 65 6e 74 20 68 61 6e 64 6c 65 2e 0a 2a 2f  ement handle..*/
cfe0: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
cff0: 5f 66 69 6e 61 6c 69 7a 65 28 0a 20 20 76 6f 69  _finalize(.  voi
d000: 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
d010: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
d020: 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
d030: 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
d040: 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73  ST objv[].){.  s
d050: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
d060: 6d 74 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  mt;.  int rc;.  
d070: 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 30 3b  sqlite3 *db = 0;
d080: 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20  ..  if( objc!=2 
d090: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
d0a0: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
d0b0: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
d0c0: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20  hould be \"",.  
d0d0: 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
d0e0: 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b  ingFromObj(objv[
d0f0: 30 5d 2c 20 30 29 2c 20 22 20 3c 53 54 4d 54 3e  0], 0), " <STMT>
d100: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
d110: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
d120: 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  ..  if( getStmtP
d130: 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
d140: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
d150: 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29  v[1]), &pStmt) )
d160: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
d170: 52 3b 0a 0a 20 20 69 66 28 20 70 53 74 6d 74 20  R;..  if( pStmt 
d180: 29 7b 0a 20 20 20 20 64 62 20 3d 20 53 74 6d 74  ){.    db = Stmt
d190: 54 6f 44 62 28 70 53 74 6d 74 29 3b 0a 20 20 7d  ToDb(pStmt);.  }
d1a0: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
d1b0: 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b  finalize(pStmt);
d1c0: 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74  .  Tcl_SetResult
d1d0: 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a  (interp, (char *
d1e0: 29 74 31 45 72 72 6f 72 4e 61 6d 65 28 72 63 29  )t1ErrorName(rc)
d1f0: 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20  , TCL_STATIC);. 
d200: 20 69 66 28 20 64 62 20 26 26 20 73 71 6c 69 74   if( db && sqlit
d210: 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e  e3TestErrCode(in
d220: 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20  terp, db, rc) ) 
d230: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
d240: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
d250: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
d260: 65 3a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65  e:  sqlite3_rese
d270: 74 20 20 53 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 52  t  STMT .**.** R
d280: 65 73 65 74 20 61 20 73 74 61 74 65 6d 65 6e 74  eset a statement
d290: 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 73 74 61 74   handle..*/.stat
d2a0: 69 63 20 69 6e 74 20 74 65 73 74 5f 72 65 73 65  ic int test_rese
d2b0: 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  t(.  void * clie
d2c0: 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
d2d0: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
d2e0: 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
d2f0: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
d300: 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ].){.  sqlite3_s
d310: 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e  tmt *pStmt;.  in
d320: 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  t rc;..  if( obj
d330: 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
d340: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
d350: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
d360: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
d370: 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47  ",.        Tcl_G
d380: 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28  etStringFromObj(
d390: 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 3c  objv[0], 0), " <
d3a0: 53 54 4d 54 3e 22 2c 20 30 29 3b 0a 20 20 20 20  STMT>", 0);.    
d3b0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
d3c0: 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
d3d0: 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
d3e0: 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
d3f0: 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
d400: 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
d410: 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20  _ERROR;..  rc = 
d420: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 70 53  sqlite3_reset(pS
d430: 74 6d 74 29 3b 0a 20 20 69 66 28 20 70 53 74 6d  tmt);.  if( pStm
d440: 74 20 26 26 20 73 71 6c 69 74 65 33 54 65 73 74  t && sqlite3Test
d450: 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20  ErrCode(interp, 
d460: 53 74 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 2c  StmtToDb(pStmt),
d470: 20 72 63 29 20 29 7b 0a 20 20 20 20 72 65 74 75   rc) ){.    retu
d480: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
d490: 7d 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c  }.  Tcl_SetResul
d4a0: 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20  t(interp, (char 
d4b0: 2a 29 74 31 45 72 72 6f 72 4e 61 6d 65 28 72 63  *)t1ErrorName(rc
d4c0: 29 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a  ), TCL_STATIC);.
d4d0: 2f 2a 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20  /*.  if( rc ){. 
d4e0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
d4f0: 52 4f 52 3b 0a 20 20 7d 0a 2a 2f 0a 20 20 72 65  ROR;.  }.*/.  re
d500: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
d510: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
d520: 6c 69 74 65 33 5f 65 78 70 69 72 65 64 20 53 54  lite3_expired ST
d530: 4d 54 20 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e  MT .**.** Return
d540: 20 54 52 55 45 20 69 66 20 61 20 72 65 63 6f 6d   TRUE if a recom
d550: 70 69 6c 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  pilation of the 
d560: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 72 65 63  statement is rec
d570: 6f 6d 6d 65 6e 64 65 64 2e 0a 2a 2f 0a 73 74 61  ommended..*/.sta
d580: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 65 78 70  tic int test_exp
d590: 69 72 65 64 28 0a 20 20 76 6f 69 64 20 2a 20 63  ired(.  void * c
d5a0: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
d5b0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
d5c0: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
d5d0: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
d5e0: 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
d5f0: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
d600: 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a   if( objc!=2 ){.
d610: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
d620: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
d630: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
d640: 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20  ld be \"",.     
d650: 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
d660: 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c  FromObj(objv[0],
d670: 20 30 29 2c 20 22 20 3c 53 54 4d 54 3e 22 2c 20   0), " <STMT>", 
d680: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
d690: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
d6a0: 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  if( getStmtPoint
d6b0: 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
d6c0: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
d6d0: 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74  ), &pStmt) ) ret
d6e0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
d6f0: 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c   Tcl_SetObjResul
d700: 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
d710: 77 42 6f 6f 6c 65 61 6e 4f 62 6a 28 73 71 6c 69  wBooleanObj(sqli
d720: 74 65 33 5f 65 78 70 69 72 65 64 28 70 53 74 6d  te3_expired(pStm
d730: 74 29 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  t)));.  return T
d740: 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
d750: 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f  Usage:  sqlite3_
d760: 74 72 61 6e 73 66 65 72 5f 62 69 6e 64 69 6e 67  transfer_binding
d770: 73 20 46 52 4f 4d 53 54 4d 54 20 54 4f 53 54 4d  s FROMSTMT TOSTM
d780: 54 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72  T.**.** Transfer
d790: 20 61 6c 6c 20 62 69 6e 64 69 6e 67 73 20 66 72   all bindings fr
d7a0: 6f 6d 20 46 52 4f 4d 53 54 4d 54 20 6f 76 65 72  om FROMSTMT over
d7b0: 20 74 6f 20 54 4f 53 54 4d 54 0a 2a 2f 0a 73 74   to TOSTMT.*/.st
d7c0: 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 74 72  atic int test_tr
d7d0: 61 6e 73 66 65 72 5f 62 69 6e 64 28 0a 20 20 76  ansfer_bind(.  v
d7e0: 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
d7f0: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
d800: 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
d810: 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
d820: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
d830: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
d840: 53 74 6d 74 31 2c 20 2a 70 53 74 6d 74 32 3b 0a  Stmt1, *pStmt2;.
d850: 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b    if( objc!=3 ){
d860: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
d870: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
d880: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
d890: 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20  uld be \"",.    
d8a0: 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
d8b0: 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d  gFromObj(objv[0]
d8c0: 2c 20 30 29 2c 20 22 20 46 52 4f 4d 2d 53 54 4d  , 0), " FROM-STM
d8d0: 54 20 54 4f 2d 53 54 4d 54 22 2c 20 30 29 3b 0a  T TO-STMT", 0);.
d8e0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
d8f0: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
d900: 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69  getStmtPointer(i
d910: 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
d920: 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
d930: 70 53 74 6d 74 31 29 29 20 72 65 74 75 72 6e 20  pStmt1)) return 
d940: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  TCL_ERROR;.  if(
d950: 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28   getStmtPointer(
d960: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
d970: 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 2c 20  tring(objv[2]), 
d980: 26 70 53 74 6d 74 32 29 29 20 72 65 74 75 72 6e  &pStmt2)) return
d990: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63   TCL_ERROR;.  Tc
d9a0: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
d9b0: 6e 74 65 72 70 2c 20 0a 20 20 20 20 20 54 63 6c  nterp, .     Tcl
d9c0: 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74  _NewIntObj(sqlit
d9d0: 65 33 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e 64  e3_transfer_bind
d9e0: 69 6e 67 73 28 70 53 74 6d 74 31 2c 70 53 74 6d  ings(pStmt1,pStm
d9f0: 74 32 29 29 29 3b 0a 20 20 72 65 74 75 72 6e 20  t2)));.  return 
da00: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
da10: 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33   Usage:  sqlite3
da20: 5f 63 68 61 6e 67 65 73 20 44 42 0a 2a 2a 0a 2a  _changes DB.**.*
da30: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d  * Return the num
da40: 62 65 72 20 6f 66 20 63 68 61 6e 67 65 73 20 6d  ber of changes m
da50: 61 64 65 20 74 6f 20 74 68 65 20 64 61 74 61 62  ade to the datab
da60: 61 73 65 20 62 79 20 74 68 65 20 6c 61 73 74 20  ase by the last 
da70: 53 51 4c 0a 2a 2a 20 65 78 65 63 75 74 69 6f 6e  SQL.** execution
da80: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
da90: 74 65 73 74 5f 63 68 61 6e 67 65 73 28 0a 20 20  test_changes(.  
daa0: 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
dab0: 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
dac0: 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
dad0: 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
dae0: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
daf0: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
db00: 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a   if( objc!=2 ){.
db10: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
db20: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
db30: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
db40: 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20  ld be \"",.     
db50: 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28    Tcl_GetString(
db60: 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44 42 22 2c  objv[0]), " DB",
db70: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
db80: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
db90: 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
dba0: 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
dbb0: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
dbc0: 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
dbd0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c  TCL_ERROR;.  Tcl
dbe0: 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
dbf0: 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74  terp, Tcl_NewInt
dc00: 4f 62 6a 28 73 71 6c 69 74 65 33 5f 63 68 61 6e  Obj(sqlite3_chan
dc10: 67 65 73 28 64 62 29 29 29 3b 0a 20 20 72 65 74  ges(db)));.  ret
dc20: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
dc30: 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68 65  *.** This is the
dc40: 20 22 73 74 61 74 69 63 5f 62 69 6e 64 5f 76 61   "static_bind_va
dc50: 6c 75 65 22 20 74 68 61 74 20 76 61 72 69 61 62  lue" that variab
dc60: 6c 65 73 20 61 72 65 20 62 6f 75 6e 64 20 74 6f  les are bound to
dc70: 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 46 4c 41   when.** the FLA
dc80: 47 20 6f 70 74 69 6f 6e 20 6f 66 20 73 71 6c 69  G option of sqli
dc90: 74 65 33 5f 62 69 6e 64 20 69 73 20 22 73 74 61  te3_bind is "sta
dca0: 74 69 63 22 0a 2a 2f 0a 73 74 61 74 69 63 20 63  tic".*/.static c
dcb0: 68 61 72 20 2a 73 71 6c 69 74 65 5f 73 74 61 74  har *sqlite_stat
dcc0: 69 63 5f 62 69 6e 64 5f 76 61 6c 75 65 20 3d 20  ic_bind_value = 
dcd0: 30 3b 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71  0;.static int sq
dce0: 6c 69 74 65 5f 73 74 61 74 69 63 5f 62 69 6e 64  lite_static_bind
dcf0: 5f 6e 62 79 74 65 20 3d 20 30 3b 0a 0a 2f 2a 0a  _nbyte = 0;../*.
dd00: 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
dd10: 65 33 5f 62 69 6e 64 20 20 56 4d 20 20 49 44 58  e3_bind  VM  IDX
dd20: 20 20 56 41 4c 55 45 20 20 46 4c 41 47 53 0a 2a    VALUE  FLAGS.*
dd30: 2a 0a 2a 2a 20 53 65 74 73 20 74 68 65 20 76 61  *.** Sets the va
dd40: 6c 75 65 20 6f 66 20 74 68 65 20 49 44 58 2d 74  lue of the IDX-t
dd50: 68 20 6f 63 63 75 72 61 6e 63 65 20 6f 66 20 22  h occurance of "
dd60: 3f 22 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e  ?" in the origin
dd70: 61 6c 20 53 51 4c 0a 2a 2a 20 73 74 72 69 6e 67  al SQL.** string
dd80: 2e 20 20 56 41 4c 55 45 20 69 73 20 74 68 65 20  .  VALUE is the 
dd90: 6e 65 77 20 76 61 6c 75 65 2e 20 20 49 66 20 46  new value.  If F
dda0: 4c 41 47 53 3d 3d 22 6e 75 6c 6c 22 20 74 68 65  LAGS=="null" the
ddb0: 6e 20 56 41 4c 55 45 20 69 73 0a 2a 2a 20 69 67  n VALUE is.** ig
ddc0: 6e 6f 72 65 64 20 61 6e 64 20 74 68 65 20 76 61  nored and the va
ddd0: 6c 75 65 20 69 73 20 73 65 74 20 74 6f 20 4e 55  lue is set to NU
dde0: 4c 4c 2e 20 20 49 66 20 46 4c 41 47 53 3d 3d 22  LL.  If FLAGS=="
ddf0: 73 74 61 74 69 63 22 20 74 68 65 6e 0a 2a 2a 20  static" then.** 
de00: 74 68 65 20 76 61 6c 75 65 20 69 73 20 73 65 74  the value is set
de10: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
de20: 20 61 20 73 74 61 74 69 63 20 76 61 72 69 61 62   a static variab
de30: 6c 65 20 6e 61 6d 65 64 0a 2a 2a 20 22 73 71 6c  le named.** "sql
de40: 69 74 65 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f  ite_static_bind_
de50: 76 61 6c 75 65 22 2e 20 20 49 66 20 46 4c 41 47  value".  If FLAG
de60: 53 3d 3d 22 6e 6f 72 6d 61 6c 22 20 74 68 65 6e  S=="normal" then
de70: 20 61 20 63 6f 70 79 0a 2a 2a 20 6f 66 20 74 68   a copy.** of th
de80: 65 20 56 41 4c 55 45 20 69 73 20 6d 61 64 65 2e  e VALUE is made.
de90: 20 20 49 66 20 46 4c 41 47 53 3d 3d 22 62 6c 6f    If FLAGS=="blo
dea0: 62 31 30 22 20 74 68 65 6e 20 61 20 56 41 4c 55  b10" then a VALU
deb0: 45 20 69 73 20 69 67 6e 6f 72 65 64 0a 2a 2a 20  E is ignored.** 
dec0: 61 6e 20 61 20 31 30 2d 62 79 74 65 20 62 6c 6f  an a 10-byte blo
ded0: 62 20 22 61 62 63 5c 30 30 30 78 79 7a 5c 30 30  b "abc\000xyz\00
dee0: 30 70 71 22 20 69 73 20 69 6e 73 65 72 74 65 64  0pq" is inserted
def0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
df00: 74 65 73 74 5f 62 69 6e 64 28 0a 20 20 76 6f 69  test_bind(.  voi
df10: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63  d *NotUsed,.  Tc
df20: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
df30: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
df40: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
df50: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
df60: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61  mmand */.  int a
df70: 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  rgc,            
df80: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
df90: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68  rguments */.  ch
dfa0: 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20  ar **argv       
dfb0: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
dfc0: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f  each argument */
dfd0: 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  .){.  sqlite3_st
dfe0: 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74  mt *pStmt;.  int
dff0: 20 72 63 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a   rc;.  int idx;.
e000: 20 20 69 66 28 20 61 72 67 63 21 3d 35 20 29 7b    if( argc!=5 ){
e010: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
e020: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
e030: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
e040: 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76  uld be \"", argv
e050: 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 22 20 56  [0], .       " V
e060: 4d 20 49 44 58 20 56 41 4c 55 45 20 28 6e 75 6c  M IDX VALUE (nul
e070: 6c 7c 73 74 61 74 69 63 7c 6e 6f 72 6d 61 6c 29  l|static|normal)
e080: 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  \"", 0);.    ret
e090: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
e0a0: 20 7d 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74   }.  if( getStmt
e0b0: 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
e0c0: 61 72 67 76 5b 31 5d 2c 20 26 70 53 74 6d 74 29  argv[1], &pStmt)
e0d0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
e0e0: 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47  ROR;.  if( Tcl_G
e0f0: 65 74 49 6e 74 28 69 6e 74 65 72 70 2c 20 61 72  etInt(interp, ar
e100: 67 76 5b 32 5d 2c 20 26 69 64 78 29 20 29 20 72  gv[2], &idx) ) r
e110: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
e120: 0a 20 20 69 66 28 20 73 74 72 63 6d 70 28 61 72  .  if( strcmp(ar
e130: 67 76 5b 34 5d 2c 22 6e 75 6c 6c 22 29 3d 3d 30  gv[4],"null")==0
e140: 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
e150: 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 70  ite3_bind_null(p
e160: 53 74 6d 74 2c 20 69 64 78 29 3b 0a 20 20 7d 65  Stmt, idx);.  }e
e170: 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 61  lse if( strcmp(a
e180: 72 67 76 5b 34 5d 2c 22 73 74 61 74 69 63 22 29  rgv[4],"static")
e190: 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ==0 ){.    rc = 
e1a0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
e1b0: 74 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 73 71  t(pStmt, idx, sq
e1c0: 6c 69 74 65 5f 73 74 61 74 69 63 5f 62 69 6e 64  lite_static_bind
e1d0: 5f 76 61 6c 75 65 2c 20 2d 31 2c 20 30 29 3b 0a  _value, -1, 0);.
e1e0: 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
e1f0: 6d 70 28 61 72 67 76 5b 34 5d 2c 22 73 74 61 74  mp(argv[4],"stat
e200: 69 63 2d 6e 62 79 74 65 73 22 29 3d 3d 30 20 29  ic-nbytes")==0 )
e210: 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
e220: 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 70 53 74  e3_bind_text(pSt
e230: 6d 74 2c 20 69 64 78 2c 20 73 71 6c 69 74 65 5f  mt, idx, sqlite_
e240: 73 74 61 74 69 63 5f 62 69 6e 64 5f 76 61 6c 75  static_bind_valu
e250: 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e,.             
e260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e270: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
e280: 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f 6e 62 79  _static_bind_nby
e290: 74 65 2c 20 30 29 3b 0a 20 20 7d 65 6c 73 65 20  te, 0);.  }else 
e2a0: 69 66 28 20 73 74 72 63 6d 70 28 61 72 67 76 5b  if( strcmp(argv[
e2b0: 34 5d 2c 22 6e 6f 72 6d 61 6c 22 29 3d 3d 30 20  4],"normal")==0 
e2c0: 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
e2d0: 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 70 53  te3_bind_text(pS
e2e0: 74 6d 74 2c 20 69 64 78 2c 20 61 72 67 76 5b 33  tmt, idx, argv[3
e2f0: 5d 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 54 52  ], -1, SQLITE_TR
e300: 41 4e 53 49 45 4e 54 29 3b 0a 20 20 7d 65 6c 73  ANSIENT);.  }els
e310: 65 20 69 66 28 20 73 74 72 63 6d 70 28 61 72 67  e if( strcmp(arg
e320: 76 5b 34 5d 2c 22 62 6c 6f 62 31 30 22 29 3d 3d  v[4],"blob10")==
e330: 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  0 ){.    rc = sq
e340: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28  lite3_bind_text(
e350: 70 53 74 6d 74 2c 20 69 64 78 2c 20 22 61 62 63  pStmt, idx, "abc
e360: 5c 30 30 30 78 79 7a 5c 30 30 30 70 71 22 2c 20  \000xyz\000pq", 
e370: 31 30 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  10, SQLITE_STATI
e380: 43 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  C);.  }else{.   
e390: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
e3a0: 74 28 69 6e 74 65 72 70 2c 20 22 34 74 68 20 61  t(interp, "4th a
e3b0: 72 67 75 6d 65 6e 74 20 73 68 6f 75 6c 64 20 62  rgument should b
e3c0: 65 20 22 0a 20 20 20 20 20 20 20 20 22 5c 22 6e  e ".        "\"n
e3d0: 75 6c 6c 5c 22 20 6f 72 20 5c 22 73 74 61 74 69  ull\" or \"stati
e3e0: 63 5c 22 20 6f 72 20 5c 22 6e 6f 72 6d 61 6c 5c  c\" or \"normal\
e3f0: 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  "", 0);.    retu
e400: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
e410: 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54  }.  if( sqlite3T
e420: 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72  estErrCode(inter
e430: 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74 6d  p, StmtToDb(pStm
e440: 74 29 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e  t), rc) ) return
e450: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
e460: 28 20 72 63 20 29 7b 0a 20 20 20 20 63 68 61 72  ( rc ){.    char
e470: 20 7a 42 75 66 5b 35 30 5d 3b 0a 20 20 20 20 73   zBuf[50];.    s
e480: 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 28 25  printf(zBuf, "(%
e490: 64 29 20 22 2c 20 72 63 29 3b 0a 20 20 20 20 54  d) ", rc);.    T
e4a0: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
e4b0: 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 73 71  interp, zBuf, sq
e4c0: 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29 2c  lite3ErrStr(rc),
e4d0: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
e4e0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
e4f0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
e500: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
e510: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 2f 2a 0a  E_OMIT_UTF16./*.
e520: 2a 2a 20 55 73 61 67 65 3a 20 61 64 64 5f 74 65  ** Usage: add_te
e530: 73 74 5f 63 6f 6c 6c 61 74 65 20 3c 64 62 20 70  st_collate <db p
e540: 74 72 3e 20 3c 75 74 66 38 3e 20 3c 75 74 66 31  tr> <utf8> <utf1
e550: 36 6c 65 3e 20 3c 75 74 66 31 36 62 65 3e 0a 2a  6le> <utf16be>.*
e560: 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69  *.** This functi
e570: 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 74 65  on is used to te
e580: 73 74 20 74 68 61 74 20 53 51 4c 69 74 65 20 73  st that SQLite s
e590: 65 6c 65 63 74 73 20 74 68 65 20 63 6f 72 72 65  elects the corre
e5a0: 63 74 20 63 6f 6c 6c 61 74 69 6f 6e 0a 2a 2a 20  ct collation.** 
e5b0: 73 65 71 75 65 6e 63 65 20 63 61 6c 6c 62 61 63  sequence callbac
e5c0: 6b 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20  k when multiple 
e5d0: 76 65 72 73 69 6f 6e 73 20 28 66 6f 72 20 64 69  versions (for di
e5e0: 66 66 65 72 65 6e 74 20 74 65 78 74 20 65 6e 63  fferent text enc
e5f0: 6f 64 69 6e 67 73 29 0a 2a 2a 20 61 72 65 20 61  odings).** are a
e600: 76 61 69 6c 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  vailable..**.** 
e610: 43 61 6c 6c 69 6e 67 20 74 68 69 73 20 72 6f 75  Calling this rou
e620: 74 69 6e 65 20 72 65 67 69 73 74 65 72 73 20 74  tine registers t
e630: 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
e640: 75 65 6e 63 65 20 22 74 65 73 74 5f 63 6f 6c 6c  uence "test_coll
e650: 61 74 65 22 0a 2a 2a 20 77 69 74 68 20 64 61 74  ate".** with dat
e660: 61 62 61 73 65 20 68 61 6e 64 6c 65 20 3c 64 62  abase handle <db
e670: 3e 2e 20 54 68 65 20 73 65 63 6f 6e 64 20 61 72  >. The second ar
e680: 67 75 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 61  gument must be a
e690: 20 6c 69 73 74 20 6f 66 20 74 68 72 65 65 0a 2a   list of three.*
e6a0: 2a 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 73  * boolean values
e6b0: 2e 20 49 66 20 74 68 65 20 66 69 72 73 74 20 69  . If the first i
e6c0: 73 20 74 72 75 65 2c 20 74 68 65 6e 20 61 20 76  s true, then a v
e6d0: 65 72 73 69 6f 6e 20 6f 66 20 74 65 73 74 5f 63  ersion of test_c
e6e0: 6f 6c 6c 61 74 65 20 69 73 0a 2a 2a 20 72 65 67  ollate is.** reg
e6f0: 69 73 74 65 72 65 64 20 66 6f 72 20 55 54 46 2d  istered for UTF-
e700: 38 2c 20 69 66 20 74 68 65 20 73 65 63 6f 6e 64  8, if the second
e710: 20 69 73 20 74 72 75 65 2c 20 61 20 76 65 72 73   is true, a vers
e720: 69 6f 6e 20 69 73 20 72 65 67 69 73 74 65 72 65  ion is registere
e730: 64 20 66 6f 72 0a 2a 2a 20 55 54 46 2d 31 36 6c  d for.** UTF-16l
e740: 65 2c 20 69 66 20 74 68 65 20 74 68 69 72 64 20  e, if the third 
e750: 69 73 20 74 72 75 65 2c 20 61 20 55 54 46 2d 31  is true, a UTF-1
e760: 36 62 65 20 76 65 72 73 69 6f 6e 20 69 73 20 61  6be version is a
e770: 76 61 69 6c 61 62 6c 65 2e 0a 2a 2a 20 50 72 65  vailable..** Pre
e780: 76 69 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f  vious versions o
e790: 66 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 20 61  f test_collate a
e7a0: 72 65 20 64 65 6c 65 74 65 64 2e 0a 2a 2a 0a 2a  re deleted..**.*
e7b0: 2a 20 54 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20  * The collation 
e7c0: 73 65 71 75 65 6e 63 65 20 74 65 73 74 5f 63 6f  sequence test_co
e7d0: 6c 6c 61 74 65 20 69 73 20 69 6d 70 6c 65 6d 65  llate is impleme
e7e0: 6e 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20  nted by calling 
e7f0: 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67  the.** following
e800: 20 54 43 4c 20 73 63 72 69 70 74 3a 0a 2a 2a 0a   TCL script:.**.
e810: 2a 2a 20 20 20 22 74 65 73 74 5f 63 6f 6c 6c 61  **   "test_colla
e820: 74 65 20 3c 65 6e 63 3e 20 3c 6c 68 73 3e 20 3c  te <enc> <lhs> <
e830: 72 68 73 3e 22 0a 2a 2a 0a 2a 2a 20 54 68 65 20  rhs>".**.** The 
e840: 3c 6c 68 73 3e 20 61 6e 64 20 3c 72 68 73 3e 20  <lhs> and <rhs> 
e850: 61 72 65 20 74 68 65 20 74 77 6f 20 76 61 6c 75  are the two valu
e860: 65 73 20 62 65 69 6e 67 20 63 6f 6d 70 61 72 65  es being compare
e870: 64 2c 20 65 6e 63 6f 64 65 64 20 69 6e 20 55 54  d, encoded in UT
e880: 46 2d 38 2e 0a 2a 2a 20 54 68 65 20 3c 65 6e 63  F-8..** The <enc
e890: 3e 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 74  > parameter is t
e8a0: 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 74  he encoding of t
e8b0: 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e  he collation fun
e8c0: 63 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 53 51  ction that.** SQ
e8d0: 4c 69 74 65 20 73 65 6c 65 63 74 65 64 20 74 6f  Lite selected to
e8e0: 20 63 61 6c 6c 2e 20 54 68 65 20 54 43 4c 20 74   call. The TCL t
e8f0: 65 73 74 20 73 63 72 69 70 74 20 69 6d 70 6c 65  est script imple
e900: 6d 65 6e 74 73 20 74 68 65 0a 2a 2a 20 22 74 65  ments the.** "te
e910: 73 74 5f 63 6f 6c 6c 61 74 65 22 20 70 72 6f 63  st_collate" proc
e920: 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61  ..**.** Note tha
e930: 74 20 74 68 69 73 20 77 69 6c 6c 20 6f 6e 6c 79  t this will only
e940: 20 77 6f 72 6b 20 77 69 74 68 20 6f 6e 65 20 69   work with one i
e950: 6e 74 65 70 72 65 74 65 72 20 61 74 20 61 20 74  ntepreter at a t
e960: 69 6d 65 2c 20 61 73 20 74 68 65 0a 2a 2a 20 69  ime, as the.** i
e970: 6e 74 65 72 70 20 70 6f 69 6e 74 65 72 20 74 6f  nterp pointer to
e980: 20 75 73 65 20 77 68 65 6e 20 65 76 61 6c 75 61   use when evalua
e990: 74 69 6e 67 20 74 68 65 20 54 43 4c 20 73 63 72  ting the TCL scr
e9a0: 69 70 74 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ipt is stored in
e9b0: 0a 2a 2a 20 70 54 65 73 74 43 6f 6c 6c 61 74 65  .** pTestCollate
e9c0: 49 6e 74 65 72 70 2e 0a 2a 2f 0a 73 74 61 74 69  Interp..*/.stati
e9d0: 63 20 54 63 6c 5f 49 6e 74 65 72 70 2a 20 70 54  c Tcl_Interp* pT
e9e0: 65 73 74 43 6f 6c 6c 61 74 65 49 6e 74 65 72 70  estCollateInterp
e9f0: 3b 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  ;.static int tes
ea00: 74 5f 63 6f 6c 6c 61 74 65 5f 66 75 6e 63 28 0a  t_collate_func(.
ea10: 20 20 76 6f 69 64 20 2a 70 43 74 78 2c 20 0a 20    void *pCtx, . 
ea20: 20 69 6e 74 20 6e 41 2c 20 63 6f 6e 73 74 20 76   int nA, const v
ea30: 6f 69 64 20 2a 7a 41 2c 0a 20 20 69 6e 74 20 6e  oid *zA,.  int n
ea40: 42 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a  B, const void *z
ea50: 42 0a 29 7b 0a 20 20 54 63 6c 5f 49 6e 74 65 72  B.){.  Tcl_Inter
ea60: 70 20 2a 69 20 3d 20 70 54 65 73 74 43 6f 6c 6c  p *i = pTestColl
ea70: 61 74 65 49 6e 74 65 72 70 3b 0a 20 20 69 6e 74  ateInterp;.  int
ea80: 20 65 6e 63 69 6e 20 3d 20 28 69 6e 74 29 70 43   encin = (int)pC
ea90: 74 78 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  tx;.  int res;. 
eaa0: 20 69 6e 74 20 6e 3b 0a 0a 20 20 73 71 6c 69 74   int n;..  sqlit
eab0: 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 3b 0a  e3_value *pVal;.
eac0: 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 58 3b 0a 0a    Tcl_Obj *pX;..
ead0: 20 20 70 58 20 3d 20 54 63 6c 5f 4e 65 77 53 74    pX = Tcl_NewSt
eae0: 72 69 6e 67 4f 62 6a 28 22 74 65 73 74 5f 63 6f  ringObj("test_co
eaf0: 6c 6c 61 74 65 22 2c 20 2d 31 29 3b 0a 20 20 54  llate", -1);.  T
eb00: 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74 28  cl_IncrRefCount(
eb10: 70 58 29 3b 0a 0a 20 20 73 77 69 74 63 68 28 20  pX);..  switch( 
eb20: 65 6e 63 69 6e 20 29 7b 0a 20 20 20 20 63 61 73  encin ){.    cas
eb30: 65 20 53 51 4c 49 54 45 5f 55 54 46 38 3a 0a 20  e SQLITE_UTF8:. 
eb40: 20 20 20 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a       Tcl_ListObj
eb50: 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 2c  AppendElement(i,
eb60: 70 58 2c 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  pX,Tcl_NewString
eb70: 4f 62 6a 28 22 55 54 46 2d 38 22 2c 2d 31 29 29  Obj("UTF-8",-1))
eb80: 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
eb90: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 55     case SQLITE_U
eba0: 54 46 31 36 4c 45 3a 0a 20 20 20 20 20 20 54 63  TF16LE:.      Tc
ebb0: 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45  l_ListObjAppendE
ebc0: 6c 65 6d 65 6e 74 28 69 2c 70 58 2c 54 63 6c 5f  lement(i,pX,Tcl_
ebd0: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 55 54  NewStringObj("UT
ebe0: 46 2d 31 36 4c 45 22 2c 2d 31 29 29 3b 0a 20 20  F-16LE",-1));.  
ebf0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
ec00: 61 73 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36  ase SQLITE_UTF16
ec10: 42 45 3a 0a 20 20 20 20 20 20 54 63 6c 5f 4c 69  BE:.      Tcl_Li
ec20: 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65  stObjAppendEleme
ec30: 6e 74 28 69 2c 70 58 2c 54 63 6c 5f 4e 65 77 53  nt(i,pX,Tcl_NewS
ec40: 74 72 69 6e 67 4f 62 6a 28 22 55 54 46 2d 31 36  tringObj("UTF-16
ec50: 42 45 22 2c 2d 31 29 29 3b 0a 20 20 20 20 20 20  BE",-1));.      
ec60: 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75  break;.    defau
ec70: 6c 74 3a 0a 20 20 20 20 20 20 61 73 73 65 72 74  lt:.      assert
ec80: 28 30 29 3b 0a 20 20 7d 0a 0a 20 20 70 56 61 6c  (0);.  }..  pVal
ec90: 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65 4e   = sqlite3ValueN
eca0: 65 77 28 30 29 3b 0a 20 20 73 71 6c 69 74 65 33  ew(0);.  sqlite3
ecb0: 56 61 6c 75 65 53 65 74 53 74 72 28 70 56 61 6c  ValueSetStr(pVal
ecc0: 2c 20 6e 41 2c 20 7a 41 2c 20 65 6e 63 69 6e 2c  , nA, zA, encin,
ecd0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
ece0: 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 5f 76  .  n = sqlite3_v
ecf0: 61 6c 75 65 5f 62 79 74 65 73 28 70 56 61 6c 29  alue_bytes(pVal)
ed00: 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41  ;.  Tcl_ListObjA
ed10: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 2c 70  ppendElement(i,p
ed20: 58 2c 0a 20 20 20 20 20 20 54 63 6c 5f 4e 65 77  X,.      Tcl_New
ed30: 53 74 72 69 6e 67 4f 62 6a 28 28 63 68 61 72 2a  StringObj((char*
ed40: 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  )sqlite3_value_t
ed50: 65 78 74 28 70 56 61 6c 29 2c 6e 29 29 3b 0a 20  ext(pVal),n));. 
ed60: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74   sqlite3ValueSet
ed70: 53 74 72 28 70 56 61 6c 2c 20 6e 42 2c 20 7a 42  Str(pVal, nB, zB
ed80: 2c 20 65 6e 63 69 6e 2c 20 53 51 4c 49 54 45 5f  , encin, SQLITE_
ed90: 53 54 41 54 49 43 29 3b 0a 20 20 6e 20 3d 20 73  STATIC);.  n = s
eda0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74  qlite3_value_byt
edb0: 65 73 28 70 56 61 6c 29 3b 0a 20 20 54 63 6c 5f  es(pVal);.  Tcl_
edc0: 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65  ListObjAppendEle
edd0: 6d 65 6e 74 28 69 2c 70 58 2c 0a 20 20 20 20 20  ment(i,pX,.     
ede0: 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
edf0: 6a 28 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33  j((char*)sqlite3
ee00: 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 56 61 6c  _value_text(pVal
ee10: 29 2c 6e 29 29 3b 0a 20 20 73 71 6c 69 74 65 33  ),n));.  sqlite3
ee20: 56 61 6c 75 65 46 72 65 65 28 70 56 61 6c 29 3b  ValueFree(pVal);
ee30: 0a 0a 20 20 54 63 6c 5f 45 76 61 6c 4f 62 6a 45  ..  Tcl_EvalObjE
ee40: 78 28 69 2c 20 70 58 2c 20 30 29 3b 0a 20 20 54  x(i, pX, 0);.  T
ee50: 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28  cl_DecrRefCount(
ee60: 70 58 29 3b 0a 20 20 54 63 6c 5f 47 65 74 49 6e  pX);.  Tcl_GetIn
ee70: 74 46 72 6f 6d 4f 62 6a 28 69 2c 20 54 63 6c 5f  tFromObj(i, Tcl_
ee80: 47 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 29 2c  GetObjResult(i),
ee90: 20 26 72 65 73 29 3b 0a 20 20 72 65 74 75 72 6e   &res);.  return
eea0: 20 72 65 73 3b 0a 7d 0a 73 74 61 74 69 63 20 69   res;.}.static i
eeb0: 6e 74 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 28  nt test_collate(
eec0: 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
eed0: 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
eee0: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
eef0: 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
ef00: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
ef10: 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
ef20: 3b 0a 20 20 69 6e 74 20 76 61 6c 3b 0a 20 20 73  ;.  int val;.  s
ef30: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56  qlite3_value *pV
ef40: 61 6c 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20  al;.  int rc;.. 
ef50: 20 69 66 28 20 6f 62 6a 63 21 3d 35 20 29 20 67   if( objc!=5 ) g
ef60: 6f 74 6f 20 62 61 64 5f 61 72 67 73 3b 0a 20 20  oto bad_args;.  
ef70: 70 54 65 73 74 43 6f 6c 6c 61 74 65 49 6e 74 65  pTestCollateInte
ef80: 72 70 20 3d 20 69 6e 74 65 72 70 3b 0a 20 20 69  rp = interp;.  i
ef90: 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
efa0: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
efb0: 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
efc0: 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
efd0: 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 69 66 28 20  L_ERROR;..  if( 
efe0: 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 42  TCL_OK!=Tcl_GetB
eff0: 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e  ooleanFromObj(in
f000: 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26  terp, objv[2], &
f010: 76 61 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43  val) ) return TC
f020: 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20  L_ERROR;.  rc = 
f030: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63  sqlite3_create_c
f040: 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 22 74 65  ollation(db, "te
f050: 73 74 5f 63 6f 6c 6c 61 74 65 22 2c 20 53 51 4c  st_collate", SQL
f060: 49 54 45 5f 55 54 46 38 2c 20 0a 20 20 20 20 20  ITE_UTF8, .     
f070: 20 20 20 20 20 28 76 6f 69 64 20 2a 29 53 51 4c       (void *)SQL
f080: 49 54 45 5f 55 54 46 38 2c 20 76 61 6c 3f 74 65  ITE_UTF8, val?te
f090: 73 74 5f 63 6f 6c 6c 61 74 65 5f 66 75 6e 63 3a  st_collate_func:
f0a0: 30 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  0);.  if( rc==SQ
f0b0: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 69  LITE_OK ){.    i
f0c0: 66 28 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47  f( TCL_OK!=Tcl_G
f0d0: 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a  etBooleanFromObj
f0e0: 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d  (interp, objv[3]
f0f0: 2c 20 26 76 61 6c 29 20 29 20 72 65 74 75 72 6e  , &val) ) return
f100: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20   TCL_ERROR;.    
f110: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65  rc = sqlite3_cre
f120: 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62  ate_collation(db
f130: 2c 20 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22  , "test_collate"
f140: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  , SQLITE_UTF16LE
f150: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 28  , .            (
f160: 76 6f 69 64 20 2a 29 53 51 4c 49 54 45 5f 55 54  void *)SQLITE_UT
f170: 46 31 36 4c 45 2c 20 76 61 6c 3f 74 65 73 74 5f  F16LE, val?test_
f180: 63 6f 6c 6c 61 74 65 5f 66 75 6e 63 3a 30 29 3b  collate_func:0);
f190: 0a 20 20 20 20 69 66 28 20 54 43 4c 5f 4f 4b 21  .    if( TCL_OK!
f1a0: 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46  =Tcl_GetBooleanF
f1b0: 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
f1c0: 62 6a 76 5b 34 5d 2c 20 26 76 61 6c 29 20 29 20  bjv[4], &val) ) 
f1d0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
f1e0: 3b 0a 0a 23 69 66 20 30 0a 20 20 20 20 69 66 28  ;..#if 0.    if(
f1f0: 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63   sqlite3_iMalloc
f200: 46 61 69 6c 3e 30 20 29 7b 0a 20 20 20 20 20 20  Fail>0 ){.      
f210: 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46  sqlite3_iMallocF
f220: 61 69 6c 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e  ail++;.    }.#en
f230: 64 69 66 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  dif.    sqlite3_
f240: 6d 75 74 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e  mutex_enter(db->
f250: 6d 75 74 65 78 29 3b 0a 20 20 20 20 70 56 61 6c  mutex);.    pVal
f260: 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65 4e   = sqlite3ValueN
f270: 65 77 28 64 62 29 3b 0a 20 20 20 20 73 71 6c 69  ew(db);.    sqli
f280: 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 70  te3ValueSetStr(p
f290: 56 61 6c 2c 20 2d 31 2c 20 22 74 65 73 74 5f 63  Val, -1, "test_c
f2a0: 6f 6c 6c 61 74 65 22 2c 20 53 51 4c 49 54 45 5f  ollate", SQLITE_
f2b0: 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41  UTF8, SQLITE_STA
f2c0: 54 49 43 29 3b 0a 20 20 20 20 69 66 28 20 64 62  TIC);.    if( db
f2d0: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
f2e0: 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
f2f0: 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 7d  ITE_NOMEM;.    }
f300: 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d  else{.      rc =
f310: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
f320: 63 6f 6c 6c 61 74 69 6f 6e 31 36 28 64 62 2c 20  collation16(db, 
f330: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
f340: 65 33 56 61 6c 75 65 54 65 78 74 28 70 56 61 6c  e3ValueText(pVal
f350: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  , SQLITE_UTF16NA
f360: 54 49 56 45 29 2c 20 53 51 4c 49 54 45 5f 55 54  TIVE), SQLITE_UT
f370: 46 31 36 42 45 2c 20 0a 20 20 20 20 20 20 20 20  F16BE, .        
f380: 20 20 28 76 6f 69 64 20 2a 29 53 51 4c 49 54 45    (void *)SQLITE
f390: 5f 55 54 46 31 36 42 45 2c 20 76 61 6c 3f 74 65  _UTF16BE, val?te
f3a0: 73 74 5f 63 6f 6c 6c 61 74 65 5f 66 75 6e 63 3a  st_collate_func:
f3b0: 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  0);.    }.    sq
f3c0: 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 70  lite3ValueFree(p
f3d0: 56 61 6c 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Val);.    sqlite
f3e0: 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64 62  3_mutex_leave(db
f3f0: 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 7d 0a 20 20  ->mutex);.  }.  
f400: 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45  if( sqlite3TestE
f410: 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64  rrCode(interp, d
f420: 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20  b, rc) ) return 
f430: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 0a 20 20  TCL_ERROR;.  .  
f440: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
f450: 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  K ){.    Tcl_App
f460: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
f470: 2c 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72  , sqlite3TestErr
f480: 6f 72 4e 61 6d 65 28 72 63 29 2c 20 30 29 3b 0a  orName(rc), 0);.
f490: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
f4a0: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 65 74 75  RROR;.  }.  retu
f4b0: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 0a 62 61 64 5f  rn TCL_OK;..bad_
f4c0: 61 72 67 73 3a 0a 20 20 54 63 6c 5f 41 70 70 65  args:.  Tcl_Appe
f4d0: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
f4e0: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
f4f0: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20  should be \"",. 
f500: 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
f510: 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30  ngFromObj(objv[0
f520: 5d 2c 20 30 29 2c 20 22 20 3c 44 42 3e 20 3c 75  ], 0), " <DB> <u
f530: 74 66 38 3e 20 3c 75 74 66 31 36 6c 65 3e 20 3c  tf8> <utf16le> <
f540: 75 74 66 31 36 62 65 3e 22 2c 20 30 29 3b 0a 20  utf16be>", 0);. 
f550: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
f560: 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e  R;.}../*.** When
f570: 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 6e   the collation n
f580: 65 65 64 65 64 20 63 61 6c 6c 62 61 63 6b 20 69  eeded callback i
f590: 73 20 69 6e 76 6f 6b 65 64 2c 20 72 65 63 6f 72  s invoked, recor
f5a0: 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 0a 2a  d the name of .*
f5b0: 2a 20 74 68 65 20 72 65 71 75 65 73 74 65 64 20  * the requested 
f5c0: 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
f5d0: 6f 6e 20 68 65 72 65 2e 20 20 54 68 65 20 72 65  on here.  The re
f5e0: 63 6f 72 64 65 64 20 6e 61 6d 65 20 69 73 20 6c  corded name is l
f5f0: 69 6e 6b 65 64 0a 2a 2a 20 74 6f 20 61 20 54 43  inked.** to a TC
f600: 4c 20 76 61 72 69 61 62 6c 65 20 61 6e 64 20 75  L variable and u
f610: 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65  sed to make sure
f620: 20 74 68 61 74 20 74 68 65 20 72 65 71 75 65 73   that the reques
f630: 74 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 0a 2a 2a  ted collation.**
f640: 20 6e 61 6d 65 20 69 73 20 63 6f 72 72 65 63 74   name is correct
f650: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68 61 72  ..*/.static char
f660: 20 7a 4e 65 65 64 65 64 43 6f 6c 6c 61 74 69 6f   zNeededCollatio
f670: 6e 5b 32 30 30 5d 3b 0a 73 74 61 74 69 63 20 63  n[200];.static c
f680: 68 61 72 20 2a 70 7a 4e 65 65 64 65 64 43 6f 6c  har *pzNeededCol
f690: 6c 61 74 69 6f 6e 20 3d 20 7a 4e 65 65 64 65 64  lation = zNeeded
f6a0: 43 6f 6c 6c 61 74 69 6f 6e 3b 0a 0a 0a 2f 2a 0a  Collation;.../*.
f6b0: 2a 2a 20 43 61 6c 6c 65 64 20 77 68 65 6e 20 61  ** Called when a
f6c0: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
f6d0: 6e 63 65 20 69 73 20 6e 65 65 64 65 64 2e 20 20  nce is needed.  
f6e0: 52 65 67 69 73 74 65 72 65 64 20 75 73 69 6e 67  Registered using
f6f0: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 6c  .** sqlite3_coll
f700: 61 74 69 6f 6e 5f 6e 65 65 64 65 64 31 36 28 29  ation_needed16()
f710: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
f720: 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e 65   test_collate_ne
f730: 65 64 65 64 5f 63 62 28 0a 20 20 76 6f 69 64 20  eded_cb(.  void 
f740: 2a 70 43 74 78 2c 20 0a 20 20 73 71 6c 69 74 65  *pCtx, .  sqlite
f750: 33 20 2a 64 62 2c 0a 20 20 69 6e 74 20 65 54 65  3 *db,.  int eTe
f760: 78 74 52 65 70 2c 0a 20 20 63 6f 6e 73 74 20 76  xtRep,.  const v
f770: 6f 69 64 20 2a 70 4e 61 6d 65 0a 29 7b 0a 20 20  oid *pName.){.  
f780: 69 6e 74 20 65 6e 63 20 3d 20 45 4e 43 28 64 62  int enc = ENC(db
f790: 29 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63 68  );.  int i;.  ch
f7a0: 61 72 20 2a 7a 3b 0a 20 20 66 6f 72 28 7a 20 3d  ar *z;.  for(z =
f7b0: 20 28 63 68 61 72 2a 29 70 4e 61 6d 65 2c 20 69   (char*)pName, i
f7c0: 3d 30 3b 20 2a 7a 20 7c 7c 20 7a 5b 31 5d 3b 20  =0; *z || z[1]; 
f7d0: 7a 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 2a 7a  z++){.    if( *z
f7e0: 20 29 20 7a 4e 65 65 64 65 64 43 6f 6c 6c 61 74   ) zNeededCollat
f7f0: 69 6f 6e 5b 69 2b 2b 5d 20 3d 20 2a 7a 3b 0a 20  ion[i++] = *z;. 
f800: 20 7d 0a 20 20 7a 4e 65 65 64 65 64 43 6f 6c 6c   }.  zNeededColl
f810: 61 74 69 6f 6e 5b 69 5d 20 3d 20 30 3b 0a 20 20  ation[i] = 0;.  
f820: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63  sqlite3_create_c
f830: 6f 6c 6c 61 74 69 6f 6e 28 0a 20 20 20 20 20 20  ollation(.      
f840: 64 62 2c 20 22 74 65 73 74 5f 63 6f 6c 6c 61 74  db, "test_collat
f850: 65 22 2c 20 45 4e 43 28 64 62 29 2c 20 28 76 6f  e", ENC(db), (vo
f860: 69 64 20 2a 29 65 6e 63 2c 20 74 65 73 74 5f 63  id *)enc, test_c
f870: 6f 6c 6c 61 74 65 5f 66 75 6e 63 29 3b 0a 7d 0a  ollate_func);.}.
f880: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 61 64  ./*.** Usage: ad
f890: 64 5f 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e  d_test_collate_n
f8a0: 65 65 64 65 64 20 44 42 0a 2a 2f 0a 73 74 61 74  eeded DB.*/.stat
f8b0: 69 63 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c 6c  ic int test_coll
f8c0: 61 74 65 5f 6e 65 65 64 65 64 28 0a 20 20 76 6f  ate_needed(.  vo
f8d0: 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
f8e0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
f8f0: 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
f900: 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
f910: 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
f920: 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69  sqlite3 *db;.  i
f930: 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62  nt rc;..  if( ob
f940: 6a 63 21 3d 32 20 29 20 67 6f 74 6f 20 62 61 64  jc!=2 ) goto bad
f950: 5f 61 72 67 73 3b 0a 20 20 69 66 28 20 67 65 74  _args;.  if( get
f960: 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  DbPointer(interp
f970: 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
f980: 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29  objv[1]), &db) )
f990: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
f9a0: 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  R;.  rc = sqlite
f9b0: 33 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 6e 65 65 64  3_collation_need
f9c0: 65 64 31 36 28 64 62 2c 20 30 2c 20 74 65 73 74  ed16(db, 0, test
f9d0: 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64 5f  _collate_needed_
f9e0: 63 62 29 3b 0a 20 20 7a 4e 65 65 64 65 64 43 6f  cb);.  zNeededCo
f9f0: 6c 6c 61 74 69 6f 6e 5b 30 5d 20 3d 20 30 3b 0a  llation[0] = 0;.
fa00: 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73    if( sqlite3Tes
fa10: 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c  tErrCode(interp,
fa20: 20 64 62 2c 20 72 63 29 20 29 20 72 65 74 75 72   db, rc) ) retur
fa30: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72  n TCL_ERROR;.  r
fa40: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 0a 62  eturn TCL_OK;..b
fa50: 61 64 5f 61 72 67 73 3a 0a 20 20 54 63 6c 5f 57  ad_args:.  Tcl_W
fa60: 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65  rongNumArgs(inte
fa70: 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 44 42  rp, 1, objv, "DB
fa80: 22 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ");.  return TCL
fa90: 5f 45 52 52 4f 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  _ERROR;.}../*.**
faa0: 20 74 63 6c 63 6d 64 3a 20 20 20 61 64 64 5f 61   tclcmd:   add_a
fab0: 6c 69 67 6e 6d 65 6e 74 5f 74 65 73 74 5f 63 6f  lignment_test_co
fac0: 6c 6c 61 74 69 6f 6e 73 20 20 44 42 0a 2a 2a 0a  llations  DB.**.
fad0: 2a 2a 20 41 64 64 20 74 77 6f 20 6e 65 77 20 63  ** Add two new c
fae0: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
faf0: 65 73 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  es to the databa
fb00: 73 65 20 44 42 0a 2a 2a 0a 2a 2a 20 20 20 20 20  se DB.**.**     
fb10: 75 74 66 31 36 5f 61 6c 69 67 6e 65 64 0a 2a 2a  utf16_aligned.**
fb20: 20 20 20 20 20 75 74 66 31 36 5f 75 6e 61 6c 69       utf16_unali
fb30: 67 6e 65 64 0a 2a 2a 0a 2a 2a 20 42 6f 74 68 20  gned.**.** Both 
fb40: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
fb50: 63 65 73 20 75 73 65 20 74 68 65 20 73 61 6d 65  ces use the same
fb60: 20 73 6f 72 74 20 6f 72 64 65 72 20 61 73 20 42   sort order as B
fb70: 49 4e 41 52 59 2e 0a 2a 2a 20 54 68 65 20 6f 6e  INARY..** The on
fb80: 6c 79 20 64 69 66 66 65 72 65 6e 63 65 20 69 73  ly difference is
fb90: 20 74 68 61 74 20 74 68 65 20 75 74 66 31 36 5f   that the utf16_
fba0: 61 6c 69 67 6e 65 64 20 63 6f 6c 6c 61 74 69 6e  aligned collatin
fbb0: 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 69 73  g.** sequence is
fbc0: 20 64 65 63 6c 61 72 65 64 20 77 69 74 68 20 74   declared with t
fbd0: 68 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 5f  he SQLITE_UTF16_
fbe0: 41 4c 49 47 4e 45 44 20 66 6c 61 67 2e 0a 2a 2a  ALIGNED flag..**
fbf0: 20 42 6f 74 68 20 63 6f 6c 6c 61 74 69 6e 67 20   Both collating 
fc00: 66 75 6e 63 74 69 6f 6e 73 20 69 6e 63 72 65 6d  functions increm
fc10: 65 6e 74 20 74 68 65 20 75 6e 61 6c 69 67 6e 65  ent the unaligne
fc20: 64 20 75 74 66 31 36 20 63 6f 75 6e 74 65 72 0a  d utf16 counter.
fc30: 2a 2a 20 77 68 65 6e 65 76 65 72 20 74 68 65 79  ** whenever they
fc40: 20 73 65 65 20 61 20 73 74 72 69 6e 67 20 74 68   see a string th
fc50: 61 74 20 62 65 67 69 6e 73 20 6f 6e 20 61 6e 20  at begins on an 
fc60: 6f 64 64 20 62 79 74 65 20 62 6f 75 6e 64 61 72  odd byte boundar
fc70: 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  y..*/.static int
fc80: 20 75 6e 61 6c 69 67 6e 65 64 5f 73 74 72 69 6e   unaligned_strin
fc90: 67 5f 63 6f 75 6e 74 65 72 20 3d 20 30 3b 0a 73  g_counter = 0;.s
fca0: 74 61 74 69 63 20 69 6e 74 20 61 6c 69 67 6e 6d  tatic int alignm
fcb0: 65 6e 74 43 6f 6c 6c 46 75 6e 63 28 0a 20 20 76  entCollFunc(.  v
fcc0: 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20  oid *NotUsed,.  
fcd0: 69 6e 74 20 6e 4b 65 79 31 2c 20 63 6f 6e 73 74  int nKey1, const
fce0: 20 76 6f 69 64 20 2a 70 4b 65 79 31 2c 0a 20 20   void *pKey1,.  
fcf0: 69 6e 74 20 6e 4b 65 79 32 2c 20 63 6f 6e 73 74  int nKey2, const
fd00: 20 76 6f 69 64 20 2a 70 4b 65 79 32 0a 29 7b 0a   void *pKey2.){.
fd10: 20 20 69 6e 74 20 72 63 2c 20 6e 3b 0a 20 20 6e    int rc, n;.  n
fd20: 20 3d 20 6e 4b 65 79 31 3c 6e 4b 65 79 32 20 3f   = nKey1<nKey2 ?
fd30: 20 6e 4b 65 79 31 20 3a 20 6e 4b 65 79 32 3b 0a   nKey1 : nKey2;.
fd40: 20 20 69 66 28 20 6e 4b 65 79 31 3e 30 20 26 26    if( nKey1>0 &&
fd50: 20 31 3d 3d 28 31 26 28 69 6e 74 29 70 4b 65 79   1==(1&(int)pKey
fd60: 31 29 20 29 20 75 6e 61 6c 69 67 6e 65 64 5f 73  1) ) unaligned_s
fd70: 74 72 69 6e 67 5f 63 6f 75 6e 74 65 72 2b 2b 3b  tring_counter++;
fd80: 0a 20 20 69 66 28 20 6e 4b 65 79 32 3e 30 20 26  .  if( nKey2>0 &
fd90: 26 20 31 3d 3d 28 31 26 28 69 6e 74 29 70 4b 65  & 1==(1&(int)pKe
fda0: 79 32 29 20 29 20 75 6e 61 6c 69 67 6e 65 64 5f  y2) ) unaligned_
fdb0: 73 74 72 69 6e 67 5f 63 6f 75 6e 74 65 72 2b 2b  string_counter++
fdc0: 3b 0a 20 20 72 63 20 3d 20 6d 65 6d 63 6d 70 28  ;.  rc = memcmp(
fdd0: 70 4b 65 79 31 2c 20 70 4b 65 79 32 2c 20 6e 29  pKey1, pKey2, n)
fde0: 3b 0a 20 20 69 66 28 20 72 63 3d 3d 30 20 29 7b  ;.  if( rc==0 ){
fdf0: 0a 20 20 20 20 72 63 20 3d 20 6e 4b 65 79 31 20  .    rc = nKey1 
fe00: 2d 20 6e 4b 65 79 32 3b 0a 20 20 7d 0a 20 20 72  - nKey2;.  }.  r
fe10: 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 73 74 61 74  eturn rc;.}.stat
fe20: 69 63 20 69 6e 74 20 61 64 64 5f 61 6c 69 67 6e  ic int add_align
fe30: 6d 65 6e 74 5f 74 65 73 74 5f 63 6f 6c 6c 61 74  ment_test_collat
fe40: 69 6f 6e 73 28 0a 20 20 76 6f 69 64 20 2a 20 63  ions(.  void * c
fe50: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
fe60: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
fe70: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
fe80: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
fe90: 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
fea0: 33 20 2a 64 62 3b 0a 20 20 69 66 28 20 6f 62 6a  3 *db;.  if( obj
feb0: 63 3e 3d 32 20 29 7b 0a 20 20 20 20 69 66 28 20  c>=2 ){.    if( 
fec0: 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
fed0: 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
fee0: 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62  ng(objv[1]), &db
fef0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
ff00: 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74 65  RROR;.    sqlite
ff10: 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69  3_create_collati
ff20: 6f 6e 28 64 62 2c 20 22 75 74 66 31 36 5f 75 6e  on(db, "utf16_un
ff30: 61 6c 69 67 6e 65 64 22 2c 0a 20 20 20 20 20 20  aligned",.      
ff40: 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 2c 20    SQLITE_UTF16, 
ff50: 0a 20 20 20 20 20 20 20 20 30 2c 20 61 6c 69 67  .        0, alig
ff60: 6e 6d 65 6e 74 43 6f 6c 6c 46 75 6e 63 29 3b 0a  nmentCollFunc);.
ff70: 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61      sqlite3_crea
ff80: 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c  te_collation(db,
ff90: 20 22 75 74 66 31 36 5f 61 6c 69 67 6e 65 64 22   "utf16_aligned"
ffa0: 2c 0a 20 20 20 20 20 20 20 20 53 51 4c 49 54 45  ,.        SQLITE
ffb0: 5f 55 54 46 31 36 20 7c 20 53 51 4c 49 54 45 5f  _UTF16 | SQLITE_
ffc0: 55 54 46 31 36 5f 41 4c 49 47 4e 45 44 2c 20 0a  UTF16_ALIGNED, .
ffd0: 20 20 20 20 20 20 20 20 30 2c 20 61 6c 69 67 6e          0, align
ffe0: 6d 65 6e 74 43 6f 6c 6c 46 75 6e 63 29 3b 0a 20  mentCollFunc);. 
fff0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49   }.  return SQLI
10000 54 45 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 20  TE_OK;.}.#endif 
10010 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  /* !defined(SQLI
10020 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 29 20 2a  TE_OMIT_UTF16) *
10030 2f 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  /../*.** Usage: 
10040 61 64 64 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f  add_test_functio
10050 6e 20 3c 64 62 20 70 74 72 3e 20 3c 75 74 66 38  n <db ptr> <utf8
10060 3e 20 3c 75 74 66 31 36 6c 65 3e 20 3c 75 74 66  > <utf16le> <utf
10070 31 36 62 65 3e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  16be>.**.** This
10080 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65   function is use
10090 64 20 74 6f 20 74 65 73 74 20 74 68 61 74 20 53  d to test that S
100a0 51 4c 69 74 65 20 73 65 6c 65 63 74 73 20 74 68  QLite selects th
100b0 65 20 63 6f 72 72 65 63 74 20 75 73 65 72 0a 2a  e correct user.*
100c0 2a 20 66 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 62  * function callb
100d0 61 63 6b 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c  ack when multipl
100e0 65 20 76 65 72 73 69 6f 6e 73 20 28 66 6f 72 20  e versions (for 
100f0 64 69 66 66 65 72 65 6e 74 20 74 65 78 74 20 65  different text e
10100 6e 63 6f 64 69 6e 67 73 29 0a 2a 2a 20 61 72 65  ncodings).** are
10110 20 61 76 61 69 6c 61 62 6c 65 2e 0a 2a 2a 0a 2a   available..**.*
10120 2a 20 43 61 6c 6c 69 6e 67 20 74 68 69 73 20 72  * Calling this r
10130 6f 75 74 69 6e 65 20 72 65 67 69 73 74 65 72 73  outine registers
10140 20 75 70 20 74 6f 20 74 68 72 65 65 20 76 65 72   up to three ver
10150 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 75 73 65  sions of the use
10160 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 22 74  r function.** "t
10170 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22 20 77 69  est_function" wi
10180 74 68 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  th database hand
10190 6c 65 20 3c 64 62 3e 2e 20 20 49 66 20 74 68 65  le <db>.  If the
101a0 20 73 65 63 6f 6e 64 20 61 72 67 75 6d 65 6e 74   second argument
101b0 20 69 73 0a 2a 2a 20 74 72 75 65 2c 20 74 68 65   is.** true, the
101c0 6e 20 61 20 76 65 72 73 69 6f 6e 20 6f 66 20 74  n a version of t
101d0 65 73 74 5f 66 75 6e 63 74 69 6f 6e 20 69 73 20  est_function is 
101e0 72 65 67 69 73 74 65 72 65 64 20 66 6f 72 20 55  registered for U
101f0 54 46 2d 38 2c 20 69 66 20 74 68 65 0a 2a 2a 20  TF-8, if the.** 
10200 74 68 69 72 64 20 69 73 20 74 72 75 65 2c 20 61  third is true, a
10210 20 76 65 72 73 69 6f 6e 20 69 73 20 72 65 67 69   version is regi
10220 73 74 65 72 65 64 20 66 6f 72 20 55 54 46 2d 31  stered for UTF-1
10230 36 6c 65 2c 20 69 66 20 74 68 65 20 66 6f 75 72  6le, if the four
10240 74 68 20 69 73 0a 2a 2a 20 74 72 75 65 2c 20 61  th is.** true, a
10250 20 55 54 46 2d 31 36 62 65 20 76 65 72 73 69 6f   UTF-16be versio
10260 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20  n is available. 
10270 20 50 72 65 76 69 6f 75 73 20 76 65 72 73 69 6f   Previous versio
10280 6e 73 20 6f 66 0a 2a 2a 20 74 65 73 74 5f 66 75  ns of.** test_fu
10290 6e 63 74 69 6f 6e 20 61 72 65 20 64 65 6c 65 74  nction are delet
102a0 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75 73  ed..**.** The us
102b0 65 72 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69  er function is i
102c0 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 61  mplemented by ca
102d0 6c 6c 69 6e 67 20 74 68 65 20 66 6f 6c 6c 6f 77  lling the follow
102e0 69 6e 67 20 54 43 4c 20 73 63 72 69 70 74 3a 0a  ing TCL script:.
102f0 2a 2a 0a 2a 2a 20 20 20 22 74 65 73 74 5f 66 75  **.**   "test_fu
10300 6e 63 74 69 6f 6e 20 3c 65 6e 63 3e 20 3c 61 72  nction <enc> <ar
10310 67 3e 22 0a 2a 2a 0a 2a 2a 20 57 68 65 72 65 20  g>".**.** Where 
10320 3c 65 6e 63 3e 20 69 73 20 6f 6e 65 20 6f 66 20  <enc> is one of 
10330 55 54 46 2d 38 2c 20 55 54 46 2d 31 36 4c 45 20  UTF-8, UTF-16LE 
10340 6f 72 20 55 54 46 31 36 42 45 2c 20 61 6e 64 20  or UTF16BE, and 
10350 3c 61 72 67 3e 20 69 73 20 74 68 65 0a 2a 2a 20  <arg> is the.** 
10360 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 20  single argument 
10370 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 53 51  passed to the SQ
10380 4c 20 66 75 6e 63 74 69 6f 6e 2e 20 54 68 65 20  L function. The 
10390 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62  value returned b
103a0 79 0a 2a 2a 20 74 68 65 20 54 43 4c 20 73 63 72  y.** the TCL scr
103b0 69 70 74 20 69 73 20 75 73 65 64 20 61 73 20 74  ipt is used as t
103c0 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20  he return value 
103d0 6f 66 20 74 68 65 20 53 51 4c 20 66 75 6e 63 74  of the SQL funct
103e0 69 6f 6e 2e 20 49 74 0a 2a 2a 20 69 73 20 70 61  ion. It.** is pa
103f0 73 73 65 64 20 74 6f 20 53 51 4c 69 74 65 20 75  ssed to SQLite u
10400 73 69 6e 67 20 55 54 46 2d 31 36 42 45 20 66 6f  sing UTF-16BE fo
10410 72 20 61 20 55 54 46 2d 38 20 74 65 73 74 5f 66  r a UTF-8 test_f
10420 75 6e 63 74 69 6f 6e 28 29 2c 20 55 54 46 2d 38  unction(), UTF-8
10430 0a 2a 2a 20 66 6f 72 20 61 20 55 54 46 2d 31 36  .** for a UTF-16
10440 4c 45 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e  LE test_function
10450 28 29 2c 20 61 6e 64 20 55 54 46 2d 31 36 4c 45  (), and UTF-16LE
10460 20 66 6f 72 20 61 6e 20 69 6d 70 6c 65 6d 65 6e   for an implemen
10470 74 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 70  tation that.** p
10480 72 65 66 65 72 73 20 55 54 46 2d 31 36 42 45 2e  refers UTF-16BE.
10490 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
104a0 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 73 74  TE_OMIT_UTF16.st
104b0 61 74 69 63 20 76 6f 69 64 20 74 65 73 74 5f 66  atic void test_f
104c0 75 6e 63 74 69 6f 6e 5f 75 74 66 38 28 0a 20 20  unction_utf8(.  
104d0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
104e0 2a 70 43 74 78 2c 20 0a 20 20 69 6e 74 20 6e 41  *pCtx, .  int nA
104f0 72 67 2c 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  rg,.  sqlite3_va
10500 6c 75 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20  lue **argv.){.  
10510 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
10520 72 70 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70  rp;.  Tcl_Obj *p
10530 58 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  X;.  sqlite3_val
10540 75 65 20 2a 70 56 61 6c 3b 0a 20 20 69 6e 74 65  ue *pVal;.  inte
10550 72 70 20 3d 20 28 54 63 6c 5f 49 6e 74 65 72 70  rp = (Tcl_Interp
10560 20 2a 29 73 71 6c 69 74 65 33 5f 75 73 65 72 5f   *)sqlite3_user_
10570 64 61 74 61 28 70 43 74 78 29 3b 0a 20 20 70 58  data(pCtx);.  pX
10580 20 3d 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67   = Tcl_NewString
10590 4f 62 6a 28 22 74 65 73 74 5f 66 75 6e 63 74 69  Obj("test_functi
105a0 6f 6e 22 2c 20 2d 31 29 3b 0a 20 20 54 63 6c 5f  on", -1);.  Tcl_
105b0 49 6e 63 72 52 65 66 43 6f 75 6e 74 28 70 58 29  IncrRefCount(pX)
105c0 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41  ;.  Tcl_ListObjA
105d0 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74  ppendElement(int
105e0 65 72 70 2c 20 70 58 2c 20 54 63 6c 5f 4e 65 77  erp, pX, Tcl_New
105f0 53 74 72 69 6e 67 4f 62 6a 28 22 55 54 46 2d 38  StringObj("UTF-8
10600 22 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 4c  ", -1));.  Tcl_L
10610 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d  istObjAppendElem
10620 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 58 2c 20  ent(interp, pX, 
10630 0a 20 20 20 20 20 20 54 63 6c 5f 4e 65 77 53 74  .      Tcl_NewSt
10640 72 69 6e 67 4f 62 6a 28 28 63 68 61 72 2a 29 73  ringObj((char*)s
10650 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
10660 74 28 61 72 67 76 5b 30 5d 29 2c 20 2d 31 29 29  t(argv[0]), -1))
10670 3b 0a 20 20 54 63 6c 5f 45 76 61 6c 4f 62 6a 45  ;.  Tcl_EvalObjE
10680 78 28 69 6e 74 65 72 70 2c 20 70 58 2c 20 30 29  x(interp, pX, 0)
10690 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52 65 66 43  ;.  Tcl_DecrRefC
106a0 6f 75 6e 74 28 70 58 29 3b 0a 20 20 73 71 6c 69  ount(pX);.  sqli
106b0 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28  te3_result_text(
106c0 70 43 74 78 2c 20 54 63 6c 5f 47 65 74 53 74 72  pCtx, Tcl_GetStr
106d0 69 6e 67 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ingResult(interp
106e0 29 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 54 52  ), -1, SQLITE_TR
106f0 41 4e 53 49 45 4e 54 29 3b 0a 20 20 70 56 61 6c  ANSIENT);.  pVal
10700 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65 4e   = sqlite3ValueN
10710 65 77 28 30 29 3b 0a 20 20 73 71 6c 69 74 65 33  ew(0);.  sqlite3
10720 56 61 6c 75 65 53 65 74 53 74 72 28 70 56 61 6c  ValueSetStr(pVal
10730 2c 20 2d 31 2c 20 54 63 6c 5f 47 65 74 53 74 72  , -1, Tcl_GetStr
10740 69 6e 67 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ingResult(interp
10750 29 2c 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45  ), .      SQLITE
10760 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54  _UTF8, SQLITE_ST
10770 41 54 49 43 29 3b 0a 20 20 73 71 6c 69 74 65 33  ATIC);.  sqlite3
10780 5f 72 65 73 75 6c 74 5f 74 65 78 74 31 36 62 65  _result_text16be
10790 28 70 43 74 78 2c 20 73 71 6c 69 74 65 33 5f 76  (pCtx, sqlite3_v
107a0 61 6c 75 65 5f 74 65 78 74 31 36 62 65 28 70 56  alue_text16be(pV
107b0 61 6c 29 2c 0a 20 20 20 20 20 20 2d 31 2c 20 53  al),.      -1, S
107c0 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29  QLITE_TRANSIENT)
107d0 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65  ;.  sqlite3Value
107e0 46 72 65 65 28 70 56 61 6c 29 3b 0a 7d 0a 73 74  Free(pVal);.}.st
107f0 61 74 69 63 20 76 6f 69 64 20 74 65 73 74 5f 66  atic void test_f
10800 75 6e 63 74 69 6f 6e 5f 75 74 66 31 36 6c 65 28  unction_utf16le(
10810 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
10820 78 74 20 2a 70 43 74 78 2c 20 0a 20 20 69 6e 74  xt *pCtx, .  int
10830 20 6e 41 72 67 2c 0a 20 20 73 71 6c 69 74 65 33   nArg,.  sqlite3
10840 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76 0a 29 7b  _value **argv.){
10850 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
10860 6e 74 65 72 70 3b 0a 20 20 54 63 6c 5f 4f 62 6a  nterp;.  Tcl_Obj
10870 20 2a 70 58 3b 0a 20 20 73 71 6c 69 74 65 33 5f   *pX;.  sqlite3_
10880 76 61 6c 75 65 20 2a 70 56 61 6c 3b 0a 20 20 69  value *pVal;.  i
10890 6e 74 65 72 70 20 3d 20 28 54 63 6c 5f 49 6e 74  nterp = (Tcl_Int
108a0 65 72 70 20 2a 29 73 71 6c 69 74 65 33 5f 75 73  erp *)sqlite3_us
108b0 65 72 5f 64 61 74 61 28 70 43 74 78 29 3b 0a 20  er_data(pCtx);. 
108c0 20 70 58 20 3d 20 54 63 6c 5f 4e 65 77 53 74 72   pX = Tcl_NewStr
108d0 69 6e 67 4f 62 6a 28 22 74 65 73 74 5f 66 75 6e  ingObj("test_fun
108e0 63 74 69 6f 6e 22 2c 20 2d 31 29 3b 0a 20 20 54  ction", -1);.  T
108f0 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74 28  cl_IncrRefCount(
10900 70 58 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f  pX);.  Tcl_ListO
10910 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  bjAppendElement(
10920 69 6e 74 65 72 70 2c 20 70 58 2c 20 54 63 6c 5f  interp, pX, Tcl_
10930 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 55 54  NewStringObj("UT
10940 46 2d 31 36 4c 45 22 2c 20 2d 31 29 29 3b 0a 20  F-16LE", -1));. 
10950 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65   Tcl_ListObjAppe
10960 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70  ndElement(interp
10970 2c 20 70 58 2c 20 0a 20 20 20 20 20 20 54 63 6c  , pX, .      Tcl
10980 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 28 63  _NewStringObj((c
10990 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c  har*)sqlite3_val
109a0 75 65 5f 74 65 78 74 28 61 72 67 76 5b 30 5d 29  ue_text(argv[0])
109b0 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 45 76  , -1));.  Tcl_Ev
109c0 61 6c 4f 62 6a 45 78 28 69 6e 74 65 72 70 2c 20  alObjEx(interp, 
109d0 70 58 2c 20 30 29 3b 0a 20 20 54 63 6c 5f 44 65  pX, 0);.  Tcl_De
109e0 63 72 52 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a  crRefCount(pX);.
109f0 20 20 70 56 61 6c 20 3d 20 73 71 6c 69 74 65 33    pVal = sqlite3
10a00 56 61 6c 75 65 4e 65 77 28 30 29 3b 0a 20 20 73  ValueNew(0);.  s
10a10 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74  qlite3ValueSetSt
10a20 72 28 70 56 61 6c 2c 20 2d 31 2c 20 54 63 6c 5f  r(pVal, -1, Tcl_
10a30 47 65 74 53 74 72 69 6e 67 52 65 73 75 6c 74 28  GetStringResult(
10a40 69 6e 74 65 72 70 29 2c 20 0a 20 20 20 20 20 20  interp), .      
10a50 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
10a60 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 73  ITE_STATIC);.  s
10a70 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65  qlite3_result_te
10a80 78 74 28 70 43 74 78 2c 28 63 68 61 72 2a 29 73  xt(pCtx,(char*)s
10a90 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
10aa0 74 28 70 56 61 6c 29 2c 2d 31 2c 53 51 4c 49 54  t(pVal),-1,SQLIT
10ab0 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20  E_TRANSIENT);.  
10ac0 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65  sqlite3ValueFree
10ad0 28 70 56 61 6c 29 3b 0a 7d 0a 73 74 61 74 69 63  (pVal);.}.static
10ae0 20 76 6f 69 64 20 74 65 73 74 5f 66 75 6e 63 74   void test_funct
10af0 69 6f 6e 5f 75 74 66 31 36 62 65 28 0a 20 20 73  ion_utf16be(.  s
10b00 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
10b10 70 43 74 78 2c 20 0a 20 20 69 6e 74 20 6e 41 72  pCtx, .  int nAr
10b20 67 2c 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  g,.  sqlite3_val
10b30 75 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 54  ue **argv.){.  T
10b40 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
10b50 70 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 58  p;.  Tcl_Obj *pX
10b60 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  ;.  sqlite3_valu
10b70 65 20 2a 70 56 61 6c 3b 0a 20 20 69 6e 74 65 72  e *pVal;.  inter
10b80 70 20 3d 20 28 54 63 6c 5f 49 6e 74 65 72 70 20  p = (Tcl_Interp 
10b90 2a 29 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64  *)sqlite3_user_d
10ba0 61 74 61 28 70 43 74 78 29 3b 0a 20 20 70 58 20  ata(pCtx);.  pX 
10bb0 3d 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  = Tcl_NewStringO
10bc0 62 6a 28 22 74 65 73 74 5f 66 75 6e 63 74 69 6f  bj("test_functio
10bd0 6e 22 2c 20 2d 31 29 3b 0a 20 20 54 63 6c 5f 49  n", -1);.  Tcl_I
10be0 6e 63 72 52 65 66 43 6f 75 6e 74 28 70 58 29 3b  ncrRefCount(pX);
10bf0 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70  .  Tcl_ListObjAp
10c00 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65  pendElement(inte
10c10 72 70 2c 20 70 58 2c 20 54 63 6c 5f 4e 65 77 53  rp, pX, Tcl_NewS
10c20 74 72 69 6e 67 4f 62 6a 28 22 55 54 46 2d 31 36  tringObj("UTF-16
10c30 42 45 22 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c  BE", -1));.  Tcl
10c40 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
10c50 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 58  ement(interp, pX
10c60 2c 20 0a 20 20 20 20 20 20 54 63 6c 5f 4e 65 77  , .      Tcl_New
10c70 53 74 72 69 6e 67 4f 62 6a 28 28 63 68 61 72 2a  StringObj((char*
10c80 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  )sqlite3_value_t
10c90 65 78 74 28 61 72 67 76 5b 30 5d 29 2c 20 2d 31  ext(argv[0]), -1
10ca0 29 29 3b 0a 20 20 54 63 6c 5f 45 76 61 6c 4f 62  ));.  Tcl_EvalOb
10cb0 6a 45 78 28 69 6e 74 65 72 70 2c 20 70 58 2c 20  jEx(interp, pX, 
10cc0 30 29 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52 65  0);.  Tcl_DecrRe
10cd0 66 43 6f 75 6e 74 28 70 58 29 3b 0a 20 20 70 56  fCount(pX);.  pV
10ce0 61 6c 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75  al = sqlite3Valu
10cf0 65 4e 65 77 28 30 29 3b 0a 20 20 73 71 6c 69 74  eNew(0);.  sqlit
10d00 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 70 56  e3ValueSetStr(pV
10d10 61 6c 2c 20 2d 31 2c 20 54 63 6c 5f 47 65 74 53  al, -1, Tcl_GetS
10d20 74 72 69 6e 67 52 65 73 75 6c 74 28 69 6e 74 65  tringResult(inte
10d30 72 70 29 2c 20 0a 20 20 20 20 20 20 53 51 4c 49  rp), .      SQLI
10d40 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f  TE_UTF8, SQLITE_
10d50 53 54 41 54 49 43 29 3b 0a 20 20 73 71 6c 69 74  STATIC);.  sqlit
10d60 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 31 36  e3_result_text16
10d70 6c 65 28 70 43 74 78 2c 20 73 71 6c 69 74 65 33  le(pCtx, sqlite3
10d80 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 6c 65 28  _value_text16le(
10d90 70 56 61 6c 29 2c 0a 20 20 20 20 20 20 2d 31 2c  pVal),.      -1,
10da0 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
10db0 54 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c  T);.  sqlite3Val
10dc0 75 65 46 72 65 65 28 70 56 61 6c 29 3b 0a 7d 0a  ueFree(pVal);.}.
10dd0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
10de0 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 73  _OMIT_UTF16 */.s
10df0 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 66  tatic int test_f
10e00 75 6e 63 74 69 6f 6e 28 0a 20 20 76 6f 69 64 20  unction(.  void 
10e10 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
10e20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
10e30 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
10e40 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
10e50 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64   objv[].){.#ifnd
10e60 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
10e70 54 46 31 36 0a 20 20 73 71 6c 69 74 65 33 20 2a  TF16.  sqlite3 *
10e80 64 62 3b 0a 20 20 69 6e 74 20 76 61 6c 3b 0a 0a  db;.  int val;..
10e90 20 20 69 66 28 20 6f 62 6a 63 21 3d 35 20 29 20    if( objc!=5 ) 
10ea0 67 6f 74 6f 20 62 61 64 5f 61 72 67 73 3b 0a 20  goto bad_args;. 
10eb0 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
10ec0 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
10ed0 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
10ee0 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
10ef0 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 69 66  TCL_ERROR;..  if
10f00 28 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65  ( TCL_OK!=Tcl_Ge
10f10 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28  tBooleanFromObj(
10f20 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c  interp, objv[2],
10f30 20 26 76 61 6c 29 20 29 20 72 65 74 75 72 6e 20   &val) ) return 
10f40 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  TCL_ERROR;.  if(
10f50 20 76 61 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69   val ){.    sqli
10f60 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
10f70 69 6f 6e 28 64 62 2c 20 22 74 65 73 74 5f 66 75  ion(db, "test_fu
10f80 6e 63 74 69 6f 6e 22 2c 20 31 2c 20 53 51 4c 49  nction", 1, SQLI
10f90 54 45 5f 55 54 46 38 2c 20 0a 20 20 20 20 20 20  TE_UTF8, .      
10fa0 20 20 69 6e 74 65 72 70 2c 20 74 65 73 74 5f 66    interp, test_f
10fb0 75 6e 63 74 69 6f 6e 5f 75 74 66 38 2c 20 30 2c  unction_utf8, 0,
10fc0 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 54   0);.  }.  if( T
10fd0 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 42 6f  CL_OK!=Tcl_GetBo
10fe0 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74  oleanFromObj(int
10ff0 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 76  erp, objv[3], &v
11000 61 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  al) ) return TCL
11010 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 76 61  _ERROR;.  if( va
11020 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
11030 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
11040 28 64 62 2c 20 22 74 65 73 74 5f 66 75 6e 63 74  (db, "test_funct
11050 69 6f 6e 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f  ion", 1, SQLITE_
11060 55 54 46 31 36 4c 45 2c 20 0a 20 20 20 20 20 20  UTF16LE, .      
11070 20 20 69 6e 74 65 72 70 2c 20 74 65 73 74 5f 66    interp, test_f
11080 75 6e 63 74 69 6f 6e 5f 75 74 66 31 36 6c 65 2c  unction_utf16le,
11090 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66   0, 0);.  }.  if
110a0 28 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65  ( TCL_OK!=Tcl_Ge
110b0 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28  tBooleanFromObj(
110c0 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c  interp, objv[4],
110d0 20 26 76 61 6c 29 20 29 20 72 65 74 75 72 6e 20   &val) ) return 
110e0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  TCL_ERROR;.  if(
110f0 20 76 61 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69   val ){.    sqli
11100 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
11110 69 6f 6e 28 64 62 2c 20 22 74 65 73 74 5f 66 75  ion(db, "test_fu
11120 6e 63 74 69 6f 6e 22 2c 20 31 2c 20 53 51 4c 49  nction", 1, SQLI
11130 54 45 5f 55 54 46 31 36 42 45 2c 20 0a 20 20 20  TE_UTF16BE, .   
11140 20 20 20 20 20 69 6e 74 65 72 70 2c 20 74 65 73       interp, tes
11150 74 5f 66 75 6e 63 74 69 6f 6e 5f 75 74 66 31 36  t_function_utf16
11160 62 65 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 0a  be, 0, 0);.  }..
11170 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
11180 0a 62 61 64 5f 61 72 67 73 3a 0a 20 20 54 63 6c  .bad_args:.  Tcl
11190 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
111a0 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
111b0 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
111c0 22 22 2c 0a 20 20 20 20 20 20 54 63 6c 5f 47 65  "",.      Tcl_Ge
111d0 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f  tStringFromObj(o
111e0 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 3c 44  bjv[0], 0), " <D
111f0 42 3e 20 3c 75 74 66 38 3e 20 3c 75 74 66 31 36  B> <utf8> <utf16
11200 6c 65 3e 20 3c 75 74 66 31 36 62 65 3e 22 2c 20  le> <utf16be>", 
11210 30 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  0);.#endif /* SQ
11220 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
11230 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  */.  return TCL_
11240 45 52 52 4f 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  ERROR;.}../*.** 
11250 55 73 61 67 65 3a 20 20 20 20 20 20 20 20 20 74  Usage:         t
11260 65 73 74 5f 65 72 72 73 74 72 20 3c 65 72 72 20  est_errstr <err 
11270 63 6f 64 65 3e 0a 2a 2a 0a 2a 2a 20 54 65 73 74  code>.**.** Test
11280 20 74 68 61 74 20 74 68 65 20 65 6e 67 6c 69 73   that the englis
11290 68 20 6c 61 6e 67 75 61 67 65 20 73 74 72 69 6e  h language strin
112a0 67 20 65 71 75 69 76 61 6c 65 6e 74 73 20 66 6f  g equivalents fo
112b0 72 20 73 71 6c 69 74 65 20 65 72 72 6f 72 20 63  r sqlite error c
112c0 6f 64 65 73 0a 2a 2a 20 61 72 65 20 73 61 6e 65  odes.** are sane
112d0 2e 20 54 68 65 20 70 61 72 61 6d 65 74 65 72 20  . The parameter 
112e0 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  is an integer re
112f0 70 72 65 73 65 6e 74 69 6e 67 20 61 6e 20 73 71  presenting an sq
11300 6c 69 74 65 20 65 72 72 6f 72 20 63 6f 64 65 2e  lite error code.
11310 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 20 69  .** The result i
11320 73 20 61 20 6c 69 73 74 20 6f 66 20 74 77 6f 20  s a list of two 
11330 65 6c 65 6d 65 6e 74 73 2c 20 74 68 65 20 73 74  elements, the st
11340 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74  ring representat
11350 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 65 72  ion of the.** er
11360 72 6f 72 20 63 6f 64 65 20 61 6e 64 20 74 68 65  ror code and the
11370 20 65 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67   english languag
11380 65 20 65 78 70 6c 61 6e 61 74 69 6f 6e 2e 0a 2a  e explanation..*
11390 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
113a0 74 5f 65 72 72 73 74 72 28 0a 20 20 76 6f 69 64  t_errstr(.  void
113b0 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
113c0 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
113d0 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
113e0 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
113f0 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 63 68  T objv[].){.  ch
11400 61 72 20 2a 7a 43 6f 64 65 3b 0a 20 20 69 6e 74  ar *zCode;.  int
11410 20 69 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d   i;.  if( objc!=
11420 31 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f  1 ){.    Tcl_Wro
11430 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
11440 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 3c 65 72 72  , 1, objv, "<err
11450 6f 72 20 63 6f 64 65 3e 22 29 3b 0a 20 20 7d 0a  or code>");.  }.
11460 0a 20 20 7a 43 6f 64 65 20 3d 20 54 63 6c 5f 47  .  zCode = Tcl_G
11470 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
11480 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  );.  for(i=0; i<
11490 32 30 30 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  200; i++){.    i
114a0 66 28 20 30 3d 3d 73 74 72 63 6d 70 28 74 31 45  f( 0==strcmp(t1E
114b0 72 72 6f 72 4e 61 6d 65 28 69 29 2c 20 7a 43 6f  rrorName(i), zCo
114c0 64 65 29 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d  de) ) break;.  }
114d0 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74  .  Tcl_SetResult
114e0 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a  (interp, (char *
114f0 29 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 69  )sqlite3ErrStr(i
11500 29 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20  ), 0);.  return 
11510 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
11520 20 55 73 61 67 65 3a 20 20 20 20 62 72 65 61 6b   Usage:    break
11530 70 6f 69 6e 74 0a 2a 2a 0a 2a 2a 20 54 68 69 73  point.**.** This
11540 20 72 6f 75 74 69 6e 65 20 65 78 69 73 74 73 20   routine exists 
11550 66 6f 72 20 6f 6e 65 20 70 75 72 70 6f 73 65 20  for one purpose 
11560 2d 20 74 6f 20 70 72 6f 76 69 64 65 20 61 20 70  - to provide a p
11570 6c 61 63 65 20 74 6f 20 70 75 74 20 61 0a 2a 2a  lace to put a.**
11580 20 62 72 65 61 6b 70 6f 69 6e 74 20 77 69 74 68   breakpoint with
11590 20 47 44 42 20 74 68 61 74 20 63 61 6e 20 62 65   GDB that can be
115a0 20 74 72 69 67 67 65 72 65 64 20 75 73 69 6e 67   triggered using
115b0 20 54 43 4c 20 63 6f 64 65 2e 20 20 54 68 65 20   TCL code.  The 
115c0 75 73 65 0a 2a 2a 20 66 6f 72 20 74 68 69 73 20  use.** for this 
115d0 69 73 20 77 68 65 6e 20 61 20 70 61 72 74 69 63  is when a partic
115e0 75 6c 61 72 20 74 65 73 74 20 66 61 69 6c 73 20  ular test fails 
115f0 6f 6e 20 28 73 61 79 29 20 74 68 65 20 31 34 38  on (say) the 148
11600 35 74 68 20 69 74 65 72 61 74 69 6f 6e 2e 0a 2a  5th iteration..*
11610 2a 20 49 6e 20 74 68 65 20 54 43 4c 20 74 65 73  * In the TCL tes
11620 74 20 73 63 72 69 70 74 2c 20 77 65 20 63 61 6e  t script, we can
11630 20 61 64 64 20 63 6f 64 65 20 6c 69 6b 65 20 74   add code like t
11640 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 69  his:.**.**     i
11650 66 20 7b 24 69 3d 3d 31 34 38 35 7d 20 62 72 65  f {$i==1485} bre
11660 61 6b 70 6f 69 6e 74 0a 2a 2a 0a 2a 2a 20 54 68  akpoint.**.** Th
11670 65 6e 20 72 75 6e 20 74 65 73 74 66 69 78 74 75  en run testfixtu
11680 72 65 20 69 6e 20 74 68 65 20 64 65 62 75 67 67  re in the debugg
11690 65 72 20 61 6e 64 20 77 61 69 74 20 66 6f 72 20  er and wait for 
116a0 74 68 65 20 62 72 65 61 6b 70 6f 69 6e 74 20 74  the breakpoint t
116b0 6f 0a 2a 2a 20 66 69 72 65 2e 20 20 54 68 65 6e  o.** fire.  Then
116c0 20 61 64 64 69 74 69 6f 6e 61 6c 20 62 72 65 61   additional brea
116d0 6b 70 6f 69 6e 74 73 20 63 61 6e 20 62 65 20 73  kpoints can be s
116e0 65 74 20 74 6f 20 74 72 61 63 65 20 64 6f 77 6e  et to trace down
116f0 20 74 68 65 20 62 75 67 2e 0a 2a 2f 0a 73 74 61   the bug..*/.sta
11700 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 72 65  tic int test_bre
11710 61 6b 70 6f 69 6e 74 28 0a 20 20 76 6f 69 64 20  akpoint(.  void 
11720 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f  *NotUsed,.  Tcl_
11730 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
11740 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
11750 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
11760 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
11770 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67  and */.  int arg
11780 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
11790 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
117a0 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72  uments */.  char
117b0 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20   **argv         
117c0 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61     /* Text of ea
117d0 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29  ch argument */.)
117e0 7b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  {.  return TCL_O
117f0 4b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f  K;         /* Do
11800 20 6e 6f 74 68 69 6e 67 20 2a 2f 0a 7d 0a 0a 2f   nothing */.}../
11810 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71  *.** Usage:   sq
11820 6c 69 74 65 33 5f 62 69 6e 64 5f 7a 65 72 6f 62  lite3_bind_zerob
11830 6c 6f 62 20 20 53 54 4d 54 20 49 44 58 20 4e 0a  lob  STMT IDX N.
11840 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 73  **.** Test the s
11850 71 6c 69 74 65 33 5f 62 69 6e 64 5f 7a 65 72 6f  qlite3_bind_zero
11860 62 6c 6f 62 20 69 6e 74 65 72 66 61 63 65 2e 20  blob interface. 
11870 20 53 54 4d 54 20 69 73 20 61 20 70 72 65 70 61   STMT is a prepa
11880 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  red statement..*
11890 2a 20 49 44 58 20 69 73 20 74 68 65 20 69 6e 64  * IDX is the ind
118a0 65 78 20 6f 66 20 61 20 77 69 6c 64 63 61 72 64  ex of a wildcard
118b0 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
118c0 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 69   statement.  Thi
118d0 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e  s command.** bin
118e0 64 73 20 61 20 4e 2d 62 79 74 65 20 7a 65 72 6f  ds a N-byte zero
118f0 2d 66 69 6c 6c 65 64 20 42 4c 4f 42 20 74 6f 20  -filled BLOB to 
11900 74 68 65 20 77 69 6c 64 63 61 72 64 2e 0a 2a 2f  the wildcard..*/
11910 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
11920 5f 62 69 6e 64 5f 7a 65 72 6f 62 6c 6f 62 28 0a  _bind_zeroblob(.
11930 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
11940 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
11950 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
11960 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
11970 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
11980 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  {.  sqlite3_stmt
11990 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69   *pStmt;.  int i
119a0 64 78 3b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69  dx;.  int n;.  i
119b0 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62  nt rc;..  if( ob
119c0 6a 63 21 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=4 ){.    Tcl
119d0 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e  _WrongNumArgs(in
119e0 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22  terp, 1, objv, "
119f0 53 54 4d 54 20 49 44 58 20 4e 22 29 3b 0a 20 20  STMT IDX N");.  
11a00 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
11a10 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67  OR;.  }..  if( g
11a20 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e  etStmtPointer(in
11a30 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
11a40 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70  ing(objv[1]), &p
11a50 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
11a60 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
11a70 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62  Tcl_GetIntFromOb
11a80 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32  j(interp, objv[2
11a90 5d 2c 20 26 69 64 78 29 20 29 20 72 65 74 75 72  ], &idx) ) retur
11aa0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
11ab0 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f  f( Tcl_GetIntFro
11ac0 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
11ad0 76 5b 33 5d 2c 20 26 6e 29 20 29 20 72 65 74 75  v[3], &n) ) retu
11ae0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20  rn TCL_ERROR;.. 
11af0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69   rc = sqlite3_bi
11b00 6e 64 5f 7a 65 72 6f 62 6c 6f 62 28 70 53 74 6d  nd_zeroblob(pStm
11b10 74 2c 20 69 64 78 2c 20 6e 29 3b 0a 20 20 69 66  t, idx, n);.  if
11b20 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72  ( sqlite3TestErr
11b30 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 53 74 6d  Code(interp, Stm
11b40 74 54 6f 44 62 28 70 53 74 6d 74 29 2c 20 72 63  tToDb(pStmt), rc
11b50 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
11b60 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 63 21 3d  RROR;.  if( rc!=
11b70 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
11b80 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
11b90 52 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e  R;.  }..  return
11ba0 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
11bb0 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74  * Usage:   sqlit
11bc0 65 33 5f 62 69 6e 64 5f 69 6e 74 20 20 53 54 4d  e3_bind_int  STM
11bd0 54 20 4e 20 56 41 4c 55 45 0a 2a 2a 0a 2a 2a 20  T N VALUE.**.** 
11be0 54 65 73 74 20 74 68 65 20 73 71 6c 69 74 65 33  Test the sqlite3
11bf0 5f 62 69 6e 64 5f 69 6e 74 20 69 6e 74 65 72 66  _bind_int interf
11c00 61 63 65 2e 20 20 53 54 4d 54 20 69 73 20 61 20  ace.  STMT is a 
11c10 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
11c20 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20  nt..** N is the 
11c30 69 6e 64 65 78 20 6f 66 20 61 20 77 69 6c 64 63  index of a wildc
11c40 61 72 64 20 69 6e 20 74 68 65 20 70 72 65 70 61  ard in the prepa
11c50 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  red statement.  
11c60 54 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20  This command.** 
11c70 62 69 6e 64 73 20 61 20 33 32 2d 62 69 74 20 69  binds a 32-bit i
11c80 6e 74 65 67 65 72 20 56 41 4c 55 45 20 74 6f 20  nteger VALUE to 
11c90 74 68 61 74 20 77 69 6c 64 63 61 72 64 2e 0a 2a  that wildcard..*
11ca0 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
11cb0 74 5f 62 69 6e 64 5f 69 6e 74 28 0a 20 20 76 6f  t_bind_int(.  vo
11cc0 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
11cd0 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
11ce0 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
11cf0 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
11d00 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
11d10 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
11d20 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a  tmt;.  int idx;.
11d30 20 20 69 6e 74 20 76 61 6c 75 65 3b 0a 20 20 69    int value;.  i
11d40 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62  nt rc;..  if( ob
11d50 6a 63 21 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=4 ){.    Tcl
11d60 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
11d70 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
11d80 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
11d90 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f  "",.        Tcl_
11da0 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a  GetStringFromObj
11db0 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20  (objv[0], 0), " 
11dc0 53 54 4d 54 20 4e 20 56 41 4c 55 45 22 2c 20 30  STMT N VALUE", 0
11dd0 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
11de0 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
11df0 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  if( getStmtPoint
11e00 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
11e10 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
11e20 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74  ), &pStmt) ) ret
11e30 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
11e40 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46   if( Tcl_GetIntF
11e50 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
11e60 62 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20 29 20  bjv[2], &idx) ) 
11e70 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
11e80 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49  ;.  if( Tcl_GetI
11e90 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  ntFromObj(interp
11ea0 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 76 61 6c 75  , objv[3], &valu
11eb0 65 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  e) ) return TCL_
11ec0 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73  ERROR;..  rc = s
11ed0 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28  qlite3_bind_int(
11ee0 70 53 74 6d 74 2c 20 69 64 78 2c 20 76 61 6c 75  pStmt, idx, valu
11ef0 65 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  e);.  if( sqlite
11f00 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74  3TestErrCode(int
11f10 65 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53  erp, StmtToDb(pS
11f20 74 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74 75  tmt), rc) ) retu
11f30 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
11f40 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
11f50 4b 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  K ){.    return 
11f60 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
11f70 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
11f80 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  .}.../*.** Usage
11f90 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  :   sqlite3_bind
11fa0 5f 69 6e 74 36 34 20 20 53 54 4d 54 20 4e 20 56  _int64  STMT N V
11fb0 41 4c 55 45 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20  ALUE.**.** Test 
11fc0 74 68 65 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  the sqlite3_bind
11fd0 5f 69 6e 74 36 34 20 69 6e 74 65 72 66 61 63 65  _int64 interface
11fe0 2e 20 20 53 54 4d 54 20 69 73 20 61 20 70 72 65  .  STMT is a pre
11ff0 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e  pared statement.
12000 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20 69 6e 64  .** N is the ind
12010 65 78 20 6f 66 20 61 20 77 69 6c 64 63 61 72 64  ex of a wildcard
12020 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
12030 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 69   statement.  Thi
12040 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e  s command.** bin
12050 64 73 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65  ds a 64-bit inte
12060 67 65 72 20 56 41 4c 55 45 20 74 6f 20 74 68 61  ger VALUE to tha
12070 74 20 77 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73  t wildcard..*/.s
12080 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62  tatic int test_b
12090 69 6e 64 5f 69 6e 74 36 34 28 0a 20 20 76 6f 69  ind_int64(.  voi
120a0 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
120b0 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
120c0 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
120d0 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
120e0 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73  ST objv[].){.  s
120f0 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
12100 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20  mt;.  int idx;. 
12110 20 69 36 34 20 76 61 6c 75 65 3b 0a 20 20 69 6e   i64 value;.  in
12120 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  t rc;..  if( obj
12130 63 21 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=4 ){.    Tcl_
12140 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
12150 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
12160 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
12170 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47  ",.        Tcl_G
12180 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28  etStringFromObj(
12190 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 53  objv[0], 0), " S
121a0 54 4d 54 20 4e 20 56 41 4c 55 45 22 2c 20 30 29  TMT N VALUE", 0)
121b0 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
121c0 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69  _ERROR;.  }..  i
121d0 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
121e0 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
121f0 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
12200 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
12210 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
12220 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72  if( Tcl_GetIntFr
12230 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
12240 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20 29 20 72  jv[2], &idx) ) r
12250 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
12260 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 57 69  .  if( Tcl_GetWi
12270 64 65 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  deIntFromObj(int
12280 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 76  erp, objv[3], &v
12290 61 6c 75 65 29 20 29 20 72 65 74 75 72 6e 20 54  alue) ) return T
122a0 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20  CL_ERROR;..  rc 
122b0 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  = sqlite3_bind_i
122c0 6e 74 36 34 28 70 53 74 6d 74 2c 20 69 64 78 2c  nt64(pStmt, idx,
122d0 20 76 61 6c 75 65 29 3b 0a 20 20 69 66 28 20 73   value);.  if( s
122e0 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64  qlite3TestErrCod
122f0 65 28 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f  e(interp, StmtTo
12300 44 62 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29  Db(pStmt), rc) )
12310 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
12320 52 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  R;.  if( rc!=SQL
12330 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65  ITE_OK ){.    re
12340 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
12350 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54 43    }..  return TC
12360 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  L_OK;.}.../*.** 
12370 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33  Usage:   sqlite3
12380 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 20 20 53 54  _bind_double  ST
12390 4d 54 20 4e 20 56 41 4c 55 45 0a 2a 2a 0a 2a 2a  MT N VALUE.**.**
123a0 20 54 65 73 74 20 74 68 65 20 73 71 6c 69 74 65   Test the sqlite
123b0 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 20 69 6e  3_bind_double in
123c0 74 65 72 66 61 63 65 2e 20 20 53 54 4d 54 20 69  terface.  STMT i
123d0 73 20 61 20 70 72 65 70 61 72 65 64 20 73 74 61  s a prepared sta
123e0 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20  tement..** N is 
123f0 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20 77  the index of a w
12400 69 6c 64 63 61 72 64 20 69 6e 20 74 68 65 20 70  ildcard in the p
12410 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
12420 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64  t.  This command
12430 0a 2a 2a 20 62 69 6e 64 73 20 61 20 36 34 2d 62  .** binds a 64-b
12440 69 74 20 69 6e 74 65 67 65 72 20 56 41 4c 55 45  it integer VALUE
12450 20 74 6f 20 74 68 61 74 20 77 69 6c 64 63 61 72   to that wildcar
12460 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  d..*/.static int
12470 20 74 65 73 74 5f 62 69 6e 64 5f 64 6f 75 62 6c   test_bind_doubl
12480 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  e(.  void * clie
12490 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
124a0 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
124b0 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
124c0 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
124d0 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ].){.  sqlite3_s
124e0 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e  tmt *pStmt;.  in
124f0 74 20 69 64 78 3b 0a 20 20 64 6f 75 62 6c 65 20  t idx;.  double 
12500 76 61 6c 75 65 3b 0a 20 20 69 6e 74 20 72 63 3b  value;.  int rc;
12510 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 34 20  ..  if( objc!=4 
12520 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
12530 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
12540 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
12550 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20  hould be \"",.  
12560 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
12570 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b  ingFromObj(objv[
12580 30 5d 2c 20 30 29 2c 20 22 20 53 54 4d 54 20 4e  0], 0), " STMT N
12590 20 56 41 4c 55 45 22 2c 20 30 29 3b 0a 20 20 20   VALUE", 0);.   
125a0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
125b0 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65  R;.  }..  if( ge
125c0 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74  tStmtPointer(int
125d0 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
125e0 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53  ng(objv[1]), &pS
125f0 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43  tmt) ) return TC
12600 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54  L_ERROR;.  if( T
12610 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a  cl_GetIntFromObj
12620 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d  (interp, objv[2]
12630 2c 20 26 69 64 78 29 20 29 20 72 65 74 75 72 6e  , &idx) ) return
12640 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
12650 28 20 54 63 6c 5f 47 65 74 44 6f 75 62 6c 65 46  ( Tcl_GetDoubleF
12660 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
12670 62 6a 76 5b 33 5d 2c 20 26 76 61 6c 75 65 29 20  bjv[3], &value) 
12680 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
12690 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69  OR;..  rc = sqli
126a0 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28  te3_bind_double(
126b0 70 53 74 6d 74 2c 20 69 64 78 2c 20 76 61 6c 75  pStmt, idx, valu
126c0 65 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  e);.  if( sqlite
126d0 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74  3TestErrCode(int
126e0 65 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53  erp, StmtToDb(pS
126f0 74 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74 75  tmt), rc) ) retu
12700 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
12710 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
12720 4b 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  K ){.    return 
12730 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
12740 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
12750 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
12760 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f     sqlite3_bind_
12770 6e 75 6c 6c 20 20 53 54 4d 54 20 4e 0a 2a 2a 0a  null  STMT N.**.
12780 2a 2a 20 54 65 73 74 20 74 68 65 20 73 71 6c 69  ** Test the sqli
12790 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 20 69 6e  te3_bind_null in
127a0 74 65 72 66 61 63 65 2e 20 20 53 54 4d 54 20 69  terface.  STMT i
127b0 73 20 61 20 70 72 65 70 61 72 65 64 20 73 74 61  s a prepared sta
127c0 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20  tement..** N is 
127d0 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20 77  the index of a w
127e0 69 6c 64 63 61 72 64 20 69 6e 20 74 68 65 20 70  ildcard in the p
127f0 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
12800 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64  t.  This command
12810 0a 2a 2a 20 62 69 6e 64 73 20 61 20 4e 55 4c 4c  .** binds a NULL
12820 20 74 6f 20 74 68 65 20 77 69 6c 64 63 61 72 64   to the wildcard
12830 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
12840 74 65 73 74 5f 62 69 6e 64 5f 6e 75 6c 6c 28 0a  test_bind_null(.
12850 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
12860 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
12870 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
12880 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
12890 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
128a0 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  {.  sqlite3_stmt
128b0 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69   *pStmt;.  int i
128c0 64 78 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20  dx;.  int rc;.. 
128d0 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a   if( objc!=3 ){.
128e0 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
128f0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
12900 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
12910 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20  ld be \"",.     
12920 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
12930 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c  FromObj(objv[0],
12940 20 30 29 2c 20 22 20 53 54 4d 54 20 4e 22 2c 20   0), " STMT N", 
12950 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
12960 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
12970 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
12980 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
12990 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
129a0 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
129b0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
129c0 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
129d0 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
129e0 6f 62 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20 29  objv[2], &idx) )
129f0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
12a00 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  R;..  rc = sqlit
12a10 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 70 53 74  e3_bind_null(pSt
12a20 6d 74 2c 20 69 64 78 29 3b 0a 20 20 69 66 28 20  mt, idx);.  if( 
12a30 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f  sqlite3TestErrCo
12a40 64 65 28 69 6e 74 65 72 70 2c 20 53 74 6d 74 54  de(interp, StmtT
12a50 6f 44 62 28 70 53 74 6d 74 29 2c 20 72 63 29 20  oDb(pStmt), rc) 
12a60 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
12a70 4f 52 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51  OR;.  if( rc!=SQ
12a80 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
12a90 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
12aa0 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54  .  }..  return T
12ab0 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
12ac0 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33  Usage:   sqlite3
12ad0 5f 62 69 6e 64 5f 74 65 78 74 20 20 53 54 4d 54  _bind_text  STMT
12ae0 20 4e 20 53 54 52 49 4e 47 20 42 59 54 45 53 0a   N STRING BYTES.
12af0 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 73  **.** Test the s
12b00 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74  qlite3_bind_text
12b10 20 69 6e 74 65 72 66 61 63 65 2e 20 20 53 54 4d   interface.  STM
12b20 54 20 69 73 20 61 20 70 72 65 70 61 72 65 64 20  T is a prepared 
12b30 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20  statement..** N 
12b40 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
12b50 61 20 77 69 6c 64 63 61 72 64 20 69 6e 20 74 68  a wildcard in th
12b60 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
12b70 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d  ment.  This comm
12b80 61 6e 64 0a 2a 2a 20 62 69 6e 64 73 20 61 20 55  and.** binds a U
12b90 54 46 2d 38 20 73 74 72 69 6e 67 20 53 54 52 49  TF-8 string STRI
12ba0 4e 47 20 74 6f 20 74 68 65 20 77 69 6c 64 63 61  NG to the wildca
12bb0 72 64 2e 20 20 54 68 65 20 73 74 72 69 6e 67 20  rd.  The string 
12bc0 69 73 20 42 59 54 45 53 20 62 79 74 65 73 0a 2a  is BYTES bytes.*
12bd0 2a 20 6c 6f 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69  * long..*/.stati
12be0 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f  c int test_bind_
12bf0 74 65 78 74 28 0a 20 20 76 6f 69 64 20 2a 20 63  text(.  void * c
12c00 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
12c10 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
12c20 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
12c30 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
12c40 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
12c50 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
12c60 20 69 6e 74 20 69 64 78 3b 0a 20 20 69 6e 74 20   int idx;.  int 
12c70 62 79 74 65 73 3b 0a 20 20 63 68 61 72 20 2a 76  bytes;.  char *v
12c80 61 6c 75 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a  alue;.  int rc;.
12c90 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 35 20 29  .  if( objc!=5 )
12ca0 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
12cb0 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
12cc0 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
12cd0 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20  ould be \"",.   
12ce0 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
12cf0 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30  ngFromObj(objv[0
12d00 5d 2c 20 30 29 2c 20 22 20 53 54 4d 54 20 4e 20  ], 0), " STMT N 
12d10 56 41 4c 55 45 20 42 59 54 45 53 22 2c 20 30 29  VALUE BYTES", 0)
12d20 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
12d30 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69  _ERROR;.  }..  i
12d40 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
12d50 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
12d60 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
12d70 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
12d80 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
12d90 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72  if( Tcl_GetIntFr
12da0 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
12db0 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20 29 20 72  jv[2], &idx) ) r
12dc0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
12dd0 0a 20 20 76 61 6c 75 65 20 3d 20 54 63 6c 5f 47  .  value = Tcl_G
12de0 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 33 5d  etString(objv[3]
12df0 29 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  );.  if( Tcl_Get
12e00 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
12e10 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 26 62 79 74  p, objv[4], &byt
12e20 65 73 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  es) ) return TCL
12e30 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20  _ERROR;..  rc = 
12e40 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
12e50 74 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 76 61  t(pStmt, idx, va
12e60 6c 75 65 2c 20 62 79 74 65 73 2c 20 53 51 4c 49  lue, bytes, SQLI
12e70 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20  TE_TRANSIENT);. 
12e80 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74   if( sqlite3Test
12e90 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20  ErrCode(interp, 
12ea0 53 74 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 2c  StmtToDb(pStmt),
12eb0 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43   rc) ) return TC
12ec0 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72  L_ERROR;.  if( r
12ed0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
12ee0 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
12ef0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 73 71 6c  sult(interp, sql
12f00 69 74 65 33 54 65 73 74 45 72 72 6f 72 4e 61 6d  ite3TestErrorNam
12f10 65 28 72 63 29 2c 20 30 29 3b 0a 20 20 20 20 72  e(rc), 0);.    r
12f20 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
12f30 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54  .  }..  return T
12f40 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
12f50 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33  Usage:   sqlite3
12f60 5f 62 69 6e 64 5f 74 65 78 74 31 36 20 3f 2d 73  _bind_text16 ?-s
12f70 74 61 74 69 63 3f 20 53 54 4d 54 20 4e 20 53 54  tatic? STMT N ST
12f80 52 49 4e 47 20 42 59 54 45 53 0a 2a 2a 0a 2a 2a  RING BYTES.**.**
12f90 20 54 65 73 74 20 74 68 65 20 73 71 6c 69 74 65   Test the sqlite
12fa0 33 5f 62 69 6e 64 5f 74 65 78 74 31 36 20 69 6e  3_bind_text16 in
12fb0 74 65 72 66 61 63 65 2e 20 20 53 54 4d 54 20 69  terface.  STMT i
12fc0 73 20 61 20 70 72 65 70 61 72 65 64 20 73 74 61  s a prepared sta
12fd0 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20  tement..** N is 
12fe0 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20 77  the index of a w
12ff0 69 6c 64 63 61 72 64 20 69 6e 20 74 68 65 20 70  ildcard in the p
13000 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
13010 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64  t.  This command
13020 0a 2a 2a 20 62 69 6e 64 73 20 61 20 55 54 46 2d  .** binds a UTF-
13030 31 36 20 73 74 72 69 6e 67 20 53 54 52 49 4e 47  16 string STRING
13040 20 74 6f 20 74 68 65 20 77 69 6c 64 63 61 72 64   to the wildcard
13050 2e 20 20 54 68 65 20 73 74 72 69 6e 67 20 69 73  .  The string is
13060 20 42 59 54 45 53 20 62 79 74 65 73 0a 2a 2a 20   BYTES bytes.** 
13070 6c 6f 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  long..*/.static 
13080 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f 74 65  int test_bind_te
13090 78 74 31 36 28 0a 20 20 76 6f 69 64 20 2a 20 63  xt16(.  void * c
130a0 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
130b0 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
130c0 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
130d0 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
130e0 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20  jv[].){.#ifndef 
130f0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
13100 36 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  6.  sqlite3_stmt
13110 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69   *pStmt;.  int i
13120 64 78 3b 0a 20 20 69 6e 74 20 62 79 74 65 73 3b  dx;.  int bytes;
13130 0a 20 20 63 68 61 72 20 2a 76 61 6c 75 65 3b 0a  .  char *value;.
13140 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 76 6f 69    int rc;..  voi
13150 64 20 28 2a 78 44 65 6c 29 28 29 20 3d 20 28 6f  d (*xDel)() = (o
13160 62 6a 63 3d 3d 36 3f 53 51 4c 49 54 45 5f 53 54  bjc==6?SQLITE_ST
13170 41 54 49 43 3a 53 51 4c 49 54 45 5f 54 52 41 4e  ATIC:SQLITE_TRAN
13180 53 49 45 4e 54 29 3b 0a 20 20 54 63 6c 5f 4f 62  SIENT);.  Tcl_Ob
13190 6a 20 2a 6f 53 74 6d 74 20 20 20 20 3d 20 6f 62  j *oStmt    = ob
131a0 6a 76 5b 6f 62 6a 63 2d 34 5d 3b 0a 20 20 54 63  jv[objc-4];.  Tc
131b0 6c 5f 4f 62 6a 20 2a 6f 4e 20 20 20 20 20 20 20  l_Obj *oN       
131c0 3d 20 6f 62 6a 76 5b 6f 62 6a 63 2d 33 5d 3b 0a  = objv[objc-3];.
131d0 20 20 54 63 6c 5f 4f 62 6a 20 2a 6f 53 74 72 69    Tcl_Obj *oStri
131e0 6e 67 20 20 3d 20 6f 62 6a 76 5b 6f 62 6a 63 2d  ng  = objv[objc-
131f0 32 5d 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 6f  2];.  Tcl_Obj *o
13200 42 79 74 65 73 20 20 20 3d 20 6f 62 6a 76 5b 6f  Bytes   = objv[o
13210 62 6a 63 2d 31 5d 3b 0a 0a 20 20 69 66 28 20 6f  bjc-1];..  if( o
13220 62 6a 63 21 3d 35 20 26 26 20 6f 62 6a 63 21 3d  bjc!=5 && objc!=
13230 36 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65  6){.    Tcl_Appe
13240 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
13250 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
13260 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20  should be \"",. 
13270 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
13280 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76  ringFromObj(objv
13290 5b 30 5d 2c 20 30 29 2c 20 22 20 53 54 4d 54 20  [0], 0), " STMT 
132a0 4e 20 56 41 4c 55 45 20 42 59 54 45 53 22 2c 20  N VALUE BYTES", 
132b0 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
132c0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
132d0 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
132e0 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
132f0 47 65 74 53 74 72 69 6e 67 28 6f 53 74 6d 74 29  GetString(oStmt)
13300 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
13310 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
13320 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72  if( Tcl_GetIntFr
13330 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 4e  omObj(interp, oN
13340 2c 20 26 69 64 78 29 20 29 20 72 65 74 75 72 6e  , &idx) ) return
13350 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 76 61   TCL_ERROR;.  va
13360 6c 75 65 20 3d 20 28 63 68 61 72 2a 29 54 63 6c  lue = (char*)Tcl
13370 5f 47 65 74 42 79 74 65 41 72 72 61 79 46 72 6f  _GetByteArrayFro
13380 6d 4f 62 6a 28 6f 53 74 72 69 6e 67 2c 20 30 29  mObj(oString, 0)
13390 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49  ;.  if( Tcl_GetI
133a0 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  ntFromObj(interp
133b0 2c 20 6f 42 79 74 65 73 2c 20 26 62 79 74 65 73  , oBytes, &bytes
133c0 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
133d0 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71  RROR;..  rc = sq
133e0 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 31  lite3_bind_text1
133f0 36 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 28 76  6(pStmt, idx, (v
13400 6f 69 64 20 2a 29 76 61 6c 75 65 2c 20 62 79 74  oid *)value, byt
13410 65 73 2c 20 78 44 65 6c 29 3b 0a 20 20 69 66 28  es, xDel);.  if(
13420 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43   sqlite3TestErrC
13430 6f 64 65 28 69 6e 74 65 72 70 2c 20 53 74 6d 74  ode(interp, Stmt
13440 54 6f 44 62 28 70 53 74 6d 74 29 2c 20 72 63 29  ToDb(pStmt), rc)
13450 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
13460 52 4f 52 3b 0a 20 20 69 66 28 20 72 63 21 3d 53  ROR;.  if( rc!=S
13470 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
13480 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
13490 3b 0a 20 20 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a  ;.  }..#endif /*
134a0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
134b0 31 36 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54  16 */.  return T
134c0 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
134d0 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33  Usage:   sqlite3
134e0 5f 62 69 6e 64 5f 62 6c 6f 62 20 3f 2d 73 74 61  _bind_blob ?-sta
134f0 74 69 63 3f 20 53 54 4d 54 20 4e 20 44 41 54 41  tic? STMT N DATA
13500 20 42 59 54 45 53 0a 2a 2a 0a 2a 2a 20 54 65 73   BYTES.**.** Tes
13510 74 20 74 68 65 20 73 71 6c 69 74 65 33 5f 62 69  t the sqlite3_bi
13520 6e 64 5f 62 6c 6f 62 20 69 6e 74 65 72 66 61 63  nd_blob interfac
13530 65 2e 20 20 53 54 4d 54 20 69 73 20 61 20 70 72  e.  STMT is a pr
13540 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
13550 2e 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20 69 6e  ..** N is the in
13560 64 65 78 20 6f 66 20 61 20 77 69 6c 64 63 61 72  dex of a wildcar
13570 64 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65  d in the prepare
13580 64 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  d statement.  Th
13590 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69  is command.** bi
135a0 6e 64 73 20 61 20 42 4c 4f 42 20 74 6f 20 74 68  nds a BLOB to th
135b0 65 20 77 69 6c 64 63 61 72 64 2e 20 20 54 68 65  e wildcard.  The
135c0 20 42 4c 4f 42 20 69 73 20 42 59 54 45 53 20 62   BLOB is BYTES b
135d0 79 74 65 73 20 69 6e 20 73 69 7a 65 2e 0a 2a 2f  ytes in size..*/
135e0 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
135f0 5f 62 69 6e 64 5f 62 6c 6f 62 28 0a 20 20 76 6f  _bind_blob(.  vo
13600 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
13610 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
13620 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
13630 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
13640 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
13650 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
13660 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a  tmt;.  int idx;.
13670 20 20 69 6e 74 20 62 79 74 65 73 3b 0a 20 20 63    int bytes;.  c
13680 68 61 72 20 2a 76 61 6c 75 65 3b 0a 20 20 69 6e  har *value;.  in
13690 74 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f  t rc;.  sqlite3_
136a0 64 65 73 74 72 75 63 74 6f 72 5f 74 79 70 65 20  destructor_type 
136b0 78 44 65 73 74 72 75 63 74 6f 72 20 3d 20 53 51  xDestructor = SQ
136c0 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 3b 0a  LITE_TRANSIENT;.
136d0 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 35 20 26  .  if( objc!=5 &
136e0 26 20 6f 62 6a 63 21 3d 36 20 29 7b 0a 20 20 20  & objc!=6 ){.   
136f0 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
13700 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
13710 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
13720 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20  be \"",.        
13730 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f  Tcl_GetStringFro
13740 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29  mObj(objv[0], 0)
13750 2c 20 22 20 53 54 4d 54 20 4e 20 44 41 54 41 20  , " STMT N DATA 
13760 42 59 54 45 53 22 2c 20 30 29 3b 0a 20 20 20 20  BYTES", 0);.    
13770 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
13780 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 6f 62 6a  ;.  }..  if( obj
13790 63 3d 3d 36 20 29 7b 0a 20 20 20 20 78 44 65 73  c==6 ){.    xDes
137a0 74 72 75 63 74 6f 72 20 3d 20 53 51 4c 49 54 45  tructor = SQLITE
137b0 5f 53 54 41 54 49 43 3b 0a 20 20 20 20 6f 62 6a  _STATIC;.    obj
137c0 76 2b 2b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  v++;.  }..  if( 
137d0 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69  getStmtPointer(i
137e0 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
137f0 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
13800 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20  pStmt) ) return 
13810 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  TCL_ERROR;.  if(
13820 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f   Tcl_GetIntFromO
13830 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
13840 32 5d 2c 20 26 69 64 78 29 20 29 20 72 65 74 75  2], &idx) ) retu
13850 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
13860 76 61 6c 75 65 20 3d 20 54 63 6c 5f 47 65 74 53  value = Tcl_GetS
13870 74 72 69 6e 67 28 6f 62 6a 76 5b 33 5d 29 3b 0a  tring(objv[3]);.
13880 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
13890 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
138a0 6f 62 6a 76 5b 34 5d 2c 20 26 62 79 74 65 73 29  objv[4], &bytes)
138b0 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
138c0 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c  ROR;..  rc = sql
138d0 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 70  ite3_bind_blob(p
138e0 53 74 6d 74 2c 20 69 64 78 2c 20 76 61 6c 75 65  Stmt, idx, value
138f0 2c 20 62 79 74 65 73 2c 20 78 44 65 73 74 72 75  , bytes, xDestru
13900 63 74 6f 72 29 3b 0a 20 20 69 66 28 20 73 71 6c  ctor);.  if( sql
13910 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28  ite3TestErrCode(
13920 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62  interp, StmtToDb
13930 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29 20 72  (pStmt), rc) ) r
13940 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
13950 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
13960 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74 75  E_OK ){.    retu
13970 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
13980 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  }..  return TCL_
13990 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
139a0 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69  ge:   sqlite3_bi
139b0 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f 75  nd_parameter_cou
139c0 6e 74 20 20 53 54 4d 54 0a 2a 2a 0a 2a 2a 20 52  nt  STMT.**.** R
139d0 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
139e0 20 6f 66 20 77 69 6c 64 63 61 72 64 73 20 69 6e   of wildcards in
139f0 20 74 68 65 20 67 69 76 65 6e 20 73 74 61 74 65   the given state
13a00 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ment..*/.static 
13a10 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f 70 61  int test_bind_pa
13a20 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 28 0a 20  rameter_count(. 
13a30 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
13a40 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
13a50 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
13a60 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
13a70 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
13a80 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
13a90 2a 70 53 74 6d 74 3b 0a 0a 20 20 69 66 28 20 6f  *pStmt;..  if( o
13aa0 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  bjc!=2 ){.    Tc
13ab0 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69  l_WrongNumArgs(i
13ac0 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20  nterp, 1, objv, 
13ad0 22 53 54 4d 54 22 29 3b 0a 20 20 20 20 72 65 74  "STMT");.    ret
13ae0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
13af0 20 7d 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74   }.  if( getStmt
13b00 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
13b10 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
13b20 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20  jv[1]), &pStmt) 
13b30 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
13b40 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a  OR;.  Tcl_SetObj
13b50 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
13b60 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c  cl_NewIntObj(sql
13b70 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
13b80 74 65 72 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29  ter_count(pStmt)
13b90 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ));.  return TCL
13ba0 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
13bb0 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 62  age:   sqlite3_b
13bc0 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61  ind_parameter_na
13bd0 6d 65 20 20 53 54 4d 54 20 20 4e 0a 2a 2a 0a 2a  me  STMT  N.**.*
13be0 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61 6d  * Return the nam
13bf0 65 20 6f 66 20 74 68 65 20 4e 74 68 20 77 69 6c  e of the Nth wil
13c00 64 63 61 72 64 2e 20 20 54 68 65 20 66 69 72 73  dcard.  The firs
13c10 74 20 77 69 6c 64 63 61 72 64 20 69 73 20 31 2e  t wildcard is 1.
13c20 0a 2a 2a 20 41 6e 20 65 6d 70 74 79 20 73 74 72  .** An empty str
13c30 69 6e 67 20 69 73 20 72 65 74 75 72 6e 65 64 20  ing is returned 
13c40 69 66 20 4e 20 69 73 20 6f 75 74 20 6f 66 20 72  if N is out of r
13c50 61 6e 67 65 20 6f 72 20 69 66 20 74 68 65 20 77  ange or if the w
13c60 69 6c 64 63 61 72 64 0a 2a 2a 20 69 73 20 6e 61  ildcard.** is na
13c70 6d 65 6c 65 73 73 2e 0a 2a 2f 0a 73 74 61 74 69  meless..*/.stati
13c80 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f  c int test_bind_
13c90 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 0a  parameter_name(.
13ca0 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
13cb0 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
13cc0 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
13cd0 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
13ce0 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
13cf0 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  {.  sqlite3_stmt
13d00 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69   *pStmt;.  int i
13d10 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33  ;..  if( objc!=3
13d20 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e   ){.    Tcl_Wron
13d30 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c  gNumArgs(interp,
13d40 20 31 2c 20 6f 62 6a 76 2c 20 22 53 54 4d 54 20   1, objv, "STMT 
13d50 4e 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  N");.    return 
13d60 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
13d70 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
13d80 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
13d90 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
13da0 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
13db0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
13dc0 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
13dd0 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
13de0 6f 62 6a 76 5b 32 5d 2c 20 26 69 29 20 29 20 72  objv[2], &i) ) r
13df0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
13e00 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  .  Tcl_SetObjRes
13e10 75 6c 74 28 69 6e 74 65 72 70 2c 20 0a 20 20 20  ult(interp, .   
13e20 20 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f    Tcl_NewStringO
13e30 62 6a 28 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  bj(sqlite3_bind_
13e40 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 70  parameter_name(p
13e50 53 74 6d 74 2c 69 29 2c 2d 31 29 0a 20 20 29 3b  Stmt,i),-1).  );
13e60 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
13e70 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
13e80 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  :   sqlite3_bind
13e90 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78  _parameter_index
13ea0 20 20 53 54 4d 54 20 20 4e 41 4d 45 0a 2a 2a 0a    STMT  NAME.**.
13eb0 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 69 6e  ** Return the in
13ec0 64 65 78 20 6f 66 20 74 68 65 20 77 69 6c 64 63  dex of the wildc
13ed0 61 72 64 20 63 61 6c 6c 65 64 20 4e 41 4d 45 2e  ard called NAME.
13ee0 20 20 52 65 74 75 72 6e 20 30 20 69 66 20 74 68    Return 0 if th
13ef0 65 72 65 20 69 73 0a 2a 2a 20 6e 6f 20 73 75 63  ere is.** no suc
13f00 68 20 77 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73  h wildcard..*/.s
13f10 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62  tatic int test_b
13f20 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e  ind_parameter_in
13f30 64 65 78 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  dex(.  void * cl
13f40 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
13f50 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
13f60 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
13f70 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
13f80 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
13f90 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 0a 20  _stmt *pStmt;.. 
13fa0 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a   if( objc!=3 ){.
13fb0 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d      Tcl_WrongNum
13fc0 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20  Args(interp, 1, 
13fd0 6f 62 6a 76 2c 20 22 53 54 4d 54 20 4e 41 4d 45  objv, "STMT NAME
13fe0 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  ");.    return T
13ff0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
14000 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  if( getStmtPoint
14010 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
14020 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
14030 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74  ), &pStmt) ) ret
14040 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
14050 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c   Tcl_SetObjResul
14060 74 28 69 6e 74 65 72 70 2c 20 0a 20 20 20 20 20  t(interp, .     
14070 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 0a 20  Tcl_NewIntObj(. 
14080 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69        sqlite3_bi
14090 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64  nd_parameter_ind
140a0 65 78 28 70 53 74 6d 74 2c 54 63 6c 5f 47 65 74  ex(pStmt,Tcl_Get
140b0 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 29  String(objv[2]))
140c0 0a 20 20 20 20 20 29 0a 20 20 29 3b 0a 20 20 72  .     ).  );.  r
140d0 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
140e0 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20  ./*.** Usage:   
140f0 73 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f 62 69  sqlite3_clear_bi
14100 6e 64 69 6e 67 73 20 53 54 4d 54 0a 2a 2a 0a 2a  ndings STMT.**.*
14110 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
14120 74 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73  t_clear_bindings
14130 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
14140 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
14150 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
14160 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
14170 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
14180 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  .){.  sqlite3_st
14190 6d 74 20 2a 70 53 74 6d 74 3b 0a 0a 20 20 69 66  mt *pStmt;..  if
141a0 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
141b0 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67   Tcl_WrongNumArg
141c0 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a  s(interp, 1, obj
141d0 76 2c 20 22 53 54 4d 54 22 29 3b 0a 20 20 20 20  v, "STMT");.    
141e0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
141f0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 53  ;.  }.  if( getS
14200 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tmtPointer(inter
14210 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
14220 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d  (objv[1]), &pStm
14230 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  t) ) return TCL_
14240 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74  ERROR;.  Tcl_Set
14250 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
14260 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28  , Tcl_NewIntObj(
14270 73 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f 62 69  sqlite3_clear_bi
14280 6e 64 69 6e 67 73 28 70 53 74 6d 74 29 29 29 3b  ndings(pStmt)));
14290 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
142a0 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
142b0 3a 20 20 20 73 71 6c 69 74 65 33 5f 73 6c 65 65  :   sqlite3_slee
142c0 70 20 4d 49 4c 4c 49 53 45 43 4f 4e 44 53 0a 2a  p MILLISECONDS.*
142d0 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
142e0 74 5f 73 6c 65 65 70 28 0a 20 20 76 6f 69 64 20  t_sleep(.  void 
142f0 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
14300 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
14310 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
14320 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
14330 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 69 6e 74   objv[].){.  int
14340 20 6d 73 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63   ms;..  if( objc
14350 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57  !=2 ){.    Tcl_W
14360 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65  rongNumArgs(inte
14370 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 4d 49  rp, 1, objv, "MI
14380 4c 4c 49 53 45 43 4f 4e 44 53 22 29 3b 0a 20 20  LLISECONDS");.  
14390 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
143a0 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 54 63  OR;.  }.  if( Tc
143b0 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
143c0 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c  interp, objv[1],
143d0 20 26 6d 73 29 20 29 7b 0a 20 20 20 20 72 65 74   &ms) ){.    ret
143e0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
143f0 20 7d 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52   }.  Tcl_SetObjR
14400 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
14410 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69  l_NewIntObj(sqli
14420 74 65 33 5f 73 6c 65 65 70 28 6d 73 29 29 29 3b  te3_sleep(ms)));
14430 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
14440 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
14450 3a 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64  : sqlite3_errcod
14460 65 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72  e DB.**.** Retur
14470 6e 20 74 68 65 20 73 74 72 69 6e 67 20 72 65 70  n the string rep
14480 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
14490 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 73  he most recent s
144a0 71 6c 69 74 65 33 5f 2a 20 41 50 49 0a 2a 2a 20  qlite3_* API.** 
144b0 65 72 72 6f 72 20 63 6f 64 65 2e 20 65 2e 67 2e  error code. e.g.
144c0 20 22 53 51 4c 49 54 45 5f 45 52 52 4f 52 22 2e   "SQLITE_ERROR".
144d0 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
144e0 65 73 74 5f 65 72 72 63 6f 64 65 28 0a 20 20 76  est_errcode(.  v
144f0 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
14500 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
14510 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
14520 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
14530 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
14540 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
14550 69 6e 74 20 72 63 3b 0a 20 20 63 68 61 72 20 7a  int rc;.  char z
14560 42 75 66 5b 33 30 5d 3b 0a 0a 20 20 69 66 28 20  Buf[30];..  if( 
14570 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  objc!=2 ){.    T
14580 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
14590 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
145a0 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
145b0 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63   \"", .       Tc
145c0 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
145d0 5b 30 5d 29 2c 20 22 20 44 42 22 2c 20 30 29 3b  [0]), " DB", 0);
145e0 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
145f0 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
14600 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e   getDbPointer(in
14610 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
14620 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64  ing(objv[1]), &d
14630 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
14640 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71  ERROR;.  rc = sq
14650 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28 64 62  lite3_errcode(db
14660 29 3b 0a 20 20 69 66 28 20 28 72 63 26 30 78 66  );.  if( (rc&0xf
14670 66 29 3d 3d 72 63 20 29 7b 0a 20 20 20 20 7a 42  f)==rc ){.    zB
14680 75 66 5b 30 5d 20 3d 20 30 3b 0a 20 20 7d 65 6c  uf[0] = 0;.  }el
14690 73 65 7b 0a 20 20 20 20 73 70 72 69 6e 74 66 28  se{.    sprintf(
146a0 7a 42 75 66 2c 22 2b 25 64 22 2c 20 72 63 3e 3e  zBuf,"+%d", rc>>
146b0 38 29 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 41 70  8);.  }.  Tcl_Ap
146c0 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
146d0 70 2c 20 28 63 68 61 72 20 2a 29 74 31 45 72 72  p, (char *)t1Err
146e0 6f 72 4e 61 6d 65 28 72 63 29 2c 20 7a 42 75 66  orName(rc), zBuf
146f0 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  , 0);.  return T
14700 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
14710 55 73 61 67 65 3a 20 20 20 74 65 73 74 5f 65 72  Usage:   test_er
14720 72 6d 73 67 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65  rmsg DB.**.** Re
14730 74 75 72 6e 73 20 74 68 65 20 55 54 46 2d 38 20  turns the UTF-8 
14740 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
14750 66 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73  f the error mess
14760 61 67 65 20 73 74 72 69 6e 67 20 66 6f 72 20 74  age string for t
14770 68 65 0a 2a 2a 20 6d 6f 73 74 20 72 65 63 65 6e  he.** most recen
14780 74 20 73 71 6c 69 74 65 33 5f 2a 20 41 50 49 20  t sqlite3_* API 
14790 63 61 6c 6c 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  call..*/.static 
147a0 69 6e 74 20 74 65 73 74 5f 65 72 72 6d 73 67 28  int test_errmsg(
147b0 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
147c0 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
147d0 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
147e0 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
147f0 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
14800 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
14810 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
14820 7a 45 72 72 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  zErr;..  if( obj
14830 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
14840 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
14850 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
14860 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
14870 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
14880 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
14890 29 2c 20 22 20 44 42 22 2c 20 30 29 3b 0a 20 20  ), " DB", 0);.  
148a0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
148b0 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
148c0 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tDbPointer(inter
148d0 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
148e0 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20  (objv[1]), &db) 
148f0 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
14900 4f 52 3b 0a 0a 20 20 7a 45 72 72 20 3d 20 73 71  OR;..  zErr = sq
14910 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29  lite3_errmsg(db)
14920 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65  ;.  Tcl_SetObjRe
14930 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
14940 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 7a 45  _NewStringObj(zE
14950 72 72 2c 20 2d 31 29 29 3b 0a 20 20 72 65 74 75  rr, -1));.  retu
14960 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
14970 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 74 65 73  .** Usage:   tes
14980 74 5f 65 72 72 6d 73 67 31 36 20 44 42 0a 2a 2a  t_errmsg16 DB.**
14990 0a 2a 2a 20 52 65 74 75 72 6e 73 20 74 68 65 20  .** Returns the 
149a0 55 54 46 2d 31 36 20 72 65 70 72 65 73 65 6e 74  UTF-16 represent
149b0 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 65 72 72  ation of the err
149c0 6f 72 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e  or message strin
149d0 67 20 66 6f 72 20 74 68 65 0a 2a 2a 20 6d 6f 73  g for the.** mos
149e0 74 20 72 65 63 65 6e 74 20 73 71 6c 69 74 65 33  t recent sqlite3
149f0 5f 2a 20 41 50 49 20 63 61 6c 6c 2e 20 54 68 69  _* API call. Thi
14a00 73 20 69 73 20 61 20 62 79 74 65 20 61 72 72 61  s is a byte arra
14a10 79 20 6f 62 6a 65 63 74 20 61 74 20 74 68 65 20  y object at the 
14a20 54 43 4c 20 0a 2a 2a 20 6c 65 76 65 6c 2c 20 61  TCL .** level, a
14a30 6e 64 20 69 74 20 69 6e 63 6c 75 64 65 73 20 74  nd it includes t
14a40 68 65 20 30 78 30 30 20 30 78 30 30 20 74 65 72  he 0x00 0x00 ter
14a50 6d 69 6e 61 74 6f 72 20 62 79 74 65 73 20 61 74  minator bytes at
14a60 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 0a   the end of the.
14a70 2a 2a 20 55 54 46 2d 31 36 20 73 74 72 69 6e 67  ** UTF-16 string
14a80 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
14a90 74 65 73 74 5f 65 72 72 6d 73 67 31 36 28 0a 20  test_errmsg16(. 
14aa0 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
14ab0 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
14ac0 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
14ad0 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
14ae0 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
14af0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
14b00 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 73 71 6c  OMIT_UTF16.  sql
14b10 69 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73  ite3 *db;.  cons
14b20 74 20 76 6f 69 64 20 2a 7a 45 72 72 3b 0a 20 20  t void *zErr;.  
14b30 69 6e 74 20 62 79 74 65 73 20 3d 20 30 3b 0a 0a  int bytes = 0;..
14b40 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b    if( objc!=2 ){
14b50 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
14b60 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
14b70 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
14b80 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20  uld be \"", .   
14b90 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
14ba0 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44 42  g(objv[0]), " DB
14bb0 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
14bc0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
14bd0 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e  .  if( getDbPoin
14be0 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
14bf0 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
14c00 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74 75 72  ]), &db) ) retur
14c10 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
14c20 7a 45 72 72 20 3d 20 73 71 6c 69 74 65 33 5f 65  zErr = sqlite3_e
14c30 72 72 6d 73 67 31 36 28 64 62 29 3b 0a 20 20 69  rrmsg16(db);.  i
14c40 66 28 20 7a 45 72 72 20 29 7b 0a 20 20 20 20 62  f( zErr ){.    b
14c50 79 74 65 73 20 3d 20 73 71 6c 69 74 65 33 55 74  ytes = sqlite3Ut
14c60 66 31 36 42 79 74 65 4c 65 6e 28 7a 45 72 72 2c  f16ByteLen(zErr,
14c70 20 2d 31 29 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f   -1);.  }.  Tcl_
14c80 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
14c90 65 72 70 2c 20 54 63 6c 5f 4e 65 77 42 79 74 65  erp, Tcl_NewByte
14ca0 41 72 72 61 79 4f 62 6a 28 7a 45 72 72 2c 20 62  ArrayObj(zErr, b
14cb0 79 74 65 73 29 29 3b 0a 23 65 6e 64 69 66 20 2f  ytes));.#endif /
14cc0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  * SQLITE_OMIT_UT
14cd0 46 31 36 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20  F16 */.  return 
14ce0 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
14cf0 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
14d00 70 72 65 70 61 72 65 20 44 42 20 73 71 6c 20 62  prepare DB sql b
14d10 79 74 65 73 20 74 61 69 6c 76 61 72 0a 2a 2a 0a  ytes tailvar.**.
14d20 2a 2a 20 43 6f 6d 70 69 6c 65 20 75 70 20 74 6f  ** Compile up to
14d30 20 3c 62 79 74 65 73 3e 20 62 79 74 65 73 20 6f   <bytes> bytes o
14d40 66 20 74 68 65 20 73 75 70 70 6c 69 65 64 20 53  f the supplied S
14d50 51 4c 20 73 74 72 69 6e 67 20 3c 73 71 6c 3e 20  QL string <sql> 
14d60 75 73 69 6e 67 0a 2a 2a 20 64 61 74 61 62 61 73  using.** databas
14d70 65 20 68 61 6e 64 6c 65 20 3c 44 42 3e 2e 20 54  e handle <DB>. T
14d80 68 65 20 70 61 72 61 6d 65 74 65 72 20 3c 74 61  he parameter <ta
14d90 69 6c 76 61 6c 3e 20 69 73 20 74 68 65 20 6e 61  ilval> is the na
14da0 6d 65 20 6f 66 20 61 20 67 6c 6f 62 61 6c 0a 2a  me of a global.*
14db0 2a 20 76 61 72 69 61 62 6c 65 20 74 68 61 74 20  * variable that 
14dc0 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 75 6e  is set to the un
14dd0 75 73 65 64 20 70 6f 72 74 69 6f 6e 20 6f 66 20  used portion of 
14de0 3c 73 71 6c 3e 20 28 69 66 20 61 6e 79 29 2e 20  <sql> (if any). 
14df0 41 0a 2a 2a 20 53 54 4d 54 20 68 61 6e 64 6c 65  A.** STMT handle
14e00 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2f   is returned..*/
14e10 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
14e20 5f 70 72 65 70 61 72 65 28 0a 20 20 76 6f 69 64  _prepare(.  void
14e30 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
14e40 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
14e50 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
14e60 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
14e70 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
14e80 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e  lite3 *db;.  con
14e90 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20  st char *zSql;. 
14ea0 20 69 6e 74 20 62 79 74 65 73 3b 0a 20 20 63 6f   int bytes;.  co
14eb0 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 20  nst char *zTail 
14ec0 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73  = 0;.  sqlite3_s
14ed0 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30 3b 0a  tmt *pStmt = 0;.
14ee0 20 20 63 68 61 72 20 7a 42 75 66 5b 35 30 5d 3b    char zBuf[50];
14ef0 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66  .  int rc;..  if
14f00 28 20 6f 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20  ( objc!=5 ){.   
14f10 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
14f20 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
14f30 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
14f40 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20  be \"", .       
14f50 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
14f60 6a 76 5b 30 5d 29 2c 20 22 20 44 42 20 73 71 6c  jv[0]), " DB sql
14f70 20 62 79 74 65 73 20 74 61 69 6c 76 61 72 22 2c   bytes tailvar",
14f80 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
14f90 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
14fa0 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
14fb0 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
14fc0 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
14fd0 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
14fe0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 53 71  TCL_ERROR;.  zSq
14ff0 6c 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  l = Tcl_GetStrin
15000 67 28 6f 62 6a 76 5b 32 5d 29 3b 0a 20 20 69 66  g(objv[2]);.  if
15010 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d  ( Tcl_GetIntFrom
15020 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
15030 5b 33 5d 2c 20 26 62 79 74 65 73 29 20 29 20 72  [3], &bytes) ) r
15040 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
15050 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ..  rc = sqlite3
15060 5f 70 72 65 70 61 72 65 28 64 62 2c 20 7a 53 71  _prepare(db, zSq
15070 6c 2c 20 62 79 74 65 73 2c 20 26 70 53 74 6d 74  l, bytes, &pStmt
15080 2c 20 26 7a 54 61 69 6c 29 3b 0a 20 20 69 66 28  , &zTail);.  if(
15090 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43   sqlite3TestErrC
150a0 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20  ode(interp, db, 
150b0 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  rc) ) return TCL
150c0 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 7a 54  _ERROR;.  if( zT
150d0 61 69 6c 20 29 7b 0a 20 20 20 20 69 66 28 20 62  ail ){.    if( b
150e0 79 74 65 73 3e 3d 30 20 29 7b 0a 20 20 20 20 20  ytes>=0 ){.     
150f0 20 62 79 74 65 73 20 3d 20 62 79 74 65 73 20 2d   bytes = bytes -
15100 20 28 7a 54 61 69 6c 2d 7a 53 71 6c 29 3b 0a 20   (zTail-zSql);. 
15110 20 20 20 7d 0a 20 20 20 20 54 63 6c 5f 4f 62 6a     }.    Tcl_Obj
15120 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
15130 6f 62 6a 76 5b 34 5d 2c 20 30 2c 20 54 63 6c 5f  objv[4], 0, Tcl_
15140 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 7a 54 61  NewStringObj(zTa
15150 69 6c 2c 20 62 79 74 65 73 29 2c 20 30 29 3b 0a  il, bytes), 0);.
15160 20 20 7d 0a 20 20 69 66 28 20 72 63 21 3d 53 51    }.  if( rc!=SQ
15170 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 61  LITE_OK ){.    a
15180 73 73 65 72 74 28 20 70 53 74 6d 74 3d 3d 30 20  ssert( pStmt==0 
15190 29 3b 0a 20 20 20 20 73 70 72 69 6e 74 66 28 7a  );.    sprintf(z
151a0 42 75 66 2c 20 22 28 25 64 29 20 22 2c 20 72 63  Buf, "(%d) ", rc
151b0 29 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  );.    Tcl_Appen
151c0 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
151d0 7a 42 75 66 2c 20 73 71 6c 69 74 65 33 5f 65 72  zBuf, sqlite3_er
151e0 72 6d 73 67 28 64 62 29 2c 20 30 29 3b 0a 20 20  rmsg(db), 0);.  
151f0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
15200 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70  OR;.  }..  if( p
15210 53 74 6d 74 20 29 7b 0a 20 20 20 20 69 66 28 20  Stmt ){.    if( 
15220 73 71 6c 69 74 65 33 54 65 73 74 4d 61 6b 65 50  sqlite3TestMakeP
15230 6f 69 6e 74 65 72 53 74 72 28 69 6e 74 65 72 70  ointerStr(interp
15240 2c 20 7a 42 75 66 2c 20 70 53 74 6d 74 29 20 29  , zBuf, pStmt) )
15250 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
15260 52 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  R;.    Tcl_Appen
15270 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
15280 7a 42 75 66 2c 20 30 29 3b 0a 20 20 7d 0a 20 20  zBuf, 0);.  }.  
15290 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
152a0 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
152b0 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
152c0 32 20 44 42 20 73 71 6c 20 62 79 74 65 73 20 74  2 DB sql bytes t
152d0 61 69 6c 76 61 72 0a 2a 2a 0a 2a 2a 20 43 6f 6d  ailvar.**.** Com
152e0 70 69 6c 65 20 75 70 20 74 6f 20 3c 62 79 74 65  pile up to <byte
152f0 73 3e 20 62 79 74 65 73 20 6f 66 20 74 68 65 20  s> bytes of the 
15300 73 75 70 70 6c 69 65 64 20 53 51 4c 20 73 74 72  supplied SQL str
15310 69 6e 67 20 3c 73 71 6c 3e 20 75 73 69 6e 67 0a  ing <sql> using.
15320 2a 2a 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  ** database hand
15330 6c 65 20 3c 44 42 3e 2e 20 54 68 65 20 70 61 72  le <DB>. The par
15340 61 6d 65 74 65 72 20 3c 74 61 69 6c 76 61 6c 3e  ameter <tailval>
15350 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
15360 61 20 67 6c 6f 62 61 6c 0a 2a 2a 20 76 61 72 69  a global.** vari
15370 61 62 6c 65 20 74 68 61 74 20 69 73 20 73 65 74  able that is set
15380 20 74 6f 20 74 68 65 20 75 6e 75 73 65 64 20 70   to the unused p
15390 6f 72 74 69 6f 6e 20 6f 66 20 3c 73 71 6c 3e 20  ortion of <sql> 
153a0 28 69 66 20 61 6e 79 29 2e 20 41 0a 2a 2a 20 53  (if any). A.** S
153b0 54 4d 54 20 68 61 6e 64 6c 65 20 69 73 20 72 65  TMT handle is re
153c0 74 75 72 6e 65 64 2e 0a 2a 2f 0a 73 74 61 74 69  turned..*/.stati
153d0 63 20 69 6e 74 20 74 65 73 74 5f 70 72 65 70 61  c int test_prepa
153e0 72 65 5f 76 32 28 0a 20 20 76 6f 69 64 20 2a 20  re_v2(.  void * 
153f0 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
15400 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
15410 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
15420 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
15430 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74  bjv[].){.  sqlit
15440 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20  e3 *db;.  const 
15450 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 69 6e  char *zSql;.  in
15460 74 20 62 79 74 65 73 3b 0a 20 20 63 6f 6e 73 74  t bytes;.  const
15470 20 63 68 61 72 20 2a 7a 54 61 69 6c 20 3d 20 30   char *zTail = 0
15480 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  ;.  sqlite3_stmt
15490 20 2a 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20 63   *pStmt = 0;.  c
154a0 68 61 72 20 7a 42 75 66 5b 35 30 5d 3b 0a 20 20  har zBuf[50];.  
154b0 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f  int rc;..  if( o
154c0 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63  bjc!=5 ){.    Tc
154d0 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
154e0 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
154f0 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
15500 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c  \"", .       Tcl
15510 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
15520 30 5d 29 2c 20 22 20 44 42 20 73 71 6c 20 62 79  0]), " DB sql by
15530 74 65 73 20 74 61 69 6c 76 61 72 22 2c 20 30 29  tes tailvar", 0)
15540 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
15550 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
15560 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69  ( getDbPointer(i
15570 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
15580 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
15590 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  db) ) return TCL
155a0 5f 45 52 52 4f 52 3b 0a 20 20 7a 53 71 6c 20 3d  _ERROR;.  zSql =
155b0 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
155c0 62 6a 76 5b 32 5d 29 3b 0a 20 20 69 66 28 20 54  bjv[2]);.  if( T
155d0 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a  cl_GetIntFromObj
155e0 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d  (interp, objv[3]
155f0 2c 20 26 62 79 74 65 73 29 20 29 20 72 65 74 75  , &bytes) ) retu
15600 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20  rn TCL_ERROR;.. 
15610 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72   rc = sqlite3_pr
15620 65 70 61 72 65 5f 76 32 28 64 62 2c 20 7a 53 71  epare_v2(db, zSq
15630 6c 2c 20 62 79 74 65 73 2c 20 26 70 53 74 6d 74  l, bytes, &pStmt
15640 2c 20 26 7a 54 61 69 6c 29 3b 0a 20 20 61 73 73  , &zTail);.  ass
15650 65 72 74 28 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  ert(rc==SQLITE_O
15660 4b 20 7c 7c 20 70 53 74 6d 74 3d 3d 30 29 3b 0a  K || pStmt==0);.
15670 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73    if( sqlite3Tes
15680 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c  tErrCode(interp,
15690 20 64 62 2c 20 72 63 29 20 29 20 72 65 74 75 72   db, rc) ) retur
156a0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
156b0 66 28 20 7a 54 61 69 6c 20 29 7b 0a 20 20 20 20  f( zTail ){.    
156c0 69 66 28 20 62 79 74 65 73 3e 3d 30 20 29 7b 0a  if( bytes>=0 ){.
156d0 20 20 20 20 20 20 62 79 74 65 73 20 3d 20 62 79        bytes = by
156e0 74 65 73 20 2d 20 28 7a 54 61 69 6c 2d 7a 53 71  tes - (zTail-zSq
156f0 6c 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 54 63  l);.    }.    Tc
15700 6c 5f 4f 62 6a 53 65 74 56 61 72 32 28 69 6e 74  l_ObjSetVar2(int
15710 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 30 2c  erp, objv[4], 0,
15720 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
15730 6a 28 7a 54 61 69 6c 2c 20 62 79 74 65 73 29 2c  j(zTail, bytes),
15740 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72   0);.  }.  if( r
15750 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
15760 20 20 20 20 61 73 73 65 72 74 28 20 70 53 74 6d      assert( pStm
15770 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 70 72 69  t==0 );.    spri
15780 6e 74 66 28 7a 42 75 66 2c 20 22 28 25 64 29 20  ntf(zBuf, "(%d) 
15790 22 2c 20 72 63 29 3b 0a 20 20 20 20 54 63 6c 5f  ", rc);.    Tcl_
157a0 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
157b0 65 72 70 2c 20 7a 42 75 66 2c 20 73 71 6c 69 74  erp, zBuf, sqlit
157c0 65 33 5f 65 72 72 6d 73 67 28 64 62 29 2c 20 30  e3_errmsg(db), 0
157d0 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
157e0 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
157f0 69 66 28 20 70 53 74 6d 74 20 29 7b 0a 20 20 20  if( pStmt ){.   
15800 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74   if( sqlite3Test
15810 4d 61 6b 65 50 6f 69 6e 74 65 72 53 74 72 28 69  MakePointerStr(i
15820 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 70 53 74  nterp, zBuf, pSt
15830 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
15840 5f 45 52 52 4f 52 3b 0a 20 20 20 20 54 63 6c 5f  _ERROR;.    Tcl_
15850 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
15860 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 20  erp, zBuf, 0);. 
15870 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f   }.  return TCL_
15880 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
15890 67 65 3a 20 73 71 6c 69 74 65 33 5f 70 72 65 70  ge: sqlite3_prep
158a0 61 72 65 31 36 20 44 42 20 73 71 6c 20 62 79 74  are16 DB sql byt
158b0 65 73 20 74 61 69 6c 76 61 72 0a 2a 2a 0a 2a 2a  es tailvar.**.**
158c0 20 43 6f 6d 70 69 6c 65 20 75 70 20 74 6f 20 3c   Compile up to <
158d0 62 79 74 65 73 3e 20 62 79 74 65 73 20 6f 66 20  bytes> bytes of 
158e0 74 68 65 20 73 75 70 70 6c 69 65 64 20 53 51 4c  the supplied SQL
158f0 20 73 74 72 69 6e 67 20 3c 73 71 6c 3e 20 75 73   string <sql> us
15900 69 6e 67 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  ing.** database 
15910 68 61 6e 64 6c 65 20 3c 44 42 3e 2e 20 54 68 65  handle <DB>. The
15920 20 70 61 72 61 6d 65 74 65 72 20 3c 74 61 69 6c   parameter <tail
15930 76 61 6c 3e 20 69 73 20 74 68 65 20 6e 61 6d 65  val> is the name
15940 20 6f 66 20 61 20 67 6c 6f 62 61 6c 0a 2a 2a 20   of a global.** 
15950 76 61 72 69 61 62 6c 65 20 74 68 61 74 20 69 73  variable that is
15960 20 73 65 74 20 74 6f 20 74 68 65 20 75 6e 75 73   set to the unus
15970 65 64 20 70 6f 72 74 69 6f 6e 20 6f 66 20 3c 73  ed portion of <s
15980 71 6c 3e 20 28 69 66 20 61 6e 79 29 2e 20 41 0a  ql> (if any). A.
15990 2a 2a 20 53 54 4d 54 20 68 61 6e 64 6c 65 20 69  ** STMT handle i
159a0 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a 73  s returned..*/.s
159b0 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 70  tatic int test_p
159c0 72 65 70 61 72 65 31 36 28 0a 20 20 76 6f 69 64  repare16(.  void
159d0 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
159e0 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
159f0 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
15a00 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
15a10 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e  T objv[].){.#ifn
15a20 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
15a30 55 54 46 31 36 0a 20 20 73 71 6c 69 74 65 33 20  UTF16.  sqlite3 
15a40 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20 76 6f 69  *db;.  const voi
15a50 64 20 2a 7a 53 71 6c 3b 0a 20 20 63 6f 6e 73 74  d *zSql;.  const
15a60 20 76 6f 69 64 20 2a 7a 54 61 69 6c 20 3d 20 30   void *zTail = 0
15a70 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 54 61  ;.  Tcl_Obj *pTa
15a80 69 6c 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65  il = 0;.  sqlite
15a90 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20  3_stmt *pStmt = 
15aa0 30 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 35  0;.  char zBuf[5
15ab0 30 5d 3b 20 0a 20 20 69 6e 74 20 72 63 3b 0a 20  0]; .  int rc;. 
15ac0 20 69 6e 74 20 62 79 74 65 73 3b 20 20 20 20 20   int bytes;     
15ad0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
15ae0 65 20 69 6e 74 65 67 65 72 20 73 70 65 63 69 66  e integer specif
15af0 69 65 64 20 61 73 20 61 72 67 20 33 20 2a 2f 0a  ied as arg 3 */.
15b00 20 20 69 6e 74 20 6f 62 6a 6c 65 6e 3b 20 20 20    int objlen;   
15b10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
15b20 68 65 20 62 79 74 65 2d 61 72 72 61 79 20 6c 65  he byte-array le
15b30 6e 67 74 68 20 6f 66 20 61 72 67 20 32 20 2a 2f  ngth of arg 2 */
15b40 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 35 20  ..  if( objc!=5 
15b50 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
15b60 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
15b70 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
15b80 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20  hould be \"", . 
15b90 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
15ba0 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20  ing(objv[0]), " 
15bb0 44 42 20 73 71 6c 20 62 79 74 65 73 20 74 61 69  DB sql bytes tai
15bc0 6c 76 61 72 22 2c 20 30 29 3b 0a 20 20 20 20 72  lvar", 0);.    r
15bd0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
15be0 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
15bf0 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
15c00 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
15c10 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72  jv[1]), &db) ) r
15c20 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
15c30 0a 20 20 7a 53 71 6c 20 3d 20 54 63 6c 5f 47 65  .  zSql = Tcl_Ge
15c40 74 42 79 74 65 41 72 72 61 79 46 72 6f 6d 4f 62  tByteArrayFromOb
15c50 6a 28 6f 62 6a 76 5b 32 5d 2c 20 26 6f 62 6a 6c  j(objv[2], &objl
15c60 65 6e 29 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47  en);.  if( Tcl_G
15c70 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
15c80 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 62  erp, objv[3], &b
15c90 79 74 65 73 29 20 29 20 72 65 74 75 72 6e 20 54  ytes) ) return T
15ca0 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20  CL_ERROR;..  rc 
15cb0 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  = sqlite3_prepar
15cc0 65 31 36 28 64 62 2c 20 7a 53 71 6c 2c 20 62 79  e16(db, zSql, by
15cd0 74 65 73 2c 20 26 70 53 74 6d 74 2c 20 26 7a 54  tes, &pStmt, &zT
15ce0 61 69 6c 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  ail);.  if( sqli
15cf0 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69  te3TestErrCode(i
15d00 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29  nterp, db, rc) )
15d10 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
15d20 52 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20  R;.  if( rc ){. 
15d30 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
15d40 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  ROR;.  }..  if( 
15d50 7a 54 61 69 6c 20 29 7b 0a 20 20 20 20 6f 62 6a  zTail ){.    obj
15d60 6c 65 6e 20 3d 20 6f 62 6a 6c 65 6e 20 2d 20 28  len = objlen - (
15d70 28 75 38 20 2a 29 7a 54 61 69 6c 2d 28 75 38 20  (u8 *)zTail-(u8 
15d80 2a 29 7a 53 71 6c 29 3b 0a 20 20 7d 65 6c 73 65  *)zSql);.  }else
15d90 7b 0a 20 20 20 20 6f 62 6a 6c 65 6e 20 3d 20 30  {.    objlen = 0
15da0 3b 0a 20 20 7d 0a 20 20 70 54 61 69 6c 20 3d 20  ;.  }.  pTail = 
15db0 54 63 6c 5f 4e 65 77 42 79 74 65 41 72 72 61 79  Tcl_NewByteArray
15dc0 4f 62 6a 28 28 75 38 20 2a 29 7a 54 61 69 6c 2c  Obj((u8 *)zTail,
15dd0 20 6f 62 6a 6c 65 6e 29 3b 0a 20 20 54 63 6c 5f   objlen);.  Tcl_
15de0 49 6e 63 72 52 65 66 43 6f 75 6e 74 28 70 54 61  IncrRefCount(pTa
15df0 69 6c 29 3b 0a 20 20 54 63 6c 5f 4f 62 6a 53 65  il);.  Tcl_ObjSe
15e00 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 6f 62  tVar2(interp, ob
15e10 6a 76 5b 34 5d 2c 20 30 2c 20 70 54 61 69 6c 2c  jv[4], 0, pTail,
15e20 20 30 29 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52   0);.  Tcl_DecrR
15e30 65 66 43 6f 75 6e 74 28 70 54 61 69 6c 29 3b 0a  efCount(pTail);.
15e40 0a 20 20 69 66 28 20 70 53 74 6d 74 20 29 7b 0a  .  if( pStmt ){.
15e50 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 54      if( sqlite3T
15e60 65 73 74 4d 61 6b 65 50 6f 69 6e 74 65 72 53 74  estMakePointerSt
15e70 72 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20  r(interp, zBuf, 
15e80 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20  pStmt) ) return 
15e90 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
15ea0 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
15eb0 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20  t(interp, zBuf, 
15ec0 30 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  0);.#endif /* SQ
15ed0 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
15ee0 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  */.  return TCL_
15ef0 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
15f00 67 65 3a 20 73 71 6c 69 74 65 33 5f 70 72 65 70  ge: sqlite3_prep
15f10 61 72 65 31 36 5f 76 32 20 44 42 20 73 71 6c 20  are16_v2 DB sql 
15f20 62 79 74 65 73 20 74 61 69 6c 76 61 72 0a 2a 2a  bytes tailvar.**
15f30 0a 2a 2a 20 43 6f 6d 70 69 6c 65 20 75 70 20 74  .** Compile up t
15f40 6f 20 3c 62 79 74 65 73 3e 20 62 79 74 65 73 20  o <bytes> bytes 
15f50 6f 66 20 74 68 65 20 73 75 70 70 6c 69 65 64 20  of the supplied 
15f60 53 51 4c 20 73 74 72 69 6e 67 20 3c 73 71 6c 3e  SQL string <sql>
15f70 20 75 73 69 6e 67 0a 2a 2a 20 64 61 74 61 62 61   using.** databa
15f80 73 65 20 68 61 6e 64 6c 65 20 3c 44 42 3e 2e 20  se handle <DB>. 
15f90 54 68 65 20 70 61 72 61 6d 65 74 65 72 20 3c 74  The parameter <t
15fa0 61 69 6c 76 61 6c 3e 20 69 73 20 74 68 65 20 6e  ailval> is the n
15fb0 61 6d 65 20 6f 66 20 61 20 67 6c 6f 62 61 6c 0a  ame of a global.
15fc0 2a 2a 20 76 61 72 69 61 62 6c 65 20 74 68 61 74  ** variable that
15fd0 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 75   is set to the u
15fe0 6e 75 73 65 64 20 70 6f 72 74 69 6f 6e 20 6f 66  nused portion of
15ff0 20 3c 73 71 6c 3e 20 28 69 66 20 61 6e 79 29 2e   <sql> (if any).
16000 20 41 0a 2a 2a 20 53 54 4d 54 20 68 61 6e 64 6c   A.** STMT handl
16010 65 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a  e is returned..*
16020 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
16030 74 5f 70 72 65 70 61 72 65 31 36 5f 76 32 28 0a  t_prepare16_v2(.
16040 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
16050 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
16060 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
16070 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
16080 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
16090 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  {.#ifndef SQLITE
160a0 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 73 71  _OMIT_UTF16.  sq
160b0 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e  lite3 *db;.  con
160c0 73 74 20 76 6f 69 64 20 2a 7a 53 71 6c 3b 0a 20  st void *zSql;. 
160d0 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 54 61   const void *zTa
160e0 69 6c 20 3d 20 30 3b 0a 20 20 54 63 6c 5f 4f 62  il = 0;.  Tcl_Ob
160f0 6a 20 2a 70 54 61 69 6c 20 3d 20 30 3b 0a 20 20  j *pTail = 0;.  
16100 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
16110 74 6d 74 20 3d 20 30 3b 0a 20 20 63 68 61 72 20  tmt = 0;.  char 
16120 7a 42 75 66 5b 35 30 5d 3b 20 0a 20 20 69 6e 74  zBuf[50]; .  int
16130 20 72 63 3b 0a 20 20 69 6e 74 20 62 79 74 65 73   rc;.  int bytes
16140 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
16150 20 2f 2a 20 54 68 65 20 69 6e 74 65 67 65 72 20   /* The integer 
16160 73 70 65 63 69 66 69 65 64 20 61 73 20 61 72 67  specified as arg
16170 20 33 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 6c   3 */.  int objl
16180 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  en;             
16190 20 20 2f 2a 20 54 68 65 20 62 79 74 65 2d 61 72    /* The byte-ar
161a0 72 61 79 20 6c 65 6e 67 74 68 20 6f 66 20 61 72  ray length of ar
161b0 67 20 32 20 2a 2f 0a 0a 20 20 69 66 28 20 6f 62  g 2 */..  if( ob
161c0 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=5 ){.    Tcl
161d0 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
161e0 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
161f0 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
16200 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f  "", .       Tcl_
16210 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30  GetString(objv[0
16220 5d 29 2c 20 22 20 44 42 20 73 71 6c 20 62 79 74  ]), " DB sql byt
16230 65 73 20 74 61 69 6c 76 61 72 22 2c 20 30 29 3b  es tailvar", 0);
16240 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
16250 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
16260 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e   getDbPointer(in
16270 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
16280 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64  ing(objv[1]), &d
16290 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
162a0 45 52 52 4f 52 3b 0a 20 20 7a 53 71 6c 20 3d 20  ERROR;.  zSql = 
162b0 54 63 6c 5f 47 65 74 42 79 74 65 41 72 72 61 79  Tcl_GetByteArray
162c0 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 32 5d 2c  FromObj(objv[2],
162d0 20 26 6f 62 6a 6c 65 6e 29 3b 0a 20 20 69 66 28   &objlen);.  if(
162e0 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f   Tcl_GetIntFromO
162f0 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
16300 33 5d 2c 20 26 62 79 74 65 73 29 20 29 20 72 65  3], &bytes) ) re
16310 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
16320 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
16330 70 72 65 70 61 72 65 31 36 5f 76 32 28 64 62 2c  prepare16_v2(db,
16340 20 7a 53 71 6c 2c 20 62 79 74 65 73 2c 20 26 70   zSql, bytes, &p
16350 53 74 6d 74 2c 20 26 7a 54 61 69 6c 29 3b 0a 20  Stmt, &zTail);. 
16360 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74   if( sqlite3Test
16370 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20  ErrCode(interp, 
16380 64 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e  db, rc) ) return
16390 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
163a0 28 20 72 63 20 29 7b 0a 20 20 20 20 72 65 74 75  ( rc ){.    retu
163b0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
163c0 7d 0a 0a 20 20 69 66 28 20 7a 54 61 69 6c 20 29  }..  if( zTail )
163d0 7b 0a 20 20 20 20 6f 62 6a 6c 65 6e 20 3d 20 6f  {.    objlen = o
163e0 62 6a 6c 65 6e 20 2d 20 28 28 75 38 20 2a 29 7a  bjlen - ((u8 *)z
163f0 54 61 69 6c 2d 28 75 38 20 2a 29 7a 53 71 6c 29  Tail-(u8 *)zSql)
16400 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6f  ;.  }else{.    o
16410 62 6a 6c 65 6e 20 3d 20 30 3b 0a 20 20 7d 0a 20  bjlen = 0;.  }. 
16420 20 70 54 61 69 6c 20 3d 20 54 63 6c 5f 4e 65 77   pTail = Tcl_New
16430 42 79 74 65 41 72 72 61 79 4f 62 6a 28 28 75 38  ByteArrayObj((u8
16440 20 2a 29 7a 54 61 69 6c 2c 20 6f 62 6a 6c 65 6e   *)zTail, objlen
16450 29 3b 0a 20 20 54 63 6c 5f 49 6e 63 72 52 65 66  );.  Tcl_IncrRef
16460 43 6f 75 6e 74 28 70 54 61 69 6c 29 3b 0a 20 20  Count(pTail);.  
16470 54 63 6c 5f 4f 62 6a 53 65 74 56 61 72 32 28 69  Tcl_ObjSetVar2(i
16480 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20  nterp, objv[4], 
16490 30 2c 20 70 54 61 69 6c 2c 20 30 29 3b 0a 20 20  0, pTail, 0);.  
164a0 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74  Tcl_DecrRefCount
164b0 28 70 54 61 69 6c 29 3b 0a 0a 20 20 69 66 28 20  (pTail);..  if( 
164c0 70 53 74 6d 74 20 29 7b 0a 20 20 20 20 69 66 28  pStmt ){.    if(
164d0 20 73 71 6c 69 74 65 33 54 65 73 74 4d 61 6b 65   sqlite3TestMake
164e0 50 6f 69 6e 74 65 72 53 74 72 28 69 6e 74 65 72  PointerStr(inter
164f0 70 2c 20 7a 42 75 66 2c 20 70 53 74 6d 74 29 20  p, zBuf, pStmt) 
16500 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
16510 4f 52 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 41 70  OR;.  }.  Tcl_Ap
16520 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
16530 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 23 65 6e  p, zBuf, 0);.#en
16540 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
16550 49 54 5f 55 54 46 31 36 20 2a 2f 0a 20 20 72 65  IT_UTF16 */.  re
16560 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
16570 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  /*.** Usage: sql
16580 69 74 65 33 5f 6f 70 65 6e 20 66 69 6c 65 6e 61  ite3_open filena
16590 6d 65 20 3f 6f 70 74 69 6f 6e 73 2d 6c 69 73 74  me ?options-list
165a0 3f 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ?.*/.static int 
165b0 74 65 73 74 5f 6f 70 65 6e 28 0a 20 20 76 6f 69  test_open(.  voi
165c0 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
165d0 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
165e0 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
165f0 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
16600 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 63  ST objv[].){.  c
16610 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65  onst char *zFile
16620 6e 61 6d 65 3b 0a 20 20 73 71 6c 69 74 65 33 20  name;.  sqlite3 
16630 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  *db;.  int rc;. 
16640 20 63 68 61 72 20 7a 42 75 66 5b 31 30 30 5d 3b   char zBuf[100];
16650 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20  ..  if( objc!=3 
16660 26 26 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20  && objc!=2 ){.  
16670 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
16680 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
16690 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
166a0 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20   be \"", .      
166b0 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
166c0 62 6a 76 5b 30 5d 29 2c 20 22 20 66 69 6c 65 6e  bjv[0]), " filen
166d0 61 6d 65 20 6f 70 74 69 6f 6e 73 2d 6c 69 73 74  ame options-list
166e0 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
166f0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
16700 0a 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20  ..  zFilename = 
16710 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
16720 6a 76 5b 31 5d 29 3b 0a 20 20 72 63 20 3d 20 73  jv[1]);.  rc = s
16730 71 6c 69 74 65 33 5f 6f 70 65 6e 28 7a 46 69 6c  qlite3_open(zFil
16740 65 6e 61 6d 65 2c 20 26 64 62 29 3b 0a 20 20 0a  ename, &db);.  .
16750 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73    if( sqlite3Tes
16760 74 4d 61 6b 65 50 6f 69 6e 74 65 72 53 74 72 28  tMakePointerStr(
16770 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 64 62  interp, zBuf, db
16780 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
16790 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 41 70 70 65  RROR;.  Tcl_Appe
167a0 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
167b0 20 7a 42 75 66 2c 20 30 29 3b 0a 20 20 72 65 74   zBuf, 0);.  ret
167c0 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
167d0 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69  *.** Usage: sqli
167e0 74 65 33 5f 6f 70 65 6e 31 36 20 66 69 6c 65 6e  te3_open16 filen
167f0 61 6d 65 20 6f 70 74 69 6f 6e 73 0a 2a 2f 0a 73  ame options.*/.s
16800 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 6f  tatic int test_o
16810 70 65 6e 31 36 28 0a 20 20 76 6f 69 64 20 2a 20  pen16(.  void * 
16820 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
16830 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
16840 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
16850 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
16860 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66  bjv[].){.#ifndef
16870 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
16880 31 36 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20  16.  const void 
16890 2a 7a 46 69 6c 65 6e 61 6d 65 3b 0a 20 20 73 71  *zFilename;.  sq
168a0 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74  lite3 *db;.  int
168b0 20 72 63 3b 0a 20 20 63 68 61 72 20 7a 42 75 66   rc;.  char zBuf
168c0 5b 31 30 30 5d 3b 0a 0a 20 20 69 66 28 20 6f 62  [100];..  if( ob
168d0 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=3 ){.    Tcl
168e0 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
168f0 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
16900 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
16910 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f  "", .       Tcl_
16920 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30  GetString(objv[0
16930 5d 29 2c 20 22 20 66 69 6c 65 6e 61 6d 65 20 6f  ]), " filename o
16940 70 74 69 6f 6e 73 2d 6c 69 73 74 22 2c 20 30 29  ptions-list", 0)
16950 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
16960 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 7a  _ERROR;.  }..  z
16970 46 69 6c 65 6e 61 6d 65 20 3d 20 54 63 6c 5f 47  Filename = Tcl_G
16980 65 74 42 79 74 65 41 72 72 61 79 46 72 6f 6d 4f  etByteArrayFromO
16990 62 6a 28 6f 62 6a 76 5b 31 5d 2c 20 30 29 3b 0a  bj(objv[1], 0);.
169a0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 6f    rc = sqlite3_o
169b0 70 65 6e 31 36 28 7a 46 69 6c 65 6e 61 6d 65 2c  pen16(zFilename,
169c0 20 26 64 62 29 3b 0a 20 20 0a 20 20 69 66 28 20   &db);.  .  if( 
169d0 73 71 6c 69 74 65 33 54 65 73 74 4d 61 6b 65 50  sqlite3TestMakeP
169e0 6f 69 6e 74 65 72 53 74 72 28 69 6e 74 65 72 70  ointerStr(interp
169f0 2c 20 7a 42 75 66 2c 20 64 62 29 20 29 20 72 65  , zBuf, db) ) re
16a00 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
16a10 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
16a20 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c  lt(interp, zBuf,
16a30 20 30 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53   0);.#endif /* S
16a40 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
16a50 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c   */.  return TCL
16a60 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
16a70 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6d  age: sqlite3_com
16a80 70 6c 65 74 65 31 36 20 3c 55 54 46 2d 31 36 20  plete16 <UTF-16 
16a90 73 74 72 69 6e 67 3e 0a 2a 2a 0a 2a 2a 20 52 65  string>.**.** Re
16aa0 74 75 72 6e 20 31 20 69 66 20 74 68 65 20 73 75  turn 1 if the su
16ab0 70 70 6c 69 65 64 20 61 72 67 75 6d 65 6e 74 20  pplied argument 
16ac0 69 73 20 61 20 63 6f 6d 70 6c 65 74 65 20 53 51  is a complete SQ
16ad0 4c 20 73 74 61 74 65 6d 65 6e 74 2c 20 6f 72 20  L statement, or 
16ae0 7a 65 72 6f 0a 2a 2a 20 6f 74 68 65 72 77 69 73  zero.** otherwis
16af0 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  e..*/.static int
16b00 20 74 65 73 74 5f 63 6f 6d 70 6c 65 74 65 31 36   test_complete16
16b10 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
16b20 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
16b30 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
16b40 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
16b50 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
16b60 0a 29 7b 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .){.#if !defined
16b70 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d  (SQLITE_OMIT_COM
16b80 50 4c 45 54 45 29 20 26 26 20 21 64 65 66 69 6e  PLETE) && !defin
16b90 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ed(SQLITE_OMIT_U
16ba0 54 46 31 36 29 0a 20 20 63 68 61 72 20 2a 7a 42  TF16).  char *zB
16bb0 75 66 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  uf;..  if( objc!
16bc0 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72  =2 ){.    Tcl_Wr
16bd0 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72  ongNumArgs(inter
16be0 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 3c 75 74  p, 1, objv, "<ut
16bf0 66 2d 31 36 20 73 71 6c 3e 22 29 3b 0a 20 20 20  f-16 sql>");.   
16c00 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
16c10 52 3b 0a 20 20 7d 0a 0a 20 20 7a 42 75 66 20 3d  R;.  }..  zBuf =
16c20 20 28 63 68 61 72 2a 29 54 63 6c 5f 47 65 74 42   (char*)Tcl_GetB
16c30 79 74 65 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28  yteArrayFromObj(
16c40 6f 62 6a 76 5b 31 5d 2c 20 30 29 3b 0a 20 20 54  objv[1], 0);.  T
16c50 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
16c60 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49  interp, Tcl_NewI
16c70 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33 5f 63 6f  ntObj(sqlite3_co
16c80 6d 70 6c 65 74 65 31 36 28 7a 42 75 66 29 29 29  mplete16(zBuf)))
16c90 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
16ca0 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 4c 45 54 45  TE_OMIT_COMPLETE
16cb0 20 26 26 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   && SQLITE_OMIT_
16cc0 55 54 46 31 36 20 2a 2f 0a 20 20 72 65 74 75 72  UTF16 */.  retur
16cd0 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
16ce0 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65  ** Usage: sqlite
16cf0 33 5f 73 74 65 70 20 53 54 4d 54 0a 2a 2a 0a 2a  3_step STMT.**.*
16d00 2a 20 41 64 76 61 6e 63 65 20 74 68 65 20 73 74  * Advance the st
16d10 61 74 65 6d 65 6e 74 20 74 6f 20 74 68 65 20 6e  atement to the n
16d20 65 78 74 20 72 6f 77 2e 0a 2a 2f 0a 73 74 61 74  ext row..*/.stat
16d30 69 63 20 69 6e 74 20 74 65 73 74 5f 73 74 65 70  ic int test_step
16d40 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
16d50 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
16d60 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
16d70 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
16d80 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
16d90 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  .){.  sqlite3_st
16da0 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74  mt *pStmt;.  int
16db0 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63   rc;..  if( objc
16dc0 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=2 ){.    Tcl_A
16dd0 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
16de0 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
16df0 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
16e00 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65  , .       Tcl_Ge
16e10 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29  tString(objv[0])
16e20 2c 20 22 20 53 54 4d 54 22 2c 20 30 29 3b 0a 20  , " STMT", 0);. 
16e30 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
16e40 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  ROR;.  }..  if( 
16e50 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69  getStmtPointer(i
16e60 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
16e70 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
16e80 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20  pStmt) ) return 
16e90 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20  TCL_ERROR;.  rc 
16ea0 3d 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70  = sqlite3_step(p
16eb0 53 74 6d 74 29 3b 0a 0a 20 20 2f 2a 20 69 66 28  Stmt);..  /* if(
16ec0 20 72 63 21 3d 53 51 4c 49 54 45 5f 44 4f 4e 45   rc!=SQLITE_DONE
16ed0 20 26 26 20 72 63 21 3d 53 51 4c 49 54 45 5f 52   && rc!=SQLITE_R
16ee0 4f 57 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  OW ) return TCL_
16ef0 45 52 52 4f 52 3b 20 2a 2f 0a 20 20 54 63 6c 5f  ERROR; */.  Tcl_
16f00 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70  SetResult(interp
16f10 2c 20 28 63 68 61 72 20 2a 29 74 31 45 72 72 6f  , (char *)t1Erro
16f20 72 4e 61 6d 65 28 72 63 29 2c 20 30 29 3b 0a 20  rName(rc), 0);. 
16f30 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
16f40 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
16f50 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63  sqlite3_column_c
16f60 6f 75 6e 74 20 53 54 4d 54 20 0a 2a 2a 0a 2a 2a  ount STMT .**.**
16f70 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   Return the numb
16f80 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 72 65  er of columns re
16f90 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 73 71  turned by the sq
16fa0 6c 20 73 74 61 74 65 6d 65 6e 74 20 53 54 4d 54  l statement STMT
16fb0 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
16fc0 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e  test_column_coun
16fd0 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  t(.  void * clie
16fe0 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
16ff0 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
17000 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
17010 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
17020 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ].){.  sqlite3_s
17030 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 0a 20 20 69  tmt *pStmt;..  i
17040 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20  f( objc!=2 ){.  
17050 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
17060 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
17070 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
17080 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20   be \"", .      
17090 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
170a0 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20  bjv[0]), " STMT 
170b0 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20  column", 0);.   
170c0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
170d0 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65  R;.  }..  if( ge
170e0 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74  tStmtPointer(int
170f0 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
17100 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53  ng(objv[1]), &pS
17110 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43  tmt) ) return TC
17120 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 54 63 6c 5f  L_ERROR;..  Tcl_
17130 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
17140 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f  erp, Tcl_NewIntO
17150 62 6a 28 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  bj(sqlite3_colum
17160 6e 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29 29 29  n_count(pStmt)))
17170 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
17180 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
17190 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  e: sqlite3_colum
171a0 6e 5f 74 79 70 65 20 53 54 4d 54 20 63 6f 6c 75  n_type STMT colu
171b0 6d 6e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  mn.**.** Return 
171c0 74 68 65 20 74 79 70 65 20 6f 66 20 74 68 65 20  the type of the 
171d0 64 61 74 61 20 69 6e 20 63 6f 6c 75 6d 6e 20 27  data in column '
171e0 63 6f 6c 75 6d 6e 27 20 6f 66 20 74 68 65 20 63  column' of the c
171f0 75 72 72 65 6e 74 20 72 6f 77 2e 0a 2a 2f 0a 73  urrent row..*/.s
17200 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63  tatic int test_c
17210 6f 6c 75 6d 6e 5f 74 79 70 65 28 0a 20 20 76 6f  olumn_type(.  vo
17220 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
17230 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
17240 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
17250 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
17260 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
17270 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
17280 74 6d 74 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a  tmt;.  int col;.
17290 20 20 69 6e 74 20 74 70 3b 0a 0a 20 20 69 66 28    int tp;..  if(
172a0 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20   objc!=3 ){.    
172b0 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
172c0 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
172d0 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
172e0 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54  e \"", .       T
172f0 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
17300 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20 63 6f  v[0]), " STMT co
17310 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20 72  lumn", 0);.    r
17320 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
17330 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53  .  }..  if( getS
17340 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tmtPointer(inter
17350 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
17360 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d  (objv[1]), &pStm
17370 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  t) ) return TCL_
17380 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c  ERROR;.  if( Tcl
17390 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
173a0 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20  nterp, objv[2], 
173b0 26 63 6f 6c 29 20 29 20 72 65 74 75 72 6e 20 54  &col) ) return T
173c0 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 74 70 20  CL_ERROR;..  tp 
173d0 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
173e0 5f 74 79 70 65 28 70 53 74 6d 74 2c 20 63 6f 6c  _type(pStmt, col
173f0 29 3b 0a 20 20 73 77 69 74 63 68 28 20 74 70 20  );.  switch( tp 
17400 29 7b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  ){.    case SQLI
17410 54 45 5f 49 4e 54 45 47 45 52 3a 20 0a 20 20 20  TE_INTEGER: .   
17420 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74     Tcl_SetResult
17430 28 69 6e 74 65 72 70 2c 20 22 49 4e 54 45 47 45  (interp, "INTEGE
17440 52 22 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b  R", TCL_STATIC);
17450 20 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20   .      break;. 
17460 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4e     case SQLITE_N
17470 55 4c 4c 3a 0a 20 20 20 20 20 20 54 63 6c 5f 53  ULL:.      Tcl_S
17480 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
17490 20 22 4e 55 4c 4c 22 2c 20 54 43 4c 5f 53 54 41   "NULL", TCL_STA
174a0 54 49 43 29 3b 20 0a 20 20 20 20 20 20 62 72 65  TIC); .      bre
174b0 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
174c0 49 54 45 5f 46 4c 4f 41 54 3a 0a 20 20 20 20 20  ITE_FLOAT:.     
174d0 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69   Tcl_SetResult(i
174e0 6e 74 65 72 70 2c 20 22 46 4c 4f 41 54 22 2c 20  nterp, "FLOAT", 
174f0 54 43 4c 5f 53 54 41 54 49 43 29 3b 20 0a 20 20  TCL_STATIC); .  
17500 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
17510 61 73 65 20 53 51 4c 49 54 45 5f 54 45 58 54 3a  ase SQLITE_TEXT:
17520 0a 20 20 20 20 20 20 54 63 6c 5f 53 65 74 52 65  .      Tcl_SetRe
17530 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 54 45  sult(interp, "TE
17540 58 54 22 2c 20 54 43 4c 5f 53 54 41 54 49 43 29  XT", TCL_STATIC)
17550 3b 20 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  ; .      break;.
17560 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
17570 42 4c 4f 42 3a 0a 20 20 20 20 20 20 54 63 6c 5f  BLOB:.      Tcl_
17580 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70  SetResult(interp
17590 2c 20 22 42 4c 4f 42 22 2c 20 54 43 4c 5f 53 54  , "BLOB", TCL_ST
175a0 41 54 49 43 29 3b 20 0a 20 20 20 20 20 20 62 72  ATIC); .      br
175b0 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74  eak;.    default
175c0 3a 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 30  :.      assert(0
175d0 29 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e  );.  }..  return
175e0 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
175f0 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33  * Usage: sqlite3
17600 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 20 53 54  _column_int64 ST
17610 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20  MT column.**.** 
17620 52 65 74 75 72 6e 20 74 68 65 20 64 61 74 61 20  Return the data 
17630 69 6e 20 63 6f 6c 75 6d 6e 20 27 63 6f 6c 75 6d  in column 'colum
17640 6e 27 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  n' of the curren
17650 74 20 72 6f 77 20 63 61 73 74 20 61 73 20 61 6e  t row cast as an
17660 0a 2a 2a 20 77 69 64 65 20 28 36 34 2d 62 69 74  .** wide (64-bit
17670 29 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 73 74  ) integer..*/.st
17680 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63 6f  atic int test_co
17690 6c 75 6d 6e 5f 69 6e 74 36 34 28 0a 20 20 76 6f  lumn_int64(.  vo
176a0 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
176b0 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
176c0 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
176d0 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
176e0 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
176f0 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
17700 74 6d 74 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a  tmt;.  int col;.
17710 20 20 69 36 34 20 69 56 61 6c 3b 0a 0a 20 20 69    i64 iVal;..  i
17720 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20  f( objc!=3 ){.  
17730 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
17740 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
17750 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
17760 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20   be \"", .      
17770 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
17780 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20  bjv[0]), " STMT 
17790 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20  column", 0);.   
177a0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
177b0 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65  R;.  }..  if( ge
177c0 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74  tStmtPointer(int
177d0 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
177e0 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53  ng(objv[1]), &pS
177f0 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43  tmt) ) return TC
17800 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54  L_ERROR;.  if( T
17810 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a  cl_GetIntFromObj
17820 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d  (interp, objv[2]
17830 2c 20 26 63 6f 6c 29 20 29 20 72 65 74 75 72 6e  , &col) ) return
17840 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 69   TCL_ERROR;..  i
17850 56 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f  Val = sqlite3_co
17860 6c 75 6d 6e 5f 69 6e 74 36 34 28 70 53 74 6d 74  lumn_int64(pStmt
17870 2c 20 63 6f 6c 29 3b 0a 20 20 54 63 6c 5f 53 65  , col);.  Tcl_Se
17880 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
17890 70 2c 20 54 63 6c 5f 4e 65 77 57 69 64 65 49 6e  p, Tcl_NewWideIn
178a0 74 4f 62 6a 28 69 56 61 6c 29 29 3b 0a 20 20 72  tObj(iVal));.  r
178b0 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
178c0 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  ./*.** Usage: sq
178d0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f  lite3_column_blo
178e0 62 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2f  b STMT column.*/
178f0 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
17900 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 0a 20 20  _column_blob(.  
17910 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
17920 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
17930 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
17940 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
17950 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
17960 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
17970 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63 6f 6c  pStmt;.  int col
17980 3b 0a 0a 20 20 69 6e 74 20 6c 65 6e 3b 0a 20 20  ;..  int len;.  
17990 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 42 6c 6f  const void *pBlo
179a0 62 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  b;..  if( objc!=
179b0 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  3 ){.    Tcl_App
179c0 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
179d0 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
179e0 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
179f0 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  .       Tcl_GetS
17a00 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20  tring(objv[0]), 
17a10 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20  " STMT column", 
17a20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
17a30 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
17a40 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
17a50 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
17a60 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
17a70 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
17a80 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
17a90 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
17aa0 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
17ab0 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20 29  objv[2], &col) )
17ac0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
17ad0 52 3b 0a 0a 20 20 6c 65 6e 20 3d 20 73 71 6c 69  R;..  len = sqli
17ae0 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73  te3_column_bytes
17af0 28 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20  (pStmt, col);.  
17b00 70 42 6c 6f 62 20 3d 20 73 71 6c 69 74 65 33 5f  pBlob = sqlite3_
17b10 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 70 53 74 6d  column_blob(pStm
17b20 74 2c 20 63 6f 6c 29 3b 0a 20 20 54 63 6c 5f 53  t, col);.  Tcl_S
17b30 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
17b40 72 70 2c 20 54 63 6c 5f 4e 65 77 42 79 74 65 41  rp, Tcl_NewByteA
17b50 72 72 61 79 4f 62 6a 28 70 42 6c 6f 62 2c 20 6c  rrayObj(pBlob, l
17b60 65 6e 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  en));.  return T
17b70 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
17b80 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63  Usage: sqlite3_c
17b90 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 20 53 54 4d  olumn_double STM
17ba0 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 52  T column.**.** R
17bb0 65 74 75 72 6e 20 74 68 65 20 64 61 74 61 20 69  eturn the data i
17bc0 6e 20 63 6f 6c 75 6d 6e 20 27 63 6f 6c 75 6d 6e  n column 'column
17bd0 27 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  ' of the current
17be0 20 72 6f 77 20 63 61 73 74 20 61 73 20 61 20 64   row cast as a d
17bf0 6f 75 62 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  ouble..*/.static
17c00 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c 75 6d 6e   int test_column
17c10 5f 64 6f 75 62 6c 65 28 0a 20 20 76 6f 69 64 20  _double(.  void 
17c20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
17c30 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
17c40 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
17c50 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
17c60 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
17c70 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
17c80 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a 20 20 64  ;.  int col;.  d
17c90 6f 75 62 6c 65 20 72 56 61 6c 3b 0a 0a 20 20 69  ouble rVal;..  i
17ca0 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20  f( objc!=3 ){.  
17cb0 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
17cc0 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
17cd0 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
17ce0 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20   be \"", .      
17cf0 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
17d00 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20  bjv[0]), " STMT 
17d10 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20  column", 0);.   
17d20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
17d30 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65  R;.  }..  if( ge
17d40 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74  tStmtPointer(int
17d50 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
17d60 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53  ng(objv[1]), &pS
17d70 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43  tmt) ) return TC
17d80 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54  L_ERROR;.  if( T
17d90 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a  cl_GetIntFromObj
17da0 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d  (interp, objv[2]
17db0 2c 20 26 63 6f 6c 29 20 29 20 72 65 74 75 72 6e  , &col) ) return
17dc0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72   TCL_ERROR;..  r
17dd0 56 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f  Val = sqlite3_co
17de0 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28 70 53 74 6d  lumn_double(pStm
17df0 74 2c 20 63 6f 6c 29 3b 0a 20 20 54 63 6c 5f 53  t, col);.  Tcl_S
17e00 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
17e10 72 70 2c 20 54 63 6c 5f 4e 65 77 44 6f 75 62 6c  rp, Tcl_NewDoubl
17e20 65 4f 62 6a 28 72 56 61 6c 29 29 3b 0a 20 20 72  eObj(rVal));.  r
17e30 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
17e40 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  ./*.** Usage: sq
17e50 6c 69 74 65 33 5f 64 61 74 61 5f 63 6f 75 6e 74  lite3_data_count
17e60 20 53 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 52 65 74   STMT .**.** Ret
17e70 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
17e80 66 20 63 6f 6c 75 6d 6e 73 20 72 65 74 75 72 6e  f columns return
17e90 65 64 20 62 79 20 74 68 65 20 73 71 6c 20 73 74  ed by the sql st
17ea0 61 74 65 6d 65 6e 74 20 53 54 4d 54 2e 0a 2a 2f  atement STMT..*/
17eb0 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
17ec0 5f 64 61 74 61 5f 63 6f 75 6e 74 28 0a 20 20 76  _data_count(.  v
17ed0 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
17ee0 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
17ef0 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
17f00 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
17f10 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
17f20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
17f30 53 74 6d 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  Stmt;..  if( obj
17f40 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
17f50 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
17f60 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
17f70 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
17f80 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
17f90 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
17fa0 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e  ), " STMT column
17fb0 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
17fc0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
17fd0 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  ..  if( getStmtP
17fe0 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
17ff0 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
18000 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29  v[1]), &pStmt) )
18010 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
18020 52 3b 0a 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a  R;..  Tcl_SetObj
18030 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
18040 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c  cl_NewIntObj(sql
18050 69 74 65 33 5f 64 61 74 61 5f 63 6f 75 6e 74 28  ite3_data_count(
18060 70 53 74 6d 74 29 29 29 3b 0a 20 20 72 65 74 75  pStmt)));.  retu
18070 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
18080 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
18090 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 53  e3_column_text S
180a0 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a  TMT column.**.**
180b0 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
180c0 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 20  column_decltype 
180d0 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a  STMT column.**.*
180e0 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33  * Usage: sqlite3
180f0 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 20 53 54 4d  _column_name STM
18100 54 20 63 6f 6c 75 6d 6e 0a 2a 2f 0a 73 74 61 74  T column.*/.stat
18110 69 63 20 69 6e 74 20 74 65 73 74 5f 73 74 6d 74  ic int test_stmt
18120 5f 75 74 66 38 28 0a 20 20 76 6f 69 64 20 2a 20  _utf8(.  void * 
18130 63 6c 69 65 6e 74 44 61 74 61 2c 20 20 20 20 20  clientData,     
18140 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
18150 20 53 51 4c 69 74 65 20 41 50 49 20 66 75 6e 63   SQLite API func
18160 74 69 6f 6e 20 74 6f 20 62 65 20 69 6e 76 6f 6b  tion to be invok
18170 65 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72  e */.  Tcl_Inter
18180 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
18190 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
181a0 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
181b0 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  {.  sqlite3_stmt
181c0 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63   *pStmt;.  int c
181d0 6f 6c 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  ol;.  const char
181e0 20 2a 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74   *(*xFunc)(sqlit
181f0 65 33 5f 73 74 6d 74 2a 2c 20 69 6e 74 29 20 3d  e3_stmt*, int) =
18200 20 63 6c 69 65 6e 74 44 61 74 61 3b 0a 20 20 63   clientData;.  c
18210 6f 6e 73 74 20 63 68 61 72 20 2a 7a 52 65 74 3b  onst char *zRet;
18220 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20  ..  if( objc!=3 
18230 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
18240 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
18250 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
18260 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20  hould be \"", . 
18270 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
18280 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20  ing(objv[0]), " 
18290 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30 29  STMT column", 0)
182a0 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
182b0 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69  _ERROR;.  }..  i
182c0 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
182d0 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
182e0 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
182f0 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
18300 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
18310 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72  if( Tcl_GetIntFr
18320 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
18330 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20 29 20 72  jv[2], &col) ) r
18340 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
18350 0a 20 20 7a 52 65 74 20 3d 20 78 46 75 6e 63 28  .  zRet = xFunc(
18360 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20 69  pStmt, col);.  i
18370 66 28 20 7a 52 65 74 20 29 7b 0a 20 20 20 20 54  f( zRet ){.    T
18380 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74  cl_SetResult(int
18390 65 72 70 2c 20 28 63 68 61 72 20 2a 29 7a 52 65  erp, (char *)zRe
183a0 74 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 72 65 74  t, 0);.  }.  ret
183b0 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 73  urn TCL_OK;.}..s
183c0 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 67  tatic int test_g
183d0 6c 6f 62 61 6c 5f 72 65 63 6f 76 65 72 28 0a 20  lobal_recover(. 
183e0 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
183f0 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
18400 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
18410 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
18420 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
18430 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
18440 4f 4d 49 54 5f 47 4c 4f 42 41 4c 52 45 43 4f 56  OMIT_GLOBALRECOV
18450 45 52 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69  ER.  int rc;.  i
18460 66 28 20 6f 62 6a 63 21 3d 31 20 29 7b 0a 20 20  f( objc!=1 ){.  
18470 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72    Tcl_WrongNumAr
18480 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62  gs(interp, 1, ob
18490 6a 76 2c 20 22 22 29 3b 0a 20 20 20 20 72 65 74  jv, "");.    ret
184a0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
184b0 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65   }.  rc = sqlite
184c0 33 5f 67 6c 6f 62 61 6c 5f 72 65 63 6f 76 65 72  3_global_recover
184d0 28 29 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65 73  ();.  Tcl_SetRes
184e0 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61  ult(interp, (cha
184f0 72 20 2a 29 74 31 45 72 72 6f 72 4e 61 6d 65 28  r *)t1ErrorName(
18500 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43 29  rc), TCL_STATIC)
18510 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72  ;.#endif.  retur
18520 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
18530 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65  ** Usage: sqlite
18540 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 53 54  3_column_text ST
18550 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20  MT column.**.** 
18560 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63  Usage: sqlite3_c
18570 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 20 53  olumn_decltype S
18580 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a  TMT column.**.**
18590 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
185a0 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 20 53 54 4d 54  column_name STMT
185b0 20 63 6f 6c 75 6d 6e 0a 2a 2f 0a 73 74 61 74 69   column.*/.stati
185c0 63 20 69 6e 74 20 74 65 73 74 5f 73 74 6d 74 5f  c int test_stmt_
185d0 75 74 66 31 36 28 0a 20 20 76 6f 69 64 20 2a 20  utf16(.  void * 
185e0 63 6c 69 65 6e 74 44 61 74 61 2c 20 20 20 20 20  clientData,     
185f0 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 53 51  /* Pointer to SQ
18600 4c 69 74 65 20 41 50 49 20 66 75 6e 63 74 69 6f  Lite API functio
18610 6e 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64 20  n to be invoked 
18620 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  */.  Tcl_Interp 
18630 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
18640 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
18650 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
18660 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
18670 4d 49 54 5f 55 54 46 31 36 0a 20 20 73 71 6c 69  MIT_UTF16.  sqli
18680 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
18690 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a 20 20 54 63  .  int col;.  Tc
186a0 6c 5f 4f 62 6a 20 2a 70 52 65 74 3b 0a 20 20 63  l_Obj *pRet;.  c
186b0 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 4e 61 6d 65  onst void *zName
186c0 31 36 3b 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64  16;.  const void
186d0 20 2a 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74   *(*xFunc)(sqlit
186e0 65 33 5f 73 74 6d 74 2a 2c 20 69 6e 74 29 20 3d  e3_stmt*, int) =
186f0 20 63 6c 69 65 6e 74 44 61 74 61 3b 0a 0a 20 20   clientData;..  
18700 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20  if( objc!=3 ){. 
18710 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
18720 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
18730 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
18740 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20  d be \"", .     
18750 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28    Tcl_GetString(
18760 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54  objv[0]), " STMT
18770 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20   column", 0);.  
18780 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
18790 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67  OR;.  }..  if( g
187a0 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e  etStmtPointer(in
187b0 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
187c0 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70  ing(objv[1]), &p
187d0 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
187e0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
187f0 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62  Tcl_GetIntFromOb
18800 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32  j(interp, objv[2
18810 5d 2c 20 26 63 6f 6c 29 20 29 20 72 65 74 75 72  ], &col) ) retur
18820 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
18830 7a 4e 61 6d 65 31 36 20 3d 20 78 46 75 6e 63 28  zName16 = xFunc(
18840 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20 69  pStmt, col);.  i
18850 66 28 20 7a 4e 61 6d 65 31 36 20 29 7b 0a 20 20  f( zName16 ){.  
18860 20 20 70 52 65 74 20 3d 20 54 63 6c 5f 4e 65 77    pRet = Tcl_New
18870 42 79 74 65 41 72 72 61 79 4f 62 6a 28 7a 4e 61  ByteArrayObj(zNa
18880 6d 65 31 36 2c 20 73 71 6c 69 74 65 33 55 74 66  me16, sqlite3Utf
18890 31 36 42 79 74 65 4c 65 6e 28 7a 4e 61 6d 65 31  16ByteLen(zName1
188a0 36 2c 20 2d 31 29 2b 32 29 3b 0a 20 20 20 20 54  6, -1)+2);.    T
188b0 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
188c0 69 6e 74 65 72 70 2c 20 70 52 65 74 29 3b 0a 20  interp, pRet);. 
188d0 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
188e0 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a  ITE_OMIT_UTF16 *
188f0 2f 0a 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  /..  return TCL_
18900 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
18910 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ge: sqlite3_colu
18920 6d 6e 5f 69 6e 74 20 53 54 4d 54 20 63 6f 6c 75  mn_int STMT colu
18930 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  mn.**.** Usage: 
18940 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62  sqlite3_column_b
18950 79 74 65 73 20 53 54 4d 54 20 63 6f 6c 75 6d 6e  ytes STMT column
18960 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  .**.** Usage: sq
18970 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74  lite3_column_byt
18980 65 73 31 36 20 53 54 4d 54 20 63 6f 6c 75 6d 6e  es16 STMT column
18990 0a 2a 2a 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  .**.*/.static in
189a0 74 20 74 65 73 74 5f 73 74 6d 74 5f 69 6e 74 28  t test_stmt_int(
189b0 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
189c0 44 61 74 61 2c 20 20 20 20 2f 2a 20 50 6f 69 6e  Data,    /* Poin
189d0 74 65 72 20 74 6f 20 53 51 4c 69 74 65 20 41 50  ter to SQLite AP
189e0 49 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65  I function to be
189f0 20 69 6e 76 6f 6b 65 64 20 2a 2f 0a 20 20 54 63   invoked */.  Tc
18a00 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
18a10 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
18a20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
18a30 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74  bjv[].){.  sqlit
18a40 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a  e3_stmt *pStmt;.
18a50 20 20 69 6e 74 20 63 6f 6c 3b 0a 20 20 69 6e 74    int col;.  int
18a60 20 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74 65   (*xFunc)(sqlite
18a70 33 5f 73 74 6d 74 2a 2c 20 69 6e 74 29 20 3d 20  3_stmt*, int) = 
18a80 63 6c 69 65 6e 74 44 61 74 61 3b 0a 0a 20 20 69  clientData;..  i
18a90 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20  f( objc!=3 ){.  
18aa0 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
18ab0 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
18ac0 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
18ad0 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20   be \"", .      
18ae0 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
18af0 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20  bjv[0]), " STMT 
18b00 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20  column", 0);.   
18b10 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
18b20 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65  R;.  }..  if( ge
18b30 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74  tStmtPointer(int
18b40 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
18b50 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53  ng(objv[1]), &pS
18b60 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43  tmt) ) return TC
18b70 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54  L_ERROR;.  if( T
18b80 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a  cl_GetIntFromObj
18b90 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d  (interp, objv[2]
18ba0 2c 20 26 63 6f 6c 29 20 29 20 72 65 74 75 72 6e  , &col) ) return
18bb0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 54   TCL_ERROR;..  T
18bc0 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
18bd0 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49  interp, Tcl_NewI
18be0 6e 74 4f 62 6a 28 78 46 75 6e 63 28 70 53 74 6d  ntObj(xFunc(pStm
18bf0 74 2c 20 63 6f 6c 29 29 29 3b 0a 20 20 72 65 74  t, col)));.  ret
18c00 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 23  urn TCL_OK;.}..#
18c10 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
18c20 49 54 5f 44 49 53 4b 49 4f 0a 23 69 66 20 30 0a  IT_DISKIO.#if 0.
18c30 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
18c40 6c 69 74 65 33 4f 73 4f 70 65 6e 52 65 61 64 57  lite3OsOpenReadW
18c50 72 69 74 65 20 3c 66 69 6c 65 6e 61 6d 65 3e 0a  rite <filename>.
18c60 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
18c70 73 74 5f 73 71 6c 69 74 65 33 4f 73 4f 70 65 6e  st_sqlite3OsOpen
18c80 52 65 61 64 57 72 69 74 65 28 0a 20 20 76 6f 69  ReadWrite(.  voi
18c90 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
18ca0 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
18cb0 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
18cc0 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
18cd0 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73  ST objv[].){.  s
18ce0 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 46 69  qlite3_file *pFi
18cf0 6c 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  le;.  int rc;.  
18d00 69 6e 74 20 64 75 6d 6d 79 3b 0a 20 20 63 68 61  int dummy;.  cha
18d10 72 20 7a 42 75 66 5b 31 30 30 5d 3b 0a 0a 20 20  r zBuf[100];..  
18d20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20  if( objc!=2 ){. 
18d30 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
18d40 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
18d50 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
18d60 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20  d be \"", .     
18d70 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28    Tcl_GetString(
18d80 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 66 69 6c 65  objv[0]), " file
18d90 6e 61 6d 65 22 2c 20 30 29 3b 0a 20 20 20 20 72  name", 0);.    r
18da0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
18db0 0a 20 20 7d 0a 0a 20 20 72 63 20 3d 20 73 71 6c  .  }..  rc = sql
18dc0 69 74 65 33 4f 73 4f 70 65 6e 52 65 61 64 57 72  ite3OsOpenReadWr
18dd0 69 74 65 28 54 63 6c 5f 47 65 74 53 74 72 69 6e  ite(Tcl_GetStrin
18de0 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 46 69  g(objv[1]), &pFi
18df0 6c 65 2c 20 26 64 75 6d 6d 79 29 3b 0a 20 20 69  le, &dummy);.  i
18e00 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
18e10 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 52   ){.    Tcl_SetR
18e20 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63  esult(interp, (c
18e30 68 61 72 20 2a 29 74 31 45 72 72 6f 72 4e 61 6d  har *)t1ErrorNam
18e40 65 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49  e(rc), TCL_STATI
18e50 43 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  C);.    return T
18e60 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
18e70 73 71 6c 69 74 65 33 54 65 73 74 4d 61 6b 65 50  sqlite3TestMakeP
18e80 6f 69 6e 74 65 72 53 74 72 28 69 6e 74 65 72 70  ointerStr(interp
18e90 2c 20 7a 42 75 66 2c 20 70 46 69 6c 65 29 3b 0a  , zBuf, pFile);.
18ea0 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28    Tcl_SetResult(
18eb0 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29  interp, zBuf, 0)
18ec0 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ;.  return TCL_E
18ed0 52 52 4f 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  RROR;.}../*.** U
18ee0 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 4f 73  sage:  sqlite3Os
18ef0 43 6c 6f 73 65 20 3c 66 69 6c 65 20 68 61 6e 64  Close <file hand
18f00 6c 65 3e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  le>.*/.static in
18f10 74 20 74 65 73 74 5f 73 71 6c 69 74 65 33 4f 73  t test_sqlite3Os
18f20 43 6c 6f 73 65 28 0a 20 20 76 6f 69 64 20 2a 20  Close(.  void * 
18f30 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
18f40 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
18f50 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
18f60 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
18f70 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74  bjv[].){.  sqlit
18f80 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c 65 3b 0a  e3_file *pFile;.
18f90 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28    int rc;..  if(
18fa0 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20   objc!=2 ){.    
18fb0 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
18fc0 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
18fd0 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
18fe0 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54  e \"", .       T
18ff0 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
19000 76 5b 30 5d 29 2c 20 22 20 66 69 6c 65 68 61 6e  v[0]), " filehan
19010 64 6c 65 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  dle", 0);.    re
19020 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
19030 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 46 69    }..  if( getFi
19040 6c 65 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  lePointer(interp
19050 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
19060 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 46 69 6c 65  objv[1]), &pFile
19070 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
19080 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
19090 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 43   rc = sqlite3OsC
190a0 6c 6f 73 65 28 26 70 46 69 6c 65 29 3b 0a 20 20  lose(&pFile);.  
190b0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
190c0 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74  K ){.    Tcl_Set
190d0 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28  Result(interp, (
190e0 63 68 61 72 20 2a 29 74 31 45 72 72 6f 72 4e 61  char *)t1ErrorNa
190f0 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54  me(rc), TCL_STAT
19100 49 43 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  IC);.    return 
19110 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
19120 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
19130 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
19140 20 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b 20 3c   sqlite3OsLock <
19150 66 69 6c 65 20 68 61 6e 64 6c 65 3e 20 3c 6c 6f  file handle> <lo
19160 63 6b 74 79 70 65 3e 0a 2a 2f 0a 73 74 61 74 69  cktype>.*/.stati
19170 63 20 69 6e 74 20 74 65 73 74 5f 73 71 6c 69 74  c int test_sqlit
19180 65 33 4f 73 4c 6f 63 6b 28 0a 20 20 76 6f 69 64  e3OsLock(.  void
19190 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
191a0 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
191b0 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
191c0 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
191d0 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
191e0 6c 69 74 65 33 5f 66 69 6c 65 20 2a 20 70 46 69  lite3_file * pFi
191f0 6c 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20  le;.  int rc;.. 
19200 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a   if( objc!=3 ){.
19210 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
19220 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
19230 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
19240 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20  ld be \"", .    
19250 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
19260 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 0a 20 20 20  g(objv[0]), .   
19270 20 20 20 20 20 22 20 66 69 6c 65 68 61 6e 64 6c       " filehandl
19280 65 20 28 53 48 41 52 45 44 7c 52 45 53 45 52 56  e (SHARED|RESERV
19290 45 44 7c 50 45 4e 44 49 4e 47 7c 45 58 43 4c 55  ED|PENDING|EXCLU
192a0 53 49 56 45 29 22 2c 20 30 29 3b 0a 20 20 20 20  SIVE)", 0);.    
192b0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
192c0 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
192d0 46 69 6c 65 50 6f 69 6e 74 65 72 28 69 6e 74 65  FilePointer(inte
192e0 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
192f0 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 46 69  g(objv[1]), &pFi
19300 6c 65 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72  le) ){.    retur
19310 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
19320 0a 0a 20 20 69 66 28 20 30 3d 3d 73 74 72 63 6d  ..  if( 0==strcm
19330 70 28 22 53 48 41 52 45 44 22 2c 20 54 63 6c 5f  p("SHARED", Tcl_
19340 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32  GetString(objv[2
19350 5d 29 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ])) ){.    rc = 
19360 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b 28 70 46  sqlite3OsLock(pF
19370 69 6c 65 2c 20 53 48 41 52 45 44 5f 4c 4f 43 4b  ile, SHARED_LOCK
19380 29 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66  );.  }.  else if
19390 28 20 30 3d 3d 73 74 72 63 6d 70 28 22 52 45 53  ( 0==strcmp("RES
193a0 45 52 56 45 44 22 2c 20 54 63 6c 5f 47 65 74 53  ERVED", Tcl_GetS
193b0 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 29 20  tring(objv[2])) 
193c0 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
193d0 74 65 33 4f 73 4c 6f 63 6b 28 70 46 69 6c 65 2c  te3OsLock(pFile,
193e0 20 52 45 53 45 52 56 45 44 5f 4c 4f 43 4b 29 3b   RESERVED_LOCK);
193f0 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20  .  }.  else if( 
19400 30 3d 3d 73 74 72 63 6d 70 28 22 50 45 4e 44 49  0==strcmp("PENDI
19410 4e 47 22 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  NG", Tcl_GetStri
19420 6e 67 28 6f 62 6a 76 5b 32 5d 29 29 20 29 7b 0a  ng(objv[2])) ){.
19430 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
19440 4f 73 4c 6f 63 6b 28 70 46 69 6c 65 2c 20 50 45  OsLock(pFile, PE
19450 4e 44 49 4e 47 5f 4c 4f 43 4b 29 3b 0a 20 20 7d  NDING_LOCK);.  }
19460 0a 20 20 65 6c 73 65 20 69 66 28 20 30 3d 3d 73  .  else if( 0==s
19470 74 72 63 6d 70 28 22 45 58 43 4c 55 53 49 56 45  trcmp("EXCLUSIVE
19480 22 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  ", Tcl_GetString
19490 28 6f 62 6a 76 5b 32 5d 29 29 20 29 7b 0a 20 20  (objv[2])) ){.  
194a0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73    rc = sqlite3Os
194b0 4c 6f 63 6b 28 70 46 69 6c 65 2c 20 45 58 43 4c  Lock(pFile, EXCL
194c0 55 53 49 56 45 5f 4c 4f 43 4b 29 3b 0a 20 20 7d  USIVE_LOCK);.  }
194d0 65 6c 73 65 7b 0a 20 20 20 20 54 63 6c 5f 41 70  else{.    Tcl_Ap
194e0 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
194f0 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
19500 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
19510 20 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65   .        Tcl_Ge
19520 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29  tString(objv[0])
19530 2c 20 0a 20 20 20 20 20 20 20 20 22 20 66 69 6c  , .        " fil
19540 65 68 61 6e 64 6c 65 20 28 53 48 41 52 45 44 7c  ehandle (SHARED|
19550 52 45 53 45 52 56 45 44 7c 50 45 4e 44 49 4e 47  RESERVED|PENDING
19560 7c 45 58 43 4c 55 53 49 56 45 29 22 2c 20 30 29  |EXCLUSIVE)", 0)
19570 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
19580 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69  _ERROR;.  }..  i
19590 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
195a0 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 52   ){.    Tcl_SetR
195b0 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63  esult(interp, (c
195c0 68 61 72 20 2a 29 74 31 45 72 72 6f 72 4e 61 6d  har *)t1ErrorNam
195d0 65 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49  e(rc), TCL_STATI
195e0 43 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  C);.    return T
195f0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
19600 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
19610 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
19620 73 71 6c 69 74 65 33 4f 73 55 6e 6c 6f 63 6b 20  sqlite3OsUnlock 
19630 3c 66 69 6c 65 20 68 61 6e 64 6c 65 3e 0a 2a 2f  <file handle>.*/
19640 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
19650 5f 73 71 6c 69 74 65 33 4f 73 55 6e 6c 6f 63 6b  _sqlite3OsUnlock
19660 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
19670 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
19680 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
19690 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
196a0 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
196b0 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69  .){.  sqlite3_fi
196c0 6c 65 20 2a 20 70 46 69 6c 65 3b 0a 20 20 69 6e  le * pFile;.  in
196d0 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  t rc;..  if( obj
196e0 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
196f0 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
19700 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
19710 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
19720 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
19730 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
19740 29 2c 20 22 20 66 69 6c 65 68 61 6e 64 6c 65 22  ), " filehandle"
19750 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
19760 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
19770 0a 20 20 69 66 28 20 67 65 74 46 69 6c 65 50 6f  .  if( getFilePo
19780 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
19790 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
197a0 5b 31 5d 29 2c 20 26 70 46 69 6c 65 29 20 29 7b  [1]), &pFile) ){
197b0 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
197c0 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 63 20  ERROR;.  }.  rc 
197d0 3d 20 73 71 6c 69 74 65 33 4f 73 55 6e 6c 6f 63  = sqlite3OsUnloc
197e0 6b 28 70 46 69 6c 65 2c 20 4e 4f 5f 4c 4f 43 4b  k(pFile, NO_LOCK
197f0 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  );.  if( rc!=SQL
19800 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 63  ITE_OK ){.    Tc
19810 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65  l_SetResult(inte
19820 72 70 2c 20 28 63 68 61 72 20 2a 29 74 31 45 72  rp, (char *)t1Er
19830 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c  rorName(rc), TCL
19840 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 72 65  _STATIC);.    re
19850 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
19860 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c    }.  return TCL
19870 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
19880 61 67 65 3a 20 20 73 71 6c 69 74 65 33 4f 73 54  age:  sqlite3OsT
19890 65 6d 70 46 69 6c 65 4e 61 6d 65 0a 2a 2f 0a 73  empFileName.*/.s
198a0 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 73  tatic int test_s
198b0 71 6c 69 74 65 33 4f 73 54 65 6d 70 46 69 6c 65  qlite3OsTempFile
198c0 4e 61 6d 65 28 0a 20 20 76 6f 69 64 20 2a 20 63  Name(.  void * c
198d0 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
198e0 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
198f0 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
19900 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
19910 6a 76 5b 5d 0a 29 7b 0a 20 20 63 68 61 72 20 7a  jv[].){.  char z
19920 46 69 6c 65 5b 53 51 4c 49 54 45 5f 54 45 4d 50  File[SQLITE_TEMP
19930 4e 41 4d 45 5f 53 49 5a 45 5d 3b 0a 20 20 69 6e  NAME_SIZE];.  in
19940 74 20 72 63 3b 0a 0a 20 20 72 63 20 3d 20 73 71  t rc;..  rc = sq
19950 6c 69 74 65 33 4f 73 54 65 6d 70 46 69 6c 65 4e  lite3OsTempFileN
19960 61 6d 65 28 7a 46 69 6c 65 29 3b 0a 20 20 69 66  ame(zFile);.  if
19970 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
19980 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 52 65  ){.    Tcl_SetRe
19990 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68  sult(interp, (ch
199a0 61 72 20 2a 29 74 31 45 72 72 6f 72 4e 61 6d 65  ar *)t1ErrorName
199b0 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43  (rc), TCL_STATIC
199c0 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
199d0 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 54  L_ERROR;.  }.  T
199e0 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
199f0 69 6e 74 65 72 70 2c 20 7a 46 69 6c 65 2c 20 30  interp, zFile, 0
19a00 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
19a10 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 23 65 6e  OK;.}.#endif.#en
19a20 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  dif../*.** Usage
19a30 3a 20 20 73 71 6c 69 74 65 5f 73 65 74 5f 6d 61  :  sqlite_set_ma
19a40 67 69 63 20 20 44 42 20 20 4d 41 47 49 43 2d 4e  gic  DB  MAGIC-N
19a50 55 4d 42 45 52 0a 2a 2a 0a 2a 2a 20 53 65 74 20  UMBER.**.** Set 
19a60 74 68 65 20 64 62 2d 3e 6d 61 67 69 63 20 76 61  the db->magic va
19a70 6c 75 65 2e 20 20 54 68 69 73 20 69 73 20 75 73  lue.  This is us
19a80 65 64 20 74 6f 20 74 65 73 74 20 65 72 72 6f 72  ed to test error
19a90 20 72 65 63 6f 76 65 72 79 20 6c 6f 67 69 63 2e   recovery logic.
19aa0 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73  .*/.static int s
19ab0 71 6c 69 74 65 5f 73 65 74 5f 6d 61 67 69 63 28  qlite_set_magic(
19ac0 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
19ad0 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
19ae0 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
19af0 74 20 61 72 67 63 2c 0a 20 20 63 68 61 72 20 2a  t argc,.  char *
19b00 2a 61 72 67 76 0a 29 7b 0a 20 20 73 71 6c 69 74  *argv.){.  sqlit
19b10 65 33 20 2a 64 62 3b 0a 20 20 69 66 28 20 61 72  e3 *db;.  if( ar
19b20 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=3 ){.    Tcl
19b30 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
19b40 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
19b50 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
19b60 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20  "", argv[0],.   
19b70 20 20 20 20 20 20 22 20 44 42 20 4d 41 47 49 43        " DB MAGIC
19b80 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
19b90 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
19ba0 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e  .  if( getDbPoin
19bb0 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76  ter(interp, argv
19bc0 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75  [1], &db) ) retu
19bd0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
19be0 69 66 28 20 73 74 72 63 6d 70 28 61 72 67 76 5b  if( strcmp(argv[
19bf0 32 5d 2c 20 22 53 51 4c 49 54 45 5f 4d 41 47 49  2], "SQLITE_MAGI
19c00 43 5f 4f 50 45 4e 22 29 3d 3d 30 20 29 7b 0a 20  C_OPEN")==0 ){. 
19c10 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53     db->magic = S
19c20 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e  QLITE_MAGIC_OPEN
19c30 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74  ;.  }else if( st
19c40 72 63 6d 70 28 61 72 67 76 5b 32 5d 2c 20 22 53  rcmp(argv[2], "S
19c50 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53  QLITE_MAGIC_CLOS
19c60 45 44 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 64  ED")==0 ){.    d
19c70 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54  b->magic = SQLIT
19c80 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 3b 0a  E_MAGIC_CLOSED;.
19c90 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
19ca0 6d 70 28 61 72 67 76 5b 32 5d 2c 20 22 53 51 4c  mp(argv[2], "SQL
19cb0 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 22 29  ITE_MAGIC_BUSY")
19cc0 3d 3d 30 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d  ==0 ){.    db->m
19cd0 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41  agic = SQLITE_MA
19ce0 47 49 43 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73  GIC_BUSY;.  }els
19cf0 65 20 69 66 28 20 73 74 72 63 6d 70 28 61 72 67  e if( strcmp(arg
19d00 76 5b 32 5d 2c 20 22 53 51 4c 49 54 45 5f 4d 41  v[2], "SQLITE_MA
19d10 47 49 43 5f 45 52 52 4f 52 22 29 3d 3d 30 20 29  GIC_ERROR")==0 )
19d20 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20  {.    db->magic 
19d30 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45  = SQLITE_MAGIC_E
19d40 52 52 4f 52 3b 0a 20 20 7d 65 6c 73 65 20 69 66  RROR;.  }else if
19d50 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74  ( Tcl_GetInt(int
19d60 65 72 70 2c 20 61 72 67 76 5b 32 5d 2c 20 26 64  erp, argv[2], &d
19d70 62 2d 3e 6d 61 67 69 63 29 20 29 7b 0a 20 20 20  b->magic) ){.   
19d80 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
19d90 52 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  R;.  }.  return 
19da0 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
19db0 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33   Usage:  sqlite3
19dc0 5f 69 6e 74 65 72 72 75 70 74 20 20 44 42 20 0a  _interrupt  DB .
19dd0 2a 2a 0a 2a 2a 20 54 72 69 67 67 65 72 20 61 6e  **.** Trigger an
19de0 20 69 6e 74 65 72 72 75 70 74 20 6f 6e 20 44 42   interrupt on DB
19df0 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
19e00 65 73 74 5f 69 6e 74 65 72 72 75 70 74 28 0a 20  est_interrupt(. 
19e10 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
19e20 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
19e30 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
19e40 61 72 67 63 2c 0a 20 20 63 68 61 72 20 2a 2a 61  argc,.  char **a
19e50 72 67 76 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  rgv.){.  sqlite3
19e60 20 2a 64 62 3b 0a 20 20 69 66 28 20 61 72 67 63   *db;.  if( argc
19e70 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=2 ){.    Tcl_A
19e80 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
19e90 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
19ea0 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
19eb0 2c 20 61 72 67 76 5b 30 5d 2c 20 22 20 44 42 22  , argv[0], " DB"
19ec0 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
19ed0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
19ee0 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74    if( getDbPoint
19ef0 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  er(interp, argv[
19f00 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72  1], &db) ) retur
19f10 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 73  n TCL_ERROR;.  s
19f20 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
19f30 28 64 62 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  (db);.  return T
19f40 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 73 74 61 74 69 63  CL_OK;.}..static
19f50 20 75 38 20 2a 73 71 6c 69 74 65 33 5f 73 74 61   u8 *sqlite3_sta
19f60 63 6b 5f 62 61 73 65 6c 69 6e 65 20 3d 20 30 3b  ck_baseline = 0;
19f70 0a 0a 2f 2a 0a 2a 2a 20 46 69 6c 6c 20 74 68 65  ../*.** Fill the
19f80 20 73 74 61 63 6b 20 77 69 74 68 20 61 20 6b 6e   stack with a kn
19f90 6f 77 6e 20 62 69 74 70 61 74 74 65 72 6e 2e 0a  own bitpattern..
19fa0 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 70  */.static void p
19fb0 72 65 70 53 74 61 63 6b 28 76 6f 69 64 29 7b 0a  repStack(void){.
19fc0 20 20 69 6e 74 20 69 3b 0a 20 20 75 33 32 20 62    int i;.  u32 b
19fd0 69 67 42 75 66 5b 36 35 35 33 36 5d 3b 0a 20 20  igBuf[65536];.  
19fe0 66 6f 72 28 69 3d 30 3b 20 69 3c 73 69 7a 65 6f  for(i=0; i<sizeo
19ff0 66 28 62 69 67 42 75 66 29 3b 20 69 2b 2b 29 20  f(bigBuf); i++) 
1a000 62 69 67 42 75 66 5b 69 5d 20 3d 20 30 78 64 65  bigBuf[i] = 0xde
1a010 61 64 62 65 65 66 3b 0a 20 20 73 71 6c 69 74 65  adbeef;.  sqlite
1a020 33 5f 73 74 61 63 6b 5f 62 61 73 65 6c 69 6e 65  3_stack_baseline
1a030 20 3d 20 28 75 38 2a 29 26 62 69 67 42 75 66 5b   = (u8*)&bigBuf[
1a040 36 35 35 33 36 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  65536];.}../*.**
1a050 20 47 65 74 20 74 68 65 20 63 75 72 72 65 6e 74   Get the current
1a060 20 73 74 61 63 6b 20 64 65 70 74 68 2e 20 20 55   stack depth.  U
1a070 73 65 64 20 66 6f 72 20 64 65 62 75 67 67 69 6e  sed for debuggin
1a080 67 20 6f 6e 6c 79 2e 0a 2a 2f 0a 75 36 34 20 73  g only..*/.u64 s
1a090 71 6c 69 74 65 33 53 74 61 63 6b 44 65 70 74 68  qlite3StackDepth
1a0a0 28 76 6f 69 64 29 7b 0a 20 20 75 38 20 78 3b 0a  (void){.  u8 x;.
1a0b0 20 20 72 65 74 75 72 6e 20 28 75 36 34 29 28 73    return (u64)(s
1a0c0 71 6c 69 74 65 33 5f 73 74 61 63 6b 5f 62 61 73  qlite3_stack_bas
1a0d0 65 6c 69 6e 65 20 2d 20 26 78 29 3b 0a 7d 0a 0a  eline - &x);.}..
1a0e0 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
1a0f0 6c 69 74 65 33 5f 73 74 61 63 6b 5f 75 73 65 64  lite3_stack_used
1a100 20 44 42 20 53 51 4c 0a 2a 2a 0a 2a 2a 20 54 72   DB SQL.**.** Tr
1a110 79 20 74 6f 20 6d 65 61 73 75 72 65 20 74 68 65  y to measure the
1a120 20 61 6d 6f 75 6e 74 20 6f 66 20 73 74 61 63 6b   amount of stack
1a130 20 73 70 61 63 65 20 75 73 65 64 20 62 79 20 61   space used by a
1a140 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33   call to sqlite3
1a150 5f 65 78 65 63 0a 2a 2f 0a 73 74 61 74 69 63 20  _exec.*/.static 
1a160 69 6e 74 20 74 65 73 74 5f 73 74 61 63 6b 5f 75  int test_stack_u
1a170 73 65 64 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  sed(.  void * cl
1a180 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
1a190 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
1a1a0 20 20 69 6e 74 20 61 72 67 63 2c 0a 20 20 63 68    int argc,.  ch
1a1b0 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 73  ar **argv.){.  s
1a1c0 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e  qlite3 *db;.  in
1a1d0 74 20 69 3b 0a 20 20 69 66 28 20 61 72 67 63 21  t i;.  if( argc!
1a1e0 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =3 ){.    Tcl_Ap
1a1f0 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
1a200 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
1a210 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
1a220 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20   argv[0], .     
1a230 20 20 20 22 20 44 42 20 53 51 4c 22 2c 20 30 29     " DB SQL", 0)
1a240 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
1a250 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
1a260 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69  ( getDbPointer(i
1a270 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20  nterp, argv[1], 
1a280 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
1a290 4c 5f 45 52 52 4f 52 3b 0a 20 20 70 72 65 70 53  L_ERROR;.  prepS
1a2a0 74 61 63 6b 28 29 3b 0a 20 20 28 76 6f 69 64 29  tack();.  (void)
1a2b0 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c  sqlite3_exec(db,
1a2c0 20 61 72 67 76 5b 32 5d 2c 20 30 2c 20 30 2c 20   argv[2], 0, 0, 
1a2d0 30 29 3b 0a 20 20 66 6f 72 28 69 3d 36 35 35 33  0);.  for(i=6553
1a2e0 35 3b 20 69 3e 3d 30 20 26 26 20 28 28 75 33 32  5; i>=0 && ((u32
1a2f0 2a 29 73 71 6c 69 74 65 33 5f 73 74 61 63 6b 5f  *)sqlite3_stack_
1a300 62 61 73 65 6c 69 6e 65 29 5b 2d 69 5d 3d 3d 30  baseline)[-i]==0
1a310 78 64 65 61 64 62 65 65 66 3b 20 69 2d 2d 29 7b  xdeadbeef; i--){
1a320 7d 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65  }.  Tcl_SetObjRe
1a330 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
1a340 5f 4e 65 77 49 6e 74 4f 62 6a 28 69 2a 34 29 29  _NewIntObj(i*4))
1a350 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
1a360 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
1a370 65 3a 20 73 71 6c 69 74 65 5f 64 65 6c 65 74 65  e: sqlite_delete
1a380 5f 66 75 6e 63 74 69 6f 6e 20 44 42 20 66 75 6e  _function DB fun
1a390 63 74 69 6f 6e 2d 6e 61 6d 65 0a 2a 2a 0a 2a 2a  ction-name.**.**
1a3a0 20 44 65 6c 65 74 65 20 74 68 65 20 75 73 65 72   Delete the user
1a3b0 20 66 75 6e 63 74 69 6f 6e 20 27 66 75 6e 63 74   function 'funct
1a3c0 69 6f 6e 2d 6e 61 6d 65 27 20 66 72 6f 6d 20 64  ion-name' from d
1a3d0 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 44  atabase handle D
1a3e0 42 2e 20 49 74 0a 2a 2a 20 69 73 20 61 73 73 75  B. It.** is assu
1a3f0 6d 65 64 20 74 68 61 74 20 74 68 65 20 75 73 65  med that the use
1a400 72 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 63  r function was c
1a410 72 65 61 74 65 64 20 61 73 20 55 54 46 38 2c 20  reated as UTF8, 
1a420 61 6e 79 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a  any number of.**
1a430 20 61 72 67 75 6d 65 6e 74 73 20 28 74 68 65 20   arguments (the 
1a440 77 61 79 20 74 68 65 20 54 43 4c 20 69 6e 74 65  way the TCL inte
1a450 72 66 61 63 65 20 64 6f 65 73 20 69 74 29 2e 0a  rface does it)..
1a460 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 64 65  */.static int de
1a470 6c 65 74 65 5f 66 75 6e 63 74 69 6f 6e 28 0a 20  lete_function(. 
1a480 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
1a490 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
1a4a0 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
1a4b0 61 72 67 63 2c 0a 20 20 63 68 61 72 20 2a 2a 61  argc,.  char **a
1a4c0 72 67 76 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b  rgv.){.  int rc;
1a4d0 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a  .  sqlite3 *db;.
1a4e0 20 20 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b    if( argc!=3 ){
1a4f0 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
1a500 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
1a510 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
1a520 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76  uld be \"", argv
1a530 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 20 22 20  [0], .        " 
1a540 44 42 20 66 75 6e 63 74 69 6f 6e 2d 6e 61 6d 65  DB function-name
1a550 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
1a560 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
1a570 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e  .  if( getDbPoin
1a580 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76  ter(interp, argv
1a590 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75  [1], &db) ) retu
1a5a0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
1a5b0 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65  rc = sqlite3_cre
1a5c0 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c  ate_function(db,
1a5d0 20 61 72 67 76 5b 32 5d 2c 20 2d 31 2c 20 53 51   argv[2], -1, SQ
1a5e0 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 20 30 2c  LITE_UTF8, 0, 0,
1a5f0 20 30 2c 20 30 29 3b 0a 20 20 54 63 6c 5f 53 65   0, 0);.  Tcl_Se
1a600 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  tResult(interp, 
1a610 28 63 68 61 72 20 2a 29 74 31 45 72 72 6f 72 4e  (char *)t1ErrorN
1a620 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54 41  ame(rc), TCL_STA
1a630 54 49 43 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  TIC);.  return T
1a640 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
1a650 55 73 61 67 65 3a 20 73 71 6c 69 74 65 5f 64 65  Usage: sqlite_de
1a660 6c 65 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 20 44  lete_collation D
1a670 42 20 63 6f 6c 6c 61 74 69 6f 6e 2d 6e 61 6d 65  B collation-name
1a680 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68  .**.** Delete th
1a690 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  e collation sequ
1a6a0 65 6e 63 65 20 27 63 6f 6c 6c 61 74 69 6f 6e 2d  ence 'collation-
1a6b0 6e 61 6d 65 27 20 66 72 6f 6d 20 64 61 74 61 62  name' from datab
1a6c0 61 73 65 20 68 61 6e 64 6c 65 20 0a 2a 2a 20 44  ase handle .** D
1a6d0 42 2e 20 49 74 20 69 73 20 61 73 73 75 6d 65 64  B. It is assumed
1a6e0 20 74 68 61 74 20 74 68 65 20 63 6f 6c 6c 61 74   that the collat
1a6f0 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 61 73  ion sequence was
1a700 20 63 72 65 61 74 65 64 20 61 73 20 55 54 46 38   created as UTF8
1a710 20 28 74 68 65 20 0a 2a 2a 20 77 61 79 20 74 68   (the .** way th
1a720 65 20 54 43 4c 20 69 6e 74 65 72 66 61 63 65 20  e TCL interface 
1a730 64 6f 65 73 20 69 74 29 2e 0a 2a 2f 0a 73 74 61  does it)..*/.sta
1a740 74 69 63 20 69 6e 74 20 64 65 6c 65 74 65 5f 63  tic int delete_c
1a750 6f 6c 6c 61 74 69 6f 6e 28 0a 20 20 76 6f 69 64  ollation(.  void
1a760 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
1a770 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
1a780 65 72 70 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c  erp,.  int argc,
1a790 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 0a 29  .  char **argv.)
1a7a0 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 73 71  {.  int rc;.  sq
1a7b0 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 66 28  lite3 *db;.  if(
1a7c0 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20   argc!=3 ){.    
1a7d0 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
1a7e0 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
1a7f0 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
1a800 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20  e \"", argv[0], 
1a810 0a 20 20 20 20 20 20 20 20 22 20 44 42 20 66 75  .        " DB fu
1a820 6e 63 74 69 6f 6e 2d 6e 61 6d 65 22 2c 20 30 29  nction-name", 0)
1a830 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
1a840 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
1a850 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69  ( getDbPointer(i
1a860 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20  nterp, argv[1], 
1a870 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
1a880 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20  L_ERROR;.  rc = 
1a890 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63  sqlite3_create_c
1a8a0 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 61 72 67  ollation(db, arg
1a8b0 76 5b 32 5d 2c 20 53 51 4c 49 54 45 5f 55 54 46  v[2], SQLITE_UTF
1a8c0 38 2c 20 30 2c 20 30 29 3b 0a 20 20 54 63 6c 5f  8, 0, 0);.  Tcl_
1a8d0 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70  SetResult(interp
1a8e0 2c 20 28 63 68 61 72 20 2a 29 74 31 45 72 72 6f  , (char *)t1Erro
1a8f0 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53  rName(rc), TCL_S
1a900 54 41 54 49 43 29 3b 0a 20 20 72 65 74 75 72 6e  TATIC);.  return
1a910 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
1a920 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33  * Usage: sqlite3
1a930 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20  _get_autocommit 
1a940 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  DB.**.** Return 
1a950 74 72 75 65 20 69 66 20 74 68 65 20 64 61 74 61  true if the data
1a960 62 61 73 65 20 44 42 20 69 73 20 63 75 72 72 65  base DB is curre
1a970 6e 74 6c 79 20 69 6e 20 61 75 74 6f 2d 63 6f 6d  ntly in auto-com
1a980 6d 69 74 20 6d 6f 64 65 2e 0a 2a 2a 20 52 65 74  mit mode..** Ret
1a990 75 72 6e 20 66 61 6c 73 65 20 69 66 20 6e 6f 74  urn false if not
1a9a0 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
1a9b0 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 28 0a  get_autocommit(.
1a9c0 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
1a9d0 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
1a9e0 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
1a9f0 20 61 72 67 63 2c 0a 20 20 63 68 61 72 20 2a 2a   argc,.  char **
1aa00 61 72 67 76 0a 29 7b 0a 20 20 63 68 61 72 20 7a  argv.){.  char z
1aa10 42 75 66 5b 33 30 5d 3b 0a 20 20 73 71 6c 69 74  Buf[30];.  sqlit
1aa20 65 33 20 2a 64 62 3b 0a 20 20 69 66 28 20 61 72  e3 *db;.  if( ar
1aa30 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=2 ){.    Tcl
1aa40 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
1aa50 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
1aa60 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
1aa70 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20  "", argv[0], .  
1aa80 20 20 20 20 20 20 22 20 44 42 22 2c 20 30 29 3b        " DB", 0);
1aa90 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
1aaa0 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
1aab0 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e   getDbPointer(in
1aac0 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26  terp, argv[1], &
1aad0 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  db) ) return TCL
1aae0 5f 45 52 52 4f 52 3b 0a 20 20 73 70 72 69 6e 74  _ERROR;.  sprint
1aaf0 66 28 7a 42 75 66 2c 20 22 25 64 22 2c 20 73 71  f(zBuf, "%d", sq
1ab00 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f  lite3_get_autoco
1ab10 6d 6d 69 74 28 64 62 29 29 3b 0a 20 20 54 63 6c  mmit(db));.  Tcl
1ab20 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
1ab30 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a  terp, zBuf, 0);.
1ab40 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
1ab50 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
1ab60 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69   sqlite3_busy_ti
1ab70 6d 65 6f 75 74 20 44 42 20 4d 53 0a 2a 2a 0a 2a  meout DB MS.**.*
1ab80 2a 20 53 65 74 20 74 68 65 20 62 75 73 79 20 74  * Set the busy t
1ab90 69 6d 65 6f 75 74 2e 20 20 54 68 69 73 20 69 73  imeout.  This is
1aba0 20 6d 6f 72 65 20 65 61 73 69 6c 79 20 64 6f 6e   more easily don
1abb0 65 20 75 73 69 6e 67 20 74 68 65 20 74 69 6d 65  e using the time
1abc0 6f 75 74 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66  out.** method of
1abd0 20 74 68 65 20 54 43 4c 20 69 6e 74 65 72 66 61   the TCL interfa
1abe0 63 65 2e 20 20 42 75 74 20 77 65 20 6e 65 65 64  ce.  But we need
1abf0 20 61 20 77 61 79 20 74 6f 20 74 65 73 74 20 74   a way to test t
1ac00 68 65 20 63 61 73 65 0a 2a 2a 20 77 68 65 72 65  he case.** where
1ac10 20 69 74 20 72 65 74 75 72 6e 73 20 53 51 4c 49   it returns SQLI
1ac20 54 45 5f 4d 49 53 55 53 45 2e 0a 2a 2f 0a 73 74  TE_MISUSE..*/.st
1ac30 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 75  atic int test_bu
1ac40 73 79 5f 74 69 6d 65 6f 75 74 28 0a 20 20 76 6f  sy_timeout(.  vo
1ac50 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
1ac60 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
1ac70 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 61 72 67  nterp,.  int arg
1ac80 63 2c 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  c,.  char **argv
1ac90 0a 29 7b 0a 20 20 69 6e 74 20 72 63 2c 20 6d 73  .){.  int rc, ms
1aca0 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  ;.  sqlite3 *db;
1acb0 0a 20 20 69 66 28 20 61 72 67 63 21 3d 33 20 29  .  if( argc!=3 )
1acc0 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
1acd0 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
1ace0 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
1acf0 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
1ad00 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 20 22  v[0], .        "
1ad10 20 44 42 22 2c 20 30 29 3b 0a 20 20 20 20 72 65   DB", 0);.    re
1ad20 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
1ad30 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
1ad40 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61  ointer(interp, a
1ad50 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72  rgv[1], &db) ) r
1ad60 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
1ad70 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e  .  if( Tcl_GetIn
1ad80 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 32  t(interp, argv[2
1ad90 5d 2c 20 26 6d 73 29 20 29 20 72 65 74 75 72 6e  ], &ms) ) return
1ada0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63   TCL_ERROR;.  rc
1adb0 20 3d 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f   = sqlite3_busy_
1adc0 74 69 6d 65 6f 75 74 28 64 62 2c 20 6d 73 29 3b  timeout(db, ms);
1add0 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73  .  Tcl_AppendRes
1ade0 75 6c 74 28 69 6e 74 65 72 70 2c 20 73 71 6c 69  ult(interp, sqli
1adf0 74 65 33 54 65 73 74 45 72 72 6f 72 4e 61 6d 65  te3TestErrorName
1ae00 28 72 63 29 2c 20 30 29 3b 0a 20 20 72 65 74 75  (rc), 0);.  retu
1ae10 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
1ae20 0a 2a 2a 20 55 73 61 67 65 3a 20 20 74 63 6c 5f  .** Usage:  tcl_
1ae30 76 61 72 69 61 62 6c 65 5f 74 79 70 65 20 56 41  variable_type VA
1ae40 52 49 41 42 4c 45 4e 41 4d 45 0a 2a 2a 0a 2a 2a  RIABLENAME.**.**
1ae50 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61 6d 65   Return the name
1ae60 20 6f 66 20 74 68 65 20 69 6e 74 65 72 6e 61 6c   of the internal
1ae70 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
1ae80 66 6f 72 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65  for the.** value
1ae90 20 6f 66 20 74 68 65 20 67 69 76 65 6e 20 76 61   of the given va
1aea0 72 69 61 62 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69  riable..*/.stati
1aeb0 63 20 69 6e 74 20 74 63 6c 5f 76 61 72 69 61 62  c int tcl_variab
1aec0 6c 65 5f 74 79 70 65 28 0a 20 20 76 6f 69 64 20  le_type(.  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 54 63 6c   objv[].){.  Tcl
1af20 5f 4f 62 6a 20 2a 70 56 61 72 3b 0a 20 20 69 66  _Obj *pVar;.  if
1af30 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
1af40 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67   Tcl_WrongNumArg
1af50 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a  s(interp, 1, obj
1af60 76 2c 20 22 56 41 52 49 41 42 4c 45 22 29 3b 0a  v, "VARIABLE");.
1af70 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
1af80 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 70 56 61 72  RROR;.  }.  pVar
1af90 20 3d 20 54 63 6c 5f 47 65 74 56 61 72 32 45 78   = Tcl_GetVar2Ex
1afa0 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
1afb0 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
1afc0 20 30 2c 20 54 43 4c 5f 4c 45 41 56 45 5f 45 52   0, TCL_LEAVE_ER
1afd0 52 5f 4d 53 47 29 3b 0a 20 20 69 66 28 20 70 56  R_MSG);.  if( pV
1afe0 61 72 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 54  ar==0 ) return T
1aff0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
1b000 70 56 61 72 2d 3e 74 79 70 65 50 74 72 20 29 7b  pVar->typePtr ){
1b010 0a 20 20 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52  .    Tcl_SetObjR
1b020 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
1b030 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 70  l_NewStringObj(p
1b040 56 61 72 2d 3e 74 79 70 65 50 74 72 2d 3e 6e 61  Var->typePtr->na
1b050 6d 65 2c 20 2d 31 29 29 3b 0a 20 20 7d 0a 20 20  me, -1));.  }.  
1b060 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
1b070 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
1b080 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73 65 5f  sqlite3_release_
1b090 6d 65 6d 6f 72 79 20 3f 4e 3f 0a 2a 2a 0a 2a 2a  memory ?N?.**.**
1b0a0 20 41 74 74 65 6d 70 74 20 74 6f 20 72 65 6c 65   Attempt to rele
1b0b0 61 73 65 20 6d 65 6d 6f 72 79 20 63 75 72 72 65  ase memory curre
1b0c0 6e 74 6c 79 20 68 65 6c 64 20 62 75 74 20 6e 6f  ntly held but no
1b0d0 74 20 61 63 74 75 61 6c 6c 79 20 72 65 71 75 69  t actually requi
1b0e0 72 65 64 2e 0a 2a 2a 20 54 68 65 20 69 6e 74 65  red..** The inte
1b0f0 67 65 72 20 4e 20 69 73 20 74 68 65 20 6e 75 6d  ger N is the num
1b100 62 65 72 20 6f 66 20 62 79 74 65 73 20 77 65 20  ber of bytes we 
1b110 61 72 65 20 74 72 79 69 6e 67 20 74 6f 20 72 65  are trying to re
1b120 6c 65 61 73 65 2e 20 20 54 68 65 20 0a 2a 2a 20  lease.  The .** 
1b130 72 65 74 75 72 6e 20 76 61 6c 75 65 20 69 73 20  return value is 
1b140 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20 6d 65  the amount of me
1b150 6d 6f 72 79 20 61 63 74 75 61 6c 6c 79 20 72 65  mory actually re
1b160 6c 65 61 73 65 64 2e 0a 2a 2f 0a 73 74 61 74 69  leased..*/.stati
1b170 63 20 69 6e 74 20 74 65 73 74 5f 72 65 6c 65 61  c int test_relea
1b180 73 65 5f 6d 65 6d 6f 72 79 28 0a 20 20 76 6f 69  se_memory(.  voi
1b190 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
1b1a0 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
1b1b0 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
1b1c0 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
1b1d0 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66  ST objv[].){.#if
1b1e0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
1b1f0 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41  ENABLE_MEMORY_MA
1b200 4e 41 47 45 4d 45 4e 54 29 20 26 26 20 21 64 65  NAGEMENT) && !de
1b210 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
1b220 54 5f 44 49 53 4b 49 4f 29 0a 20 20 69 6e 74 20  T_DISKIO).  int 
1b230 4e 3b 0a 20 20 69 6e 74 20 61 6d 74 3b 0a 20 20  N;.  int amt;.  
1b240 69 66 28 20 6f 62 6a 63 21 3d 31 20 26 26 20 6f  if( objc!=1 && o
1b250 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  bjc!=2 ){.    Tc
1b260 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69  l_WrongNumArgs(i
1b270 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20  nterp, 1, objv, 
1b280 22 3f 4e 3f 22 29 3b 0a 20 20 20 20 72 65 74 75  "?N?");.    retu
1b290 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
1b2a0 7d 0a 20 20 69 66 28 20 6f 62 6a 63 3d 3d 32 20  }.  if( objc==2 
1b2b0 29 7b 0a 20 20 20 20 69 66 28 20 54 63 6c 5f 47  ){.    if( Tcl_G
1b2c0 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
1b2d0 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20 26 4e  erp, objv[1], &N
1b2e0 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
1b2f0 52 52 4f 52 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  RROR;.  }else{. 
1b300 20 20 20 4e 20 3d 20 2d 31 3b 0a 20 20 7d 0a 20     N = -1;.  }. 
1b310 20 61 6d 74 20 3d 20 73 71 6c 69 74 65 33 5f 72   amt = sqlite3_r
1b320 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 4e 29  elease_memory(N)
1b330 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65  ;.  Tcl_SetObjRe
1b340 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
1b350 5f 4e 65 77 49 6e 74 4f 62 6a 28 61 6d 74 29 29  _NewIntObj(amt))
1b360 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72  ;.#endif.  retur
1b370 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
1b380 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
1b390 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d  e3_soft_heap_lim
1b3a0 69 74 20 3f 4e 3f 0a 2a 2a 0a 2a 2a 20 51 75 65  it ?N?.**.** Que
1b3b0 72 79 20 6f 72 20 73 65 74 20 74 68 65 20 73 6f  ry or set the so
1b3c0 66 74 20 68 65 61 70 20 6c 69 6d 69 74 20 66 6f  ft heap limit fo
1b3d0 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 68  r the current th
1b3e0 72 65 61 64 2e 20 20 54 68 65 0a 2a 2a 20 6c 69  read.  The.** li
1b3f0 6d 69 74 20 69 73 20 6f 6e 6c 79 20 63 68 61 6e  mit is only chan
1b400 67 65 64 20 69 66 20 74 68 65 20 4e 20 69 73 20  ged if the N is 
1b410 70 72 65 73 65 6e 74 2e 20 20 54 68 65 20 70 72  present.  The pr
1b420 65 76 69 6f 75 73 20 6c 69 6d 69 74 0a 2a 2a 20  evious limit.** 
1b430 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a  is returned..*/.
1b440 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
1b450 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 28  soft_heap_limit(
1b460 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
1b470 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
1b480 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
1b490 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
1b4a0 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
1b4b0 29 7b 0a 20 20 73 74 61 74 69 63 20 69 6e 74 20  ){.  static int 
1b4c0 73 6f 66 74 48 65 61 70 4c 69 6d 69 74 20 3d 20  softHeapLimit = 
1b4d0 30 3b 0a 20 20 69 6e 74 20 61 6d 74 3b 0a 20 20  0;.  int amt;.  
1b4e0 69 66 28 20 6f 62 6a 63 21 3d 31 20 26 26 20 6f  if( objc!=1 && o
1b4f0 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  bjc!=2 ){.    Tc
1b500 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69  l_WrongNumArgs(i
1b510 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20  nterp, 1, objv, 
1b520 22 3f 4e 3f 22 29 3b 0a 20 20 20 20 72 65 74 75  "?N?");.    retu
1b530 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
1b540 7d 0a 20 20 61 6d 74 20 3d 20 73 6f 66 74 48 65  }.  amt = softHe
1b550 61 70 4c 69 6d 69 74 3b 0a 20 20 69 66 28 20 6f  apLimit;.  if( o
1b560 62 6a 63 3d 3d 32 20 29 7b 0a 20 20 20 20 69 6e  bjc==2 ){.    in
1b570 74 20 4e 3b 0a 20 20 20 20 69 66 28 20 54 63 6c  t N;.    if( Tcl
1b580 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
1b590 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20  nterp, objv[1], 
1b5a0 26 4e 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  &N) ) return TCL
1b5b0 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69  _ERROR;.    sqli
1b5c0 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69  te3_soft_heap_li
1b5d0 6d 69 74 28 4e 29 3b 0a 20 20 20 20 73 6f 66 74  mit(N);.    soft
1b5e0 48 65 61 70 4c 69 6d 69 74 20 3d 20 4e 3b 0a 20  HeapLimit = N;. 
1b5f0 20 7d 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52   }.  Tcl_SetObjR
1b600 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
1b610 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 61 6d 74 29  l_NewIntObj(amt)
1b620 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
1b630 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
1b640 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 63 6c  ge:   sqlite3_cl
1b650 65 61 72 5f 74 73 64 5f 6d 65 6d 64 65 62 75 67  ear_tsd_memdebug
1b660 0a 2a 2a 0a 2a 2a 20 43 6c 65 61 72 20 61 6c 6c  .**.** Clear all
1b670 20 6f 66 20 74 68 65 20 4d 45 4d 44 45 42 55 47   of the MEMDEBUG
1b680 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 75 74   information out
1b690 20 6f 66 20 74 68 72 65 61 64 2d 73 70 65 63 69   of thread-speci
1b6a0 66 69 63 20 64 61 74 61 2e 0a 2a 2a 20 54 68 69  fic data..** Thi
1b6b0 73 20 77 69 6c 6c 20 61 6c 6c 6f 77 20 69 74 20  s will allow it 
1b6c0 74 6f 20 62 65 20 64 65 61 6c 6c 6f 63 61 74 65  to be deallocate
1b6d0 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  d..*/.static int
1b6e0 20 74 65 73 74 5f 63 6c 65 61 72 5f 74 73 64 5f   test_clear_tsd_
1b6f0 6d 65 6d 64 65 62 75 67 28 0a 20 20 76 6f 69 64  memdebug(.  void
1b700 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
1b710 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
1b720 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
1b730 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
1b740 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 72 65  T objv[].){.  re
1b750 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
1b760 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73  /*.** Usage:   s
1b770 71 6c 69 74 65 33 5f 74 73 64 5f 72 65 6c 65 61  qlite3_tsd_relea
1b780 73 65 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 73 71  se.**.** Call sq
1b790 6c 69 74 65 33 52 65 6c 65 61 73 65 54 68 72 65  lite3ReleaseThre
1b7a0 61 64 44 61 74 61 2e 0a 2a 2f 0a 73 74 61 74 69  adData..*/.stati
1b7b0 63 20 69 6e 74 20 74 65 73 74 5f 74 73 64 5f 72  c int test_tsd_r
1b7c0 65 6c 65 61 73 65 28 0a 20 20 76 6f 69 64 20 2a  elease(.  void *
1b7d0 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
1b7e0 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
1b7f0 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
1b800 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
1b810 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 72 65 74 75  objv[].){.  retu
1b820 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
1b830 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c  .** Usage:   sql
1b840 69 74 65 33 5f 74 68 72 65 61 64 5f 63 6c 65 61  ite3_thread_clea
1b850 6e 75 70 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 74  nup.**.** Call t
1b860 68 65 20 73 71 6c 69 74 65 33 5f 74 68 72 65 61  he sqlite3_threa
1b870 64 5f 63 6c 65 61 6e 75 70 20 41 50 49 2e 0a 2a  d_cleanup API..*
1b880 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
1b890 74 5f 74 68 72 65 61 64 5f 63 6c 65 61 6e 75 70  t_thread_cleanup
1b8a0 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
1b8b0 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
1b8c0 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
1b8d0 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
1b8e0 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
1b8f0 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 74 68  .){.  sqlite3_th
1b900 72 65 61 64 5f 63 6c 65 61 6e 75 70 28 29 3b 0a  read_cleanup();.
1b910 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
1b920 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  .}.../*.** Usage
1b930 3a 20 20 20 73 71 6c 69 74 65 33 5f 70 61 67 65  :   sqlite3_page
1b940 72 5f 72 65 66 63 6f 75 6e 74 73 20 20 44 42 0a  r_refcounts  DB.
1b950 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20 6c  **.** Return a l
1b960 69 73 74 20 6f 66 20 6e 75 6d 62 65 72 73 20 77  ist of numbers w
1b970 68 69 63 68 20 61 72 65 20 74 68 65 20 50 61 67  hich are the Pag
1b980 65 72 52 65 66 63 6f 75 6e 74 20 66 6f 72 20 61  erRefcount for a
1b990 6c 6c 0a 2a 2a 20 70 61 67 65 72 73 20 6f 6e 20  ll.** pagers on 
1b9a0 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  each database co
1b9b0 6e 6e 65 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61  nnection..*/.sta
1b9c0 74 69 63 20 69 6e 74 20 74 65 73 74 5f 70 61 67  tic int test_pag
1b9d0 65 72 5f 72 65 66 63 6f 75 6e 74 73 28 0a 20 20  er_refcounts(.  
1b9e0 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
1b9f0 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
1ba00 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
1ba10 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
1ba20 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
1ba30 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
1ba40 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 76 2c   int i;.  int v,
1ba50 20 2a 61 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a   *a;.  Tcl_Obj *
1ba60 70 52 65 73 75 6c 74 3b 0a 0a 20 20 69 66 28 20  pResult;..  if( 
1ba70 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  objc!=2 ){.    T
1ba80 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
1ba90 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
1baa0 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
1bab0 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63   \"",.        Tc
1bac0 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f  l_GetStringFromO
1bad0 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20  bj(objv[0], 0), 
1bae0 22 20 44 42 22 2c 20 30 29 3b 0a 20 20 20 20 72  " DB", 0);.    r
1baf0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
1bb00 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
1bb10 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
1bb20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
1bb30 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72  jv[1]), &db) ) r
1bb40 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
1bb50 0a 20 20 70 52 65 73 75 6c 74 20 3d 20 54 63 6c  .  pResult = Tcl
1bb60 5f 4e 65 77 4f 62 6a 28 29 3b 0a 20 20 66 6f 72  _NewObj();.  for
1bb70 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b  (i=0; i<db->nDb;
1bb80 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 64   i++){.    if( d
1bb90 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3d 3d 30  b->aDb[i].pBt==0
1bba0 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 2d 31   ){.      v = -1
1bbb0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
1bbc0 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78     sqlite3_mutex
1bbd0 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65 78  _enter(db->mutex
1bbe0 29 3b 0a 20 20 20 20 20 20 61 20 3d 20 73 71 6c  );.      a = sql
1bbf0 69 74 65 33 50 61 67 65 72 53 74 61 74 73 28 73  ite3PagerStats(s
1bc00 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
1bc10 28 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 29  (db->aDb[i].pBt)
1bc20 29 3b 0a 20 20 20 20 20 20 76 20 3d 20 61 5b 30  );.      v = a[0
1bc30 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ];.      sqlite3
1bc40 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64 62 2d  _mutex_leave(db-
1bc50 3e 6d 75 74 65 78 29 3b 0a 20 20 20 20 7d 0a 20  >mutex);.    }. 
1bc60 20 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70     Tcl_ListObjAp
1bc70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 30 2c 20 70  pendElement(0, p
1bc80 52 65 73 75 6c 74 2c 20 54 63 6c 5f 4e 65 77 49  Result, Tcl_NewI
1bc90 6e 74 4f 62 6a 28 76 29 29 3b 0a 20 20 7d 0a 20  ntObj(v));.  }. 
1bca0 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c   Tcl_SetObjResul
1bcb0 74 28 69 6e 74 65 72 70 2c 20 70 52 65 73 75 6c  t(interp, pResul
1bcc0 74 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  t);.  return TCL
1bcd0 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 74  _OK;.}.../*.** t
1bce0 63 6c 63 6d 64 3a 20 20 20 77 6f 72 6b 69 6e 67  clcmd:   working
1bcf0 5f 36 34 62 69 74 5f 69 6e 74 0a 2a 2a 0a 2a 2a  _64bit_int.**.**
1bd00 20 53 6f 6d 65 20 54 43 4c 20 62 75 69 6c 64 73   Some TCL builds
1bd10 20 28 65 78 3a 20 63 79 67 77 69 6e 29 20 64 6f   (ex: cygwin) do
1bd20 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 36 34 2d   not support 64-
1bd30 62 69 74 20 69 6e 74 65 67 65 72 73 2e 20 20 54  bit integers.  T
1bd40 68 69 73 0a 2a 2a 20 6c 65 61 64 73 20 74 6f 20  his.** leads to 
1bd50 61 20 6e 75 6d 62 65 72 20 6f 66 20 74 65 73 74  a number of test
1bd60 20 66 61 69 6c 75 72 65 73 2e 20 20 54 68 65 20   failures.  The 
1bd70 70 72 65 73 65 6e 74 20 63 6f 6d 6d 61 6e 64 20  present command 
1bd80 63 68 65 63 6b 73 20 74 68 65 0a 2a 2a 20 54 43  checks the.** TC
1bd90 4c 20 62 75 69 6c 64 20 74 6f 20 73 65 65 20 77  L build to see w
1bda0 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 69 74  hether or not it
1bdb0 20 73 75 70 70 6f 72 74 73 20 36 34 2d 62 69 74   supports 64-bit
1bdc0 20 69 6e 74 65 67 65 72 73 2e 20 20 49 74 0a 2a   integers.  It.*
1bdd0 2a 20 72 65 74 75 72 6e 73 20 54 52 55 45 20 69  * returns TRUE i
1bde0 66 20 69 74 20 64 6f 65 73 20 61 6e 64 20 46 41  f it does and FA
1bdf0 4c 53 45 20 69 66 20 6e 6f 74 2e 0a 2a 2a 0a 2a  LSE if not..**.*
1be00 2a 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20 69  * This command i
1be10 73 20 75 73 65 64 20 74 6f 20 77 61 72 6e 20 75  s used to warn u
1be20 73 65 72 73 20 74 68 61 74 20 74 68 65 69 72 20  sers that their 
1be30 54 43 4c 20 62 75 69 6c 64 20 69 73 20 64 65 66  TCL build is def
1be40 65 63 74 69 76 65 0a 2a 2a 20 61 6e 64 20 74 68  ective.** and th
1be50 61 74 20 74 68 65 20 65 72 72 6f 72 73 20 74 68  at the errors th
1be60 65 79 20 61 72 65 20 73 65 65 69 6e 67 20 69 6e  ey are seeing in
1be70 20 74 68 65 20 74 65 73 74 20 73 63 72 69 70 74   the test script
1be80 73 20 6d 69 67 68 74 20 62 65 0a 2a 2a 20 61 20  s might be.** a 
1be90 72 65 73 75 6c 74 20 6f 66 20 74 68 65 69 72 20  result of their 
1bea0 64 65 66 65 63 74 69 76 65 20 54 43 4c 20 72 61  defective TCL ra
1beb0 74 68 65 72 20 74 68 61 6e 20 70 72 6f 62 6c 65  ther than proble
1bec0 6d 73 20 69 6e 20 53 51 4c 69 74 65 2e 0a 2a 2f  ms in SQLite..*/
1bed0 0a 73 74 61 74 69 63 20 69 6e 74 20 77 6f 72 6b  .static int work
1bee0 69 6e 67 5f 36 34 62 69 74 5f 69 6e 74 28 0a 20  ing_64bit_int(. 
1bef0 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65   ClientData clie
1bf00 6e 74 44 61 74 61 2c 20 2f 2a 20 50 6f 69 6e 74  ntData, /* Point
1bf10 65 72 20 74 6f 20 73 71 6c 69 74 65 33 5f 65 6e  er to sqlite3_en
1bf20 61 62 6c 65 5f 58 58 58 20 66 75 6e 63 74 69 6f  able_XXX functio
1bf30 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72  n */.  Tcl_Inter
1bf40 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
1bf50 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
1bf60 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
1bf70 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
1bf80 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20  /.  int objc,   
1bf90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1bfa0 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
1bfb0 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  s */.  Tcl_Obj *
1bfc0 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a  CONST objv[]  /*
1bfd0 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e   Command argumen
1bfe0 74 73 20 2a 2f 0a 29 7b 0a 20 20 54 63 6c 5f 4f  ts */.){.  Tcl_O
1bff0 62 6a 20 2a 70 54 65 73 74 4f 62 6a 3b 0a 20 20  bj *pTestObj;.  
1c000 69 6e 74 20 77 6f 72 6b 69 6e 67 20 3d 20 30 3b  int working = 0;
1c010 0a 0a 20 20 70 54 65 73 74 4f 62 6a 20 3d 20 54  ..  pTestObj = T
1c020 63 6c 5f 4e 65 77 57 69 64 65 49 6e 74 4f 62 6a  cl_NewWideIntObj
1c030 28 31 30 30 30 30 30 30 2a 28 69 36 34 29 31 32  (1000000*(i64)12
1c040 33 34 35 36 37 38 39 30 29 3b 0a 20 20 77 6f 72  34567890);.  wor
1c050 6b 69 6e 67 20 3d 20 73 74 72 63 6d 70 28 54 63  king = strcmp(Tc
1c060 6c 5f 47 65 74 53 74 72 69 6e 67 28 70 54 65 73  l_GetString(pTes
1c070 74 4f 62 6a 29 2c 20 22 31 32 33 34 35 36 37 38  tObj), "12345678
1c080 39 30 30 30 30 30 30 30 22 29 3d 3d 30 3b 0a 20  90000000")==0;. 
1c090 20 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e   Tcl_DecrRefCoun
1c0a0 74 28 70 54 65 73 74 4f 62 6a 29 3b 0a 20 20 54  t(pTestObj);.  T
1c0b0 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
1c0c0 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 42  interp, Tcl_NewB
1c0d0 6f 6f 6c 65 61 6e 4f 62 6a 28 77 6f 72 6b 69 6e  ooleanObj(workin
1c0e0 67 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  g));.  return TC
1c0f0 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  L_OK;.}.../*.** 
1c100 52 65 67 69 73 74 65 72 20 63 6f 6d 6d 61 6e 64  Register command
1c110 73 20 77 69 74 68 20 74 68 65 20 54 43 4c 20 69  s with the TCL i
1c120 6e 74 65 72 70 72 65 74 65 72 2e 0a 2a 2f 0a 69  nterpreter..*/.i
1c130 6e 74 20 53 71 6c 69 74 65 74 65 73 74 31 5f 49  nt Sqlitetest1_I
1c140 6e 69 74 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a  nit(Tcl_Interp *
1c150 69 6e 74 65 72 70 29 7b 0a 20 20 65 78 74 65 72  interp){.  exter
1c160 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 65  n int sqlite3_se
1c170 61 72 63 68 5f 63 6f 75 6e 74 3b 0a 20 20 65 78  arch_count;.  ex
1c180 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
1c190 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
1c1a0 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  ;.  extern int s
1c1b0 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 66 69 6c 65  qlite3_open_file
1c1c0 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72 6e  _count;.  extern
1c1d0 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72   int sqlite3_sor
1c1e0 74 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72  t_count;.  exter
1c1f0 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 75  n int sqlite3_cu
1c200 72 72 65 6e 74 5f 74 69 6d 65 3b 0a 20 20 65 78  rrent_time;.  ex
1c210 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
1c220 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a 65 3b 0a 20  _max_blobsize;. 
1c230 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69   extern int sqli
1c240 74 65 33 42 74 72 65 65 53 68 61 72 65 64 43 61  te3BtreeSharedCa
1c250 63 68 65 52 65 70 6f 72 74 28 76 6f 69 64 2a 2c  cheReport(void*,
1c260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c280 20 20 20 20 20 20 20 20 20 20 20 54 63 6c 5f 49             Tcl_I
1c290 6e 74 65 72 70 2a 2c 69 6e 74 2c 54 63 6c 5f 4f  nterp*,int,Tcl_O
1c2a0 62 6a 2a 43 4f 4e 53 54 2a 29 3b 0a 20 20 73 74  bj*CONST*);.  st
1c2b0 61 74 69 63 20 73 74 72 75 63 74 20 7b 0a 20 20  atic struct {.  
1c2c0 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a     char *zName;.
1c2d0 20 20 20 20 20 54 63 6c 5f 43 6d 64 50 72 6f 63       Tcl_CmdProc
1c2e0 20 2a 78 50 72 6f 63 3b 0a 20 20 7d 20 61 43 6d   *xProc;.  } aCm
1c2f0 64 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 7b 20 22  d[] = {.     { "
1c300 64 62 5f 65 6e 74 65 72 22 2c 20 20 20 20 20 20  db_enter",      
1c310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c320 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 64 62  (Tcl_CmdProc*)db
1c330 5f 65 6e 74 65 72 20 20 20 20 20 20 20 20 20 20  _enter          
1c340 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22       },.     { "
1c350 64 62 5f 6c 65 61 76 65 22 2c 20 20 20 20 20 20  db_leave",      
1c360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c370 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 64 62  (Tcl_CmdProc*)db
1c380 5f 6c 65 61 76 65 20 20 20 20 20 20 20 20 20 20  _leave          
1c390 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22       },.     { "
1c3a0 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
1c3b0 69 6e 74 22 2c 20 20 20 20 20 20 20 20 20 20 20  int",           
1c3c0 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71  (Tcl_CmdProc*)sq
1c3d0 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e  lite3_mprintf_in
1c3e0 74 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22  t    },.     { "
1c3f0 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
1c400 69 6e 74 36 34 22 2c 20 20 20 20 20 20 20 20 20  int64",         
1c410 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71  (Tcl_CmdProc*)sq
1c420 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e  lite3_mprintf_in
1c430 74 36 34 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22  t64  },.     { "
1c440 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
1c450 73 74 72 22 2c 20 20 20 20 20 20 20 20 20 20 20  str",           
1c460 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71  (Tcl_CmdProc*)sq
1c470 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74  lite3_mprintf_st
1c480 72 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22  r    },.     { "
1c490 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
1c4a0 5f 73 74 72 22 2c 20 20 20 20 20 20 20 20 20 20  _str",          
1c4b0 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71  (Tcl_CmdProc*)sq
1c4c0 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 5f 73  lite3_snprintf_s
1c4d0 74 72 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22  tr   },.     { "
1c4e0 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
1c4f0 73 74 72 6f 6e 6c 79 22 2c 20 20 20 20 20 20 20  stronly",       
1c500 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71  (Tcl_CmdProc*)sq
1c510 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74  lite3_mprintf_st
1c520 72 6f 6e 6c 79 7d 2c 0a 20 20 20 20 20 7b 20 22  ronly},.     { "
1c530 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
1c540 64 6f 75 62 6c 65 22 2c 20 20 20 20 20 20 20 20  double",        
1c550 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71  (Tcl_CmdProc*)sq
1c560 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 64 6f  lite3_mprintf_do
1c570 75 62 6c 65 20 7d 2c 0a 20 20 20 20 20 7b 20 22  uble },.     { "
1c580 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
1c590 73 63 61 6c 65 64 22 2c 20 20 20 20 20 20 20 20  scaled",        
1c5a0 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71  (Tcl_CmdProc*)sq
1c5b0 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 63  lite3_mprintf_sc
1c5c0 61 6c 65 64 20 7d 2c 0a 20 20 20 20 20 7b 20 22  aled },.     { "
1c5d0 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
1c5e0 68 65 78 64 6f 75 62 6c 65 22 2c 20 20 20 28 54  hexdouble",   (T
1c5f0 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69  cl_CmdProc*)sqli
1c600 74 65 33 5f 6d 70 72 69 6e 74 66 5f 68 65 78 64  te3_mprintf_hexd
1c610 6f 75 62 6c 65 7d 2c 0a 20 20 20 20 20 7b 20 22  ouble},.     { "
1c620 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
1c630 7a 5f 74 65 73 74 22 2c 20 20 20 20 20 20 20 20  z_test",        
1c640 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65  (Tcl_CmdProc*)te
1c650 73 74 5f 6d 70 72 69 6e 74 66 5f 7a 20 20 20 20  st_mprintf_z    
1c660 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73      },.     { "s
1c670 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 6e  qlite3_mprintf_n
1c680 5f 74 65 73 74 22 2c 20 20 20 20 20 20 20 20 28  _test",        (
1c690 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73  Tcl_CmdProc*)tes
1c6a0 74 5f 6d 70 72 69 6e 74 66 5f 6e 20 20 20 20 20  t_mprintf_n     
1c6b0 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71     },.     { "sq
1c6c0 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 5f 69  lite3_snprintf_i
1c6d0 6e 74 22 2c 20 20 20 20 20 20 20 20 20 20 28 54  nt",          (T
1c6e0 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74  cl_CmdProc*)test
1c6f0 5f 73 6e 70 72 69 6e 74 66 5f 69 6e 74 20 20 20  _snprintf_int   
1c700 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c    },.     { "sql
1c710 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74  ite3_last_insert
1c720 5f 72 6f 77 69 64 22 2c 20 20 20 20 20 28 54 63  _rowid",     (Tc
1c730 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f  l_CmdProc*)test_
1c740 6c 61 73 74 5f 72 6f 77 69 64 20 20 20 20 20 20  last_rowid      
1c750 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
1c760 74 65 33 5f 65 78 65 63 5f 70 72 69 6e 74 66 22  te3_exec_printf"
1c770 2c 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c  ,           (Tcl
1c780 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 65  _CmdProc*)test_e
1c790 78 65 63 5f 70 72 69 6e 74 66 20 20 20 20 20 20  xec_printf      
1c7a0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
1c7b0 65 33 5f 65 78 65 63 22 2c 20 20 20 20 20 20 20  e3_exec",       
1c7c0 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f             (Tcl_
1c7d0 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 65 78  CmdProc*)test_ex
1c7e0 65 63 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  ec             }
1c7f0 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
1c800 33 5f 65 78 65 63 5f 6e 72 22 2c 20 20 20 20 20  3_exec_nr",     
1c810 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43            (Tcl_C
1c820 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 65 78 65  mdProc*)test_exe
1c830 63 5f 6e 72 20 20 20 20 20 20 20 20 20 20 7d 2c  c_nr          },
1c840 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
1c850 5f 67 65 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74  _get_table_print
1c860 66 22 2c 20 20 20 20 20 20 28 54 63 6c 5f 43 6d  f",      (Tcl_Cm
1c870 64 50 72 6f 63 2a 29 74 65 73 74 5f 67 65 74 5f  dProc*)test_get_
1c880 74 61 62 6c 65 5f 70 72 69 6e 74 66 20 7d 2c 0a  table_printf },.
1c890 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
1c8a0 63 6c 6f 73 65 22 2c 20 20 20 20 20 20 20 20 20  close",         
1c8b0 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64          (Tcl_Cmd
1c8c0 50 72 6f 63 2a 29 73 71 6c 69 74 65 5f 74 65 73  Proc*)sqlite_tes
1c8d0 74 5f 63 6c 6f 73 65 20 20 20 20 20 7d 2c 0a 20  t_close     },. 
1c8e0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63      { "sqlite3_c
1c8f0 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 22 2c  reate_function",
1c900 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
1c910 72 6f 63 2a 29 74 65 73 74 5f 63 72 65 61 74 65  roc*)test_create
1c920 5f 66 75 6e 63 74 69 6f 6e 20 20 7d 2c 0a 20 20  _function  },.  
1c930 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 72     { "sqlite3_cr
1c940 65 61 74 65 5f 61 67 67 72 65 67 61 74 65 22 2c  eate_aggregate",
1c950 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72        (Tcl_CmdPr
1c960 6f 63 2a 29 74 65 73 74 5f 63 72 65 61 74 65 5f  oc*)test_create_
1c970 61 67 67 72 65 67 61 74 65 20 7d 2c 0a 20 20 20  aggregate },.   
1c980 20 20 7b 20 22 73 71 6c 69 74 65 5f 72 65 67 69    { "sqlite_regi
1c990 73 74 65 72 5f 74 65 73 74 5f 66 75 6e 63 74 69  ster_test_functi
1c9a0 6f 6e 22 2c 20 28 54 63 6c 5f 43 6d 64 50 72 6f  on", (Tcl_CmdPro
1c9b0 63 2a 29 74 65 73 74 5f 72 65 67 69 73 74 65 72  c*)test_register
1c9c0 5f 66 75 6e 63 20 20 20 20 7d 2c 0a 20 20 20 20  _func    },.    
1c9d0 20 7b 20 22 73 71 6c 69 74 65 5f 61 62 6f 72 74   { "sqlite_abort
1c9e0 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ",              
1c9f0 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63      (Tcl_CmdProc
1ca00 2a 29 73 71 6c 69 74 65 5f 61 62 6f 72 74 20 20  *)sqlite_abort  
1ca10 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20          },.     
1ca20 7b 20 22 73 71 6c 69 74 65 5f 62 69 6e 64 22 2c  { "sqlite_bind",
1ca30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca40 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
1ca50 29 74 65 73 74 5f 62 69 6e 64 20 20 20 20 20 20  )test_bind      
1ca60 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b         },.     {
1ca70 20 22 62 72 65 61 6b 70 6f 69 6e 74 22 2c 20 20   "breakpoint",  
1ca80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca90 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29    (Tcl_CmdProc*)
1caa0 74 65 73 74 5f 62 72 65 61 6b 70 6f 69 6e 74 20  test_breakpoint 
1cab0 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20        },.     { 
1cac0 22 73 71 6c 69 74 65 33 5f 6b 65 79 22 2c 20 20  "sqlite3_key",  
1cad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cae0 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74   (Tcl_CmdProc*)t
1caf0 65 73 74 5f 6b 65 79 20 20 20 20 20 20 20 20 20  est_key         
1cb00 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22       },.     { "
1cb10 73 71 6c 69 74 65 33 5f 72 65 6b 65 79 22 2c 20  sqlite3_rekey", 
1cb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb30 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65  (Tcl_CmdProc*)te
1cb40 73 74 5f 72 65 6b 65 79 20 20 20 20 20 20 20 20  st_rekey        
1cb50 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73      },.     { "s
1cb60 71 6c 69 74 65 5f 73 65 74 5f 6d 61 67 69 63 22  qlite_set_magic"
1cb70 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28  ,              (
1cb80 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c  Tcl_CmdProc*)sql
1cb90 69 74 65 5f 73 65 74 5f 6d 61 67 69 63 20 20 20  ite_set_magic   
1cba0 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71     },.     { "sq
1cbb0 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 22  lite3_interrupt"
1cbc0 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54  ,             (T
1cbd0 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74  cl_CmdProc*)test
1cbe0 5f 69 6e 74 65 72 72 75 70 74 20 20 20 20 20 20  _interrupt      
1cbf0 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c    },.     { "sql
1cc00 69 74 65 5f 64 65 6c 65 74 65 5f 66 75 6e 63 74  ite_delete_funct
1cc10 69 6f 6e 22 2c 20 20 20 20 20 20 20 20 28 54 63  ion",        (Tc
1cc20 6c 5f 43 6d 64 50 72 6f 63 2a 29 64 65 6c 65 74  l_CmdProc*)delet
1cc30 65 5f 66 75 6e 63 74 69 6f 6e 20 20 20 20 20 20  e_function      
1cc40 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
1cc50 74 65 5f 64 65 6c 65 74 65 5f 63 6f 6c 6c 61 74  te_delete_collat
1cc60 69 6f 6e 22 2c 20 20 20 20 20 20 20 28 54 63 6c  ion",       (Tcl
1cc70 5f 43 6d 64 50 72 6f 63 2a 29 64 65 6c 65 74 65  _CmdProc*)delete
1cc80 5f 63 6f 6c 6c 61 74 69 6f 6e 20 20 20 20 20 20  _collation      
1cc90 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
1cca0 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69  e3_get_autocommi
1ccb0 74 22 2c 20 20 20 20 20 20 20 20 28 54 63 6c 5f  t",        (Tcl_
1ccc0 43 6d 64 50 72 6f 63 2a 29 67 65 74 5f 61 75 74  CmdProc*)get_aut
1ccd0 6f 63 6f 6d 6d 69 74 20 20 20 20 20 20 20 20 7d  ocommit        }
1cce0 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
1ccf0 33 5f 73 74 61 63 6b 5f 75 73 65 64 22 2c 20 20  3_stack_used",  
1cd00 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43            (Tcl_C
1cd10 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 73 74 61  mdProc*)test_sta
1cd20 63 6b 5f 75 73 65 64 20 20 20 20 20 20 20 7d 2c  ck_used       },
1cd30 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
1cd40 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 22 2c 20  _busy_timeout", 
1cd50 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d           (Tcl_Cm
1cd60 64 50 72 6f 63 2a 29 74 65 73 74 5f 62 75 73 79  dProc*)test_busy
1cd70 5f 74 69 6d 65 6f 75 74 20 20 20 20 20 7d 2c 0a  _timeout     },.
1cd80 20 20 20 20 20 7b 20 22 70 72 69 6e 74 66 22 2c       { "printf",
1cd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cda0 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64          (Tcl_Cmd
1cdb0 50 72 6f 63 2a 29 74 65 73 74 5f 70 72 69 6e 74  Proc*)test_print
1cdc0 66 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20  f           },. 
1cdd0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 69      { "sqlite3_i
1cde0 6f 5f 74 72 61 63 65 22 2c 20 20 20 20 20 20 20  o_trace",       
1cdf0 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
1ce00 72 6f 63 2a 29 74 65 73 74 5f 69 6f 5f 74 72 61  roc*)test_io_tra
1ce10 63 65 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20  ce         },.  
1ce20 7d 3b 0a 20 20 73 74 61 74 69 63 20 73 74 72 75  };.  static stru
1ce30 63 74 20 7b 0a 20 20 20 20 20 63 68 61 72 20 2a  ct {.     char *
1ce40 7a 4e 61 6d 65 3b 0a 20 20 20 20 20 54 63 6c 5f  zName;.     Tcl_
1ce50 4f 62 6a 43 6d 64 50 72 6f 63 20 2a 78 50 72 6f  ObjCmdProc *xPro
1ce60 63 3b 0a 20 20 20 20 20 76 6f 69 64 20 2a 63 6c  c;.     void *cl
1ce70 69 65 6e 74 44 61 74 61 3b 0a 20 20 7d 20 61 4f  ientData;.  } aO
1ce80 62 6a 43 6d 64 5b 5d 20 3d 20 7b 0a 20 20 20 20  bjCmd[] = {.    
1ce90 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6e 6e   { "sqlite3_conn
1cea0 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 22 2c  ection_pointer",
1ceb0 20 20 20 20 67 65 74 5f 73 71 6c 69 74 65 5f 70      get_sqlite_p
1cec0 6f 69 6e 74 65 72 2c 20 30 20 7d 2c 0a 20 20 20  ointer, 0 },.   
1ced0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e    { "sqlite3_bin
1cee0 64 5f 69 6e 74 22 2c 20 20 20 20 20 20 20 20 20  d_int",         
1cef0 20 20 20 20 20 74 65 73 74 5f 62 69 6e 64 5f 69       test_bind_i
1cf00 6e 74 2c 20 20 20 20 20 20 30 20 7d 2c 0a 20 20  nt,      0 },.  
1cf10 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69     { "sqlite3_bi
1cf20 6e 64 5f 7a 65 72 6f 62 6c 6f 62 22 2c 20 20 20  nd_zeroblob",   
1cf30 20 20 20 20 20 20 74 65 73 74 5f 62 69 6e 64 5f        test_bind_
1cf40 7a 65 72 6f 62 6c 6f 62 2c 20 30 20 7d 2c 0a 20  zeroblob, 0 },. 
1cf50 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62      { "sqlite3_b
1cf60 69 6e 64 5f 69 6e 74 36 34 22 2c 20 20 20 20 20  ind_int64",     
1cf70 20 20 20 20 20 20 20 74 65 73 74 5f 62 69 6e 64         test_bind
1cf80 5f 69 6e 74 36 34 2c 20 20 20 20 30 20 7d 2c 0a  _int64,    0 },.
1cf90 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
1cfa0 62 69 6e 64 5f 64 6f 75 62 6c 65 22 2c 20 20 20  bind_double",   
1cfb0 20 20 20 20 20 20 20 20 74 65 73 74 5f 62 69 6e          test_bin
1cfc0 64 5f 64 6f 75 62 6c 65 2c 20 20 20 30 20 7d 2c  d_double,   0 },
1cfd0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
1cfe0 5f 62 69 6e 64 5f 6e 75 6c 6c 22 2c 20 20 20 20  _bind_null",    
1cff0 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 62 69           test_bi
1d000 6e 64 5f 6e 75 6c 6c 20 20 20 20 20 2c 30 20 7d  nd_null     ,0 }
1d010 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
1d020 33 5f 62 69 6e 64 5f 74 65 78 74 22 2c 20 20 20  3_bind_text",   
1d030 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 62            test_b
1d040 69 6e 64 5f 74 65 78 74 20 20 20 20 20 2c 30 20  ind_text     ,0 
1d050 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
1d060 65 33 5f 62 69 6e 64 5f 74 65 78 74 31 36 22 2c  e3_bind_text16",
1d070 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f             test_
1d080 62 69 6e 64 5f 74 65 78 74 31 36 20 20 20 2c 30  bind_text16   ,0
1d090 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
1d0a0 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 22 2c 20  te3_bind_blob", 
1d0b0 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
1d0c0 5f 62 69 6e 64 5f 62 6c 6f 62 20 20 20 20 20 2c  _bind_blob     ,
1d0d0 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
1d0e0 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
1d0f0 74 65 72 5f 63 6f 75 6e 74 22 2c 20 20 74 65 73  ter_count",  tes
1d100 74 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  t_bind_parameter
1d110 5f 63 6f 75 6e 74 2c 20 30 7d 2c 0a 20 20 20 20  _count, 0},.    
1d120 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64   { "sqlite3_bind
1d130 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 22  _parameter_name"
1d140 2c 20 20 20 74 65 73 74 5f 62 69 6e 64 5f 70 61  ,   test_bind_pa
1d150 72 61 6d 65 74 65 72 5f 6e 61 6d 65 2c 20 20 30  rameter_name,  0
1d160 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
1d170 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
1d180 72 5f 69 6e 64 65 78 22 2c 20 20 74 65 73 74 5f  r_index",  test_
1d190 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69  bind_parameter_i
1d1a0 6e 64 65 78 2c 20 30 7d 2c 0a 20 20 20 20 20 7b  ndex, 0},.     {
1d1b0 20 22 73 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f   "sqlite3_clear_
1d1c0 62 69 6e 64 69 6e 67 73 22 2c 20 20 20 20 20 20  bindings",      
1d1d0 20 20 74 65 73 74 5f 63 6c 65 61 72 5f 62 69 6e    test_clear_bin
1d1e0 64 69 6e 67 73 2c 20 30 7d 2c 0a 20 20 20 20 20  dings, 0},.     
1d1f0 7b 20 22 73 71 6c 69 74 65 33 5f 73 6c 65 65 70  { "sqlite3_sleep
1d200 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ",              
1d210 20 20 20 74 65 73 74 5f 73 6c 65 65 70 2c 20 20     test_sleep,  
1d220 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20          0},.    
1d230 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 72 72 63   { "sqlite3_errc
1d240 6f 64 65 22 2c 20 20 20 20 20 20 20 20 20 20 20  ode",           
1d250 20 20 20 20 74 65 73 74 5f 65 72 72 63 6f 64 65      test_errcode
1d260 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20         ,0 },.   
1d270 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 72 72    { "sqlite3_err
1d280 6d 73 67 22 2c 20 20 20 20 20 20 20 20 20 20 20  msg",           
1d290 20 20 20 20 20 74 65 73 74 5f 65 72 72 6d 73 67       test_errmsg
1d2a0 20 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20          ,0 },.  
1d2b0 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 72     { "sqlite3_er
1d2c0 72 6d 73 67 31 36 22 2c 20 20 20 20 20 20 20 20  rmsg16",        
1d2d0 20 20 20 20 20 20 74 65 73 74 5f 65 72 72 6d 73        test_errms
1d2e0 67 31 36 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20  g16      ,0 },. 
1d2f0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6f      { "sqlite3_o
1d300 70 65 6e 22 2c 20 20 20 20 20 20 20 20 20 20 20  pen",           
1d310 20 20 20 20 20 20 20 74 65 73 74 5f 6f 70 65 6e         test_open
1d320 20 20 20 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a            ,0 },.
1d330 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
1d340 6f 70 65 6e 31 36 22 2c 20 20 20 20 20 20 20 20  open16",        
1d350 20 20 20 20 20 20 20 20 74 65 73 74 5f 6f 70 65          test_ope
1d360 6e 31 36 20 20 20 20 20 20 20 20 2c 30 20 7d 2c  n16        ,0 },
1d370 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
1d380 5f 63 6f 6d 70 6c 65 74 65 31 36 22 2c 20 20 20  _complete16",   
1d390 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 63 6f           test_co
1d3a0 6d 70 6c 65 74 65 31 36 20 20 20 20 2c 30 20 7d  mplete16    ,0 }
1d3b0 2c 0a 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  ,..     { "sqlit
1d3c0 65 33 5f 70 72 65 70 61 72 65 22 2c 20 20 20 20  e3_prepare",    
1d3d0 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f             test_
1d3e0 70 72 65 70 61 72 65 20 20 20 20 20 20 20 2c 30  prepare       ,0
1d3f0 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
1d400 74 65 33 5f 70 72 65 70 61 72 65 31 36 22 2c 20  te3_prepare16", 
1d410 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
1d420 5f 70 72 65 70 61 72 65 31 36 20 20 20 20 20 2c  _prepare16     ,
1d430 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
1d440 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 22  ite3_prepare_v2"
1d450 2c 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73  ,            tes
1d460 74 5f 70 72 65 70 61 72 65 5f 76 32 20 20 20 20  t_prepare_v2    
1d470 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  ,0 },.     { "sq
1d480 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 5f  lite3_prepare16_
1d490 76 32 22 2c 20 20 20 20 20 20 20 20 20 20 74 65  v2",          te
1d4a0 73 74 5f 70 72 65 70 61 72 65 31 36 5f 76 32 20  st_prepare16_v2 
1d4b0 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73   ,0 },.     { "s
1d4c0 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 22  qlite3_finalize"
1d4d0 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  ,              t
1d4e0 65 73 74 5f 66 69 6e 61 6c 69 7a 65 20 20 20 20  est_finalize    
1d4f0 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22    ,0 },.     { "
1d500 73 71 6c 69 74 65 33 5f 72 65 73 65 74 22 2c 20  sqlite3_reset", 
1d510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d520 74 65 73 74 5f 72 65 73 65 74 20 20 20 20 20 20  test_reset      
1d530 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20     ,0 },.     { 
1d540 22 73 71 6c 69 74 65 33 5f 65 78 70 69 72 65 64  "sqlite3_expired
1d550 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ",              
1d560 20 74 65 73 74 5f 65 78 70 69 72 65 64 20 20 20   test_expired   
1d570 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b      ,0 },.     {
1d580 20 22 73 71 6c 69 74 65 33 5f 74 72 61 6e 73 66   "sqlite3_transf
1d590 65 72 5f 62 69 6e 64 69 6e 67 73 22 2c 20 20 20  er_bindings",   
1d5a0 20 20 74 65 73 74 5f 74 72 61 6e 73 66 65 72 5f    test_transfer_
1d5b0 62 69 6e 64 20 2c 30 20 7d 2c 0a 20 20 20 20 20  bind ,0 },.     
1d5c0 7b 20 22 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  { "sqlite3_chang
1d5d0 65 73 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  es",            
1d5e0 20 20 20 74 65 73 74 5f 63 68 61 6e 67 65 73 20     test_changes 
1d5f0 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20        ,0 },.    
1d600 20 7b 20 22 73 71 6c 69 74 65 33 5f 73 74 65 70   { "sqlite3_step
1d610 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ",              
1d620 20 20 20 20 74 65 73 74 5f 73 74 65 70 20 20 20      test_step   
1d630 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 0a 20 20         ,0 },..  
1d640 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 72 65     { "sqlite3_re
1d650 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 22 2c 20 20  lease_memory",  
1d660 20 20 20 20 20 20 74 65 73 74 5f 72 65 6c 65 61        test_relea
1d670 73 65 5f 6d 65 6d 6f 72 79 2c 20 20 20 20 20 30  se_memory,     0
1d680 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
1d690 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d  e3_soft_heap_lim
1d6a0 69 74 22 2c 20 20 20 20 20 20 20 74 65 73 74 5f  it",       test_
1d6b0 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 2c  soft_heap_limit,
1d6c0 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22      0},.     { "
1d6d0 73 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f 74 73  sqlite3_clear_ts
1d6e0 64 5f 6d 65 6d 64 65 62 75 67 22 2c 20 20 20 20  d_memdebug",    
1d6f0 74 65 73 74 5f 63 6c 65 61 72 5f 74 73 64 5f 6d  test_clear_tsd_m
1d700 65 6d 64 65 62 75 67 2c 20 30 7d 2c 0a 20 20 20  emdebug, 0},.   
1d710 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 74 73 64    { "sqlite3_tsd
1d720 5f 72 65 6c 65 61 73 65 22 2c 20 20 20 20 20 20  _release",      
1d730 20 20 20 20 20 74 65 73 74 5f 74 73 64 5f 72 65       test_tsd_re
1d740 6c 65 61 73 65 2c 20 20 20 20 20 20 20 20 30 7d  lease,        0}
1d750 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
1d760 33 5f 74 68 72 65 61 64 5f 63 6c 65 61 6e 75 70  3_thread_cleanup
1d770 22 2c 20 20 20 20 20 20 20 20 74 65 73 74 5f 74  ",        test_t
1d780 68 72 65 61 64 5f 63 6c 65 61 6e 75 70 2c 20 20  hread_cleanup,  
1d790 20 20 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73     0},.     { "s
1d7a0 71 6c 69 74 65 33 5f 70 61 67 65 72 5f 72 65 66  qlite3_pager_ref
1d7b0 63 6f 75 6e 74 73 22 2c 20 20 20 20 20 20 20 74  counts",       t
1d7c0 65 73 74 5f 70 61 67 65 72 5f 72 65 66 63 6f 75  est_pager_refcou
1d7d0 6e 74 73 2c 20 20 20 20 30 7d 2c 0a 0a 20 20 20  nts,    0},..   
1d7e0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6c 6f 61    { "sqlite3_loa
1d7f0 64 5f 65 78 74 65 6e 73 69 6f 6e 22 2c 20 20 20  d_extension",   
1d800 20 20 20 20 20 74 65 73 74 5f 6c 6f 61 64 5f 65       test_load_e
1d810 78 74 65 6e 73 69 6f 6e 2c 20 20 20 20 20 30 7d  xtension,     0}
1d820 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
1d830 33 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65 78  3_enable_load_ex
1d840 74 65 6e 73 69 6f 6e 22 2c 20 74 65 73 74 5f 65  tension", test_e
1d850 6e 61 62 6c 65 5f 6c 6f 61 64 2c 20 20 20 20 20  nable_load,     
1d860 20 20 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73     0},.     { "s
1d870 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f  qlite3_extended_
1d880 72 65 73 75 6c 74 5f 63 6f 64 65 73 22 2c 20 74  result_codes", t
1d890 65 73 74 5f 65 78 74 65 6e 64 65 64 5f 72 65 73  est_extended_res
1d8a0 75 6c 74 5f 63 6f 64 65 73 2c 20 30 7d 2c 0a 0a  ult_codes, 0},..
1d8b0 20 20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f       /* sqlite3_
1d8c0 63 6f 6c 75 6d 6e 5f 2a 28 29 20 41 50 49 20 2a  column_*() API *
1d8d0 2f 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  /.     { "sqlite
1d8e0 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 22 2c  3_column_count",
1d8f0 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 63            test_c
1d900 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 20 2c 30 20  olumn_count  ,0 
1d910 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
1d920 65 33 5f 64 61 74 61 5f 63 6f 75 6e 74 22 2c 20  e3_data_count", 
1d930 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f             test_
1d940 64 61 74 61 5f 63 6f 75 6e 74 20 20 20 20 2c 30  data_count    ,0
1d950 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
1d960 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 22  te3_column_type"
1d970 2c 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74  ,           test
1d980 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 20 20 20 2c  _column_type   ,
1d990 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
1d9a0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62  ite3_column_blob
1d9b0 22 2c 20 20 20 20 20 20 20 20 20 20 20 74 65 73  ",           tes
1d9c0 74 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 20 20 20  t_column_blob   
1d9d0 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  ,0 },.     { "sq
1d9e0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75  lite3_column_dou
1d9f0 62 6c 65 22 2c 20 20 20 20 20 20 20 20 20 74 65  ble",         te
1da00 73 74 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65  st_column_double
1da10 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73   ,0 },.     { "s
1da20 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
1da30 74 36 34 22 2c 20 20 20 20 20 20 20 20 20 20 74  t64",          t
1da40 65 73 74 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34  est_column_int64
1da50 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22    ,0 },.     { "
1da60 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
1da70 65 78 74 22 2c 20 20 20 20 20 20 20 74 65 73 74  ext",       test
1da80 5f 73 74 6d 74 5f 75 74 66 38 2c 20 20 73 71 6c  _stmt_utf8,  sql
1da90 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
1daa0 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20        },.     { 
1dab0 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  "sqlite3_column_
1dac0 64 65 63 6c 74 79 70 65 22 2c 20 20 20 74 65 73  decltype",   tes
1dad0 74 5f 73 74 6d 74 5f 75 74 66 38 2c 20 20 73 71  t_stmt_utf8,  sq
1dae0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63  lite3_column_dec
1daf0 6c 74 79 70 65 20 20 7d 2c 0a 20 20 20 20 20 7b  ltype  },.     {
1db00 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   "sqlite3_column
1db10 5f 6e 61 6d 65 22 2c 20 20 20 20 20 20 20 74 65  _name",       te
1db20 73 74 5f 73 74 6d 74 5f 75 74 66 38 2c 20 20 73  st_stmt_utf8,  s
1db30 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
1db40 6d 65 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20  me      },.     
1db50 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  { "sqlite3_colum
1db60 6e 5f 69 6e 74 22 2c 20 20 20 20 20 20 20 20 74  n_int",        t
1db70 65 73 74 5f 73 74 6d 74 5f 69 6e 74 2c 20 20 20  est_stmt_int,   
1db80 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
1db90 6e 74 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20  nt       },.    
1dba0 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75   { "sqlite3_colu
1dbb0 6d 6e 5f 62 79 74 65 73 22 2c 20 20 20 20 20 20  mn_bytes",      
1dbc0 74 65 73 74 5f 73 74 6d 74 5f 69 6e 74 2c 20 20  test_stmt_int,  
1dbd0 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
1dbe0 62 79 74 65 73 20 20 20 20 20 7d 2c 0a 23 69 66  bytes     },.#if
1dbf0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
1dc00 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41 54  E_COLUMN_METADAT
1dc10 41 0a 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c  A.{ "sqlite3_col
1dc20 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d  umn_database_nam
1dc30 65 22 2c 20 74 65 73 74 5f 73 74 6d 74 5f 75 74  e", test_stmt_ut
1dc40 66 38 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  f8, sqlite3_colu
1dc50 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65  mn_database_name
1dc60 7d 2c 0a 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f  },.{ "sqlite3_co
1dc70 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 22  lumn_table_name"
1dc80 2c 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66 38  , test_stmt_utf8
1dc90 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  , sqlite3_column
1dca0 5f 74 61 62 6c 65 5f 6e 61 6d 65 7d 2c 0a 7b 20  _table_name},.{ 
1dcb0 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  "sqlite3_column_
1dcc0 6f 72 69 67 69 6e 5f 6e 61 6d 65 22 2c 20 74 65  origin_name", te
1dcd0 73 74 5f 73 74 6d 74 5f 75 74 66 38 2c 20 73 71  st_stmt_utf8, sq
1dce0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69  lite3_column_ori
1dcf0 67 69 6e 5f 6e 61 6d 65 7d 2c 0a 23 65 6e 64 69  gin_name},.#endi
1dd00 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
1dd10 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 20  E_OMIT_UTF16.   
1dd20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c    { "sqlite3_col
1dd30 75 6d 6e 5f 62 79 74 65 73 31 36 22 2c 20 20 20  umn_bytes16",   
1dd40 20 74 65 73 74 5f 73 74 6d 74 5f 69 6e 74 2c 20   test_stmt_int, 
1dd50 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e    sqlite3_column
1dd60 5f 62 79 74 65 73 31 36 20 20 20 7d 2c 0a 20 20  _bytes16   },.  
1dd70 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f     { "sqlite3_co
1dd80 6c 75 6d 6e 5f 74 65 78 74 31 36 22 2c 20 20 20  lumn_text16",   
1dd90 20 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66 31    test_stmt_utf1
1dda0 36 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  6, sqlite3_colum
1ddb0 6e 5f 74 65 78 74 31 36 20 20 20 20 7d 2c 0a 20  n_text16    },. 
1ddc0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63      { "sqlite3_c
1ddd0 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 31 36  olumn_decltype16
1dde0 22 2c 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66  ", test_stmt_utf
1ddf0 31 36 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  16, sqlite3_colu
1de00 6d 6e 5f 64 65 63 6c 74 79 70 65 31 36 7d 2c 0a  mn_decltype16},.
1de10 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
1de20 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36 22 2c 20  column_name16", 
1de30 20 20 20 20 74 65 73 74 5f 73 74 6d 74 5f 75 74      test_stmt_ut
1de40 66 31 36 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c  f16, sqlite3_col
1de50 75 6d 6e 5f 6e 61 6d 65 31 36 20 20 20 20 7d 2c  umn_name16    },
1de60 0a 20 20 20 20 20 7b 20 22 61 64 64 5f 61 6c 69  .     { "add_ali
1de70 67 6e 6d 65 6e 74 5f 74 65 73 74 5f 63 6f 6c 6c  gnment_test_coll
1de80 61 74 69 6f 6e 73 22 2c 20 61 64 64 5f 61 6c 69  ations", add_ali
1de90 67 6e 6d 65 6e 74 5f 74 65 73 74 5f 63 6f 6c 6c  gnment_test_coll
1dea0 61 74 69 6f 6e 73 2c 20 30 20 20 20 20 20 20 7d  ations, 0      }
1deb0 2c 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ,.#ifdef SQLITE_
1dec0 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45  ENABLE_COLUMN_ME
1ded0 54 41 44 41 54 41 0a 7b 22 73 71 6c 69 74 65 33  TADATA.{"sqlite3
1dee0 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65  _column_database
1def0 5f 6e 61 6d 65 31 36 22 2c 0a 20 20 74 65 73 74  _name16",.  test
1df00 5f 73 74 6d 74 5f 75 74 66 31 36 2c 20 73 71 6c  _stmt_utf16, sql
1df10 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61  ite3_column_data
1df20 62 61 73 65 5f 6e 61 6d 65 31 36 7d 2c 0a 7b 22  base_name16},.{"
1df30 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
1df40 61 62 6c 65 5f 6e 61 6d 65 31 36 22 2c 20 74 65  able_name16", te
1df50 73 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c 20 73  st_stmt_utf16, s
1df60 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61  qlite3_column_ta
1df70 62 6c 65 5f 6e 61 6d 65 31 36 7d 2c 0a 7b 22 73  ble_name16},.{"s
1df80 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72  qlite3_column_or
1df90 69 67 69 6e 5f 6e 61 6d 65 31 36 22 2c 20 74 65  igin_name16", te
1dfa0 73 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c 20 73  st_stmt_utf16, s
1dfb0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72  qlite3_column_or
1dfc0 69 67 69 6e 5f 6e 61 6d 65 31 36 7d 2c 0a 23 65  igin_name16},.#e
1dfd0 6e 64 69 66 0a 23 65 6e 64 69 66 0a 20 20 20 20  ndif.#endif.    
1dfe0 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 72 65 61   { "sqlite3_crea
1dff0 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 76 32 22  te_collation_v2"
1e000 2c 20 74 65 73 74 5f 63 72 65 61 74 65 5f 63 6f  , test_create_co
1e010 6c 6c 61 74 69 6f 6e 5f 76 32 2c 20 30 20 7d 2c  llation_v2, 0 },
1e020 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
1e030 5f 67 6c 6f 62 61 6c 5f 72 65 63 6f 76 65 72 22  _global_recover"
1e040 2c 20 20 20 20 20 74 65 73 74 5f 67 6c 6f 62 61  ,     test_globa
1e050 6c 5f 72 65 63 6f 76 65 72 2c 20 30 20 20 20 7d  l_recover, 0   }
1e060 2c 0a 20 20 20 20 20 7b 20 22 77 6f 72 6b 69 6e  ,.     { "workin
1e070 67 5f 36 34 62 69 74 5f 69 6e 74 22 2c 20 20 20  g_64bit_int",   
1e080 20 20 20 20 20 20 20 77 6f 72 6b 69 6e 67 5f 36         working_6
1e090 34 62 69 74 5f 69 6e 74 2c 20 20 20 30 20 20 20  4bit_int,   0   
1e0a0 7d 2c 0a 0a 20 20 20 20 20 2f 2a 20 46 75 6e 63  },..     /* Func
1e0b0 74 69 6f 6e 73 20 66 72 6f 6d 20 6f 73 2e 68 20  tions from os.h 
1e0c0 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
1e0d0 45 5f 4f 4d 49 54 5f 44 49 53 4b 49 4f 0a 23 69  E_OMIT_DISKIO.#i
1e0e0 66 20 30 0a 20 20 20 20 20 7b 20 22 73 71 6c 69  f 0.     { "sqli
1e0f0 74 65 33 4f 73 4f 70 65 6e 52 65 61 64 57 72 69  te3OsOpenReadWri
1e100 74 65 22 2c 74 65 73 74 5f 73 71 6c 69 74 65 33  te",test_sqlite3
1e110 4f 73 4f 70 65 6e 52 65 61 64 57 72 69 74 65 2c  OsOpenReadWrite,
1e120 20 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71   0 },.     { "sq
1e130 6c 69 74 65 33 4f 73 43 6c 6f 73 65 22 2c 20 20  lite3OsClose",  
1e140 20 20 20 20 20 20 74 65 73 74 5f 73 71 6c 69 74        test_sqlit
1e150 65 33 4f 73 43 6c 6f 73 65 2c 20 30 20 7d 2c 0a  e3OsClose, 0 },.
1e160 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 4f       { "sqlite3O
1e170 73 4c 6f 63 6b 22 2c 20 20 20 20 20 20 20 20 20  sLock",         
1e180 74 65 73 74 5f 73 71 6c 69 74 65 33 4f 73 4c 6f  test_sqlite3OsLo
1e190 63 6b 2c 20 30 20 7d 2c 0a 20 20 20 20 20 7b 20  ck, 0 },.     { 
1e1a0 22 73 71 6c 69 74 65 33 4f 73 54 65 6d 70 46 69  "sqlite3OsTempFi
1e1b0 6c 65 4e 61 6d 65 22 2c 20 74 65 73 74 5f 73 71  leName", test_sq
1e1c0 6c 69 74 65 33 4f 73 54 65 6d 70 46 69 6c 65 4e  lite3OsTempFileN
1e1d0 61 6d 65 2c 20 30 20 7d 2c 0a 20 20 20 0a 20 20  ame, 0 },.   .  
1e1e0 20 20 20 2f 2a 20 43 75 73 74 6f 6d 20 74 65 73     /* Custom tes
1e1f0 74 20 69 6e 74 65 72 66 61 63 65 73 20 2a 2f 0a  t interfaces */.
1e200 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 4f       { "sqlite3O
1e210 73 55 6e 6c 6f 63 6b 22 2c 20 20 20 20 20 20 20  sUnlock",       
1e220 20 20 74 65 73 74 5f 73 71 6c 69 74 65 33 4f 73    test_sqlite3Os
1e230 55 6e 6c 6f 63 6b 2c 20 30 20 20 20 20 7d 2c 0a  Unlock, 0    },.
1e240 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69  #endif.#endif.#i
1e250 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1e260 54 5f 55 54 46 31 36 0a 20 20 20 20 20 7b 20 22  T_UTF16.     { "
1e270 61 64 64 5f 74 65 73 74 5f 63 6f 6c 6c 61 74 65  add_test_collate
1e280 22 2c 20 20 20 20 20 20 20 20 74 65 73 74 5f 63  ",        test_c
1e290 6f 6c 6c 61 74 65 2c 20 30 20 20 20 20 20 20 20  ollate, 0       
1e2a0 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22       },.     { "
1e2b0 61 64 64 5f 74 65 73 74 5f 63 6f 6c 6c 61 74 65  add_test_collate
1e2c0 5f 6e 65 65 64 65 64 22 2c 20 74 65 73 74 5f 63  _needed", test_c
1e2d0 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64 2c 20 30  ollate_needed, 0
1e2e0 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22       },.     { "
1e2f0 61 64 64 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f  add_test_functio
1e300 6e 22 2c 20 20 20 20 20 20 20 74 65 73 74 5f 66  n",       test_f
1e310 75 6e 63 74 69 6f 6e 2c 20 30 20 20 20 20 20 20  unction, 0      
1e320 20 20 20 20 20 7d 2c 0a 23 65 6e 64 69 66 0a 20       },.#endif. 
1e330 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 74      { "sqlite3_t
1e340 65 73 74 5f 65 72 72 73 74 72 22 2c 20 20 20 20  est_errstr",    
1e350 20 74 65 73 74 5f 65 72 72 73 74 72 2c 20 30 20   test_errstr, 0 
1e360 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
1e370 20 20 20 20 7b 20 22 74 63 6c 5f 76 61 72 69 61      { "tcl_varia
1e380 62 6c 65 5f 74 79 70 65 22 2c 20 20 20 20 20 20  ble_type",      
1e390 20 74 63 6c 5f 76 61 72 69 61 62 6c 65 5f 74 79   tcl_variable_ty
1e3a0 70 65 2c 20 30 20 20 20 20 20 20 20 7d 2c 0a 23  pe, 0       },.#
1e3b0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1e3c0 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a  IT_SHARED_CACHE.
1e3d0 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
1e3e0 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61  enable_shared_ca
1e3f0 63 68 65 22 2c 20 74 65 73 74 5f 65 6e 61 62 6c  che", test_enabl
1e400 65 5f 73 68 61 72 65 64 2c 20 30 20 20 7d 2c 0a  e_shared, 0  },.
1e410 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
1e420 73 68 61 72 65 64 5f 63 61 63 68 65 5f 72 65 70  shared_cache_rep
1e430 6f 72 74 22 2c 20 73 71 6c 69 74 65 33 42 74 72  ort", sqlite3Btr
1e440 65 65 53 68 61 72 65 64 43 61 63 68 65 52 65 70  eeSharedCacheRep
1e450 6f 72 74 2c 20 30 7d 2c 0a 23 65 6e 64 69 66 0a  ort, 0},.#endif.
1e460 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
1e470 6c 69 62 76 65 72 73 69 6f 6e 5f 6e 75 6d 62 65  libversion_numbe
1e480 72 22 2c 20 74 65 73 74 5f 6c 69 62 76 65 72 73  r", test_libvers
1e490 69 6f 6e 5f 6e 75 6d 62 65 72 2c 20 30 20 20 7d  ion_number, 0  }
1e4a0 2c 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ,.#ifdef SQLITE_
1e4b0 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45  ENABLE_COLUMN_ME
1e4c0 54 41 44 41 54 41 0a 20 20 20 20 20 7b 20 22 73  TADATA.     { "s
1e4d0 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c  qlite3_table_col
1e4e0 75 6d 6e 5f 6d 65 74 61 64 61 74 61 22 2c 20 74  umn_metadata", t
1e4f0 65 73 74 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e  est_table_column
1e500 5f 6d 65 74 61 64 61 74 61 2c 20 30 20 20 7d 2c  _metadata, 0  },
1e510 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
1e520 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 43 52  SQLITE_OMIT_INCR
1e530 42 4c 4f 42 0a 20 20 20 20 20 7b 20 22 73 71 6c  BLOB.     { "sql
1e540 69 74 65 33 5f 62 6c 6f 62 5f 72 65 61 64 22 2c  ite3_blob_read",
1e550 20 20 74 65 73 74 5f 62 6c 6f 62 5f 72 65 61 64    test_blob_read
1e560 2c 20 30 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22  , 0  },.     { "
1e570 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 77 72 69  sqlite3_blob_wri
1e580 74 65 22 2c 20 74 65 73 74 5f 62 6c 6f 62 5f 77  te", test_blob_w
1e590 72 69 74 65 2c 20 30 20 20 7d 2c 0a 23 65 6e 64  rite, 0  },.#end
1e5a0 69 66 0a 20 20 7d 3b 0a 20 20 73 74 61 74 69 63  if.  };.  static
1e5b0 20 69 6e 74 20 62 69 74 6d 61 73 6b 5f 73 69 7a   int bitmask_siz
1e5c0 65 20 3d 20 73 69 7a 65 6f 66 28 42 69 74 6d 61  e = sizeof(Bitma
1e5d0 73 6b 29 2a 38 3b 0a 20 20 69 6e 74 20 69 3b 0a  sk)*8;.  int i;.
1e5e0 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c    extern int sql
1e5f0 69 74 65 33 5f 73 79 6e 63 5f 63 6f 75 6e 74 2c  ite3_sync_count,
1e600 20 73 71 6c 69 74 65 33 5f 66 75 6c 6c 73 79 6e   sqlite3_fullsyn
1e610 63 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72  c_count;.  exter
1e620 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6f 70  n int sqlite3_op
1e630 65 6e 74 65 6d 70 5f 63 6f 75 6e 74 3b 0a 20 20  entemp_count;.  
1e640 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74  extern int sqlit
1e650 65 33 5f 6c 69 6b 65 5f 63 6f 75 6e 74 3b 0a 20  e3_like_count;. 
1e660 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69   extern int sqli
1e670 74 65 33 5f 78 66 65 72 6f 70 74 5f 63 6f 75 6e  te3_xferopt_coun
1e680 74 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20  t;.  extern int 
1e690 73 71 6c 69 74 65 33 5f 70 61 67 65 72 5f 72 65  sqlite3_pager_re
1e6a0 61 64 64 62 5f 63 6f 75 6e 74 3b 0a 20 20 65 78  addb_count;.  ex
1e6b0 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
1e6c0 5f 70 61 67 65 72 5f 77 72 69 74 65 64 62 5f 63  _pager_writedb_c
1e6d0 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20 69  ount;.  extern i
1e6e0 6e 74 20 73 71 6c 69 74 65 33 5f 70 61 67 65 72  nt sqlite3_pager
1e6f0 5f 77 72 69 74 65 6a 5f 63 6f 75 6e 74 3b 0a 20  _writej_count;. 
1e700 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69   extern int sqli
1e710 74 65 33 5f 70 61 67 65 72 5f 70 67 66 72 65 65  te3_pager_pgfree
1e720 5f 63 6f 75 6e 74 3b 0a 23 69 66 20 4f 53 5f 55  _count;.#if OS_U
1e730 4e 49 58 20 26 26 20 64 65 66 69 6e 65 64 28 53  NIX && defined(S
1e740 51 4c 49 54 45 5f 54 45 53 54 29 20 26 26 20 53  QLITE_TEST) && S
1e750 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
1e760 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 74 68  .  extern int th
1e770 72 65 61 64 73 4f 76 65 72 72 69 64 65 45 61 63  readsOverrideEac
1e780 68 4f 74 68 65 72 73 4c 6f 63 6b 73 3b 0a 23 65  hOthersLocks;.#e
1e790 6e 64 69 66 0a 23 69 66 20 4f 53 5f 57 49 4e 0a  ndif.#if OS_WIN.
1e7a0 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c    extern int sql
1e7b0 69 74 65 33 5f 6f 73 5f 74 79 70 65 3b 0a 23 65  ite3_os_type;.#e
1e7c0 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
1e7d0 54 45 5f 44 45 42 55 47 0a 20 20 65 78 74 65 72  TE_DEBUG.  exter
1e7e0 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 68  n int sqlite3_wh
1e7f0 65 72 65 5f 74 72 61 63 65 3b 0a 20 20 65 78 74  ere_trace;.  ext
1e800 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ern int sqlite3_
1e810 6f 73 5f 74 72 61 63 65 3b 0a 20 20 65 78 74 65  os_trace;.  exte
1e820 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 76  rn int sqlite3_v
1e830 64 62 65 5f 61 64 64 6f 70 5f 74 72 61 63 65 3b  dbe_addop_trace;
1e840 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
1e850 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 65 78 74  QLITE_TEST.  ext
1e860 65 72 6e 20 63 68 61 72 20 73 71 6c 69 74 65 33  ern char sqlite3
1e870 5f 71 75 65 72 79 5f 70 6c 61 6e 5b 5d 3b 0a 20  _query_plan[];. 
1e880 20 73 74 61 74 69 63 20 63 68 61 72 20 2a 71 75   static char *qu
1e890 65 72 79 5f 70 6c 61 6e 20 3d 20 73 71 6c 69 74  ery_plan = sqlit
1e8a0 65 33 5f 71 75 65 72 79 5f 70 6c 61 6e 3b 0a 23  e3_query_plan;.#
1e8b0 65 6e 64 69 66 0a 0a 20 20 66 6f 72 28 69 3d 30  endif..  for(i=0
1e8c0 3b 20 69 3c 73 69 7a 65 6f 66 28 61 43 6d 64 29  ; i<sizeof(aCmd)
1e8d0 2f 73 69 7a 65 6f 66 28 61 43 6d 64 5b 30 5d 29  /sizeof(aCmd[0])
1e8e0 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 54 63 6c 5f  ; i++){.    Tcl_
1e8f0 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 69 6e  CreateCommand(in
1e900 74 65 72 70 2c 20 61 43 6d 64 5b 69 5d 2e 7a 4e  terp, aCmd[i].zN
1e910 61 6d 65 2c 20 61 43 6d 64 5b 69 5d 2e 78 50 72  ame, aCmd[i].xPr
1e920 6f 63 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 20  oc, 0, 0);.  }. 
1e930 20 66 6f 72 28 69 3d 30 3b 20 69 3c 73 69 7a 65   for(i=0; i<size
1e940 6f 66 28 61 4f 62 6a 43 6d 64 29 2f 73 69 7a 65  of(aObjCmd)/size
1e950 6f 66 28 61 4f 62 6a 43 6d 64 5b 30 5d 29 3b 20  of(aObjCmd[0]); 
1e960 69 2b 2b 29 7b 0a 20 20 20 20 54 63 6c 5f 43 72  i++){.    Tcl_Cr
1e970 65 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69  eateObjCommand(i
1e980 6e 74 65 72 70 2c 20 61 4f 62 6a 43 6d 64 5b 69  nterp, aObjCmd[i
1e990 5d 2e 7a 4e 61 6d 65 2c 20 0a 20 20 20 20 20 20  ].zName, .      
1e9a0 20 20 61 4f 62 6a 43 6d 64 5b 69 5d 2e 78 50 72    aObjCmd[i].xPr
1e9b0 6f 63 2c 20 61 4f 62 6a 43 6d 64 5b 69 5d 2e 63  oc, aObjCmd[i].c
1e9c0 6c 69 65 6e 74 44 61 74 61 2c 20 30 29 3b 0a 20  lientData, 0);. 
1e9d0 20 7d 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72   }.  Tcl_LinkVar
1e9e0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
1e9f0 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 22 2c 20  _search_count", 
1ea00 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73  .      (char*)&s
1ea10 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f  qlite3_search_co
1ea20 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e  unt, TCL_LINK_IN
1ea30 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61  T);.  Tcl_LinkVa
1ea40 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  r(interp, "sqlit
1ea50 65 5f 73 6f 72 74 5f 63 6f 75 6e 74 22 2c 20 0a  e_sort_count", .
1ea60 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71        (char*)&sq
1ea70 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74  lite3_sort_count
1ea80 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b  , TCL_LINK_INT);
1ea90 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
1eaa0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 33 5f  nterp, "sqlite3_
1eab0 6d 61 78 5f 62 6c 6f 62 73 69 7a 65 22 2c 20 0a  max_blobsize", .
1eac0 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71        (char*)&sq
1ead0 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
1eae0 7a 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54  ze, TCL_LINK_INT
1eaf0 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72  );.  Tcl_LinkVar
1eb00 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
1eb10 5f 6c 69 6b 65 5f 63 6f 75 6e 74 22 2c 20 0a 20  _like_count", . 
1eb20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c       (char*)&sql
1eb30 69 74 65 33 5f 6c 69 6b 65 5f 63 6f 75 6e 74 2c  ite3_like_count,
1eb40 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a   TCL_LINK_INT);.
1eb50 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e    Tcl_LinkVar(in
1eb60 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 69 6e  terp, "sqlite_in
1eb70 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 22 2c 20  terrupt_count", 
1eb80 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73  .      (char*)&s
1eb90 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
1eba0 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b  _count, TCL_LINK
1ebb0 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e  _INT);.  Tcl_Lin
1ebc0 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71  kVar(interp, "sq
1ebd0 6c 69 74 65 5f 6f 70 65 6e 5f 66 69 6c 65 5f 63  lite_open_file_c
1ebe0 6f 75 6e 74 22 2c 20 0a 20 20 20 20 20 20 28 63  ount", .      (c
1ebf0 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6f 70  har*)&sqlite3_op
1ec00 65 6e 5f 66 69 6c 65 5f 63 6f 75 6e 74 2c 20 54  en_file_count, T
1ec10 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20  CL_LINK_INT);.  
1ec20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
1ec30 72 70 2c 20 22 73 71 6c 69 74 65 5f 63 75 72 72  rp, "sqlite_curr
1ec40 65 6e 74 5f 74 69 6d 65 22 2c 20 0a 20 20 20 20  ent_time", .    
1ec50 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65    (char*)&sqlite
1ec60 33 5f 63 75 72 72 65 6e 74 5f 74 69 6d 65 2c 20  3_current_time, 
1ec70 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20  TCL_LINK_INT);. 
1ec80 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
1ec90 65 72 70 2c 20 22 73 71 6c 69 74 65 33 5f 78 66  erp, "sqlite3_xf
1eca0 65 72 6f 70 74 5f 63 6f 75 6e 74 22 2c 0a 20 20  eropt_count",.  
1ecb0 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69      (char*)&sqli
1ecc0 74 65 33 5f 78 66 65 72 6f 70 74 5f 63 6f 75 6e  te3_xferopt_coun
1ecd0 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29  t, TCL_LINK_INT)
1ece0 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  ;.  Tcl_LinkVar(
1ecf0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 33  interp, "sqlite3
1ed00 5f 70 61 67 65 72 5f 72 65 61 64 64 62 5f 63 6f  _pager_readdb_co
1ed10 75 6e 74 22 2c 0a 20 20 20 20 20 20 28 63 68 61  unt",.      (cha
1ed20 72 2a 29 26 73 71 6c 69 74 65 33 5f 70 61 67 65  r*)&sqlite3_page
1ed30 72 5f 72 65 61 64 64 62 5f 63 6f 75 6e 74 2c 20  r_readdb_count, 
1ed40 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20  TCL_LINK_INT);. 
1ed50 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
1ed60 65 72 70 2c 20 22 73 71 6c 69 74 65 33 5f 70 61  erp, "sqlite3_pa
1ed70 67 65 72 5f 77 72 69 74 65 64 62 5f 63 6f 75 6e  ger_writedb_coun
1ed80 74 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a  t",.      (char*
1ed90 29 26 73 71 6c 69 74 65 33 5f 70 61 67 65 72 5f  )&sqlite3_pager_
1eda0 77 72 69 74 65 64 62 5f 63 6f 75 6e 74 2c 20 54  writedb_count, T
1edb0 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20  CL_LINK_INT);.  
1edc0 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
1edd0 72 70 2c 20 22 73 71 6c 69 74 65 33 5f 70 61 67  rp, "sqlite3_pag
1ede0 65 72 5f 77 72 69 74 65 6a 5f 63 6f 75 6e 74 22  er_writej_count"
1edf0 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26  ,.      (char*)&
1ee00 73 71 6c 69 74 65 33 5f 70 61 67 65 72 5f 77 72  sqlite3_pager_wr
1ee10 69 74 65 6a 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f  itej_count, TCL_
1ee20 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c  LINK_INT);.  Tcl
1ee30 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c  _LinkVar(interp,
1ee40 20 22 73 71 6c 69 74 65 33 5f 70 61 67 65 72 5f   "sqlite3_pager_
1ee50 70 67 66 72 65 65 5f 63 6f 75 6e 74 22 2c 0a 20  pgfree_count",. 
1ee60 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c       (char*)&sql
1ee70 69 74 65 33 5f 70 61 67 65 72 5f 70 67 66 72 65  ite3_pager_pgfre
1ee80 65 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e  e_count, TCL_LIN
1ee90 4b 5f 49 4e 54 29 3b 0a 23 69 66 6e 64 65 66 20  K_INT);.#ifndef 
1eea0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
1eeb0 36 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  6.  Tcl_LinkVar(
1eec0 69 6e 74 65 72 70 2c 20 22 75 6e 61 6c 69 67 6e  interp, "unalign
1eed0 65 64 5f 73 74 72 69 6e 67 5f 63 6f 75 6e 74 65  ed_string_counte
1eee0 72 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a  r",.      (char*
1eef0 29 26 75 6e 61 6c 69 67 6e 65 64 5f 73 74 72 69  )&unaligned_stri
1ef00 6e 67 5f 63 6f 75 6e 74 65 72 2c 20 54 43 4c 5f  ng_counter, TCL_
1ef10 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23 65 6e 64 69  LINK_INT);.#endi
1ef20 66 0a 23 69 66 20 4f 53 5f 55 4e 49 58 20 26 26  f.#if OS_UNIX &&
1ef30 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
1ef40 54 45 53 54 29 20 26 26 20 53 51 4c 49 54 45 5f  TEST) && SQLITE_
1ef50 54 48 52 45 41 44 53 41 46 45 0a 20 20 54 63 6c  THREADSAFE.  Tcl
1ef60 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c  _LinkVar(interp,
1ef70 20 22 74 68 72 65 61 64 73 4f 76 65 72 72 69 64   "threadsOverrid
1ef80 65 45 61 63 68 4f 74 68 65 72 73 4c 6f 63 6b 73  eEachOthersLocks
1ef90 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29  ",.      (char*)
1efa0 26 74 68 72 65 61 64 73 4f 76 65 72 72 69 64 65  &threadsOverride
1efb0 45 61 63 68 4f 74 68 65 72 73 4c 6f 63 6b 73 2c  EachOthersLocks,
1efc0 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a   TCL_LINK_INT);.
1efd0 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
1efe0 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
1eff0 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
1f000 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6c  nterp, "sqlite_l
1f010 61 73 74 5f 6e 65 65 64 65 64 5f 63 6f 6c 6c 61  ast_needed_colla
1f020 74 69 6f 6e 22 2c 0a 20 20 20 20 20 20 28 63 68  tion",.      (ch
1f030 61 72 2a 29 26 70 7a 4e 65 65 64 65 64 43 6f 6c  ar*)&pzNeededCol
1f040 6c 61 74 69 6f 6e 2c 20 54 43 4c 5f 4c 49 4e 4b  lation, TCL_LINK
1f050 5f 53 54 52 49 4e 47 7c 54 43 4c 5f 4c 49 4e 4b  _STRING|TCL_LINK
1f060 5f 52 45 41 44 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  _READ_ONLY);.#en
1f070 64 69 66 0a 23 69 66 20 4f 53 5f 57 49 4e 0a 20  dif.#if OS_WIN. 
1f080 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
1f090 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 73 5f  erp, "sqlite_os_
1f0a0 74 79 70 65 22 2c 0a 20 20 20 20 20 20 28 63 68  type",.      (ch
1f0b0 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6f 73 5f  ar*)&sqlite3_os_
1f0c0 74 79 70 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49  type, TCL_LINK_I
1f0d0 4e 54 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64  NT);.#endif.#ifd
1f0e0 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
1f0f0 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
1f100 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 71 75 65  erp, "sqlite_que
1f110 72 79 5f 70 6c 61 6e 22 2c 0a 20 20 20 20 20 20  ry_plan",.      
1f120 28 63 68 61 72 2a 29 26 71 75 65 72 79 5f 70 6c  (char*)&query_pl
1f130 61 6e 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 53 54 52  an, TCL_LINK_STR
1f140 49 4e 47 7c 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41  ING|TCL_LINK_REA
1f150 44 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  D_ONLY);.#endif.
1f160 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
1f170 42 55 47 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61  BUG.  Tcl_LinkVa
1f180 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  r(interp, "sqlit
1f190 65 5f 61 64 64 6f 70 5f 74 72 61 63 65 22 2c 0a  e_addop_trace",.
1f1a0 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71        (char*)&sq
1f1b0 6c 69 74 65 33 5f 76 64 62 65 5f 61 64 64 6f 70  lite3_vdbe_addop
1f1c0 5f 74 72 61 63 65 2c 20 54 43 4c 5f 4c 49 4e 4b  _trace, TCL_LINK
1f1d0 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e  _INT);.  Tcl_Lin
1f1e0 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71  kVar(interp, "sq
1f1f0 6c 69 74 65 5f 77 68 65 72 65 5f 74 72 61 63 65  lite_where_trace
1f200 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29  ",.      (char*)
1f210 26 73 71 6c 69 74 65 33 5f 77 68 65 72 65 5f 74  &sqlite3_where_t
1f220 72 61 63 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49  race, TCL_LINK_I
1f230 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56  NT);.  Tcl_LinkV
1f240 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  ar(interp, "sqli
1f250 74 65 5f 6f 73 5f 74 72 61 63 65 22 2c 0a 20 20  te_os_trace",.  
1f260 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69      (char*)&sqli
1f270 74 65 33 5f 6f 73 5f 74 72 61 63 65 2c 20 54 43  te3_os_trace, TC
1f280 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23 65 6e  L_LINK_INT);.#en
1f290 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
1f2a0 54 45 5f 4f 4d 49 54 5f 44 49 53 4b 49 4f 0a 20  TE_OMIT_DISKIO. 
1f2b0 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
1f2c0 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 65  erp, "sqlite_ope
1f2d0 6e 74 65 6d 70 5f 63 6f 75 6e 74 22 2c 0a 20 20  ntemp_count",.  
1f2e0 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69      (char*)&sqli
1f2f0 74 65 33 5f 6f 70 65 6e 74 65 6d 70 5f 63 6f 75  te3_opentemp_cou
1f300 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54  nt, TCL_LINK_INT
1f310 29 3b 0a 23 65 6e 64 69 66 0a 20 20 54 63 6c 5f  );.#endif.  Tcl_
1f320 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20  LinkVar(interp, 
1f330 22 73 71 6c 69 74 65 5f 73 74 61 74 69 63 5f 62  "sqlite_static_b
1f340 69 6e 64 5f 76 61 6c 75 65 22 2c 0a 20 20 20 20  ind_value",.    
1f350 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65    (char*)&sqlite
1f360 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f 76 61 6c  _static_bind_val
1f370 75 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 53 54 52  ue, TCL_LINK_STR
1f380 49 4e 47 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b  ING);.  Tcl_Link
1f390 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  Var(interp, "sql
1f3a0 69 74 65 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f  ite_static_bind_
1f3b0 6e 62 79 74 65 22 2c 0a 20 20 20 20 20 20 28 63  nbyte",.      (c
1f3c0 68 61 72 2a 29 26 73 71 6c 69 74 65 5f 73 74 61  har*)&sqlite_sta
1f3d0 74 69 63 5f 62 69 6e 64 5f 6e 62 79 74 65 2c 20  tic_bind_nbyte, 
1f3e0 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20  TCL_LINK_INT);. 
1f3f0 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
1f400 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 74 65 6d  erp, "sqlite_tem
1f410 70 5f 64 69 72 65 63 74 6f 72 79 22 2c 0a 20 20  p_directory",.  
1f420 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69      (char*)&sqli
1f430 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f  te3_temp_directo
1f440 72 79 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 53 54 52  ry, TCL_LINK_STR
1f450 49 4e 47 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b  ING);.  Tcl_Link
1f460 56 61 72 28 69 6e 74 65 72 70 2c 20 22 62 69 74  Var(interp, "bit
1f470 6d 61 73 6b 5f 73 69 7a 65 22 2c 0a 20 20 20 20  mask_size",.    
1f480 20 20 28 63 68 61 72 2a 29 26 62 69 74 6d 61 73    (char*)&bitmas
1f490 6b 5f 73 69 7a 65 2c 20 54 43 4c 5f 4c 49 4e 4b  k_size, TCL_LINK
1f4a0 5f 49 4e 54 7c 54 43 4c 5f 4c 49 4e 4b 5f 52 45  _INT|TCL_LINK_RE
1f4b0 41 44 5f 4f 4e 4c 59 29 3b 0a 23 69 66 20 4f 53  AD_ONLY);.#if OS
1f4c0 5f 55 4e 49 58 0a 20 20 54 63 6c 5f 4c 69 6e 6b  _UNIX.  Tcl_Link
1f4d0 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  Var(interp, "sql
1f4e0 69 74 65 5f 73 79 6e 63 5f 63 6f 75 6e 74 22 2c  ite_sync_count",
1f4f0 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73  .      (char*)&s
1f500 71 6c 69 74 65 33 5f 73 79 6e 63 5f 63 6f 75 6e  qlite3_sync_coun
1f510 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29  t, TCL_LINK_INT)
1f520 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  ;.  Tcl_LinkVar(
1f530 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
1f540 66 75 6c 6c 73 79 6e 63 5f 63 6f 75 6e 74 22 2c  fullsync_count",
1f550 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73  .      (char*)&s
1f560 71 6c 69 74 65 33 5f 66 75 6c 6c 73 79 6e 63 5f  qlite3_fullsync_
1f570 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f  count, TCL_LINK_
1f580 49 4e 54 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  INT);.#endif /* 
1f590 4f 53 5f 55 4e 49 58 20 2a 2f 0a 0a 20 20 72 65  OS_UNIX */..  re
1f5a0 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a     turn TCL_OK;.}.