/ Hex Artifact Content
Login

Artifact ca8cb34747c53479e0748c11d1a10cc07d582bb8:


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 74 68 65 20 70  or testing the p
0190: 72 69 6e 74 66 28 29 20 69 6e 74 65 72 66 61 63  rintf() interfac
01a0: 65 20 74 6f 20 53 51 4c 69 74 65 2e 20 20 54 68  e to SQLite.  Th
01b0: 69 73 20 63 6f 64 65 0a 2a 2a 20 69 73 20 6e 6f  is code.** is no
01c0: 74 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68  t included in th
01d0: 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79  e SQLite library
01e0: 2e 20 20 49 74 20 69 73 20 75 73 65 64 20 66 6f  .  It is used fo
01f0: 72 20 61 75 74 6f 6d 61 74 65 64 0a 2a 2a 20 74  r automated.** t
0200: 65 73 74 69 6e 67 20 6f 66 20 74 68 65 20 53 51  esting of the SQ
0210: 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a  Lite library..**
0220: 0a 2a 2a 20 24 49 64 3a 20 74 65 73 74 31 2e 63  .** $Id: test1.c
0230: 2c 76 20 31 2e 32 30 36 20 32 30 30 36 2f 30 32  ,v 1.206 2006/02
0240: 2f 31 30 20 30 33 3a 30 36 3a 31 30 20 64 61 6e  /10 03:06:10 dan
0250: 69 65 6c 6b 31 39 37 37 20 45 78 70 20 24 0a 2a  ielk1977 Exp $.*
0260: 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69  /.#include "sqli
0270: 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63 6c 75 64  teInt.h".#includ
0280: 65 20 22 74 63 6c 2e 68 22 0a 23 69 6e 63 6c 75  e "tcl.h".#inclu
0290: 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75  de "os.h".#inclu
02a0: 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23 69  de <stdlib.h>.#i
02b0: 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e 68  nclude <string.h
02c0: 3e 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73  >../*.** This is
02d0: 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 66   a copy of the f
02e0: 69 72 73 74 20 70 61 72 74 20 6f 66 20 74 68 65  irst part of the
02f0: 20 53 71 6c 69 74 65 44 62 20 73 74 72 75 63 74   SqliteDb struct
0300: 75 72 65 20 69 6e 20 0a 2a 2a 20 74 63 6c 73 71  ure in .** tclsq
0310: 6c 69 74 65 2e 63 2e 20 20 57 65 20 6e 65 65 64  lite.c.  We need
0320: 20 69 74 20 68 65 72 65 20 73 6f 20 74 68 61 74   it here so that
0330: 20 74 68 65 20 67 65 74 5f 73 71 6c 69 74 65 5f   the get_sqlite_
0340: 70 6f 69 6e 74 65 72 20 72 6f 75 74 69 6e 65 0a  pointer routine.
0350: 2a 2a 20 63 61 6e 20 65 78 74 72 61 63 74 20 74  ** can extract t
0360: 68 65 20 73 71 6c 69 74 65 33 2a 20 70 6f 69 6e  he sqlite3* poin
0370: 74 65 72 20 66 72 6f 6d 20 61 6e 20 65 78 69 73  ter from an exis
0380: 74 69 6e 67 20 54 63 6c 20 53 51 4c 69 74 65 0a  ting Tcl SQLite.
0390: 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 2a  ** connection..*
03a0: 2f 0a 73 74 72 75 63 74 20 53 71 6c 69 74 65 44  /.struct SqliteD
03b0: 62 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  b {.  sqlite3 *d
03c0: 62 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 54  b;.};../*.** A T
03d0: 43 4c 20 63 6f 6d 6d 61 6e 64 20 74 68 61 74 20  CL command that 
03e0: 72 65 74 75 72 6e 73 20 74 68 65 20 61 64 64 72  returns the addr
03f0: 65 73 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74  ess of the sqlit
0400: 65 2a 20 70 6f 69 6e 74 65 72 0a 2a 2a 20 66 6f  e* pointer.** fo
0410: 72 20 61 6e 20 73 71 6c 69 74 65 20 63 6f 6e 6e  r an sqlite conn
0420: 65 63 74 69 6f 6e 20 69 6e 73 74 61 6e 63 65 2e  ection instance.
0430: 20 20 42 61 64 20 74 68 69 6e 67 73 20 68 61 70    Bad things hap
0440: 70 65 6e 20 69 66 20 74 68 65 0a 2a 2a 20 69 6e  pen if the.** in
0450: 70 75 74 20 69 73 20 6e 6f 74 20 61 6e 20 73 71  put is not an sq
0460: 6c 69 74 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  lite connection.
0470: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 67  .*/.static int g
0480: 65 74 5f 73 71 6c 69 74 65 5f 70 6f 69 6e 74 65  et_sqlite_pointe
0490: 72 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  r(.  void * clie
04a0: 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
04b0: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
04c0: 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
04d0: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
04e0: 5d 0a 29 7b 0a 20 20 73 74 72 75 63 74 20 53 71  ].){.  struct Sq
04f0: 6c 69 74 65 44 62 20 2a 70 3b 0a 20 20 54 63 6c  liteDb *p;.  Tcl
0500: 5f 43 6d 64 49 6e 66 6f 20 63 6d 64 49 6e 66 6f  _CmdInfo cmdInfo
0510: 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 31 30  ;.  char zBuf[10
0520: 30 5d 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  0];.  if( objc!=
0530: 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f  2 ){.    Tcl_Wro
0540: 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
0550: 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 53 51 4c 49  , 1, objv, "SQLI
0560: 54 45 2d 43 4f 4e 4e 45 43 54 49 4f 4e 22 29 3b  TE-CONNECTION");
0570: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
0580: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
0590: 20 21 54 63 6c 5f 47 65 74 43 6f 6d 6d 61 6e 64   !Tcl_GetCommand
05a0: 49 6e 66 6f 28 69 6e 74 65 72 70 2c 20 54 63 6c  Info(interp, Tcl
05b0: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
05c0: 31 5d 29 2c 20 26 63 6d 64 49 6e 66 6f 29 20 29  1]), &cmdInfo) )
05d0: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
05e0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
05f0: 63 6f 6d 6d 61 6e 64 20 6e 6f 74 20 66 6f 75 6e  command not foun
0600: 64 3a 20 22 2c 0a 20 20 20 20 20 20 20 20 20 20  d: ",.          
0610: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
0620: 62 6a 76 5b 31 5d 29 2c 20 28 63 68 61 72 2a 29  bjv[1]), (char*)
0630: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
0640: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
0650: 70 20 3d 20 28 73 74 72 75 63 74 20 53 71 6c 69  p = (struct Sqli
0660: 74 65 44 62 2a 29 63 6d 64 49 6e 66 6f 2e 6f 62  teDb*)cmdInfo.ob
0670: 6a 43 6c 69 65 6e 74 44 61 74 61 3b 0a 20 20 73  jClientData;.  s
0680: 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 25 70  printf(zBuf, "%p
0690: 22 2c 20 70 2d 3e 64 62 29 3b 0a 20 20 69 66 28  ", p->db);.  if(
06a0: 20 73 74 72 6e 63 6d 70 28 7a 42 75 66 2c 22 30   strncmp(zBuf,"0
06b0: 78 22 2c 32 29 20 29 7b 0a 20 20 20 20 73 70 72  x",2) ){.    spr
06c0: 69 6e 74 66 28 7a 42 75 66 2c 20 22 30 78 25 70  intf(zBuf, "0x%p
06d0: 22 2c 20 70 2d 3e 64 62 29 3b 0a 20 20 7d 0a 20  ", p->db);.  }. 
06e0: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
06f0: 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20  t(interp, zBuf, 
0700: 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  0);.  return TCL
0710: 5f 4f 4b 3b 0a 7d 0a 0a 63 6f 6e 73 74 20 63 68  _OK;.}..const ch
0720: 61 72 20 2a 73 71 6c 69 74 65 33 54 65 73 74 45  ar *sqlite3TestE
0730: 72 72 6f 72 4e 61 6d 65 28 69 6e 74 20 72 63 29  rrorName(int rc)
0740: 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
0750: 7a 4e 61 6d 65 20 3d 20 30 3b 0a 20 20 73 77 69  zName = 0;.  swi
0760: 74 63 68 28 20 72 63 20 29 7b 0a 20 20 20 20 63  tch( rc ){.    c
0770: 61 73 65 20 53 51 4c 49 54 45 5f 4f 4b 3a 20 20  ase SQLITE_OK:  
0780: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
0790: 53 51 4c 49 54 45 5f 4f 4b 22 3b 20 20 20 20 20  SQLITE_OK";     
07a0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
07b0: 63 61 73 65 20 53 51 4c 49 54 45 5f 45 52 52 4f  case SQLITE_ERRO
07c0: 52 3a 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20  R:      zName = 
07d0: 22 53 51 4c 49 54 45 5f 45 52 52 4f 52 22 3b 20  "SQLITE_ERROR"; 
07e0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
07f0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 50 45 52   case SQLITE_PER
0800: 4d 3a 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d  M:       zName =
0810: 20 22 53 51 4c 49 54 45 5f 50 45 52 4d 22 3b 20   "SQLITE_PERM"; 
0820: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
0830: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 41 42    case SQLITE_AB
0840: 4f 52 54 3a 20 20 20 20 20 20 7a 4e 61 6d 65 20  ORT:      zName 
0850: 3d 20 22 53 51 4c 49 54 45 5f 41 42 4f 52 54 22  = "SQLITE_ABORT"
0860: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
0870: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 42     case SQLITE_B
0880: 55 53 59 3a 20 20 20 20 20 20 20 7a 4e 61 6d 65  USY:       zName
0890: 20 3d 20 22 53 51 4c 49 54 45 5f 42 55 53 59 22   = "SQLITE_BUSY"
08a0: 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  ;        break;.
08b0: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
08c0: 4c 4f 43 4b 45 44 3a 20 20 20 20 20 7a 4e 61 6d  LOCKED:     zNam
08d0: 65 20 3d 20 22 53 51 4c 49 54 45 5f 4c 4f 43 4b  e = "SQLITE_LOCK
08e0: 45 44 22 3b 20 20 20 20 20 20 62 72 65 61 6b 3b  ED";      break;
08f0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
0900: 5f 4e 4f 4d 45 4d 3a 20 20 20 20 20 20 7a 4e 61  _NOMEM:      zNa
0910: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4e 4f 4d  me = "SQLITE_NOM
0920: 45 4d 22 3b 20 20 20 20 20 20 20 62 72 65 61 6b  EM";       break
0930: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
0940: 45 5f 52 45 41 44 4f 4e 4c 59 3a 20 20 20 7a 4e  E_READONLY:   zN
0950: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 52 45  ame = "SQLITE_RE
0960: 41 44 4f 4e 4c 59 22 3b 20 20 20 20 62 72 65 61  ADONLY";    brea
0970: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
0980: 54 45 5f 49 4e 54 45 52 52 55 50 54 3a 20 20 7a  TE_INTERRUPT:  z
0990: 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49  Name = "SQLITE_I
09a0: 4e 54 45 52 52 55 50 54 22 3b 20 20 20 62 72 65  NTERRUPT";   bre
09b0: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
09c0: 49 54 45 5f 49 4f 45 52 52 3a 20 20 20 20 20 20  ITE_IOERR:      
09d0: 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f  zName = "SQLITE_
09e0: 49 4f 45 52 52 22 3b 20 20 20 20 20 20 20 62 72  IOERR";       br
09f0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
0a00: 4c 49 54 45 5f 43 4f 52 52 55 50 54 3a 20 20 20  LITE_CORRUPT:   
0a10: 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45   zName = "SQLITE
0a20: 5f 43 4f 52 52 55 50 54 22 3b 20 20 20 20 20 62  _CORRUPT";     b
0a30: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
0a40: 51 4c 49 54 45 5f 46 55 4c 4c 3a 20 20 20 20 20  QLITE_FULL:     
0a50: 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54    zName = "SQLIT
0a60: 45 5f 46 55 4c 4c 22 3b 20 20 20 20 20 20 20 20  E_FULL";        
0a70: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
0a80: 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 3a  SQLITE_CANTOPEN:
0a90: 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49     zName = "SQLI
0aa0: 54 45 5f 43 41 4e 54 4f 50 45 4e 22 3b 20 20 20  TE_CANTOPEN";   
0ab0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
0ac0: 20 53 51 4c 49 54 45 5f 50 52 4f 54 4f 43 4f 4c   SQLITE_PROTOCOL
0ad0: 3a 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c  :   zName = "SQL
0ae0: 49 54 45 5f 50 52 4f 54 4f 43 4f 4c 22 3b 20 20  ITE_PROTOCOL";  
0af0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0b00: 65 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 3a 20  e SQLITE_EMPTY: 
0b10: 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51       zName = "SQ
0b20: 4c 49 54 45 5f 45 4d 50 54 59 22 3b 20 20 20 20  LITE_EMPTY";    
0b30: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
0b40: 73 65 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41  se SQLITE_SCHEMA
0b50: 3a 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53  :     zName = "S
0b60: 51 4c 49 54 45 5f 53 43 48 45 4d 41 22 3b 20 20  QLITE_SCHEMA";  
0b70: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
0b80: 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54  ase SQLITE_CONST
0b90: 52 41 49 4e 54 3a 20 7a 4e 61 6d 65 20 3d 20 22  RAINT: zName = "
0ba0: 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
0bb0: 54 22 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  T";  break;.    
0bc0: 63 61 73 65 20 53 51 4c 49 54 45 5f 4d 49 53 4d  case SQLITE_MISM
0bd0: 41 54 43 48 3a 20 20 20 7a 4e 61 6d 65 20 3d 20  ATCH:   zName = 
0be0: 22 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48  "SQLITE_MISMATCH
0bf0: 22 3b 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ";    break;.   
0c00: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4d 49 53   case SQLITE_MIS
0c10: 55 53 45 3a 20 20 20 20 20 7a 4e 61 6d 65 20 3d  USE:     zName =
0c20: 20 22 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 22   "SQLITE_MISUSE"
0c30: 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ;      break;.  
0c40: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f    case SQLITE_NO
0c50: 4c 46 53 3a 20 20 20 20 20 20 7a 4e 61 6d 65 20  LFS:      zName 
0c60: 3d 20 22 53 51 4c 49 54 45 5f 4e 4f 4c 46 53 22  = "SQLITE_NOLFS"
0c70: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
0c80: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 41     case SQLITE_A
0c90: 55 54 48 3a 20 20 20 20 20 20 20 7a 4e 61 6d 65  UTH:       zName
0ca0: 20 3d 20 22 53 51 4c 49 54 45 5f 41 55 54 48 22   = "SQLITE_AUTH"
0cb0: 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  ;        break;.
0cc0: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
0cd0: 46 4f 52 4d 41 54 3a 20 20 20 20 20 7a 4e 61 6d  FORMAT:     zNam
0ce0: 65 20 3d 20 22 53 51 4c 49 54 45 5f 46 4f 52 4d  e = "SQLITE_FORM
0cf0: 41 54 22 3b 20 20 20 20 20 20 62 72 65 61 6b 3b  AT";      break;
0d00: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
0d10: 5f 52 41 4e 47 45 3a 20 20 20 20 20 20 7a 4e 61  _RANGE:      zNa
0d20: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 52 41 4e  me = "SQLITE_RAN
0d30: 47 45 22 3b 20 20 20 20 20 20 20 62 72 65 61 6b  GE";       break
0d40: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
0d50: 45 5f 52 4f 57 3a 20 20 20 20 20 20 20 20 7a 4e  E_ROW:        zN
0d60: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 52 4f  ame = "SQLITE_RO
0d70: 57 22 3b 20 20 20 20 20 20 20 20 20 62 72 65 61  W";         brea
0d80: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
0d90: 54 45 5f 44 4f 4e 45 3a 20 20 20 20 20 20 20 7a  TE_DONE:       z
0da0: 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 44  Name = "SQLITE_D
0db0: 4f 4e 45 22 3b 20 20 20 20 20 20 20 20 62 72 65  ONE";        bre
0dc0: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
0dd0: 49 54 45 5f 4e 4f 54 41 44 42 3a 20 20 20 20 20  ITE_NOTADB:     
0de0: 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f  zName = "SQLITE_
0df0: 4e 4f 54 41 44 42 22 3b 20 20 20 20 20 20 62 72  NOTADB";      br
0e00: 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74  eak;.    default
0e10: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
0e20: 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45   zName = "SQLITE
0e30: 5f 55 6e 6b 6e 6f 77 6e 22 3b 20 20 20 20 20 62  _Unknown";     b
0e40: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 72 65 74 75  reak;.  }.  retu
0e50: 72 6e 20 7a 4e 61 6d 65 3b 0a 7d 0a 23 64 65 66  rn zName;.}.#def
0e60: 69 6e 65 20 65 72 72 6f 72 4e 61 6d 65 20 73 71  ine errorName sq
0e70: 6c 69 74 65 33 54 65 73 74 45 72 72 6f 72 4e 61  lite3TestErrorNa
0e80: 6d 65 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72  me../*.** Conver
0e90: 74 20 61 6e 20 73 71 6c 69 74 65 33 5f 73 74 6d  t an sqlite3_stm
0ea0: 74 2a 20 69 6e 74 6f 20 61 6e 20 73 71 6c 69 74  t* into an sqlit
0eb0: 65 33 2a 2e 20 20 54 68 69 73 20 64 65 70 65 6e  e3*.  This depen
0ec0: 64 73 20 6f 6e 20 74 68 65 0a 2a 2a 20 66 61 63  ds on the.** fac
0ed0: 74 20 74 68 61 74 20 74 68 65 20 73 71 6c 69 74  t that the sqlit
0ee0: 65 33 2a 20 69 73 20 74 68 65 20 66 69 72 73 74  e3* is the first
0ef0: 20 66 69 65 6c 64 20 69 6e 20 74 68 65 20 56 64   field in the Vd
0f00: 62 65 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  be structure..*/
0f10: 0a 23 64 65 66 69 6e 65 20 53 74 6d 74 54 6f 44  .#define StmtToD
0f20: 62 28 58 29 20 20 20 73 71 6c 69 74 65 33 5f 64  b(X)   sqlite3_d
0f30: 62 5f 68 61 6e 64 6c 65 28 58 29 0a 0a 2f 2a 0a  b_handle(X)../*.
0f40: 2a 2a 20 43 68 65 63 6b 20 61 20 72 65 74 75 72  ** Check a retur
0f50: 6e 20 76 61 6c 75 65 20 74 6f 20 6d 61 6b 65 20  n value to make 
0f60: 73 75 72 65 20 69 74 20 61 67 72 65 65 73 20 77  sure it agrees w
0f70: 69 74 68 20 74 68 65 20 72 65 73 75 6c 74 73 0a  ith the results.
0f80: 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f  ** from sqlite3_
0f90: 65 72 72 63 6f 64 65 2e 0a 2a 2f 0a 69 6e 74 20  errcode..*/.int 
0fa0: 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f  sqlite3TestErrCo
0fb0: 64 65 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  de(Tcl_Interp *i
0fc0: 6e 74 65 72 70 2c 20 73 71 6c 69 74 65 33 20 2a  nterp, sqlite3 *
0fd0: 64 62 2c 20 69 6e 74 20 72 63 29 7b 0a 20 20 69  db, int rc){.  i
0fe0: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4d 49  f( rc!=SQLITE_MI
0ff0: 53 55 53 45 20 26 26 20 72 63 21 3d 53 51 4c 49  SUSE && rc!=SQLI
1000: 54 45 5f 4f 4b 20 26 26 20 73 71 6c 69 74 65 33  TE_OK && sqlite3
1010: 5f 65 72 72 63 6f 64 65 28 64 62 29 21 3d 72 63  _errcode(db)!=rc
1020: 20 29 7b 0a 20 20 20 20 63 68 61 72 20 7a 42 75   ){.    char zBu
1030: 66 5b 32 30 30 5d 3b 0a 20 20 20 20 69 6e 74 20  f[200];.    int 
1040: 72 32 20 3d 20 73 71 6c 69 74 65 33 5f 65 72 72  r2 = sqlite3_err
1050: 63 6f 64 65 28 64 62 29 3b 0a 20 20 20 20 73 70  code(db);.    sp
1060: 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 65 72 72  rintf(zBuf, "err
1070: 6f 72 20 63 6f 64 65 20 25 73 20 28 25 64 29 20  or code %s (%d) 
1080: 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 73  does not match s
1090: 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20 25  qlite3_errcode %
10a0: 73 20 28 25 64 29 22 2c 0a 20 20 20 20 20 20 20  s (%d)",.       
10b0: 65 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 72  errorName(rc), r
10c0: 63 2c 20 65 72 72 6f 72 4e 61 6d 65 28 72 32 29  c, errorName(r2)
10d0: 2c 20 72 32 29 3b 0a 20 20 20 20 54 63 6c 5f 52  , r2);.    Tcl_R
10e0: 65 73 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  esetResult(inter
10f0: 70 29 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65  p);.    Tcl_Appe
1100: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
1110: 20 7a 42 75 66 2c 20 30 29 3b 0a 20 20 20 20 72   zBuf, 0);.    r
1120: 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 72  eturn 1;.  }.  r
1130: 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a  eturn 0;.}../*.*
1140: 2a 20 44 65 63 6f 64 65 20 61 20 70 6f 69 6e 74  * Decode a point
1150: 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33  er to an sqlite3
1160: 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 73 74 61 74   object..*/.stat
1170: 69 63 20 69 6e 74 20 67 65 74 44 62 50 6f 69 6e  ic int getDbPoin
1180: 74 65 72 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ter(Tcl_Interp *
1190: 69 6e 74 65 72 70 2c 20 63 6f 6e 73 74 20 63 68  interp, const ch
11a0: 61 72 20 2a 7a 41 2c 20 73 71 6c 69 74 65 33 20  ar *zA, sqlite3 
11b0: 2a 2a 70 70 44 62 29 7b 0a 20 20 2a 70 70 44 62  **ppDb){.  *ppDb
11c0: 20 3d 20 28 73 71 6c 69 74 65 33 2a 29 73 71 6c   = (sqlite3*)sql
11d0: 69 74 65 33 54 65 78 74 54 6f 50 74 72 28 7a 41  ite3TextToPtr(zA
11e0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
11f0: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 65 63  OK;.}../*.** Dec
1200: 6f 64 65 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  ode a pointer to
1210: 20 61 6e 20 73 71 6c 69 74 65 33 5f 73 74 6d 74   an sqlite3_stmt
1220: 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 73 74 61 74   object..*/.stat
1230: 69 63 20 69 6e 74 20 67 65 74 53 74 6d 74 50 6f  ic int getStmtPo
1240: 69 6e 74 65 72 28 0a 20 20 54 63 6c 5f 49 6e 74  inter(.  Tcl_Int
1250: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 0a 20 20  erp *interp, .  
1260: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 72 67  const char *zArg
1270: 2c 20 20 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  ,  .  sqlite3_st
1280: 6d 74 20 2a 2a 70 70 53 74 6d 74 0a 29 7b 0a 20  mt **ppStmt.){. 
1290: 20 2a 70 70 53 74 6d 74 20 3d 20 28 73 71 6c 69   *ppStmt = (sqli
12a0: 74 65 33 5f 73 74 6d 74 2a 29 73 71 6c 69 74 65  te3_stmt*)sqlite
12b0: 33 54 65 78 74 54 6f 50 74 72 28 7a 41 72 67 29  3TextToPtr(zArg)
12c0: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
12d0: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 65 63 6f  K;.}../*.** Deco
12e0: 64 65 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  de a pointer to 
12f0: 61 6e 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  an sqlite3_stmt 
1300: 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 73 74 61 74 69  object..*/.stati
1310: 63 20 69 6e 74 20 67 65 74 46 69 6c 65 50 6f 69  c int getFilePoi
1320: 6e 74 65 72 28 0a 20 20 54 63 6c 5f 49 6e 74 65  nter(.  Tcl_Inte
1330: 72 70 20 2a 69 6e 74 65 72 70 2c 20 0a 20 20 63  rp *interp, .  c
1340: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 72 67 2c  onst char *zArg,
1350: 20 20 0a 20 20 4f 73 46 69 6c 65 20 2a 2a 70 70    .  OsFile **pp
1360: 46 69 6c 65 0a 29 7b 0a 20 20 2a 70 70 46 69 6c  File.){.  *ppFil
1370: 65 20 3d 20 28 4f 73 46 69 6c 65 2a 29 73 71 6c  e = (OsFile*)sql
1380: 69 74 65 33 54 65 78 74 54 6f 50 74 72 28 7a 41  ite3TextToPtr(zA
1390: 72 67 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  rg);.  return TC
13a0: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47  L_OK;.}../*.** G
13b0: 65 6e 65 72 61 74 65 20 61 20 74 65 78 74 20 72  enerate a text r
13c0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
13d0: 20 61 20 70 6f 69 6e 74 65 72 20 74 68 61 74 20   a pointer that 
13e0: 63 61 6e 20 62 65 20 75 6e 64 65 72 73 74 6f 6f  can be understoo
13f0: 64 0a 2a 2a 20 62 79 20 74 68 65 20 67 65 74 44  d.** by the getD
1400: 62 50 6f 69 6e 74 65 72 20 61 6e 64 20 67 65 74  bPointer and get
1410: 56 6d 50 6f 69 6e 74 65 72 20 72 6f 75 74 69 6e  VmPointer routin
1420: 65 73 20 61 62 6f 76 65 2e 0a 2a 2a 0a 2a 2a 20  es above..**.** 
1430: 54 68 65 20 70 72 6f 62 6c 65 6d 20 69 73 2c 20  The problem is, 
1440: 6f 6e 20 73 6f 6d 65 20 6d 61 63 68 69 6e 65 73  on some machines
1450: 20 28 53 6f 6c 61 72 69 73 29 20 69 66 20 79 6f   (Solaris) if yo
1460: 75 20 64 6f 20 61 20 70 72 69 6e 74 66 20 77 69  u do a printf wi
1470: 74 68 0a 2a 2a 20 22 25 70 22 20 79 6f 75 20 63  th.** "%p" you c
1480: 61 6e 6e 6f 74 20 74 75 72 6e 20 61 72 6f 75 6e  annot turn aroun
1490: 64 20 61 6e 64 20 64 6f 20 61 20 73 63 61 6e 66  d and do a scanf
14a0: 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 22   with the same "
14b0: 25 70 22 20 61 6e 64 0a 2a 2a 20 67 65 74 20 79  %p" and.** get y
14c0: 6f 75 72 20 70 6f 69 6e 74 65 72 20 62 61 63 6b  our pointer back
14d0: 2e 20 20 59 6f 75 20 68 61 76 65 20 74 6f 20 70  .  You have to p
14e0: 72 65 70 65 6e 64 20 61 20 22 30 78 22 20 62 65  repend a "0x" be
14f0: 66 6f 72 65 20 69 74 20 77 69 6c 6c 0a 2a 2a 20  fore it will.** 
1500: 77 6f 72 6b 2e 20 20 4f 72 20 61 74 20 6c 65 61  work.  Or at lea
1510: 73 74 20 74 68 61 74 20 69 73 20 77 68 61 74 20  st that is what 
1520: 69 73 20 72 65 70 6f 72 74 65 64 20 74 6f 20 6d  is reported to m
1530: 65 20 28 64 72 68 29 2e 20 20 42 75 74 20 74 68  e (drh).  But th
1540: 69 73 0a 2a 2a 20 62 65 68 61 76 69 6f 72 20 76  is.** behavior v
1550: 61 72 69 65 73 20 66 72 6f 6d 20 6d 61 63 68 69  aries from machi
1560: 6e 65 20 74 6f 20 6d 61 63 68 69 6e 65 2e 20 20  ne to machine.  
1570: 54 68 65 20 73 6f 6c 75 74 69 6f 6e 20 75 73 65  The solution use
1580: 64 20 68 65 72 20 69 73 0a 2a 2a 20 74 6f 20 74  d her is.** to t
1590: 65 73 74 20 74 68 65 20 73 74 72 69 6e 67 20 72  est the string r
15a0: 69 67 68 74 20 61 66 74 65 72 20 69 74 20 69 73  ight after it is
15b0: 20 67 65 6e 65 72 61 74 65 64 20 74 6f 20 73 65   generated to se
15c0: 65 20 69 66 20 69 74 20 63 61 6e 20 62 65 0a 2a  e if it can be.*
15d0: 2a 20 75 6e 64 65 72 73 74 6f 6f 64 20 62 79 20  * understood by 
15e0: 73 63 61 6e 66 2c 20 61 6e 64 20 69 66 20 6e 6f  scanf, and if no
15f0: 74 2c 20 74 72 79 20 70 72 65 70 65 6e 64 69 6e  t, try prependin
1600: 67 20 61 6e 20 22 30 78 22 20 74 6f 20 73 65 65  g an "0x" to see
1610: 20 69 66 0a 2a 2a 20 74 68 61 74 20 68 65 6c 70   if.** that help
1620: 73 2e 20 20 49 66 20 6e 6f 74 68 69 6e 67 20 77  s.  If nothing w
1630: 6f 72 6b 73 2c 20 61 20 66 61 74 61 6c 20 65 72  orks, a fatal er
1640: 72 6f 72 20 69 73 20 67 65 6e 65 72 61 74 65 64  ror is generated
1650: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
1660: 54 65 73 74 4d 61 6b 65 50 6f 69 6e 74 65 72 53  TestMakePointerS
1670: 74 72 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  tr(Tcl_Interp *i
1680: 6e 74 65 72 70 2c 20 63 68 61 72 20 2a 7a 50 74  nterp, char *zPt
1690: 72 2c 20 76 6f 69 64 20 2a 70 29 7b 0a 20 20 73  r, void *p){.  s
16a0: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
16b0: 31 30 30 2c 20 7a 50 74 72 2c 20 22 25 70 22 2c  100, zPtr, "%p",
16c0: 20 70 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43   p);.  return TC
16d0: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  L_OK;.}../*.** T
16e0: 68 65 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75 74  he callback rout
16f0: 69 6e 65 20 66 6f 72 20 73 71 6c 69 74 65 33 5f  ine for sqlite3_
1700: 65 78 65 63 5f 70 72 69 6e 74 66 28 29 2e 0a 2a  exec_printf()..*
1710: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 65 78 65  /.static int exe
1720: 63 5f 70 72 69 6e 74 66 5f 63 62 28 76 6f 69 64  c_printf_cb(void
1730: 20 2a 70 41 72 67 2c 20 69 6e 74 20 61 72 67 63   *pArg, int argc
1740: 2c 20 63 68 61 72 20 2a 2a 61 72 67 76 2c 20 63  , char **argv, c
1750: 68 61 72 20 2a 2a 6e 61 6d 65 29 7b 0a 20 20 54  har **name){.  T
1760: 63 6c 5f 44 53 74 72 69 6e 67 20 2a 73 74 72 20  cl_DString *str 
1770: 3d 20 28 54 63 6c 5f 44 53 74 72 69 6e 67 2a 29  = (Tcl_DString*)
1780: 70 41 72 67 3b 0a 20 20 69 6e 74 20 69 3b 0a 0a  pArg;.  int i;..
1790: 20 20 69 66 28 20 54 63 6c 5f 44 53 74 72 69 6e    if( Tcl_DStrin
17a0: 67 4c 65 6e 67 74 68 28 73 74 72 29 3d 3d 30 20  gLength(str)==0 
17b0: 29 7b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  ){.    for(i=0; 
17c0: 69 3c 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20  i<argc; i++){.  
17d0: 20 20 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 41      Tcl_DStringA
17e0: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 73 74 72  ppendElement(str
17f0: 2c 20 6e 61 6d 65 5b 69 5d 20 3f 20 6e 61 6d 65  , name[i] ? name
1800: 5b 69 5d 20 3a 20 22 4e 55 4c 4c 22 29 3b 0a 20  [i] : "NULL");. 
1810: 20 20 20 7d 0a 20 20 7d 0a 20 20 66 6f 72 28 69     }.  }.  for(i
1820: 3d 30 3b 20 69 3c 61 72 67 63 3b 20 69 2b 2b 29  =0; i<argc; i++)
1830: 7b 0a 20 20 20 20 54 63 6c 5f 44 53 74 72 69 6e  {.    Tcl_DStrin
1840: 67 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 73  gAppendElement(s
1850: 74 72 2c 20 61 72 67 76 5b 69 5d 20 3f 20 61 72  tr, argv[i] ? ar
1860: 67 76 5b 69 5d 20 3a 20 22 4e 55 4c 4c 22 29 3b  gv[i] : "NULL");
1870: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b  .  }.  return 0;
1880: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
1890: 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63 5f 70    sqlite3_exec_p
18a0: 72 69 6e 74 66 20 20 44 42 20 20 46 4f 52 4d 41  rintf  DB  FORMA
18b0: 54 20 20 53 54 52 49 4e 47 0a 2a 2a 0a 2a 2a 20  T  STRING.**.** 
18c0: 49 6e 76 6f 6b 65 20 74 68 65 20 73 71 6c 69 74  Invoke the sqlit
18d0: 65 33 5f 65 78 65 63 5f 70 72 69 6e 74 66 28 29  e3_exec_printf()
18e0: 20 69 6e 74 65 72 66 61 63 65 20 75 73 69 6e 67   interface using
18f0: 20 74 68 65 20 6f 70 65 6e 20 64 61 74 61 62 61   the open databa
1900: 73 65 0a 2a 2a 20 44 42 2e 20 20 54 68 65 20 53  se.** DB.  The S
1910: 51 4c 20 69 73 20 74 68 65 20 73 74 72 69 6e 67  QL is the string
1920: 20 46 4f 52 4d 41 54 2e 20 20 54 68 65 20 66 6f   FORMAT.  The fo
1930: 72 6d 61 74 20 73 74 72 69 6e 67 20 73 68 6f 75  rmat string shou
1940: 6c 64 20 63 6f 6e 74 61 69 6e 0a 2a 2a 20 6f 6e  ld contain.** on
1950: 65 20 25 73 20 6f 72 20 25 71 2e 20 20 53 54 52  e %s or %q.  STR
1960: 49 4e 47 20 69 73 20 74 68 65 20 76 61 6c 75 65  ING is the value
1970: 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 25   inserted into %
1980: 73 20 6f 72 20 25 71 2e 0a 2a 2f 0a 73 74 61 74  s or %q..*/.stat
1990: 69 63 20 69 6e 74 20 74 65 73 74 5f 65 78 65 63  ic int test_exec
19a0: 5f 70 72 69 6e 74 66 28 0a 20 20 76 6f 69 64 20  _printf(.  void 
19b0: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f  *NotUsed,.  Tcl_
19c0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
19d0: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
19e0: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
19f0: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
1a00: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67  and */.  int arg
1a10: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
1a20: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
1a30: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72  uments */.  char
1a40: 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20   **argv         
1a50: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61     /* Text of ea
1a60: 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29  ch argument */.)
1a70: 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
1a80: 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 20 73  .  Tcl_DString s
1a90: 74 72 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  tr;.  int rc;.  
1aa0: 63 68 61 72 20 2a 7a 45 72 72 20 3d 20 30 3b 0a  char *zErr = 0;.
1ab0: 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20    char *zSql;.  
1ac0: 63 68 61 72 20 7a 42 75 66 5b 33 30 5d 3b 0a 20  char zBuf[30];. 
1ad0: 20 69 66 28 20 61 72 67 63 21 3d 34 20 29 7b 0a   if( argc!=4 ){.
1ae0: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
1af0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
1b00: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
1b10: 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
1b20: 30 5d 2c 20 0a 20 20 20 20 20 20 20 22 20 44 42  0], .       " DB
1b30: 20 46 4f 52 4d 41 54 20 53 54 52 49 4e 47 22 2c   FORMAT STRING",
1b40: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
1b50: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
1b60: 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
1b70: 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31  r(interp, argv[1
1b80: 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e  ], &db) ) return
1b90: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63   TCL_ERROR;.  Tc
1ba0: 6c 5f 44 53 74 72 69 6e 67 49 6e 69 74 28 26 73  l_DStringInit(&s
1bb0: 74 72 29 3b 0a 20 20 7a 53 71 6c 20 3d 20 73 71  tr);.  zSql = sq
1bc0: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 61 72  lite3_mprintf(ar
1bd0: 67 76 5b 32 5d 2c 20 61 72 67 76 5b 33 5d 29 3b  gv[2], argv[3]);
1be0: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
1bf0: 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20 65  exec(db, zSql, e
1c00: 78 65 63 5f 70 72 69 6e 74 66 5f 63 62 2c 20 26  xec_printf_cb, &
1c10: 73 74 72 2c 20 26 7a 45 72 72 29 3b 0a 20 20 73  str, &zErr);.  s
1c20: 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53 71 6c  qlite3_free(zSql
1c30: 29 3b 0a 20 20 73 70 72 69 6e 74 66 28 7a 42 75  );.  sprintf(zBu
1c40: 66 2c 20 22 25 64 22 2c 20 72 63 29 3b 0a 20 20  f, "%d", rc);.  
1c50: 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e  Tcl_AppendElemen
1c60: 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 29 3b  t(interp, zBuf);
1c70: 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65  .  Tcl_AppendEle
1c80: 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 72 63 3d  ment(interp, rc=
1c90: 3d 53 51 4c 49 54 45 5f 4f 4b 20 3f 20 54 63 6c  =SQLITE_OK ? Tcl
1ca0: 5f 44 53 74 72 69 6e 67 56 61 6c 75 65 28 26 73  _DStringValue(&s
1cb0: 74 72 29 20 3a 20 7a 45 72 72 29 3b 0a 20 20 54  tr) : zErr);.  T
1cc0: 63 6c 5f 44 53 74 72 69 6e 67 46 72 65 65 28 26  cl_DStringFree(&
1cd0: 73 74 72 29 3b 0a 20 20 69 66 28 20 7a 45 72 72  str);.  if( zErr
1ce0: 20 29 20 66 72 65 65 28 7a 45 72 72 29 3b 0a 20   ) free(zErr);. 
1cf0: 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74   if( sqlite3Test
1d00: 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20  ErrCode(interp, 
1d10: 64 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e  db, rc) ) return
1d20: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65   TCL_ERROR;.  re
1d30: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
1d40: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
1d50: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 7a 5f  lite3_mprintf_z_
1d60: 74 65 73 74 20 20 53 45 50 41 52 41 54 4f 52 20  test  SEPARATOR 
1d70: 20 41 52 47 30 20 20 41 52 47 31 20 2e 2e 2e 0a   ARG0  ARG1 ....
1d80: 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 25  **.** Test the %
1d90: 7a 20 66 6f 72 6d 61 74 20 6f 66 20 6d 70 72 69  z format of mpri
1da0: 6e 74 66 28 29 2e 20 20 55 73 65 20 6d 75 6c 74  ntf().  Use mult
1db0: 69 70 6c 65 20 6d 70 72 69 6e 74 66 28 29 20 63  iple mprintf() c
1dc0: 61 6c 6c 73 20 74 6f 20 0a 2a 2a 20 63 6f 6e 63  alls to .** conc
1dd0: 61 74 65 6e 61 74 65 20 61 72 67 30 20 74 68 72  atenate arg0 thr
1de0: 6f 75 67 68 20 61 72 67 6e 20 75 73 69 6e 67 20  ough argn using 
1df0: 73 65 70 61 72 61 74 6f 72 20 61 73 20 74 68 65  separator as the
1e00: 20 73 65 70 61 72 61 74 6f 72 2e 0a 2a 2a 20 52   separator..** R
1e10: 65 74 75 72 6e 20 74 68 65 20 72 65 73 75 6c 74  eturn the result
1e20: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
1e30: 74 65 73 74 5f 6d 70 72 69 6e 74 66 5f 7a 28 0a  test_mprintf_z(.
1e40: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
1e50: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
1e60: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
1e70: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
1e80: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
1e90: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
1ea0: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
1eb0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1ec0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
1ed0: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
1ee0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
1ef0: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
1f00: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20  nt */.){.  char 
1f10: 2a 7a 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20  *zResult = 0;.  
1f20: 69 6e 74 20 69 3b 0a 0a 20 20 66 6f 72 28 69 3d  int i;..  for(i=
1f30: 32 3b 20 69 3c 61 72 67 63 3b 20 69 2b 2b 29 7b  2; i<argc; i++){
1f40: 0a 20 20 20 20 7a 52 65 73 75 6c 74 20 3d 20 73  .    zResult = s
1f50: 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 22 25  qlite3MPrintf("%
1f60: 7a 25 73 25 73 22 2c 20 7a 52 65 73 75 6c 74 2c  z%s%s", zResult,
1f70: 20 61 72 67 76 5b 31 5d 2c 20 61 72 67 76 5b 69   argv[1], argv[i
1f80: 5d 29 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 41 70  ]);.  }.  Tcl_Ap
1f90: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
1fa0: 70 2c 20 7a 52 65 73 75 6c 74 2c 20 30 29 3b 0a  p, zResult, 0);.
1fb0: 20 20 73 71 6c 69 74 65 46 72 65 65 28 7a 52 65    sqliteFree(zRe
1fc0: 73 75 6c 74 29 3b 0a 20 20 72 65 74 75 72 6e 20  sult);.  return 
1fd0: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
1fe0: 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33   Usage:  sqlite3
1ff0: 5f 67 65 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74  _get_table_print
2000: 66 20 20 44 42 20 20 46 4f 52 4d 41 54 20 20 53  f  DB  FORMAT  S
2010: 54 52 49 4e 47 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f  TRING.**.** Invo
2020: 6b 65 20 74 68 65 20 73 71 6c 69 74 65 33 5f 67  ke the sqlite3_g
2030: 65 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74 66 28  et_table_printf(
2040: 29 20 69 6e 74 65 72 66 61 63 65 20 75 73 69 6e  ) interface usin
2050: 67 20 74 68 65 20 6f 70 65 6e 20 64 61 74 61 62  g the open datab
2060: 61 73 65 0a 2a 2a 20 44 42 2e 20 20 54 68 65 20  ase.** DB.  The 
2070: 53 51 4c 20 69 73 20 74 68 65 20 73 74 72 69 6e  SQL is the strin
2080: 67 20 46 4f 52 4d 41 54 2e 20 20 54 68 65 20 66  g FORMAT.  The f
2090: 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 73 68 6f  ormat string sho
20a0: 75 6c 64 20 63 6f 6e 74 61 69 6e 0a 2a 2a 20 6f  uld contain.** o
20b0: 6e 65 20 25 73 20 6f 72 20 25 71 2e 20 20 53 54  ne %s or %q.  ST
20c0: 52 49 4e 47 20 69 73 20 74 68 65 20 76 61 6c 75  RING is the valu
20d0: 65 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20  e inserted into 
20e0: 25 73 20 6f 72 20 25 71 2e 0a 2a 2f 0a 73 74 61  %s or %q..*/.sta
20f0: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 67 65 74  tic int test_get
2100: 5f 74 61 62 6c 65 5f 70 72 69 6e 74 66 28 0a 20  _table_printf(. 
2110: 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a   void *NotUsed,.
2120: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
2130: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
2140: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
2150: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
2160: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
2170: 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20  nt argc,        
2180: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
2190: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
21a0: 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20    char **argv   
21b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
21c0: 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e   of each argumen
21d0: 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65  t */.){.  sqlite
21e0: 33 20 2a 64 62 3b 0a 20 20 54 63 6c 5f 44 53 74  3 *db;.  Tcl_DSt
21f0: 72 69 6e 67 20 73 74 72 3b 0a 20 20 69 6e 74 20  ring str;.  int 
2200: 72 63 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72  rc;.  char *zErr
2210: 20 3d 20 30 3b 0a 20 20 69 6e 74 20 6e 52 6f 77   = 0;.  int nRow
2220: 2c 20 6e 43 6f 6c 3b 0a 20 20 63 68 61 72 20 2a  , nCol;.  char *
2230: 2a 61 52 65 73 75 6c 74 3b 0a 20 20 69 6e 74 20  *aResult;.  int 
2240: 69 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 33  i;.  char zBuf[3
2250: 30 5d 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c  0];.  char *zSql
2260: 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 34 20  ;.  if( argc!=4 
2270: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
2280: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
2290: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
22a0: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72  hould be \"", ar
22b0: 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 22  gv[0], .       "
22c0: 20 44 42 20 46 4f 52 4d 41 54 20 53 54 52 49 4e   DB FORMAT STRIN
22d0: 47 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  G", 0);.    retu
22e0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
22f0: 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  }.  if( getDbPoi
2300: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67  nter(interp, arg
2310: 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74  v[1], &db) ) ret
2320: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
2330: 20 54 63 6c 5f 44 53 74 72 69 6e 67 49 6e 69 74   Tcl_DStringInit
2340: 28 26 73 74 72 29 3b 0a 20 20 7a 53 71 6c 20 3d  (&str);.  zSql =
2350: 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
2360: 28 61 72 67 76 5b 32 5d 2c 61 72 67 76 5b 33 5d  (argv[2],argv[3]
2370: 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
2380: 33 5f 67 65 74 5f 74 61 62 6c 65 28 64 62 2c 20  3_get_table(db, 
2390: 7a 53 71 6c 2c 20 26 61 52 65 73 75 6c 74 2c 20  zSql, &aResult, 
23a0: 26 6e 52 6f 77 2c 20 26 6e 43 6f 6c 2c 20 26 7a  &nRow, &nCol, &z
23b0: 45 72 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  Err);.  sqlite3_
23c0: 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 73 70  free(zSql);.  sp
23d0: 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 25 64 22  rintf(zBuf, "%d"
23e0: 2c 20 72 63 29 3b 0a 20 20 54 63 6c 5f 41 70 70  , rc);.  Tcl_App
23f0: 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72  endElement(inter
2400: 70 2c 20 7a 42 75 66 29 3b 0a 20 20 69 66 28 20  p, zBuf);.  if( 
2410: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
2420: 0a 20 20 20 20 73 70 72 69 6e 74 66 28 7a 42 75  .    sprintf(zBu
2430: 66 2c 20 22 25 64 22 2c 20 6e 52 6f 77 29 3b 0a  f, "%d", nRow);.
2440: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c      Tcl_AppendEl
2450: 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 7a 42  ement(interp, zB
2460: 75 66 29 3b 0a 20 20 20 20 73 70 72 69 6e 74 66  uf);.    sprintf
2470: 28 7a 42 75 66 2c 20 22 25 64 22 2c 20 6e 43 6f  (zBuf, "%d", nCo
2480: 6c 29 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65  l);.    Tcl_Appe
2490: 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70  ndElement(interp
24a0: 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20 66 6f 72  , zBuf);.    for
24b0: 28 69 3d 30 3b 20 69 3c 28 6e 52 6f 77 2b 31 29  (i=0; i<(nRow+1)
24c0: 2a 6e 43 6f 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20  *nCol; i++){.   
24d0: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65     Tcl_AppendEle
24e0: 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 61 52 65  ment(interp, aRe
24f0: 73 75 6c 74 5b 69 5d 20 3f 20 61 52 65 73 75 6c  sult[i] ? aResul
2500: 74 5b 69 5d 20 3a 20 22 4e 55 4c 4c 22 29 3b 0a  t[i] : "NULL");.
2510: 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
2520: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65     Tcl_AppendEle
2530: 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 7a 45 72  ment(interp, zEr
2540: 72 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  r);.  }.  sqlite
2550: 33 5f 66 72 65 65 5f 74 61 62 6c 65 28 61 52 65  3_free_table(aRe
2560: 73 75 6c 74 29 3b 0a 20 20 69 66 28 20 7a 45 72  sult);.  if( zEr
2570: 72 20 29 20 66 72 65 65 28 7a 45 72 72 29 3b 0a  r ) free(zErr);.
2580: 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73    if( sqlite3Tes
2590: 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c  tErrCode(interp,
25a0: 20 64 62 2c 20 72 63 29 20 29 20 72 65 74 75 72   db, rc) ) retur
25b0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72  n TCL_ERROR;.  r
25c0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
25d0: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
25e0: 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73  sqlite3_last_ins
25f0: 65 72 74 5f 72 6f 77 69 64 20 44 42 0a 2a 2a 0a  ert_rowid DB.**.
2600: 2a 2a 20 52 65 74 75 72 6e 73 20 74 68 65 20 69  ** Returns the i
2610: 6e 74 65 67 65 72 20 52 4f 57 49 44 20 6f 66 20  nteger ROWID of 
2620: 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
2630: 69 6e 73 65 72 74 2e 0a 2a 2f 0a 73 74 61 74 69  insert..*/.stati
2640: 63 20 69 6e 74 20 74 65 73 74 5f 6c 61 73 74 5f  c int test_last_
2650: 72 6f 77 69 64 28 0a 20 20 76 6f 69 64 20 2a 4e  rowid(.  void *N
2660: 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e  otUsed,.  Tcl_In
2670: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
2680: 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
2690: 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
26a0: 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
26b0: 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c  d */.  int argc,
26c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
26d0: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
26e0: 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ents */.  char *
26f0: 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20  *argv           
2700: 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68   /* Text of each
2710: 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a   argument */.){.
2720: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
2730: 20 63 68 61 72 20 7a 42 75 66 5b 33 30 5d 3b 0a   char zBuf[30];.
2740: 0a 20 20 69 66 28 20 61 72 67 63 21 3d 32 20 29  .  if( argc!=2 )
2750: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
2760: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
2770: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
2780: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
2790: 76 5b 30 5d 2c 20 22 20 44 42 5c 22 22 2c 20 30  v[0], " DB\"", 0
27a0: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
27b0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
27c0: 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
27d0: 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c  interp, argv[1],
27e0: 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
27f0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 73 70 72 69  CL_ERROR;.  spri
2800: 6e 74 66 28 7a 42 75 66 2c 20 22 25 6c 6c 64 22  ntf(zBuf, "%lld"
2810: 2c 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69  , sqlite3_last_i
2820: 6e 73 65 72 74 5f 72 6f 77 69 64 28 64 62 29 29  nsert_rowid(db))
2830: 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65  ;.  Tcl_AppendRe
2840: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75  sult(interp, zBu
2850: 66 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20  f, 0);.  return 
2860: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  SQLITE_OK;.}../*
2870: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
2880: 74 65 33 5f 6b 65 79 20 44 42 20 4b 45 59 0a 2a  te3_key DB KEY.*
2890: 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 63 6f 64  *.** Set the cod
28a0: 65 63 20 6b 65 79 2e 0a 2a 2f 0a 73 74 61 74 69  ec key..*/.stati
28b0: 63 20 69 6e 74 20 74 65 73 74 5f 6b 65 79 28 0a  c int test_key(.
28c0: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
28d0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
28e0: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
28f0: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
2900: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
2910: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
2920: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
2930: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
2940: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
2950: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
2960: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
2970: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
2980: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74  nt */.){.  sqlit
2990: 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20  e3 *db;.  const 
29a0: 63 68 61 72 20 2a 7a 4b 65 79 3b 0a 20 20 69 6e  char *zKey;.  in
29b0: 74 20 6e 4b 65 79 3b 0a 20 20 69 66 28 20 61 72  t nKey;.  if( ar
29c0: 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=3 ){.    Tcl
29d0: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
29e0: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
29f0: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
2a00: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20  "", argv[0],.   
2a10: 20 20 20 20 22 20 46 49 4c 45 4e 41 4d 45 5c 22      " FILENAME\"
2a20: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
2a30: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
2a40: 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e  .  if( getDbPoin
2a50: 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76  ter(interp, argv
2a60: 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75  [1], &db) ) retu
2a70: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
2a80: 7a 4b 65 79 20 3d 20 61 72 67 76 5b 32 5d 3b 0a  zKey = argv[2];.
2a90: 20 20 6e 4b 65 79 20 3d 20 73 74 72 6c 65 6e 28    nKey = strlen(
2aa0: 7a 4b 65 79 29 3b 0a 23 69 66 64 65 66 20 53 51  zKey);.#ifdef SQ
2ab0: 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20  LITE_HAS_CODEC. 
2ac0: 20 73 71 6c 69 74 65 33 5f 6b 65 79 28 64 62 2c   sqlite3_key(db,
2ad0: 20 7a 4b 65 79 2c 20 6e 4b 65 79 29 3b 0a 23 65   zKey, nKey);.#e
2ae0: 6e 64 69 66 0a 20 20 72 65 74 75 72 6e 20 54 43  ndif.  return TC
2af0: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
2b00: 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 72  sage:  sqlite3_r
2b10: 65 6b 65 79 20 44 42 20 4b 45 59 0a 2a 2a 0a 2a  ekey DB KEY.**.*
2b20: 2a 20 43 68 61 6e 67 65 20 74 68 65 20 63 6f 64  * Change the cod
2b30: 65 63 20 6b 65 79 2e 0a 2a 2f 0a 73 74 61 74 69  ec key..*/.stati
2b40: 63 20 69 6e 74 20 74 65 73 74 5f 72 65 6b 65 79  c int test_rekey
2b50: 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65  (.  void *NotUse
2b60: 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  d,.  Tcl_Interp 
2b70: 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
2b80: 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
2b90: 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
2ba0: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
2bb0: 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20    int argc,     
2bc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
2bd0: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
2be0: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  */.  char **argv
2bf0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
2c00: 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75  ext of each argu
2c10: 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c  ment */.){.  sql
2c20: 69 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73  ite3 *db;.  cons
2c30: 74 20 63 68 61 72 20 2a 7a 4b 65 79 3b 0a 20 20  t char *zKey;.  
2c40: 69 6e 74 20 6e 4b 65 79 3b 0a 20 20 69 66 28 20  int nKey;.  if( 
2c50: 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54  argc!=3 ){.    T
2c60: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
2c70: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
2c80: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
2c90: 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20   \"", argv[0],. 
2ca0: 20 20 20 20 20 20 22 20 46 49 4c 45 4e 41 4d 45        " FILENAME
2cb0: 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  \"", 0);.    ret
2cc0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
2cd0: 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f   }.  if( getDbPo
2ce0: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72  inter(interp, ar
2cf0: 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65  gv[1], &db) ) re
2d00: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
2d10: 20 20 7a 4b 65 79 20 3d 20 61 72 67 76 5b 32 5d    zKey = argv[2]
2d20: 3b 0a 20 20 6e 4b 65 79 20 3d 20 73 74 72 6c 65  ;.  nKey = strle
2d30: 6e 28 7a 4b 65 79 29 3b 0a 23 69 66 64 65 66 20  n(zKey);.#ifdef 
2d40: 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43  SQLITE_HAS_CODEC
2d50: 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 6b 65 79  .  sqlite3_rekey
2d60: 28 64 62 2c 20 7a 4b 65 79 2c 20 6e 4b 65 79 29  (db, zKey, nKey)
2d70: 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72  ;.#endif.  retur
2d80: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
2d90: 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
2da0: 65 33 5f 63 6c 6f 73 65 20 44 42 0a 2a 2a 0a 2a  e3_close DB.**.*
2db0: 2a 20 43 6c 6f 73 65 73 20 74 68 65 20 64 61 74  * Closes the dat
2dc0: 61 62 61 73 65 20 6f 70 65 6e 65 64 20 62 79 20  abase opened by 
2dd0: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 2e 0a 2a 2f  sqlite3_open..*/
2de0: 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69  .static int sqli
2df0: 74 65 5f 74 65 73 74 5f 63 6c 6f 73 65 28 0a 20  te_test_close(. 
2e00: 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a   void *NotUsed,.
2e10: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
2e20: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
2e30: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
2e40: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
2e50: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
2e60: 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20  nt argc,        
2e70: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
2e80: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
2e90: 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20    char **argv   
2ea0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
2eb0: 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e   of each argumen
2ec0: 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65  t */.){.  sqlite
2ed0: 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b  3 *db;.  int rc;
2ee0: 0a 20 20 69 66 28 20 61 72 67 63 21 3d 32 20 29  .  if( argc!=2 )
2ef0: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
2f00: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
2f10: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
2f20: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
2f30: 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46  v[0],.       " F
2f40: 49 4c 45 4e 41 4d 45 5c 22 22 2c 20 30 29 3b 0a  ILENAME\"", 0);.
2f50: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
2f60: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
2f70: 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
2f80: 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64  erp, argv[1], &d
2f90: 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
2fa0: 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71  ERROR;.  rc = sq
2fb0: 6c 69 74 65 33 5f 63 6c 6f 73 65 28 64 62 29 3b  lite3_close(db);
2fc0: 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74  .  Tcl_SetResult
2fd0: 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a  (interp, (char *
2fe0: 29 65 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20  )errorName(rc), 
2ff0: 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20 72  TCL_STATIC);.  r
3000: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
3010: 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c 65 6d 65 6e 74  ./*.** Implement
3020: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 78 5f 63  ation of the x_c
3030: 6f 61 6c 65 73 63 65 28 29 20 66 75 6e 63 74 69  oalesce() functi
3040: 6f 6e 2e 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  on..** Return th
3050: 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  e first argument
3060: 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d 65   non-NULL argume
3070: 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  nt..*/.static vo
3080: 69 64 20 69 66 6e 75 6c 6c 46 75 6e 63 28 73 71  id ifnullFunc(sq
3090: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63  lite3_context *c
30a0: 6f 6e 74 65 78 74 2c 20 69 6e 74 20 61 72 67 63  ontext, int argc
30b0: 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  , sqlite3_value 
30c0: 2a 2a 61 72 67 76 29 7b 0a 20 20 69 6e 74 20 69  **argv){.  int i
30d0: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 61  ;.  for(i=0; i<a
30e0: 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  rgc; i++){.    i
30f0: 66 28 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 21 3d  f( SQLITE_NULL!=
3100: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79  sqlite3_value_ty
3110: 70 65 28 61 72 67 76 5b 69 5d 29 20 29 7b 0a 20  pe(argv[i]) ){. 
3120: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73       sqlite3_res
3130: 75 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65 78 74  ult_text(context
3140: 2c 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33  , (char*)sqlite3
3150: 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67 76  _value_text(argv
3160: 5b 69 5d 29 2c 0a 20 20 20 20 20 20 20 20 20 20  [i]),.          
3170: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79  sqlite3_value_by
3180: 74 65 73 28 61 72 67 76 5b 69 5d 29 2c 20 53 51  tes(argv[i]), SQ
3190: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
31a0: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
31b0: 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a    }.  }.}../*.**
31c0: 20 41 20 73 74 72 75 63 74 75 72 65 20 69 6e 74   A structure int
31d0: 6f 20 77 68 69 63 68 20 74 6f 20 61 63 63 75 6d  o which to accum
31e0: 75 6c 61 74 65 20 74 65 78 74 2e 0a 2a 2f 0a 73  ulate text..*/.s
31f0: 74 72 75 63 74 20 64 73 74 72 20 7b 0a 20 20 69  truct dstr {.  i
3200: 6e 74 20 6e 41 6c 6c 6f 63 3b 20 20 2f 2a 20 53  nt nAlloc;  /* S
3210: 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 2a  pace allocated *
3220: 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20  /.  int nUsed;  
3230: 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20 2a   /* Space used *
3240: 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20  /.  char *z;    
3250: 20 2f 2a 20 54 68 65 20 73 70 61 63 65 20 2a 2f   /* The space */
3260: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 70 70 65 6e  .};../*.** Appen
3270: 64 20 74 65 78 74 20 74 6f 20 61 20 64 73 74 72  d text to a dstr
3280: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
3290: 64 73 74 72 41 70 70 65 6e 64 28 73 74 72 75 63  dstrAppend(struc
32a0: 74 20 64 73 74 72 20 2a 70 2c 20 63 6f 6e 73 74  t dstr *p, const
32b0: 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 64 69   char *z, int di
32c0: 76 69 64 65 72 29 7b 0a 20 20 69 6e 74 20 6e 20  vider){.  int n 
32d0: 3d 20 73 74 72 6c 65 6e 28 7a 29 3b 0a 20 20 69  = strlen(z);.  i
32e0: 66 28 20 70 2d 3e 6e 55 73 65 64 20 2b 20 6e 20  f( p->nUsed + n 
32f0: 2b 20 32 20 3e 20 70 2d 3e 6e 41 6c 6c 6f 63 20  + 2 > p->nAlloc 
3300: 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 65  ){.    char *zNe
3310: 77 3b 0a 20 20 20 20 70 2d 3e 6e 41 6c 6c 6f 63  w;.    p->nAlloc
3320: 20 3d 20 70 2d 3e 6e 41 6c 6c 6f 63 2a 32 20 2b   = p->nAlloc*2 +
3330: 20 6e 20 2b 20 32 30 30 3b 0a 20 20 20 20 7a 4e   n + 200;.    zN
3340: 65 77 20 3d 20 73 71 6c 69 74 65 52 65 61 6c 6c  ew = sqliteReall
3350: 6f 63 28 70 2d 3e 7a 2c 20 70 2d 3e 6e 41 6c 6c  oc(p->z, p->nAll
3360: 6f 63 29 3b 0a 20 20 20 20 69 66 28 20 7a 4e 65  oc);.    if( zNe
3370: 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71  w==0 ){.      sq
3380: 6c 69 74 65 46 72 65 65 28 70 2d 3e 7a 29 3b 0a  liteFree(p->z);.
3390: 20 20 20 20 20 20 6d 65 6d 73 65 74 28 70 2c 20        memset(p, 
33a0: 30 2c 20 73 69 7a 65 6f 66 28 2a 70 29 29 3b 0a  0, sizeof(*p));.
33b0: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20        return;.  
33c0: 20 20 7d 0a 20 20 20 20 70 2d 3e 7a 20 3d 20 7a    }.    p->z = z
33d0: 4e 65 77 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64  New;.  }.  if( d
33e0: 69 76 69 64 65 72 20 26 26 20 70 2d 3e 6e 55 73  ivider && p->nUs
33f0: 65 64 3e 30 20 29 7b 0a 20 20 20 20 70 2d 3e 7a  ed>0 ){.    p->z
3400: 5b 70 2d 3e 6e 55 73 65 64 2b 2b 5d 20 3d 20 64  [p->nUsed++] = d
3410: 69 76 69 64 65 72 3b 0a 20 20 7d 0a 20 20 6d 65  ivider;.  }.  me
3420: 6d 63 70 79 28 26 70 2d 3e 7a 5b 70 2d 3e 6e 55  mcpy(&p->z[p->nU
3430: 73 65 64 5d 2c 20 7a 2c 20 6e 2b 31 29 3b 0a 20  sed], z, n+1);. 
3440: 20 70 2d 3e 6e 55 73 65 64 20 2b 3d 20 6e 3b 0a   p->nUsed += n;.
3450: 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 64  }../*.** Invoked
3460: 20 66 6f 72 20 65 61 63 68 20 63 61 6c 6c 62 61   for each callba
3470: 63 6b 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 45  ck from sqlite3E
3480: 78 65 63 46 75 6e 63 0a 2a 2f 0a 73 74 61 74 69  xecFunc.*/.stati
3490: 63 20 69 6e 74 20 65 78 65 63 46 75 6e 63 43 61  c int execFuncCa
34a0: 6c 6c 62 61 63 6b 28 76 6f 69 64 20 2a 70 44 61  llback(void *pDa
34b0: 74 61 2c 20 69 6e 74 20 61 72 67 63 2c 20 63 68  ta, int argc, ch
34c0: 61 72 20 2a 2a 61 72 67 76 2c 20 63 68 61 72 20  ar **argv, char 
34d0: 2a 2a 4e 6f 74 55 73 65 64 29 7b 0a 20 20 73 74  **NotUsed){.  st
34e0: 72 75 63 74 20 64 73 74 72 20 2a 70 20 3d 20 28  ruct dstr *p = (
34f0: 73 74 72 75 63 74 20 64 73 74 72 2a 29 70 44 61  struct dstr*)pDa
3500: 74 61 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 66  ta;.  int i;.  f
3510: 6f 72 28 69 3d 30 3b 20 69 3c 61 72 67 63 3b 20  or(i=0; i<argc; 
3520: 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 61 72  i++){.    if( ar
3530: 67 76 5b 69 5d 3d 3d 30 20 29 7b 0a 20 20 20 20  gv[i]==0 ){.    
3540: 20 20 64 73 74 72 41 70 70 65 6e 64 28 70 2c 20    dstrAppend(p, 
3550: 22 4e 55 4c 4c 22 2c 20 27 20 27 29 3b 0a 20 20  "NULL", ' ');.  
3560: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64    }else{.      d
3570: 73 74 72 41 70 70 65 6e 64 28 70 2c 20 61 72 67  strAppend(p, arg
3580: 76 5b 69 5d 2c 20 27 20 27 29 3b 0a 20 20 20 20  v[i], ' ');.    
3590: 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30  }.  }.  return 0
35a0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c 65  ;.}../*.** Imple
35b0: 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  mentation of the
35c0: 20 78 5f 73 71 6c 69 74 65 5f 65 78 65 63 28 29   x_sqlite_exec()
35d0: 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 69 73   function.  This
35e0: 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73 0a   function takes.
35f0: 2a 2a 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75  ** a single argu
3600: 6d 65 6e 74 20 61 6e 64 20 61 74 74 65 6d 70 74  ment and attempt
3610: 73 20 74 6f 20 65 78 65 63 75 74 65 20 74 68 61  s to execute tha
3620: 74 20 61 72 67 75 6d 65 6e 74 20 61 73 20 53 51  t argument as SQ
3630: 4c 20 63 6f 64 65 2e 0a 2a 2a 20 54 68 69 73 20  L code..** This 
3640: 69 73 20 69 6c 6c 65 67 61 6c 20 61 6e 64 20 73  is illegal and s
3650: 68 6f 75 6c 64 20 73 65 74 20 74 68 65 20 53 51  hould set the SQ
3660: 4c 49 54 45 5f 4d 49 53 55 53 45 20 66 6c 61 67  LITE_MISUSE flag
3670: 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
3680: 2e 0a 2a 2a 0a 2a 2a 20 32 30 30 34 2d 4a 61 6e  ..**.** 2004-Jan
3690: 2d 30 37 3a 20 20 57 65 20 68 61 76 65 20 63 68  -07:  We have ch
36a0: 61 6e 67 65 64 20 74 68 69 73 20 74 6f 20 6d 61  anged this to ma
36b0: 6b 65 20 69 74 20 6c 65 67 61 6c 20 74 6f 20 63  ke it legal to c
36c0: 61 6c 6c 20 73 71 6c 69 74 65 33 5f 65 78 65 63  all sqlite3_exec
36d0: 28 29 0a 2a 2a 20 66 72 6f 6d 20 77 69 74 68 69  ().** from withi
36e0: 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 63 61 6c  n a function cal
36f0: 6c 2e 20 20 0a 2a 2a 20 0a 2a 2a 20 54 68 69 73  l.  .** .** This
3700: 20 72 6f 75 74 69 6e 65 20 73 69 6d 75 6c 61 74   routine simulat
3710: 65 73 20 74 68 65 20 65 66 66 65 63 74 20 6f 66  es the effect of
3720: 20 68 61 76 69 6e 67 20 74 77 6f 20 74 68 72 65   having two thre
3730: 61 64 73 20 61 74 74 65 6d 70 74 20 74 6f 0a 2a  ads attempt to.*
3740: 2a 20 75 73 65 20 74 68 65 20 73 61 6d 65 20 64  * use the same d
3750: 61 74 61 62 61 73 65 20 61 74 20 74 68 65 20 73  atabase at the s
3760: 61 6d 65 20 74 69 6d 65 2e 0a 2a 2f 0a 73 74 61  ame time..*/.sta
3770: 74 69 63 20 76 6f 69 64 20 73 71 6c 69 74 65 33  tic void sqlite3
3780: 45 78 65 63 46 75 6e 63 28 0a 20 20 73 71 6c 69  ExecFunc(.  sqli
3790: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e  te3_context *con
37a0: 74 65 78 74 2c 20 0a 20 20 69 6e 74 20 61 72 67  text, .  int arg
37b0: 63 2c 20 20 0a 20 20 73 71 6c 69 74 65 33 5f 76  c,  .  sqlite3_v
37c0: 61 6c 75 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20  alue **argv.){. 
37d0: 20 73 74 72 75 63 74 20 64 73 74 72 20 78 3b 0a   struct dstr x;.
37e0: 20 20 6d 65 6d 73 65 74 28 26 78 2c 20 30 2c 20    memset(&x, 0, 
37f0: 73 69 7a 65 6f 66 28 78 29 29 3b 0a 20 20 73 71  sizeof(x));.  sq
3800: 6c 69 74 65 33 5f 65 78 65 63 28 28 73 71 6c 69  lite3_exec((sqli
3810: 74 65 33 2a 29 73 71 6c 69 74 65 33 5f 75 73 65  te3*)sqlite3_use
3820: 72 5f 64 61 74 61 28 63 6f 6e 74 65 78 74 29 2c  r_data(context),
3830: 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 73 71  .      (char*)sq
3840: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
3850: 28 61 72 67 76 5b 30 5d 29 2c 0a 20 20 20 20 20  (argv[0]),.     
3860: 20 65 78 65 63 46 75 6e 63 43 61 6c 6c 62 61 63   execFuncCallbac
3870: 6b 2c 20 26 78 2c 20 30 29 3b 0a 20 20 73 71 6c  k, &x, 0);.  sql
3880: 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74  ite3_result_text
3890: 28 63 6f 6e 74 65 78 74 2c 20 78 2e 7a 2c 20 78  (context, x.z, x
38a0: 2e 6e 55 73 65 64 2c 20 53 51 4c 49 54 45 5f 54  .nUsed, SQLITE_T
38b0: 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 73 71 6c  RANSIENT);.  sql
38c0: 69 74 65 46 72 65 65 28 78 2e 7a 29 3b 0a 7d 0a  iteFree(x.z);.}.
38d0: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
38e0: 71 6c 69 74 65 5f 74 65 73 74 5f 63 72 65 61 74  qlite_test_creat
38f0: 65 5f 66 75 6e 63 74 69 6f 6e 20 44 42 0a 2a 2a  e_function DB.**
3900: 0a 2a 2a 20 43 61 6c 6c 20 74 68 65 20 73 71 6c  .** Call the sql
3910: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
3920: 74 69 6f 6e 20 41 50 49 20 6f 6e 20 74 68 65 20  tion API on the 
3930: 67 69 76 65 6e 20 64 61 74 61 62 61 73 65 20 69  given database i
3940: 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 63 72  n order.** to cr
3950: 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20  eate a function 
3960: 6e 61 6d 65 64 20 22 78 5f 63 6f 61 6c 65 73 63  named "x_coalesc
3970: 65 22 2e 20 20 54 68 69 73 20 66 75 6e 63 74 69  e".  This functi
3980: 6f 6e 20 64 6f 65 73 20 74 68 65 20 73 61 6d 65  on does the same
3990: 20 74 68 69 6e 67 0a 2a 2a 20 61 73 20 74 68 65   thing.** as the
39a0: 20 22 63 6f 61 6c 65 73 63 65 22 20 66 75 6e 63   "coalesce" func
39b0: 74 69 6f 6e 2e 20 20 54 68 69 73 20 66 75 6e 63  tion.  This func
39c0: 74 69 6f 6e 20 61 6c 73 6f 20 72 65 67 69 73 74  tion also regist
39d0: 65 72 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74  ers an SQL funct
39e0: 69 6f 6e 0a 2a 2a 20 6e 61 6d 65 64 20 22 78 5f  ion.** named "x_
39f0: 73 71 6c 69 74 65 5f 65 78 65 63 22 20 74 68 61  sqlite_exec" tha
3a00: 74 20 69 6e 76 6f 6b 65 73 20 73 71 6c 69 74 65  t invokes sqlite
3a10: 33 5f 65 78 65 63 28 29 2e 20 20 49 6e 76 6f 6b  3_exec().  Invok
3a20: 69 6e 67 20 73 71 6c 69 74 65 33 5f 65 78 65 63  ing sqlite3_exec
3a30: 28 29 0a 2a 2a 20 69 6e 20 74 68 69 73 20 77 61  ().** in this wa
3a40: 79 20 69 73 20 69 6c 6c 65 67 61 6c 20 72 65 63  y is illegal rec
3a50: 75 72 73 69 6f 6e 20 61 6e 64 20 73 68 6f 75 6c  ursion and shoul
3a60: 64 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54  d raise an SQLIT
3a70: 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 2e 0a  E_MISUSE error..
3a80: 2a 2a 20 54 68 65 20 65 66 66 65 63 74 20 69 73  ** The effect is
3a90: 20 73 69 6d 69 6c 61 72 20 74 6f 20 74 72 79 69   similar to tryi
3aa0: 6e 67 20 74 6f 20 75 73 65 20 74 68 65 20 73 61  ng to use the sa
3ab0: 6d 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  me database conn
3ac0: 65 63 74 69 6f 6e 20 66 72 6f 6d 0a 2a 2a 20 74  ection from.** t
3ad0: 77 6f 20 74 68 72 65 61 64 73 20 61 74 20 74 68  wo threads at th
3ae0: 65 20 73 61 6d 65 20 74 69 6d 65 2e 0a 2a 2a 0a  e same time..**.
3af0: 2a 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20  ** The original 
3b00: 6d 6f 74 69 76 61 74 69 6f 6e 20 66 6f 72 20 74  motivation for t
3b10: 68 69 73 20 72 6f 75 74 69 6e 65 20 77 61 73 20  his routine was 
3b20: 74 6f 20 62 65 20 61 62 6c 65 20 74 6f 20 63 61  to be able to ca
3b30: 6c 6c 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  ll the.** sqlite
3b40: 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
3b50: 6e 20 66 75 6e 63 74 69 6f 6e 20 77 68 69 6c 65  n function while
3b60: 20 61 20 71 75 65 72 79 20 69 73 20 69 6e 20 70   a query is in p
3b70: 72 6f 67 72 65 73 73 20 69 6e 20 6f 72 64 65 72  rogress in order
3b80: 0a 2a 2a 20 74 6f 20 74 65 73 74 20 74 68 65 20  .** to test the 
3b90: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 64 65  SQLITE_MISUSE de
3ba0: 74 65 63 74 69 6f 6e 20 6c 6f 67 69 63 2e 0a 2a  tection logic..*
3bb0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
3bc0: 74 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  t_create_functio
3bd0: 6e 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73  n(.  void *NotUs
3be0: 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ed,.  Tcl_Interp
3bf0: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
3c00: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
3c10: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
3c20: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
3c30: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20  .  int argc,    
3c40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
3c50: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
3c60: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67   */.  char **arg
3c70: 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  v            /* 
3c80: 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67  Text of each arg
3c90: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e  ument */.){.  in
3ca0: 74 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 20  t rc;.  sqlite3 
3cb0: 2a 64 62 3b 0a 20 20 65 78 74 65 72 6e 20 76 6f  *db;.  extern vo
3cc0: 69 64 20 4d 64 35 5f 52 65 67 69 73 74 65 72 28  id Md5_Register(
3cd0: 73 71 6c 69 74 65 33 2a 29 3b 0a 0a 20 20 69 66  sqlite3*);..  if
3ce0: 28 20 61 72 67 63 21 3d 32 20 29 7b 0a 20 20 20  ( argc!=2 ){.   
3cf0: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
3d00: 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
3d10: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
3d20: 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c  be \"", argv[0],
3d30: 0a 20 20 20 20 20 20 20 22 20 44 42 5c 22 22 2c  .       " DB\"",
3d40: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
3d50: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
3d60: 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
3d70: 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31  r(interp, argv[1
3d80: 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e  ], &db) ) return
3d90: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63   TCL_ERROR;.  rc
3da0: 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74   = sqlite3_creat
3db0: 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22  e_function(db, "
3dc0: 78 5f 63 6f 61 6c 65 73 63 65 22 2c 20 2d 31 2c  x_coalesce", -1,
3dd0: 20 53 51 4c 49 54 45 5f 41 4e 59 2c 20 30 2c 20   SQLITE_ANY, 0, 
3de0: 0a 20 20 20 20 20 20 20 20 69 66 6e 75 6c 6c 46  .        ifnullF
3df0: 75 6e 63 2c 20 30 2c 20 30 29 3b 0a 0a 23 69 66  unc, 0, 0);..#if
3e00: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
3e10: 5f 55 54 46 31 36 0a 20 20 2f 2a 20 55 73 65 20  _UTF16.  /* Use 
3e20: 74 68 65 20 73 71 6c 69 74 65 33 5f 63 72 65 61  the sqlite3_crea
3e30: 74 65 5f 66 75 6e 63 74 69 6f 6e 31 36 28 29 20  te_function16() 
3e40: 41 50 49 20 68 65 72 65 2e 20 4d 61 69 6e 6c 79  API here. Mainly
3e50: 20 66 6f 72 20 66 75 6e 2c 20 62 75 74 20 61 6c   for fun, but al
3e60: 73 6f 20 0a 20 20 2a 2a 20 62 65 63 61 75 73 65  so .  ** because
3e70: 20 69 74 20 69 73 20 6e 6f 74 20 74 65 73 74 65   it is not teste
3e80: 64 20 61 6e 79 77 68 65 72 65 20 65 6c 73 65 2e  d anywhere else.
3e90: 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   */.  if( rc==SQ
3ea0: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73  LITE_OK ){.    s
3eb0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56  qlite3_value *pV
3ec0: 61 6c 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  al;.#ifdef SQLIT
3ed0: 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 20 20 69  E_MEMDEBUG.    i
3ee0: 66 28 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c  f( sqlite3_iMall
3ef0: 6f 63 46 61 69 6c 3e 30 20 29 7b 0a 20 20 20 20  ocFail>0 ){.    
3f00: 20 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f    sqlite3_iMallo
3f10: 63 46 61 69 6c 2b 2b 3b 0a 20 20 20 20 7d 0a 23  cFail++;.    }.#
3f20: 65 6e 64 69 66 20 0a 20 20 20 20 70 56 61 6c 20  endif .    pVal 
3f30: 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65  = sqlite3ValueNe
3f40: 77 28 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  w();.    sqlite3
3f50: 56 61 6c 75 65 53 65 74 53 74 72 28 70 56 61 6c  ValueSetStr(pVal
3f60: 2c 20 2d 31 2c 20 22 78 5f 73 71 6c 69 74 65 5f  , -1, "x_sqlite_
3f70: 65 78 65 63 22 2c 20 53 51 4c 49 54 45 5f 55 54  exec", SQLITE_UT
3f80: 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  F8, SQLITE_STATI
3f90: 43 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  C);.    rc = sql
3fa0: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
3fb0: 74 69 6f 6e 31 36 28 64 62 2c 20 0a 20 20 20 20  tion16(db, .    
3fc0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
3fd0: 33 56 61 6c 75 65 54 65 78 74 28 70 56 61 6c 2c  3ValueText(pVal,
3fe0: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
3ff0: 49 56 45 29 2c 0a 20 20 20 20 20 20 20 20 20 20  IVE),.          
4000: 20 20 20 20 31 2c 20 53 51 4c 49 54 45 5f 55 54      1, SQLITE_UT
4010: 46 31 36 2c 20 64 62 2c 20 73 71 6c 69 74 65 33  F16, db, sqlite3
4020: 45 78 65 63 46 75 6e 63 2c 20 30 2c 20 30 29 3b  ExecFunc, 0, 0);
4030: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75  .    sqlite3Valu
4040: 65 46 72 65 65 28 70 56 61 6c 29 3b 0a 20 20 7d  eFree(pVal);.  }
4050: 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 73  .#endif..  if( s
4060: 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64  qlite3TestErrCod
4070: 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63  e(interp, db, rc
4080: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
4090: 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74 52  RROR;.  Tcl_SetR
40a0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63  esult(interp, (c
40b0: 68 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28  har *)errorName(
40c0: 72 63 29 2c 20 30 29 3b 0a 20 20 72 65 74 75 72  rc), 0);.  retur
40d0: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
40e0: 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f 20 69  ** Routines to i
40f0: 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 78 5f 63  mplement the x_c
4100: 6f 75 6e 74 28 29 20 61 67 67 72 65 67 61 74 65  ount() aggregate
4110: 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a   function..**.**
4120: 20 78 5f 63 6f 75 6e 74 28 29 20 63 6f 75 6e 74   x_count() count
4130: 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
4140: 6e 6f 6e 2d 6e 75 6c 6c 20 61 72 67 75 6d 65 6e  non-null argumen
4150: 74 73 2e 20 20 42 75 74 20 74 68 65 72 65 20 61  ts.  But there a
4160: 72 65 0a 2a 2a 20 73 6f 6d 65 20 74 77 69 73 74  re.** some twist
4170: 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20 70 75  s for testing pu
4180: 72 70 6f 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  rposes..**.** If
4190: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   the argument to
41a0: 20 78 5f 63 6f 75 6e 74 28 29 20 69 73 20 34 30   x_count() is 40
41b0: 20 74 68 65 6e 20 61 20 55 54 46 2d 38 20 65 72   then a UTF-8 er
41c0: 72 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64 0a  ror is reported.
41d0: 2a 2a 20 6f 6e 20 74 68 65 20 73 74 65 70 20 66  ** on the step f
41e0: 75 6e 63 74 69 6f 6e 2e 20 20 49 66 20 78 5f 63  unction.  If x_c
41f0: 6f 75 6e 74 28 34 31 29 20 69 73 20 73 65 65 6e  ount(41) is seen
4200: 2c 20 74 68 65 6e 20 61 20 55 54 46 2d 31 36 20  , then a UTF-16 
4210: 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 70 6f  error.** is repo
4220: 72 74 65 64 20 6f 6e 20 74 68 65 20 73 74 65 70  rted on the step
4230: 20 66 75 6e 63 74 69 6f 6e 2e 20 20 49 66 20 74   function.  If t
4240: 68 65 20 74 6f 74 61 6c 20 63 6f 75 6e 74 20 69  he total count i
4250: 73 20 34 32 2c 20 74 68 65 6e 0a 2a 2a 20 61 20  s 42, then.** a 
4260: 55 54 46 2d 38 20 65 72 72 6f 72 20 69 73 20 72  UTF-8 error is r
4270: 65 70 6f 72 74 65 64 20 6f 6e 20 74 68 65 20 66  eported on the f
4280: 69 6e 61 6c 69 7a 65 20 66 75 6e 63 74 69 6f 6e  inalize function
4290: 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  ..*/.typedef str
42a0: 75 63 74 20 43 6f 75 6e 74 43 74 78 20 43 6f 75  uct CountCtx Cou
42b0: 6e 74 43 74 78 3b 0a 73 74 72 75 63 74 20 43 6f  ntCtx;.struct Co
42c0: 75 6e 74 43 74 78 20 7b 0a 20 20 69 6e 74 20 6e  untCtx {.  int n
42d0: 3b 0a 7d 3b 0a 73 74 61 74 69 63 20 76 6f 69 64  ;.};.static void
42e0: 20 63 6f 75 6e 74 53 74 65 70 28 73 71 6c 69 74   countStep(sqlit
42f0: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74  e3_context *cont
4300: 65 78 74 2c 20 69 6e 74 20 61 72 67 63 2c 20 73  ext, int argc, s
4310: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
4320: 72 67 76 29 7b 0a 20 20 43 6f 75 6e 74 43 74 78  rgv){.  CountCtx
4330: 20 2a 70 3b 0a 20 20 70 20 3d 20 73 71 6c 69 74   *p;.  p = sqlit
4340: 65 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 6e  e3_aggregate_con
4350: 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 73 69  text(context, si
4360: 7a 65 6f 66 28 2a 70 29 29 3b 0a 20 20 69 66 28  zeof(*p));.  if(
4370: 20 28 61 72 67 63 3d 3d 30 20 7c 7c 20 53 51 4c   (argc==0 || SQL
4380: 49 54 45 5f 4e 55 4c 4c 21 3d 73 71 6c 69 74 65  ITE_NULL!=sqlite
4390: 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 61 72 67  3_value_type(arg
43a0: 76 5b 30 5d 29 20 29 20 26 26 20 70 20 29 7b 0a  v[0]) ) && p ){.
43b0: 20 20 20 20 70 2d 3e 6e 2b 2b 3b 0a 20 20 7d 0a      p->n++;.  }.
43c0: 20 20 69 66 28 20 61 72 67 63 3e 30 20 29 7b 0a    if( argc>0 ){.
43d0: 20 20 20 20 69 6e 74 20 76 20 3d 20 73 71 6c 69      int v = sqli
43e0: 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28 61 72  te3_value_int(ar
43f0: 67 76 5b 30 5d 29 3b 0a 20 20 20 20 69 66 28 20  gv[0]);.    if( 
4400: 76 3d 3d 34 30 20 29 7b 0a 20 20 20 20 20 20 73  v==40 ){.      s
4410: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72  qlite3_result_er
4420: 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20 22 76 61  ror(context, "va
4430: 6c 75 65 20 6f 66 20 34 30 20 68 61 6e 64 65 64  lue of 40 handed
4440: 20 74 6f 20 78 5f 63 6f 75 6e 74 22 2c 20 2d 31   to x_count", -1
4450: 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
4460: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 20  E_OMIT_UTF16.   
4470: 20 7d 65 6c 73 65 20 69 66 28 20 76 3d 3d 34 31   }else if( v==41
4480: 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20   ){.      const 
4490: 63 68 61 72 20 7a 55 74 66 31 36 45 72 72 4d 73  char zUtf16ErrMs
44a0: 67 5b 5d 20 3d 20 7b 20 30 2c 20 30 78 36 31 2c  g[] = { 0, 0x61,
44b0: 20 30 2c 20 30 78 36 32 2c 20 30 2c 20 30 78 36   0, 0x62, 0, 0x6
44c0: 33 2c 20 30 2c 20 30 2c 20 30 7d 3b 0a 20 20 20  3, 0, 0, 0};.   
44d0: 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c     sqlite3_resul
44e0: 74 5f 65 72 72 6f 72 31 36 28 63 6f 6e 74 65 78  t_error16(contex
44f0: 74 2c 20 26 7a 55 74 66 31 36 45 72 72 4d 73 67  t, &zUtf16ErrMsg
4500: 5b 31 2d 53 51 4c 49 54 45 5f 42 49 47 45 4e 44  [1-SQLITE_BIGEND
4510: 49 41 4e 5d 2c 20 2d 31 29 3b 0a 23 65 6e 64 69  IAN], -1);.#endi
4520: 66 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 20 20 20  f.    }.  }.}   
4530: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 63 6f 75  .static void cou
4540: 6e 74 46 69 6e 61 6c 69 7a 65 28 73 71 6c 69 74  ntFinalize(sqlit
4550: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74  e3_context *cont
4560: 65 78 74 29 7b 0a 20 20 43 6f 75 6e 74 43 74 78  ext){.  CountCtx
4570: 20 2a 70 3b 0a 20 20 70 20 3d 20 73 71 6c 69 74   *p;.  p = sqlit
4580: 65 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 6e  e3_aggregate_con
4590: 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 73 69  text(context, si
45a0: 7a 65 6f 66 28 2a 70 29 29 3b 0a 20 20 69 66 28  zeof(*p));.  if(
45b0: 20 70 20 29 7b 0a 20 20 20 20 69 66 28 20 70 2d   p ){.    if( p-
45c0: 3e 6e 3d 3d 34 32 20 29 7b 0a 20 20 20 20 20 20  >n==42 ){.      
45d0: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65  sqlite3_result_e
45e0: 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20 22 78  rror(context, "x
45f0: 5f 63 6f 75 6e 74 20 74 6f 74 61 6c 73 20 74 6f  _count totals to
4600: 20 34 32 22 2c 20 2d 31 29 3b 0a 20 20 20 20 7d   42", -1);.    }
4610: 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69  else{.      sqli
4620: 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28 63  te3_result_int(c
4630: 6f 6e 74 65 78 74 2c 20 70 20 3f 20 70 2d 3e 6e  ontext, p ? p->n
4640: 20 3a 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 7d   : 0);.    }.  }
4650: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
4660: 20 20 73 71 6c 69 74 65 5f 74 65 73 74 5f 63 72    sqlite_test_cr
4670: 65 61 74 65 5f 61 67 67 72 65 67 61 74 65 20 44  eate_aggregate D
4680: 42 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 74 68 65  B.**.** Call the
4690: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
46a0: 66 75 6e 63 74 69 6f 6e 20 41 50 49 20 6f 6e 20  function API on 
46b0: 74 68 65 20 67 69 76 65 6e 20 64 61 74 61 62 61  the given databa
46c0: 73 65 20 69 6e 20 6f 72 64 65 72 0a 2a 2a 20 74  se in order.** t
46d0: 6f 20 63 72 65 61 74 65 20 61 20 66 75 6e 63 74  o create a funct
46e0: 69 6f 6e 20 6e 61 6d 65 64 20 22 78 5f 63 6f 75  ion named "x_cou
46f0: 6e 74 22 2e 20 20 54 68 69 73 20 66 75 6e 63 74  nt".  This funct
4700: 69 6f 6e 20 64 6f 65 73 20 74 68 65 20 73 61 6d  ion does the sam
4710: 65 20 74 68 69 6e 67 0a 2a 2a 20 61 73 20 74 68  e thing.** as th
4720: 65 20 22 6d 64 35 73 75 6d 22 20 66 75 6e 63 74  e "md5sum" funct
4730: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6f  ion..**.** The o
4740: 72 69 67 69 6e 61 6c 20 6d 6f 74 69 76 61 74 69  riginal motivati
4750: 6f 6e 20 66 6f 72 20 74 68 69 73 20 72 6f 75 74  on for this rout
4760: 69 6e 65 20 77 61 73 20 74 6f 20 62 65 20 61 62  ine was to be ab
4770: 6c 65 20 74 6f 20 63 61 6c 6c 20 74 68 65 0a 2a  le to call the.*
4780: 2a 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  * sqlite3_create
4790: 5f 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74  _aggregate funct
47a0: 69 6f 6e 20 77 68 69 6c 65 20 61 20 71 75 65 72  ion while a quer
47b0: 79 20 69 73 20 69 6e 20 70 72 6f 67 72 65 73 73  y is in progress
47c0: 20 69 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20   in order.** to 
47d0: 74 65 73 74 20 74 68 65 20 53 51 4c 49 54 45 5f  test the SQLITE_
47e0: 4d 49 53 55 53 45 20 64 65 74 65 63 74 69 6f 6e  MISUSE detection
47f0: 20 6c 6f 67 69 63 2e 20 20 53 65 65 20 6d 69 73   logic.  See mis
4800: 75 73 65 2e 74 65 73 74 2e 0a 2a 2a 0a 2a 2a 20  use.test..**.** 
4810: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 77 61 73  This routine was
4820: 20 6c 61 74 65 72 20 65 78 74 65 6e 64 65 64 20   later extended 
4830: 74 6f 20 74 65 73 74 20 74 68 65 20 75 73 65 20  to test the use 
4840: 6f 66 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  of sqlite3_resul
4850: 74 5f 65 72 72 6f 72 28 29 0a 2a 2a 20 77 69 74  t_error().** wit
4860: 68 69 6e 20 61 67 67 72 65 67 61 74 65 20 66 75  hin aggregate fu
4870: 6e 63 74 69 6f 6e 73 2e 0a 2a 2f 0a 73 74 61 74  nctions..*/.stat
4880: 69 63 20 69 6e 74 20 74 65 73 74 5f 63 72 65 61  ic int test_crea
4890: 74 65 5f 61 67 67 72 65 67 61 74 65 28 0a 20 20  te_aggregate(.  
48a0: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
48b0: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
48c0: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
48d0: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
48e0: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
48f0: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
4900: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
4910: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
4920: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
4930: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
4940: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
4950: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
4960: 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33   */.){.  sqlite3
4970: 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a   *db;.  int rc;.
4980: 20 20 69 66 28 20 61 72 67 63 21 3d 32 20 29 7b    if( argc!=2 ){
4990: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
49a0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
49b0: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
49c0: 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76  uld be \"", argv
49d0: 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 49  [0],.       " FI
49e0: 4c 45 4e 41 4d 45 5c 22 22 2c 20 30 29 3b 0a 20  LENAME\"", 0);. 
49f0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
4a00: 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67  ROR;.  }.  if( g
4a10: 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65  etDbPointer(inte
4a20: 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62  rp, argv[1], &db
4a30: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
4a40: 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c  RROR;.  rc = sql
4a50: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
4a60: 74 69 6f 6e 28 64 62 2c 20 22 78 5f 63 6f 75 6e  tion(db, "x_coun
4a70: 74 22 2c 20 30 2c 20 53 51 4c 49 54 45 5f 55 54  t", 0, SQLITE_UT
4a80: 46 38 2c 20 30 2c 20 30 2c 0a 20 20 20 20 20 20  F8, 0, 0,.      
4a90: 63 6f 75 6e 74 53 74 65 70 2c 63 6f 75 6e 74 46  countStep,countF
4aa0: 69 6e 61 6c 69 7a 65 29 3b 0a 20 20 69 66 28 20  inalize);.  if( 
4ab0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
4ac0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72 65  .    sqlite3_cre
4ad0: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c  ate_function(db,
4ae0: 20 22 78 5f 63 6f 75 6e 74 22 2c 20 31 2c 20 53   "x_count", 1, S
4af0: 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 20 30  QLITE_UTF8, 0, 0
4b00: 2c 0a 20 20 20 20 20 20 20 20 63 6f 75 6e 74 53  ,.        countS
4b10: 74 65 70 2c 63 6f 75 6e 74 46 69 6e 61 6c 69 7a  tep,countFinaliz
4b20: 65 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71  e);.  }.  if( sq
4b30: 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65  lite3TestErrCode
4b40: 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29  (interp, db, rc)
4b50: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
4b60: 52 4f 52 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  ROR;.  return TC
4b70: 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 0a 2f 2a 0a 2a 2a  L_OK;.}..../*.**
4b80: 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33   Usage:  sqlite3
4b90: 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 20 46 4f 52  _mprintf_int FOR
4ba0: 4d 41 54 20 49 4e 54 45 47 45 52 20 49 4e 54 45  MAT INTEGER INTE
4bb0: 47 45 52 20 49 4e 54 45 47 45 52 0a 2a 2a 0a 2a  GER INTEGER.**.*
4bc0: 2a 20 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77  * Call mprintf w
4bd0: 69 74 68 20 74 68 72 65 65 20 69 6e 74 65 67 65  ith three intege
4be0: 72 20 61 72 67 75 6d 65 6e 74 73 0a 2a 2f 0a 73  r arguments.*/.s
4bf0: 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65  tatic int sqlite
4c00: 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 28 0a 20  3_mprintf_int(. 
4c10: 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a   void *NotUsed,.
4c20: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
4c30: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
4c40: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
4c50: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
4c60: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
4c70: 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20  nt argc,        
4c80: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
4c90: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
4ca0: 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20    char **argv   
4cb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
4cc0: 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e   of each argumen
4cd0: 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 61 5b  t */.){.  int a[
4ce0: 33 5d 2c 20 69 3b 0a 20 20 63 68 61 72 20 2a 7a  3], i;.  char *z
4cf0: 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 35 20  ;.  if( argc!=5 
4d00: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
4d10: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
4d20: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
4d30: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72  hould be \"", ar
4d40: 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20  gv[0],.       " 
4d50: 46 4f 52 4d 41 54 20 49 4e 54 20 49 4e 54 20 49  FORMAT INT INT I
4d60: 4e 54 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72  NT\"", 0);.    r
4d70: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
4d80: 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 32 3b 20  .  }.  for(i=2; 
4d90: 69 3c 35 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  i<5; i++){.    i
4da0: 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e  f( Tcl_GetInt(in
4db0: 74 65 72 70 2c 20 61 72 67 76 5b 69 5d 2c 20 26  terp, argv[i], &
4dc0: 61 5b 69 2d 32 5d 29 20 29 20 72 65 74 75 72 6e  a[i-2]) ) return
4dd0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
4de0: 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70    z = sqlite3_mp
4df0: 72 69 6e 74 66 28 61 72 67 76 5b 31 5d 2c 20 61  rintf(argv[1], a
4e00: 5b 30 5d 2c 20 61 5b 31 5d 2c 20 61 5b 32 5d 29  [0], a[1], a[2])
4e10: 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65  ;.  Tcl_AppendRe
4e20: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20  sult(interp, z, 
4e30: 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72  0);.  sqlite3_fr
4e40: 65 65 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20  ee(z);.  return 
4e50: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
4e60: 20 49 66 20 7a 4e 75 6d 20 72 65 70 72 65 73 65   If zNum represe
4e70: 6e 74 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74  nts an integer t
4e80: 68 61 74 20 77 69 6c 6c 20 66 69 74 20 69 6e 20  hat will fit in 
4e90: 36 34 2d 62 69 74 73 2c 20 74 68 65 6e 20 73 65  64-bits, then se
4ea0: 74 0a 2a 2a 20 2a 70 56 61 6c 75 65 20 74 6f 20  t.** *pValue to 
4eb0: 74 68 61 74 20 69 6e 74 65 67 65 72 20 61 6e 64  that integer and
4ec0: 20 72 65 74 75 72 6e 20 74 72 75 65 2e 20 20 4f   return true.  O
4ed0: 74 68 65 72 77 69 73 65 20 72 65 74 75 72 6e 20  therwise return 
4ee0: 66 61 6c 73 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  false..*/.static
4ef0: 20 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49   int sqlite3GetI
4f00: 6e 74 36 34 28 63 6f 6e 73 74 20 63 68 61 72 20  nt64(const char 
4f10: 2a 7a 4e 75 6d 2c 20 69 36 34 20 2a 70 56 61 6c  *zNum, i64 *pVal
4f20: 75 65 29 7b 0a 20 20 69 66 28 20 73 71 6c 69 74  ue){.  if( sqlit
4f30: 65 33 46 69 74 73 49 6e 36 34 42 69 74 73 28 7a  e3FitsIn64Bits(z
4f40: 4e 75 6d 29 20 29 7b 0a 20 20 20 20 73 71 6c 69  Num) ){.    sqli
4f50: 74 65 33 61 74 6f 69 36 34 28 7a 4e 75 6d 2c 20  te3atoi64(zNum, 
4f60: 70 56 61 6c 75 65 29 3b 0a 20 20 20 20 72 65 74  pValue);.    ret
4f70: 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74  urn 1;.  }.  ret
4f80: 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn 0;.}../*.** 
4f90: 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f  Usage:  sqlite3_
4fa0: 6d 70 72 69 6e 74 66 5f 69 6e 74 36 34 20 46 4f  mprintf_int64 FO
4fb0: 52 4d 41 54 20 49 4e 54 45 47 45 52 20 49 4e 54  RMAT INTEGER INT
4fc0: 45 47 45 52 20 49 4e 54 45 47 45 52 0a 2a 2a 0a  EGER INTEGER.**.
4fd0: 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20  ** Call mprintf 
4fe0: 77 69 74 68 20 74 68 72 65 65 20 36 34 2d 62 69  with three 64-bi
4ff0: 74 20 69 6e 74 65 67 65 72 20 61 72 67 75 6d 65  t integer argume
5000: 6e 74 73 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  nts.*/.static in
5010: 74 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  t sqlite3_mprint
5020: 66 5f 69 6e 74 36 34 28 0a 20 20 76 6f 69 64 20  f_int64(.  void 
5030: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f  *NotUsed,.  Tcl_
5040: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
5050: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
5060: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
5070: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
5080: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67  and */.  int arg
5090: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
50a0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
50b0: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72  uments */.  char
50c0: 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20   **argv         
50d0: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61     /* Text of ea
50e0: 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29  ch argument */.)
50f0: 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c  {.  int i;.  sql
5100: 69 74 65 5f 69 6e 74 36 34 20 61 5b 33 5d 3b 0a  ite_int64 a[3];.
5110: 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69 66 28    char *z;.  if(
5120: 20 61 72 67 63 21 3d 35 20 29 7b 0a 20 20 20 20   argc!=5 ){.    
5130: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
5140: 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
5150: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
5160: 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a  e \"", argv[0],.
5170: 20 20 20 20 20 20 20 22 20 46 4f 52 4d 41 54 20         " FORMAT 
5180: 49 4e 54 20 49 4e 54 20 49 4e 54 5c 22 22 2c 20  INT INT INT\"", 
5190: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
51a0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
51b0: 66 6f 72 28 69 3d 32 3b 20 69 3c 35 3b 20 69 2b  for(i=2; i<5; i+
51c0: 2b 29 7b 0a 20 20 20 20 69 66 28 20 21 73 71 6c  +){.    if( !sql
51d0: 69 74 65 33 47 65 74 49 6e 74 36 34 28 61 72 67  ite3GetInt64(arg
51e0: 76 5b 69 5d 2c 20 26 61 5b 69 2d 32 5d 29 20 29  v[i], &a[i-2]) )
51f0: 7b 0a 20 20 20 20 20 20 54 63 6c 5f 41 70 70 65  {.      Tcl_Appe
5200: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
5210: 20 22 61 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f   "argument is no
5220: 74 20 61 20 76 61 6c 69 64 20 36 34 2d 62 69 74  t a valid 64-bit
5230: 20 69 6e 74 65 67 65 72 22 2c 20 30 29 3b 0a 20   integer", 0);. 
5240: 20 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f       return TCL_
5250: 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 7d  ERROR;.    }.  }
5260: 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 6d  .  z = sqlite3_m
5270: 70 72 69 6e 74 66 28 61 72 67 76 5b 31 5d 2c 20  printf(argv[1], 
5280: 61 5b 30 5d 2c 20 61 5b 31 5d 2c 20 61 5b 32 5d  a[0], a[1], a[2]
5290: 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  );.  Tcl_AppendR
52a0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 2c  esult(interp, z,
52b0: 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66   0);.  sqlite3_f
52c0: 72 65 65 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e  ree(z);.  return
52d0: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
52e0: 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
52f0: 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72 20 46 4f  3_mprintf_str FO
5300: 52 4d 41 54 20 49 4e 54 45 47 45 52 20 49 4e 54  RMAT INTEGER INT
5310: 45 47 45 52 20 53 54 52 49 4e 47 0a 2a 2a 0a 2a  EGER STRING.**.*
5320: 2a 20 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77  * Call mprintf w
5330: 69 74 68 20 74 77 6f 20 69 6e 74 65 67 65 72 20  ith two integer 
5340: 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 6f 6e  arguments and on
5350: 65 20 73 74 72 69 6e 67 20 61 72 67 75 6d 65 6e  e string argumen
5360: 74 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  t.*/.static int 
5370: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
5380: 73 74 72 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74  str(.  void *Not
5390: 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Used,.  Tcl_Inte
53a0: 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
53b0: 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
53c0: 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
53d0: 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
53e0: 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20  */.  int argc,  
53f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
5400: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
5410: 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  ts */.  char **a
5420: 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f  rgv            /
5430: 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61  * Text of each a
5440: 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20  rgument */.){.  
5450: 69 6e 74 20 61 5b 33 5d 2c 20 69 3b 0a 20 20 63  int a[3], i;.  c
5460: 68 61 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72  har *z;.  if( ar
5470: 67 63 3c 34 20 7c 7c 20 61 72 67 63 3e 35 20 29  gc<4 || argc>5 )
5480: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
5490: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
54a0: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
54b0: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
54c0: 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46  v[0],.       " F
54d0: 4f 52 4d 41 54 20 49 4e 54 20 49 4e 54 20 3f 53  ORMAT INT INT ?S
54e0: 54 52 49 4e 47 3f 5c 22 22 2c 20 30 29 3b 0a 20  TRING?\"", 0);. 
54f0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
5500: 52 4f 52 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69  ROR;.  }.  for(i
5510: 3d 32 3b 20 69 3c 34 3b 20 69 2b 2b 29 7b 0a 20  =2; i<4; i++){. 
5520: 20 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e     if( Tcl_GetIn
5530: 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 69  t(interp, argv[i
5540: 5d 2c 20 26 61 5b 69 2d 32 5d 29 20 29 20 72 65  ], &a[i-2]) ) re
5550: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
5560: 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65    }.  z = sqlite
5570: 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b 31  3_mprintf(argv[1
5580: 5d 2c 20 61 5b 30 5d 2c 20 61 5b 31 5d 2c 20 61  ], a[0], a[1], a
5590: 72 67 63 3e 34 20 3f 20 61 72 67 76 5b 34 5d 20  rgc>4 ? argv[4] 
55a0: 3a 20 4e 55 4c 4c 29 3b 0a 20 20 54 63 6c 5f 41  : NULL);.  Tcl_A
55b0: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
55c0: 72 70 2c 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c  rp, z, 0);.  sql
55d0: 69 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20  ite3_free(z);.  
55e0: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
55f0: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
5600: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
5610: 64 6f 75 62 6c 65 20 46 4f 52 4d 41 54 20 49 4e  double FORMAT IN
5620: 54 45 47 45 52 20 49 4e 54 45 47 45 52 20 44 4f  TEGER INTEGER DO
5630: 55 42 4c 45 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20  UBLE.**.** Call 
5640: 6d 70 72 69 6e 74 66 20 77 69 74 68 20 74 77 6f  mprintf with two
5650: 20 69 6e 74 65 67 65 72 20 61 72 67 75 6d 65 6e   integer argumen
5660: 74 73 20 61 6e 64 20 6f 6e 65 20 64 6f 75 62 6c  ts and one doubl
5670: 65 20 61 72 67 75 6d 65 6e 74 0a 2a 2f 0a 73 74  e argument.*/.st
5680: 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33  atic int sqlite3
5690: 5f 6d 70 72 69 6e 74 66 5f 64 6f 75 62 6c 65 28  _mprintf_double(
56a0: 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64  .  void *NotUsed
56b0: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
56c0: 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
56d0: 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
56e0: 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
56f0: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
5700: 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20   int argc,      
5710: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
5720: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
5730: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20  /.  char **argv 
5740: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
5750: 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d  xt of each argum
5760: 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20  ent */.){.  int 
5770: 61 5b 33 5d 2c 20 69 3b 0a 20 20 64 6f 75 62 6c  a[3], i;.  doubl
5780: 65 20 72 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a  e r;.  char *z;.
5790: 20 20 69 66 28 20 61 72 67 63 21 3d 35 20 29 7b    if( argc!=5 ){
57a0: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
57b0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
57c0: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
57d0: 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76  uld be \"", argv
57e0: 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 4f  [0],.       " FO
57f0: 52 4d 41 54 20 49 4e 54 20 49 4e 54 20 44 4f 55  RMAT INT INT DOU
5800: 42 4c 45 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20  BLE\"", 0);.    
5810: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
5820: 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 32 3b  ;.  }.  for(i=2;
5830: 20 69 3c 34 3b 20 69 2b 2b 29 7b 0a 20 20 20 20   i<4; i++){.    
5840: 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69  if( Tcl_GetInt(i
5850: 6e 74 65 72 70 2c 20 61 72 67 76 5b 69 5d 2c 20  nterp, argv[i], 
5860: 26 61 5b 69 2d 32 5d 29 20 29 20 72 65 74 75 72  &a[i-2]) ) retur
5870: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
5880: 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 44 6f  .  if( Tcl_GetDo
5890: 75 62 6c 65 28 69 6e 74 65 72 70 2c 20 61 72 67  uble(interp, arg
58a0: 76 5b 34 5d 2c 20 26 72 29 20 29 20 72 65 74 75  v[4], &r) ) retu
58b0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
58c0: 7a 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  z = sqlite3_mpri
58d0: 6e 74 66 28 61 72 67 76 5b 31 5d 2c 20 61 5b 30  ntf(argv[1], a[0
58e0: 5d 2c 20 61 5b 31 5d 2c 20 72 29 3b 0a 20 20 54  ], a[1], r);.  T
58f0: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
5900: 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a 20  interp, z, 0);. 
5910: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 29   sqlite3_free(z)
5920: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
5930: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
5940: 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  e:  sqlite3_mpri
5950: 6e 74 66 5f 73 63 61 6c 65 64 20 46 4f 52 4d 41  ntf_scaled FORMA
5960: 54 20 44 4f 55 42 4c 45 20 44 4f 55 42 4c 45 0a  T DOUBLE DOUBLE.
5970: 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e  **.** Call mprin
5980: 74 66 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65  tf with a single
5990: 20 64 6f 75 62 6c 65 20 61 72 67 75 6d 65 6e 74   double argument
59a0: 20 77 68 69 63 68 20 69 73 20 74 68 65 20 70 72   which is the pr
59b0: 6f 64 75 63 74 20 6f 66 20 74 68 65 0a 2a 2a 20  oduct of the.** 
59c0: 74 77 6f 20 61 72 67 75 6d 65 6e 74 73 20 67 69  two arguments gi
59d0: 76 65 6e 20 61 62 6f 76 65 2e 20 20 54 68 69 73  ven above.  This
59e0: 20 69 73 20 75 73 65 64 20 74 6f 20 67 65 6e 65   is used to gene
59f0: 72 61 74 65 20 6f 76 65 72 66 6c 6f 77 20 61 6e  rate overflow an
5a00: 64 20 75 6e 64 65 72 66 6c 6f 77 0a 2a 2a 20 64  d underflow.** d
5a10: 6f 75 62 6c 65 73 20 74 6f 20 74 65 73 74 20 74  oubles to test t
5a20: 68 61 74 20 74 68 65 79 20 61 72 65 20 63 6f 6e  hat they are con
5a30: 76 65 72 74 65 64 20 70 72 6f 70 65 72 6c 79 2e  verted properly.
5a40: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73  .*/.static int s
5a50: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73  qlite3_mprintf_s
5a60: 63 61 6c 65 64 28 0a 20 20 76 6f 69 64 20 2a 4e  caled(.  void *N
5a70: 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e  otUsed,.  Tcl_In
5a80: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
5a90: 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
5aa0: 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
5ab0: 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
5ac0: 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c  d */.  int argc,
5ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
5ae0: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
5af0: 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ents */.  char *
5b00: 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20  *argv           
5b10: 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68   /* Text of each
5b20: 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a   argument */.){.
5b30: 20 20 69 6e 74 20 69 3b 0a 20 20 64 6f 75 62 6c    int i;.  doubl
5b40: 65 20 72 5b 32 5d 3b 0a 20 20 63 68 61 72 20 2a  e r[2];.  char *
5b50: 7a 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 34  z;.  if( argc!=4
5b60: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
5b70: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
5b80: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
5b90: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61  should be \"", a
5ba0: 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22  rgv[0],.       "
5bb0: 20 46 4f 52 4d 41 54 20 44 4f 55 42 4c 45 20 44   FORMAT DOUBLE D
5bc0: 4f 55 42 4c 45 5c 22 22 2c 20 30 29 3b 0a 20 20  OUBLE\"", 0);.  
5bd0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
5be0: 4f 52 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d  OR;.  }.  for(i=
5bf0: 32 3b 20 69 3c 34 3b 20 69 2b 2b 29 7b 0a 20 20  2; i<4; i++){.  
5c00: 20 20 69 66 28 20 54 63 6c 5f 47 65 74 44 6f 75    if( Tcl_GetDou
5c10: 62 6c 65 28 69 6e 74 65 72 70 2c 20 61 72 67 76  ble(interp, argv
5c20: 5b 69 5d 2c 20 26 72 5b 69 2d 32 5d 29 20 29 20  [i], &r[i-2]) ) 
5c30: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
5c40: 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69  ;.  }.  z = sqli
5c50: 74 65 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76  te3_mprintf(argv
5c60: 5b 31 5d 2c 20 72 5b 30 5d 2a 72 5b 31 5d 29 3b  [1], r[0]*r[1]);
5c70: 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73  .  Tcl_AppendRes
5c80: 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30  ult(interp, z, 0
5c90: 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65  );.  sqlite3_fre
5ca0: 65 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  e(z);.  return T
5cb0: 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
5cc0: 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f  Usage:  sqlite3_
5cd0: 6d 70 72 69 6e 74 66 5f 73 74 72 6f 6e 6c 79 20  mprintf_stronly 
5ce0: 46 4f 52 4d 41 54 20 53 54 52 49 4e 47 0a 2a 2a  FORMAT STRING.**
5cf0: 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e 74 66  .** Call mprintf
5d00: 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 64   with a single d
5d10: 6f 75 62 6c 65 20 61 72 67 75 6d 65 6e 74 20 77  ouble argument w
5d20: 68 69 63 68 20 69 73 20 74 68 65 20 70 72 6f 64  hich is the prod
5d30: 75 63 74 20 6f 66 20 74 68 65 0a 2a 2a 20 74 77  uct of the.** tw
5d40: 6f 20 61 72 67 75 6d 65 6e 74 73 20 67 69 76 65  o arguments give
5d50: 6e 20 61 62 6f 76 65 2e 20 20 54 68 69 73 20 69  n above.  This i
5d60: 73 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61  s used to genera
5d70: 74 65 20 6f 76 65 72 66 6c 6f 77 20 61 6e 64 20  te overflow and 
5d80: 75 6e 64 65 72 66 6c 6f 77 0a 2a 2a 20 64 6f 75  underflow.** dou
5d90: 62 6c 65 73 20 74 6f 20 74 65 73 74 20 74 68 61  bles to test tha
5da0: 74 20 74 68 65 79 20 61 72 65 20 63 6f 6e 76 65  t they are conve
5db0: 72 74 65 64 20 70 72 6f 70 65 72 6c 79 2e 0a 2a  rted properly..*
5dc0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c  /.static int sql
5dd0: 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72  ite3_mprintf_str
5de0: 6f 6e 6c 79 28 0a 20 20 76 6f 69 64 20 2a 4e 6f  only(.  void *No
5df0: 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74  tUsed,.  Tcl_Int
5e00: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
5e10: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
5e20: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
5e30: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
5e40: 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20   */.  int argc, 
5e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
5e60: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
5e70: 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  nts */.  char **
5e80: 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20  argv            
5e90: 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20  /* Text of each 
5ea0: 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20  argument */.){. 
5eb0: 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69 66 28 20   char *z;.  if( 
5ec0: 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54  argc!=3 ){.    T
5ed0: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
5ee0: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
5ef0: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
5f00: 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20   \"", argv[0],. 
5f10: 20 20 20 20 20 20 22 20 46 4f 52 4d 41 54 20 53        " FORMAT S
5f20: 54 52 49 4e 47 5c 22 22 2c 20 30 29 3b 0a 20 20  TRING\"", 0);.  
5f30: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
5f40: 4f 52 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71  OR;.  }.  z = sq
5f50: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 61 72  lite3_mprintf(ar
5f60: 67 76 5b 31 5d 2c 20 61 72 67 76 5b 32 5d 29 3b  gv[1], argv[2]);
5f70: 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73  .  Tcl_AppendRes
5f80: 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30  ult(interp, z, 0
5f90: 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65  );.  sqlite3_fre
5fa0: 65 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  e(z);.  return T
5fb0: 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
5fc0: 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f  Usage:  sqlite3_
5fd0: 6d 70 72 69 6e 74 66 5f 68 65 78 64 6f 75 62 6c  mprintf_hexdoubl
5fe0: 65 20 46 4f 52 4d 41 54 20 48 45 58 0a 2a 2a 0a  e FORMAT HEX.**.
5ff0: 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20  ** Call mprintf 
6000: 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 64 6f  with a single do
6010: 75 62 6c 65 20 61 72 67 75 6d 65 6e 74 20 77 68  uble argument wh
6020: 69 63 68 20 69 73 20 64 65 72 69 76 65 64 20 66  ich is derived f
6030: 72 6f 6d 20 74 68 65 0a 2a 2a 20 68 65 78 61 64  rom the.** hexad
6040: 65 63 69 6d 61 6c 20 65 6e 63 6f 64 69 6e 67 20  ecimal encoding 
6050: 6f 66 20 61 6e 20 49 45 45 45 20 64 6f 75 62 6c  of an IEEE doubl
6060: 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  e..*/.static int
6070: 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
6080: 5f 68 65 78 64 6f 75 62 6c 65 28 0a 20 20 76 6f  _hexdouble(.  vo
6090: 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54  id *NotUsed,.  T
60a0: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
60b0: 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c  p,    /* The TCL
60c0: 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61   interpreter tha
60d0: 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63  t invoked this c
60e0: 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  ommand */.  int 
60f0: 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20  argc,           
6100: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
6110: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63  arguments */.  c
6120: 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20  har **argv      
6130: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
6140: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a   each argument *
6150: 2f 0a 29 7b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a  /.){.  char *z;.
6160: 20 20 64 6f 75 62 6c 65 20 72 3b 0a 20 20 75 6e    double r;.  un
6170: 73 69 67 6e 65 64 20 20 78 31 2c 20 78 32 3b 0a  signed  x1, x2;.
6180: 20 20 6c 6f 6e 67 20 6c 6f 6e 67 20 75 6e 73 69    long long unsi
6190: 67 6e 65 64 20 64 3b 0a 20 20 69 66 28 20 61 72  gned d;.  if( ar
61a0: 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=3 ){.    Tcl
61b0: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
61c0: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
61d0: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
61e0: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20  "", argv[0],.   
61f0: 20 20 20 20 22 20 46 4f 52 4d 41 54 20 53 54 52      " FORMAT STR
6200: 49 4e 47 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20  ING\"", 0);.    
6210: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
6220: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 73 63 61  ;.  }.  if( ssca
6230: 6e 66 28 61 72 67 76 5b 32 5d 2c 20 22 25 30 38  nf(argv[2], "%08
6240: 78 25 30 38 78 22 2c 20 26 78 32 2c 20 26 78 31  x%08x", &x2, &x1
6250: 29 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  )!=2 ){.    Tcl_
6260: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
6270: 65 72 70 2c 20 22 32 6e 64 20 61 72 67 75 6d 65  erp, "2nd argume
6280: 6e 74 20 73 68 6f 75 6c 64 20 62 65 20 31 36 2d  nt should be 16-
6290: 63 68 61 72 61 63 74 65 72 73 20 6f 66 20 68 65  characters of he
62a0: 78 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  x", 0);.    retu
62b0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
62c0: 7d 0a 20 20 64 20 3d 20 78 32 3b 0a 20 20 64 20  }.  d = x2;.  d 
62d0: 3d 20 28 64 3c 3c 33 32 29 20 2b 20 78 31 3b 0a  = (d<<32) + x1;.
62e0: 20 20 6d 65 6d 63 70 79 28 26 72 2c 20 26 64 2c    memcpy(&r, &d,
62f0: 20 73 69 7a 65 6f 66 28 72 29 29 3b 0a 20 20 7a   sizeof(r));.  z
6300: 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
6310: 74 66 28 61 72 67 76 5b 31 5d 2c 20 72 29 3b 0a  tf(argv[1], r);.
6320: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
6330: 6c 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29  lt(interp, z, 0)
6340: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65  ;.  sqlite3_free
6350: 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  (z);.  return TC
6360: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
6370: 73 61 67 65 3a 20 73 71 6c 69 74 65 5f 6d 61 6c  sage: sqlite_mal
6380: 6c 6f 63 5f 66 61 69 6c 20 4e 20 20 3f 52 45 50  loc_fail N  ?REP
6390: 45 41 54 2d 49 4e 54 45 52 56 41 4c 3f 0a 2a 2a  EAT-INTERVAL?.**
63a0: 0a 2a 2a 20 52 69 67 20 73 71 6c 69 74 65 4d 61  .** Rig sqliteMa
63b0: 6c 6c 6f 63 28 29 20 74 6f 20 66 61 69 6c 20 6f  lloc() to fail o
63c0: 6e 20 74 68 65 20 4e 2d 74 68 20 63 61 6c 6c 20  n the N-th call 
63d0: 61 6e 64 20 65 76 65 72 79 20 52 45 50 45 41 54  and every REPEAT
63e0: 2d 49 4e 54 45 52 56 41 4c 20 63 61 6c 6c 0a 2a  -INTERVAL call.*
63f0: 2a 20 61 66 74 65 72 20 74 68 61 74 2e 20 20 49  * after that.  I
6400: 66 20 52 45 50 45 41 54 2d 49 4e 54 45 52 56 41  f REPEAT-INTERVA
6410: 4c 20 69 73 20 30 20 6f 72 20 69 73 20 6f 6d 69  L is 0 or is omi
6420: 74 74 65 64 2c 20 74 68 65 6e 20 6f 6e 6c 79 20  tted, then only 
6430: 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 6d 61 6c 6c  a single.** mall
6440: 6f 63 20 77 69 6c 6c 20 66 61 69 6c 2e 20 20 49  oc will fail.  I
6450: 66 20 52 45 50 45 41 54 2d 49 4e 54 45 52 56 41  f REPEAT-INTERVA
6460: 4c 20 69 73 20 31 20 74 68 65 6e 20 61 6c 6c 20  L is 1 then all 
6470: 6d 61 6c 6c 6f 63 73 20 61 66 74 65 72 20 74 68  mallocs after th
6480: 65 0a 2a 2a 20 66 69 72 73 74 20 66 61 69 6c 75  e.** first failu
6490: 72 65 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75 65  re will continue
64a0: 20 74 6f 20 66 61 69 6c 20 6f 6e 20 65 76 65 72   to fail on ever
64b0: 79 20 63 61 6c 6c 2e 20 20 49 66 20 52 45 50 45  y call.  If REPE
64c0: 41 54 2d 49 4e 54 45 52 56 41 4c 20 69 73 0a 2a  AT-INTERVAL is.*
64d0: 2a 20 32 20 74 68 65 6e 20 65 76 65 72 79 20 6f  * 2 then every o
64e0: 74 68 65 72 20 6d 61 6c 6c 6f 63 20 77 69 6c 6c  ther malloc will
64f0: 20 66 61 69 6c 2e 20 20 41 6e 64 20 73 6f 20 66   fail.  And so f
6500: 6f 72 74 68 2e 0a 2a 2a 0a 2a 2a 20 54 75 72 6e  orth..**.** Turn
6510: 20 6f 66 66 20 74 68 69 73 20 6d 65 63 68 61 6e   off this mechan
6520: 69 73 6d 20 61 6e 64 20 72 65 73 65 74 20 74 68  ism and reset th
6530: 65 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 44  e sqlite3ThreadD
6540: 61 74 61 28 29 2d 3e 6d 61 6c 6c 6f 63 46 61 69  ata()->mallocFai
6550: 6c 65 64 20 0a 2a 2a 20 76 61 72 69 61 62 6c 65  led .** variable
6560: 20 69 66 20 4e 3d 3d 30 2e 0a 2a 2f 0a 23 69 66   if N==0..*/.#if
6570: 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45  def SQLITE_MEMDE
6580: 42 55 47 0a 73 74 61 74 69 63 20 69 6e 74 20 73  BUG.static int s
6590: 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 66 61 69  qlite_malloc_fai
65a0: 6c 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73  l(.  void *NotUs
65b0: 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ed,.  Tcl_Interp
65c0: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
65d0: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
65e0: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
65f0: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
6600: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20  .  int argc,    
6610: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
6620: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
6630: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67   */.  char **arg
6640: 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  v            /* 
6650: 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67  Text of each arg
6660: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e  ument */.){.  in
6670: 74 20 6e 3b 0a 20 20 69 6e 74 20 72 65 70 3b 0a  t n;.  int rep;.
6680: 20 20 69 66 28 20 61 72 67 63 21 3d 32 20 26 26    if( argc!=2 &&
6690: 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20   argc!=3 ){.    
66a0: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
66b0: 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
66c0: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
66d0: 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20  e \"", argv[0], 
66e0: 22 20 4e 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20  " N\"", 0);.    
66f0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
6700: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 54 63 6c 5f  ;.  }.  if( Tcl_
6710: 47 65 74 49 6e 74 28 69 6e 74 65 72 70 2c 20 61  GetInt(interp, a
6720: 72 67 76 5b 31 5d 2c 20 26 6e 29 20 29 20 72 65  rgv[1], &n) ) re
6730: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
6740: 20 20 69 66 28 20 61 72 67 63 3d 3d 33 20 29 7b    if( argc==3 ){
6750: 0a 20 20 20 20 69 66 28 20 54 63 6c 5f 47 65 74  .    if( Tcl_Get
6760: 49 6e 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76  Int(interp, argv
6770: 5b 32 5d 2c 20 26 72 65 70 29 20 29 20 72 65 74  [2], &rep) ) ret
6780: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
6790: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 70 20   }else{.    rep 
67a0: 3d 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  = 0;.  }.  sqlit
67b0: 65 33 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c 20 3d  e3_iMallocFail =
67c0: 20 6e 3b 0a 20 20 73 71 6c 69 74 65 33 5f 69 4d   n;.  sqlite3_iM
67d0: 61 6c 6c 6f 63 52 65 73 65 74 20 3d 20 72 65 70  allocReset = rep
67e0: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
67f0: 4b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  K;.}.#endif../*.
6800: 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65  ** Usage: sqlite
6810: 5f 6d 61 6c 6c 6f 63 5f 73 74 61 74 0a 2a 2a 0a  _malloc_stat.**.
6820: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75  ** Return the nu
6830: 6d 62 65 72 20 6f 66 20 70 72 69 6f 72 20 63 61  mber of prior ca
6840: 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65 4d 61 6c  lls to sqliteMal
6850: 6c 6f 63 28 29 20 61 6e 64 20 73 71 6c 69 74 65  loc() and sqlite
6860: 46 72 65 65 28 29 2e 0a 2a 2f 0a 23 69 66 64 65  Free()..*/.#ifde
6870: 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  f SQLITE_MEMDEBU
6880: 47 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c  G.static int sql
6890: 69 74 65 5f 6d 61 6c 6c 6f 63 5f 73 74 61 74 28  ite_malloc_stat(
68a0: 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64  .  void *NotUsed
68b0: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
68c0: 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
68d0: 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
68e0: 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
68f0: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
6900: 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20   int argc,      
6910: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
6920: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
6930: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20  /.  char **argv 
6940: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
6950: 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d  xt of each argum
6960: 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72  ent */.){.  char
6970: 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20 20 73 70   zBuf[200];.  sp
6980: 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 25 64 20  rintf(zBuf, "%d 
6990: 25 64 20 25 64 22 2c 20 73 71 6c 69 74 65 33 5f  %d %d", sqlite3_
69a0: 6e 4d 61 6c 6c 6f 63 2c 73 71 6c 69 74 65 33 5f  nMalloc,sqlite3_
69b0: 6e 46 72 65 65 2c 73 71 6c 69 74 65 33 5f 69 4d  nFree,sqlite3_iM
69c0: 61 6c 6c 6f 63 46 61 69 6c 29 3b 0a 20 20 54 63  allocFail);.  Tc
69d0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
69e0: 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b  nterp, zBuf, 0);
69f0: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
6a00: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  ;.}../*.** This 
6a10: 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  function impleme
6a20: 6e 74 73 20 61 20 54 63 6c 20 63 6f 6d 6d 61 6e  nts a Tcl comman
6a30: 64 20 74 68 61 74 20 6d 61 79 20 62 65 20 69 6e  d that may be in
6a40: 76 6f 6b 65 64 20 75 73 69 6e 67 20 61 6e 79 20  voked using any 
6a50: 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 75 72 20 66  of.** the four f
6a60: 6f 72 6d 73 20 65 6e 75 6d 65 72 61 74 65 64 20  orms enumerated 
6a70: 62 65 6c 6f 77 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c  below..**.** sql
6a80: 69 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74  ite_malloc_outst
6a90: 61 6e 64 69 6e 67 0a 2a 2a 20 20 20 20 20 52 65  anding.**     Re
6aa0: 74 75 72 6e 20 61 20 73 75 6d 6d 61 72 79 20 6f  turn a summary o
6ab0: 66 20 61 6c 6c 20 75 6e 66 72 65 65 64 20 62 6c  f all unfreed bl
6ac0: 6f 63 6b 73 20 6f 66 20 6d 65 6d 6f 72 79 20 61  ocks of memory a
6ad0: 6c 6c 6f 63 61 74 65 64 20 62 79 20 74 68 65 0a  llocated by the.
6ae0: 2a 2a 20 20 20 20 20 63 75 72 72 65 6e 74 20 74  **     current t
6af0: 68 72 65 61 64 2e 20 53 65 65 20 63 6f 6d 6d 65  hread. See comme
6b00: 6e 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69  nts above functi
6b10: 6f 6e 20 73 71 6c 69 74 65 33 4f 75 74 73 74 61  on sqlite3Outsta
6b20: 6e 64 69 6e 67 4d 61 6c 6c 6f 63 73 28 29 20 0a  ndingMallocs() .
6b30: 2a 2a 20 20 20 20 20 69 6e 20 75 74 69 6c 2e 63  **     in util.c
6b40: 20 66 6f 72 20 61 20 64 65 73 63 72 69 70 74 69   for a descripti
6b50: 6f 6e 20 6f 66 20 74 68 65 20 72 65 74 75 72 6e  on of the return
6b60: 65 64 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20  ed value..**.** 
6b70: 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75  sqlite_malloc_ou
6b80: 74 73 74 61 6e 64 69 6e 67 20 2d 62 79 74 65 73  tstanding -bytes
6b90: 0a 2a 2a 20 20 20 20 20 52 65 74 75 72 6e 20 74  .**     Return t
6ba0: 68 65 20 74 6f 74 61 6c 20 61 6d 6f 75 6e 74 20  he total amount 
6bb0: 6f 66 20 75 6e 66 72 65 65 64 20 6d 65 6d 6f 72  of unfreed memor
6bc0: 79 20 28 69 6e 20 62 79 74 65 73 29 20 61 6c 6c  y (in bytes) all
6bd0: 6f 63 61 74 65 64 20 62 79 20 0a 2a 2a 20 20 20  ocated by .**   
6be0: 20 20 74 68 69 73 20 74 68 72 65 61 64 2e 0a 2a    this thread..*
6bf0: 2a 0a 2a 2a 20 73 71 6c 69 74 65 5f 6d 61 6c 6c  *.** sqlite_mall
6c00: 6f 63 5f 6f 75 74 73 74 61 6e 64 69 6e 67 20 2d  oc_outstanding -
6c10: 6d 61 78 62 79 74 65 73 0a 2a 2a 20 20 20 20 20  maxbytes.**     
6c20: 52 65 74 75 72 6e 20 74 68 65 20 6d 61 78 69 6d  Return the maxim
6c30: 75 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 64 79 6e  um amount of dyn
6c40: 61 6d 69 63 20 6d 65 6d 6f 72 79 20 69 6e 20 75  amic memory in u
6c50: 73 65 20 61 74 20 6f 6e 65 20 74 69 6d 65 20 0a  se at one time .
6c60: 2a 2a 20 20 20 20 20 62 79 20 74 68 69 73 20 74  **     by this t
6c70: 68 72 65 61 64 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c  hread..**.** sql
6c80: 69 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74  ite_malloc_outst
6c90: 61 6e 64 69 6e 67 20 2d 63 6c 65 61 72 6d 61 78  anding -clearmax
6ca0: 62 79 74 65 73 0a 2a 2a 20 20 20 20 20 53 65 74  bytes.**     Set
6cb0: 20 74 68 65 20 76 61 6c 75 65 20 72 65 74 75 72   the value retur
6cc0: 6e 65 64 20 62 79 20 5b 73 71 6c 69 74 65 5f 6d  ned by [sqlite_m
6cd0: 61 6c 6c 6f 63 5f 6f 75 74 73 74 61 6e 64 69 6e  alloc_outstandin
6ce0: 67 20 2d 6d 61 78 62 79 74 65 73 5d 0a 2a 2a 20  g -maxbytes].** 
6cf0: 20 20 20 20 74 6f 20 74 68 65 20 63 75 72 72 65      to the curre
6d00: 6e 74 20 76 61 6c 75 65 20 6f 66 20 5b 73 71 6c  nt value of [sql
6d10: 69 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74  ite_malloc_outst
6d20: 61 6e 64 69 6e 67 20 2d 62 79 74 65 73 5d 2e 20  anding -bytes]. 
6d30: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73  .*/.static int s
6d40: 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74  qlite_malloc_out
6d50: 73 74 61 6e 64 69 6e 67 28 0a 20 20 43 6c 69 65  standing(.  Clie
6d60: 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74  ntData clientDat
6d70: 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
6d80: 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
6d90: 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
6da0: 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
6db0: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
6dc0: 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20    int objc,     
6dd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
6de0: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
6df0: 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  */.  Tcl_Obj *CO
6e00: 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43  NST objv[]  /* C
6e10: 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73  ommand arguments
6e20: 20 2a 2f 0a 29 7b 0a 20 20 65 78 74 65 72 6e 20   */.){.  extern 
6e30: 69 6e 74 20 73 71 6c 69 74 65 33 4f 75 74 73 74  int sqlite3Outst
6e40: 61 6e 64 69 6e 67 4d 61 6c 6c 6f 63 73 28 54 63  andingMallocs(Tc
6e50: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
6e60: 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  );..#if defined(
6e70: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26  SQLITE_DEBUG) &&
6e80: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
6e90: 4d 45 4d 44 45 42 55 47 29 20 26 26 20 53 51 4c  MEMDEBUG) && SQL
6ea0: 49 54 45 5f 4d 45 4d 44 45 42 55 47 3e 31 0a 20  ITE_MEMDEBUG>1. 
6eb0: 20 69 66 28 20 6f 62 6a 63 3d 3d 32 20 29 7b 0a   if( objc==2 ){.
6ec0: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
6ed0: 7a 41 72 67 20 3d 20 54 63 6c 5f 47 65 74 53 74  zArg = Tcl_GetSt
6ee0: 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 3b 0a 23  ring(objv[1]);.#
6ef0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
6f00: 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47  BLE_MEMORY_MANAG
6f10: 45 4d 45 4e 54 0a 20 20 20 20 54 68 72 65 61 64  EMENT.    Thread
6f20: 44 61 74 61 20 63 6f 6e 73 74 20 2a 70 54 64 20  Data const *pTd 
6f30: 3d 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 44  = sqlite3ThreadD
6f40: 61 74 61 52 65 61 64 4f 6e 6c 79 28 29 3b 0a 20  ataReadOnly();. 
6f50: 20 20 20 69 66 28 20 30 3d 3d 73 74 72 63 6d 70     if( 0==strcmp
6f60: 28 7a 41 72 67 2c 20 22 2d 62 79 74 65 73 22 29  (zArg, "-bytes")
6f70: 20 29 7b 0a 20 20 20 20 20 20 54 63 6c 5f 53 65   ){.      Tcl_Se
6f80: 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
6f90: 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a  p, Tcl_NewIntObj
6fa0: 28 70 54 64 2d 3e 6e 41 6c 6c 6f 63 29 29 3b 0a  (pTd->nAlloc));.
6fb0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 30 3d      }else if( 0=
6fc0: 3d 73 74 72 63 6d 70 28 7a 41 72 67 2c 20 22 2d  =strcmp(zArg, "-
6fd0: 63 6c 65 61 72 6d 61 78 62 79 74 65 73 22 29 20  clearmaxbytes") 
6fe0: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
6ff0: 5f 6e 4d 61 78 41 6c 6c 6f 63 20 3d 20 70 54 64  _nMaxAlloc = pTd
7000: 2d 3e 6e 41 6c 6c 6f 63 3b 0a 20 20 20 20 7d 65  ->nAlloc;.    }e
7010: 6c 73 65 20 0a 23 65 6e 64 69 66 0a 20 20 20 20  lse .#endif.    
7020: 69 66 28 20 30 3d 3d 73 74 72 63 6d 70 28 7a 41  if( 0==strcmp(zA
7030: 72 67 2c 20 22 2d 6d 61 78 62 79 74 65 73 22 29  rg, "-maxbytes")
7040: 20 29 7b 0a 20 20 20 20 20 20 54 63 6c 5f 53 65   ){.      Tcl_Se
7050: 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
7060: 70 2c 20 54 63 6c 5f 4e 65 77 57 69 64 65 49 6e  p, Tcl_NewWideIn
7070: 74 4f 62 6a 28 73 71 6c 69 74 65 33 5f 6e 4d 61  tObj(sqlite3_nMa
7080: 78 41 6c 6c 6f 63 29 29 3b 0a 20 20 20 20 7d 65  xAlloc));.    }e
7090: 6c 73 65 7b 0a 20 20 20 20 20 20 54 63 6c 5f 41  lse{.      Tcl_A
70a0: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
70b0: 72 70 2c 20 22 62 61 64 20 6f 70 74 69 6f 6e 20  rp, "bad option 
70c0: 5c 22 22 2c 20 7a 41 72 67 2c 20 0a 20 20 20 20  \"", zArg, .    
70d0: 20 20 20 20 22 5c 22 3a 20 6d 75 73 74 20 62 65      "\": must be
70e0: 20 2d 62 79 74 65 73 2c 20 2d 6d 61 78 62 79 74   -bytes, -maxbyt
70f0: 65 73 20 6f 72 20 2d 63 6c 65 61 72 6d 61 78 62  es or -clearmaxb
7100: 79 74 65 73 22 2c 20 30 0a 20 20 20 20 20 20 29  ytes", 0.      )
7110: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 54  ;.      return T
7120: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a  CL_ERROR;.    }.
7130: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
7140: 4f 4b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 6f  OK;.  }..  if( o
7150: 62 6a 63 21 3d 31 20 29 7b 0a 20 20 20 20 54 63  bjc!=1 ){.    Tc
7160: 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69  l_WrongNumArgs(i
7170: 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20  nterp, 1, objv, 
7180: 22 3f 2d 62 79 74 65 73 3f 22 29 3b 0a 20 20 20  "?-bytes?");.   
7190: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
71a0: 52 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e  R;.  }..  return
71b0: 20 73 71 6c 69 74 65 33 4f 75 74 73 74 61 6e 64   sqlite3Outstand
71c0: 69 6e 67 4d 61 6c 6c 6f 63 73 28 69 6e 74 65 72  ingMallocs(inter
71d0: 70 29 3b 0a 23 65 6c 73 65 0a 20 20 72 65 74 75  p);.#else.  retu
71e0: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 23 65 6e 64 69  rn TCL_OK;.#endi
71f0: 66 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  f.}.#endif../*.*
7200: 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33  * Usage: sqlite3
7210: 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 63  _enable_shared_c
7220: 61 63 68 65 20 20 20 20 20 20 42 4f 4f 4c 45 41  ache      BOOLEA
7230: 4e 0a 2a 2a 0a 2a 2f 0a 23 69 66 20 21 64 65 66  N.**.*/.#if !def
7240: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
7250: 5f 53 48 41 52 45 44 5f 43 41 43 48 45 29 0a 73  _SHARED_CACHE).s
7260: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 65  tatic int test_e
7270: 6e 61 62 6c 65 5f 73 68 61 72 65 64 28 0a 20 20  nable_shared(.  
7280: 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e  ClientData clien
7290: 74 44 61 74 61 2c 20 2f 2a 20 50 6f 69 6e 74 65  tData, /* Pointe
72a0: 72 20 74 6f 20 73 71 6c 69 74 65 33 5f 65 6e 61  r to sqlite3_ena
72b0: 62 6c 65 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e  ble_XXX function
72c0: 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70   */.  Tcl_Interp
72d0: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
72e0: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
72f0: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
7300: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
7310: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20  .  int objc,    
7320: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
7330: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
7340: 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43   */.  Tcl_Obj *C
7350: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20  ONST objv[]  /* 
7360: 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74  Command argument
7370: 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 72 63  s */.){.  int rc
7380: 3b 0a 20 20 69 6e 74 20 65 6e 61 62 6c 65 3b 0a  ;.  int enable;.
7390: 20 20 69 6e 74 20 72 65 74 20 3d 20 30 3b 0a 0a    int ret = 0;..
73a0: 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b    if( objc!=2 ){
73b0: 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75  .    Tcl_WrongNu
73c0: 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c  mArgs(interp, 1,
73d0: 20 6f 62 6a 76 2c 20 22 42 4f 4f 4c 45 41 4e 22   objv, "BOOLEAN"
73e0: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
73f0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
7400: 66 28 20 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61  f( Tcl_GetBoolea
7410: 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  nFromObj(interp,
7420: 20 6f 62 6a 76 5b 31 5d 2c 20 26 65 6e 61 62 6c   objv[1], &enabl
7430: 65 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  e) ){.    return
7440: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
7450: 20 20 72 65 74 20 3d 20 73 71 6c 69 74 65 33 54    ret = sqlite3T
7460: 68 72 65 61 64 44 61 74 61 52 65 61 64 4f 6e 6c  hreadDataReadOnl
7470: 79 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61  y()->useSharedDa
7480: 74 61 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  ta;.  rc = sqlit
7490: 65 33 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64  e3_enable_shared
74a0: 5f 63 61 63 68 65 28 65 6e 61 62 6c 65 29 3b 0a  _cache(enable);.
74b0: 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
74c0: 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53  _OK ){.    Tcl_S
74d0: 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
74e0: 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33   (char *)sqlite3
74f0: 45 72 72 53 74 72 28 72 63 29 2c 20 54 43 4c 5f  ErrStr(rc), TCL_
7500: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 72 65 74  STATIC);.    ret
7510: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
7520: 20 7d 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52   }.  Tcl_SetObjR
7530: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
7540: 6c 5f 4e 65 77 42 6f 6f 6c 65 61 6e 4f 62 6a 28  l_NewBooleanObj(
7550: 72 65 74 29 29 3b 0a 20 20 72 65 74 75 72 6e 20  ret));.  return 
7560: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66  TCL_OK;.}.#endif
7570: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
7580: 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f  qlite3_libversio
7590: 6e 5f 6e 75 6d 62 65 72 0a 2a 2a 0a 2a 2f 0a 73  n_number.**.*/.s
75a0: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 6c  tatic int test_l
75b0: 69 62 76 65 72 73 69 6f 6e 5f 6e 75 6d 62 65 72  ibversion_number
75c0: 28 0a 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63  (.  ClientData c
75d0: 6c 69 65 6e 74 44 61 74 61 2c 20 2f 2a 20 50 6f  lientData, /* Po
75e0: 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33  inter to sqlite3
75f0: 5f 65 6e 61 62 6c 65 5f 58 58 58 20 66 75 6e 63  _enable_XXX func
7600: 74 69 6f 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e  tion */.  Tcl_In
7610: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
7620: 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
7630: 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
7640: 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
7650: 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  d */.  int objc,
7660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7670: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
7680: 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62  ents */.  Tcl_Ob
7690: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20  j *CONST objv[] 
76a0: 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75   /* Command argu
76b0: 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 54 63  ments */.){.  Tc
76c0: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
76d0: 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e  nterp, Tcl_NewIn
76e0: 74 4f 62 6a 28 73 71 6c 69 74 65 33 5f 6c 69 62  tObj(sqlite3_lib
76f0: 76 65 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 29  version_number()
7700: 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ));.  return TCL
7710: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
7720: 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 74 61 62  age: sqlite3_tab
7730: 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61  le_column_metada
7740: 74 61 20 44 42 20 64 62 6e 61 6d 65 20 74 62 6c  ta DB dbname tbl
7750: 6e 61 6d 65 20 63 6f 6c 6e 61 6d 65 0a 2a 2a 0a  name colname.**.
7760: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
7770: 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d  _ENABLE_COLUMN_M
7780: 45 54 41 44 41 54 41 0a 73 74 61 74 69 63 20 69  ETADATA.static i
7790: 6e 74 20 74 65 73 74 5f 74 61 62 6c 65 5f 63 6f  nt test_table_co
77a0: 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 28 0a 20  lumn_metadata(. 
77b0: 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65   ClientData clie
77c0: 6e 74 44 61 74 61 2c 20 2f 2a 20 50 6f 69 6e 74  ntData, /* Point
77d0: 65 72 20 74 6f 20 73 71 6c 69 74 65 33 5f 65 6e  er to sqlite3_en
77e0: 61 62 6c 65 5f 58 58 58 20 66 75 6e 63 74 69 6f  able_XXX functio
77f0: 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72  n */.  Tcl_Inter
7800: 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
7810: 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
7820: 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
7830: 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
7840: 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20  /.  int objc,   
7850: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
7860: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
7870: 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  s */.  Tcl_Obj *
7880: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a  CONST objv[]  /*
7890: 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e   Command argumen
78a0: 74 73 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74  ts */.){.  sqlit
78b0: 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20  e3 *db;.  const 
78c0: 63 68 61 72 20 2a 7a 44 62 3b 0a 20 20 63 6f 6e  char *zDb;.  con
78d0: 73 74 20 63 68 61 72 20 2a 7a 54 62 6c 3b 0a 20  st char *zTbl;. 
78e0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f   const char *zCo
78f0: 6c 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 54  l;.  int rc;.  T
7900: 63 6c 5f 4f 62 6a 20 2a 70 52 65 74 3b 0a 0a 20  cl_Obj *pRet;.. 
7910: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 61   const char *zDa
7920: 74 61 74 79 70 65 3b 0a 20 20 63 6f 6e 73 74 20  tatype;.  const 
7930: 63 68 61 72 20 2a 7a 43 6f 6c 6c 73 65 71 3b 0a  char *zCollseq;.
7940: 20 20 69 6e 74 20 6e 6f 74 6e 75 6c 6c 3b 0a 20    int notnull;. 
7950: 20 69 6e 74 20 70 72 69 6d 61 72 79 6b 65 79 3b   int primarykey;
7960: 0a 20 20 69 6e 74 20 61 75 74 6f 69 6e 63 72 65  .  int autoincre
7970: 6d 65 6e 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  ment;..  if( obj
7980: 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=5 ){.    Tcl_
7990: 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74  WrongNumArgs(int
79a0: 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 44  erp, 1, objv, "D
79b0: 42 20 64 62 6e 61 6d 65 20 74 62 6c 6e 61 6d 65  B dbname tblname
79c0: 20 63 6f 6c 6e 61 6d 65 22 29 3b 0a 20 20 20 20   colname");.    
79d0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
79e0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44  ;.  }.  if( getD
79f0: 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  bPointer(interp,
7a00: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
7a10: 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20  bjv[1]), &db) ) 
7a20: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
7a30: 3b 0a 20 20 7a 44 62 20 3d 20 54 63 6c 5f 47 65  ;.  zDb = Tcl_Ge
7a40: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29  tString(objv[2])
7a50: 3b 0a 20 20 7a 54 62 6c 20 3d 20 54 63 6c 5f 47  ;.  zTbl = Tcl_G
7a60: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 33 5d  etString(objv[3]
7a70: 29 3b 0a 20 20 7a 43 6f 6c 20 3d 20 54 63 6c 5f  );.  zCol = Tcl_
7a80: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 34  GetString(objv[4
7a90: 5d 29 3b 0a 0a 20 20 69 66 28 20 73 74 72 6c 65  ]);..  if( strle
7aa0: 6e 28 7a 44 62 29 3d 3d 30 20 29 20 7a 44 62 20  n(zDb)==0 ) zDb 
7ab0: 3d 20 30 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c  = 0;..  rc = sql
7ac0: 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d  ite3_table_colum
7ad0: 6e 5f 6d 65 74 61 64 61 74 61 28 64 62 2c 20 7a  n_metadata(db, z
7ae0: 44 62 2c 20 7a 54 62 6c 2c 20 7a 43 6f 6c 2c 20  Db, zTbl, zCol, 
7af0: 0a 20 20 20 20 20 20 26 7a 44 61 74 61 74 79 70  .      &zDatatyp
7b00: 65 2c 20 26 7a 43 6f 6c 6c 73 65 71 2c 20 26 6e  e, &zCollseq, &n
7b10: 6f 74 6e 75 6c 6c 2c 20 26 70 72 69 6d 61 72 79  otnull, &primary
7b20: 6b 65 79 2c 20 26 61 75 74 6f 69 6e 63 72 65 6d  key, &autoincrem
7b30: 65 6e 74 29 3b 0a 0a 20 20 69 66 28 20 72 63 21  ent);..  if( rc!
7b40: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
7b50: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
7b60: 6c 74 28 69 6e 74 65 72 70 2c 20 73 71 6c 69 74  lt(interp, sqlit
7b70: 65 33 5f 65 72 72 6d 73 67 28 64 62 29 2c 20 30  e3_errmsg(db), 0
7b80: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
7b90: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
7ba0: 70 52 65 74 20 3d 20 54 63 6c 5f 4e 65 77 4f 62  pRet = Tcl_NewOb
7bb0: 6a 28 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f  j();.  Tcl_ListO
7bc0: 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  bjAppendElement(
7bd0: 30 2c 20 70 52 65 74 2c 20 54 63 6c 5f 4e 65 77  0, pRet, Tcl_New
7be0: 53 74 72 69 6e 67 4f 62 6a 28 7a 44 61 74 61 74  StringObj(zDatat
7bf0: 79 70 65 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c  ype, -1));.  Tcl
7c00: 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
7c10: 65 6d 65 6e 74 28 30 2c 20 70 52 65 74 2c 20 54  ement(0, pRet, T
7c20: 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
7c30: 7a 43 6f 6c 6c 73 65 71 2c 20 2d 31 29 29 3b 0a  zCollseq, -1));.
7c40: 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70    Tcl_ListObjApp
7c50: 65 6e 64 45 6c 65 6d 65 6e 74 28 30 2c 20 70 52  endElement(0, pR
7c60: 65 74 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62  et, Tcl_NewIntOb
7c70: 6a 28 6e 6f 74 6e 75 6c 6c 29 29 3b 0a 20 20 54  j(notnull));.  T
7c80: 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64  cl_ListObjAppend
7c90: 45 6c 65 6d 65 6e 74 28 30 2c 20 70 52 65 74 2c  Element(0, pRet,
7ca0: 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 70   Tcl_NewIntObj(p
7cb0: 72 69 6d 61 72 79 6b 65 79 29 29 3b 0a 20 20 54  rimarykey));.  T
7cc0: 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64  cl_ListObjAppend
7cd0: 45 6c 65 6d 65 6e 74 28 30 2c 20 70 52 65 74 2c  Element(0, pRet,
7ce0: 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 61   Tcl_NewIntObj(a
7cf0: 75 74 6f 69 6e 63 72 65 6d 65 6e 74 29 29 3b 0a  utoincrement));.
7d00: 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
7d10: 6c 74 28 69 6e 74 65 72 70 2c 20 70 52 65 74 29  lt(interp, pRet)
7d20: 3b 0a 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  ;..  return TCL_
7d30: 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OK;.}.#endif../*
7d40: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
7d50: 74 65 5f 61 62 6f 72 74 0a 2a 2a 0a 2a 2a 20 53  te_abort.**.** S
7d60: 68 75 74 64 6f 77 6e 20 74 68 65 20 70 72 6f 63  hutdown the proc
7d70: 65 73 73 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e  ess immediately.
7d80: 20 20 54 68 69 73 20 69 73 20 6e 6f 74 20 61 20    This is not a 
7d90: 63 6c 65 61 6e 20 73 68 75 74 64 6f 77 6e 2e 0a  clean shutdown..
7da0: 2a 2a 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ** This command 
7db0: 69 73 20 75 73 65 64 20 74 6f 20 74 65 73 74 20  is used to test 
7dc0: 74 68 65 20 72 65 63 6f 76 65 72 61 62 69 6c 69  the recoverabili
7dd0: 74 79 20 6f 66 20 61 20 64 61 74 61 62 61 73 65  ty of a database
7de0: 20 69 6e 0a 2a 2a 20 74 68 65 20 65 76 65 6e 74   in.** the event
7df0: 20 6f 66 20 61 20 70 72 6f 67 72 61 6d 20 63 72   of a program cr
7e00: 61 73 68 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ash..*/.static i
7e10: 6e 74 20 73 71 6c 69 74 65 5f 61 62 6f 72 74 28  nt sqlite_abort(
7e20: 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64  .  void *NotUsed
7e30: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
7e40: 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
7e50: 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
7e60: 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
7e70: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
7e80: 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20   int argc,      
7e90: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
7ea0: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
7eb0: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20  /.  char **argv 
7ec0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
7ed0: 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d  xt of each argum
7ee0: 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 61 73 73 65  ent */.){.  asse
7ef0: 72 74 28 20 69 6e 74 65 72 70 3d 3d 30 20 29 3b  rt( interp==0 );
7f00: 20 20 20 2f 2a 20 54 68 69 73 20 77 69 6c 6c 20     /* This will 
7f10: 61 6c 77 61 79 73 20 66 61 69 6c 20 2a 2f 0a 20  always fail */. 
7f20: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
7f30: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  }../*.** The fol
7f40: 6c 6f 77 69 6e 67 20 72 6f 75 74 69 6e 65 20 69  lowing routine i
7f50: 73 20 61 20 75 73 65 72 2d 64 65 66 69 6e 65 64  s a user-defined
7f60: 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 77 68   SQL function wh
7f70: 6f 73 65 20 70 75 72 70 6f 73 65 0a 2a 2a 20 69  ose purpose.** i
7f80: 73 20 74 6f 20 74 65 73 74 20 74 68 65 20 73 71  s to test the sq
7f90: 6c 69 74 65 5f 73 65 74 5f 72 65 73 75 6c 74 28  lite_set_result(
7fa0: 29 20 41 50 49 2e 0a 2a 2f 0a 73 74 61 74 69 63  ) API..*/.static
7fb0: 20 76 6f 69 64 20 74 65 73 74 46 75 6e 63 28 73   void testFunc(s
7fc0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
7fd0: 63 6f 6e 74 65 78 74 2c 20 69 6e 74 20 61 72 67  context, int arg
7fe0: 63 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  c, sqlite3_value
7ff0: 20 2a 2a 61 72 67 76 29 7b 0a 20 20 77 68 69 6c   **argv){.  whil
8000: 65 28 20 61 72 67 63 3e 3d 32 20 29 7b 0a 20 20  e( argc>=2 ){.  
8010: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
8020: 72 67 30 20 3d 20 28 63 68 61 72 2a 29 73 71 6c  rg0 = (char*)sql
8030: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
8040: 61 72 67 76 5b 30 5d 29 3b 0a 20 20 20 20 69 66  argv[0]);.    if
8050: 28 20 7a 41 72 67 30 20 29 7b 0a 20 20 20 20 20  ( zArg0 ){.     
8060: 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53   if( 0==sqlite3S
8070: 74 72 49 43 6d 70 28 7a 41 72 67 30 2c 20 22 69  trICmp(zArg0, "i
8080: 6e 74 22 29 20 29 7b 0a 20 20 20 20 20 20 20 20  nt") ){.        
8090: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69  sqlite3_result_i
80a0: 6e 74 28 63 6f 6e 74 65 78 74 2c 20 73 71 6c 69  nt(context, sqli
80b0: 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28 61 72  te3_value_int(ar
80c0: 67 76 5b 31 5d 29 29 3b 0a 20 20 20 20 20 20 7d  gv[1]));.      }
80d0: 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33  else if( sqlite3
80e0: 53 74 72 49 43 6d 70 28 7a 41 72 67 30 2c 22 69  StrICmp(zArg0,"i
80f0: 6e 74 36 34 22 29 3d 3d 30 20 29 7b 0a 20 20 20  nt64")==0 ){.   
8100: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73       sqlite3_res
8110: 75 6c 74 5f 69 6e 74 36 34 28 63 6f 6e 74 65 78  ult_int64(contex
8120: 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  t, sqlite3_value
8130: 5f 69 6e 74 36 34 28 61 72 67 76 5b 31 5d 29 29  _int64(argv[1]))
8140: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
8150: 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  ( sqlite3StrICmp
8160: 28 7a 41 72 67 30 2c 22 73 74 72 69 6e 67 22 29  (zArg0,"string")
8170: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73  ==0 ){.        s
8180: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65  qlite3_result_te
8190: 78 74 28 63 6f 6e 74 65 78 74 2c 20 28 63 68 61  xt(context, (cha
81a0: 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  r*)sqlite3_value
81b0: 5f 74 65 78 74 28 61 72 67 76 5b 31 5d 29 2c 20  _text(argv[1]), 
81c0: 2d 31 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  -1,.            
81d0: 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54  SQLITE_TRANSIENT
81e0: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  );.      }else i
81f0: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
8200: 70 28 7a 41 72 67 30 2c 22 64 6f 75 62 6c 65 22  p(zArg0,"double"
8210: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
8220: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64  sqlite3_result_d
8230: 6f 75 62 6c 65 28 63 6f 6e 74 65 78 74 2c 20 73  ouble(context, s
8240: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75  qlite3_value_dou
8250: 62 6c 65 28 61 72 67 76 5b 31 5d 29 29 3b 0a 20  ble(argv[1]));. 
8260: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73       }else if( s
8270: 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 41  qlite3StrICmp(zA
8280: 72 67 30 2c 22 6e 75 6c 6c 22 29 3d 3d 30 20 29  rg0,"null")==0 )
8290: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
82a0: 33 5f 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f  3_result_null(co
82b0: 6e 74 65 78 74 29 3b 0a 20 20 20 20 20 20 7d 65  ntext);.      }e
82c0: 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 53  lse if( sqlite3S
82d0: 74 72 49 43 6d 70 28 7a 41 72 67 30 2c 22 76 61  trICmp(zArg0,"va
82e0: 6c 75 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  lue")==0 ){.    
82f0: 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75      sqlite3_resu
8300: 6c 74 5f 76 61 6c 75 65 28 63 6f 6e 74 65 78 74  lt_value(context
8310: 2c 20 61 72 67 76 5b 73 71 6c 69 74 65 33 5f 76  , argv[sqlite3_v
8320: 61 6c 75 65 5f 69 6e 74 28 61 72 67 76 5b 31 5d  alue_int(argv[1]
8330: 29 5d 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  )]);.      }else
8340: 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 65  {.        goto e
8350: 72 72 6f 72 5f 6f 75 74 3b 0a 20 20 20 20 20 20  rror_out;.      
8360: 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
8370: 20 20 20 67 6f 74 6f 20 65 72 72 6f 72 5f 6f 75     goto error_ou
8380: 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 72 67  t;.    }.    arg
8390: 63 20 2d 3d 20 32 3b 0a 20 20 20 20 61 72 67 76  c -= 2;.    argv
83a0: 20 2b 3d 20 32 3b 0a 20 20 7d 0a 20 20 72 65 74   += 2;.  }.  ret
83b0: 75 72 6e 3b 0a 0a 65 72 72 6f 72 5f 6f 75 74 3a  urn;..error_out:
83c0: 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  .  sqlite3_resul
83d0: 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c  t_error(context,
83e0: 22 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20  "first argument 
83f0: 73 68 6f 75 6c 64 20 62 65 20 6f 6e 65 20 6f 66  should be one of
8400: 3a 20 22 0a 20 20 20 20 20 20 22 69 6e 74 20 69  : ".      "int i
8410: 6e 74 36 34 20 73 74 72 69 6e 67 20 64 6f 75 62  nt64 string doub
8420: 6c 65 20 6e 75 6c 6c 20 76 61 6c 75 65 22 2c 20  le null value", 
8430: 2d 31 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  -1);.}../*.** Us
8440: 61 67 65 3a 20 20 20 73 71 6c 69 74 65 5f 72 65  age:   sqlite_re
8450: 67 69 73 74 65 72 5f 74 65 73 74 5f 66 75 6e 63  gister_test_func
8460: 74 69 6f 6e 20 20 44 42 20 20 4e 41 4d 45 0a 2a  tion  DB  NAME.*
8470: 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 74 68  *.** Register th
8480: 65 20 74 65 73 74 20 53 51 4c 20 66 75 6e 63 74  e test SQL funct
8490: 69 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ion on the datab
84a0: 61 73 65 20 44 42 20 75 6e 64 65 72 20 74 68 65  ase DB under the
84b0: 20 6e 61 6d 65 20 4e 41 4d 45 2e 0a 2a 2f 0a 73   name NAME..*/.s
84c0: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 72  tatic int test_r
84d0: 65 67 69 73 74 65 72 5f 66 75 6e 63 28 0a 20 20  egister_func(.  
84e0: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
84f0: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
8500: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
8510: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
8520: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
8530: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
8540: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
8550: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
8560: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
8570: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
8580: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
8590: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
85a0: 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33   */.){.  sqlite3
85b0: 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a   *db;.  int rc;.
85c0: 20 20 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b    if( argc!=3 ){
85d0: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
85e0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
85f0: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
8600: 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76  uld be \"", argv
8610: 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 22 20 44  [0], .       " D
8620: 42 20 46 55 4e 43 54 49 4f 4e 2d 4e 41 4d 45 22  B FUNCTION-NAME"
8630: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
8640: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
8650: 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74    if( getDbPoint
8660: 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  er(interp, argv[
8670: 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72  1], &db) ) retur
8680: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72  n TCL_ERROR;.  r
8690: 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61  c = sqlite3_crea
86a0: 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20  te_function(db, 
86b0: 61 72 67 76 5b 32 5d 2c 20 2d 31 2c 20 53 51 4c  argv[2], -1, SQL
86c0: 49 54 45 5f 55 54 46 38 2c 20 30 2c 20 0a 20 20  ITE_UTF8, 0, .  
86d0: 20 20 20 20 74 65 73 74 46 75 6e 63 2c 20 30 2c      testFunc, 0,
86e0: 20 30 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 30   0);.  if( rc!=0
86f0: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
8700: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
8710: 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72   sqlite3ErrStr(r
8720: 63 29 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  c), 0);.    retu
8730: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
8740: 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54  }.  if( sqlite3T
8750: 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72  estErrCode(inter
8760: 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65 74  p, db, rc) ) ret
8770: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
8780: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
8790: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
87a0: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
87b0: 65 20 20 53 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 46  e  STMT .**.** F
87c0: 69 6e 61 6c 69 7a 65 20 61 20 73 74 61 74 65 6d  inalize a statem
87d0: 65 6e 74 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 73  ent handle..*/.s
87e0: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 66  tatic int test_f
87f0: 69 6e 61 6c 69 7a 65 28 0a 20 20 76 6f 69 64 20  inalize(.  void 
8800: 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
8810: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
8820: 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
8830: 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
8840: 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
8850: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
8860: 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 73 71  ;.  int rc;.  sq
8870: 6c 69 74 65 33 20 2a 64 62 3b 0a 0a 20 20 69 66  lite3 *db;..  if
8880: 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
8890: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
88a0: 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
88b0: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
88c0: 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20  be \"",.        
88d0: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f  Tcl_GetStringFro
88e0: 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29  mObj(objv[0], 0)
88f0: 2c 20 22 20 3c 53 54 4d 54 3e 22 2c 20 30 29 3b  , " <STMT>", 0);
8900: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
8910: 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66  ERROR;.  }..  if
8920: 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
8930: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
8940: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
8950: 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
8960: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
8970: 69 66 28 20 70 53 74 6d 74 20 29 7b 0a 20 20 20  if( pStmt ){.   
8980: 20 64 62 20 3d 20 53 74 6d 74 54 6f 44 62 28 70   db = StmtToDb(p
8990: 53 74 6d 74 29 3b 0a 20 20 7d 0a 20 20 72 63 20  Stmt);.  }.  rc 
89a0: 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69  = sqlite3_finali
89b0: 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 54 63 6c  ze(pStmt);.  Tcl
89c0: 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
89d0: 70 2c 20 28 63 68 61 72 20 2a 29 65 72 72 6f 72  p, (char *)error
89e0: 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54  Name(rc), TCL_ST
89f0: 41 54 49 43 29 3b 0a 20 20 69 66 28 20 64 62 20  ATIC);.  if( db 
8a00: 26 26 20 73 71 6c 69 74 65 33 54 65 73 74 45 72  && sqlite3TestEr
8a10: 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62  rCode(interp, db
8a20: 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54  , rc) ) return T
8a30: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74 75  CL_ERROR;.  retu
8a40: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
8a50: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
8a60: 74 65 33 5f 72 65 73 65 74 20 20 53 54 4d 54 20  te3_reset  STMT 
8a70: 0a 2a 2a 0a 2a 2a 20 52 65 73 65 74 20 61 20 73  .**.** Reset a s
8a80: 74 61 74 65 6d 65 6e 74 20 68 61 6e 64 6c 65 2e  tatement handle.
8a90: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
8aa0: 65 73 74 5f 72 65 73 65 74 28 0a 20 20 76 6f 69  est_reset(.  voi
8ab0: 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
8ac0: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
8ad0: 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
8ae0: 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
8af0: 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73  ST objv[].){.  s
8b00: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
8b10: 6d 74 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20  mt;.  int rc;.. 
8b20: 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a   if( objc!=2 ){.
8b30: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
8b40: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
8b50: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
8b60: 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20  ld be \"",.     
8b70: 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
8b80: 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c  FromObj(objv[0],
8b90: 20 30 29 2c 20 22 20 3c 53 54 4d 54 3e 22 2c 20   0), " <STMT>", 
8ba0: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
8bb0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
8bc0: 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
8bd0: 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
8be0: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
8bf0: 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
8c00: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
8c10: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
8c20: 72 65 73 65 74 28 70 53 74 6d 74 29 3b 0a 20 20  reset(pStmt);.  
8c30: 69 66 28 20 70 53 74 6d 74 20 26 26 20 73 71 6c  if( pStmt && sql
8c40: 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28  ite3TestErrCode(
8c50: 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62  interp, StmtToDb
8c60: 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29 7b 0a  (pStmt), rc) ){.
8c70: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
8c80: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f  RROR;.  }.  Tcl_
8c90: 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70  SetResult(interp
8ca0: 2c 20 28 63 68 61 72 20 2a 29 65 72 72 6f 72 4e  , (char *)errorN
8cb0: 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54 41  ame(rc), TCL_STA
8cc0: 54 49 43 29 3b 0a 2f 2a 0a 20 20 69 66 28 20 72  TIC);./*.  if( r
8cd0: 63 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  c ){.    return 
8ce0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 2a  TCL_ERROR;.  }.*
8cf0: 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  /.  return TCL_O
8d00: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
8d10: 65 3a 20 20 73 71 6c 69 74 65 33 5f 65 78 70 69  e:  sqlite3_expi
8d20: 72 65 64 20 53 54 4d 54 20 0a 2a 2a 0a 2a 2a 20  red STMT .**.** 
8d30: 52 65 74 75 72 6e 20 54 52 55 45 20 69 66 20 61  Return TRUE if a
8d40: 20 72 65 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f   recompilation o
8d50: 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  f the statement 
8d60: 69 73 20 72 65 63 6f 6d 6d 65 6e 64 65 64 2e 0a  is recommended..
8d70: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
8d80: 73 74 5f 65 78 70 69 72 65 64 28 0a 20 20 76 6f  st_expired(.  vo
8d90: 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
8da0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
8db0: 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
8dc0: 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
8dd0: 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
8de0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
8df0: 74 6d 74 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21  tmt;.  if( objc!
8e00: 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =2 ){.    Tcl_Ap
8e10: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
8e20: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
8e30: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
8e40: 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74  .        Tcl_Get
8e50: 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62  StringFromObj(ob
8e60: 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 3c 53 54  jv[0], 0), " <ST
8e70: 4d 54 3e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  MT>", 0);.    re
8e80: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
8e90: 20 20 7d 0a 20 20 69 66 28 20 67 65 74 53 74 6d    }.  if( getStm
8ea0: 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  tPointer(interp,
8eb0: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
8ec0: 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29  bjv[1]), &pStmt)
8ed0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
8ee0: 52 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62  ROR;.  Tcl_SetOb
8ef0: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
8f00: 54 63 6c 5f 4e 65 77 42 6f 6f 6c 65 61 6e 4f 62  Tcl_NewBooleanOb
8f10: 6a 28 73 71 6c 69 74 65 33 5f 65 78 70 69 72 65  j(sqlite3_expire
8f20: 64 28 70 53 74 6d 74 29 29 29 3b 0a 20 20 72 65  d(pStmt)));.  re
8f30: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
8f40: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
8f50: 6c 69 74 65 33 5f 74 72 61 6e 73 66 65 72 5f 62  lite3_transfer_b
8f60: 69 6e 64 69 6e 67 73 20 46 52 4f 4d 53 54 4d 54  indings FROMSTMT
8f70: 20 54 4f 53 54 4d 54 0a 2a 2a 0a 2a 2a 20 54 72   TOSTMT.**.** Tr
8f80: 61 6e 73 66 65 72 20 61 6c 6c 20 62 69 6e 64 69  ansfer all bindi
8f90: 6e 67 73 20 66 72 6f 6d 20 46 52 4f 4d 53 54 4d  ngs from FROMSTM
8fa0: 54 20 6f 76 65 72 20 74 6f 20 54 4f 53 54 4d 54  T over to TOSTMT
8fb0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
8fc0: 65 73 74 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e  est_transfer_bin
8fd0: 64 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  d(.  void * clie
8fe0: 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
8ff0: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
9000: 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
9010: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
9020: 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ].){.  sqlite3_s
9030: 74 6d 74 20 2a 70 53 74 6d 74 31 2c 20 2a 70 53  tmt *pStmt1, *pS
9040: 74 6d 74 32 3b 0a 20 20 69 66 28 20 6f 62 6a 63  tmt2;.  if( objc
9050: 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=3 ){.    Tcl_A
9060: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
9070: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
9080: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
9090: 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65  ,.        Tcl_Ge
90a0: 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f  tStringFromObj(o
90b0: 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 46 52  bjv[0], 0), " FR
90c0: 4f 4d 2d 53 54 4d 54 20 54 4f 2d 53 54 4d 54 22  OM-STMT TO-STMT"
90d0: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
90e0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
90f0: 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
9100: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
9110: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
9120: 31 5d 29 2c 20 26 70 53 74 6d 74 31 29 29 20 72  1]), &pStmt1)) r
9130: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
9140: 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f  .  if( getStmtPo
9150: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
9160: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
9170: 5b 32 5d 29 2c 20 26 70 53 74 6d 74 32 29 29 20  [2]), &pStmt2)) 
9180: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
9190: 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65  ;.  Tcl_SetObjRe
91a0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 0a 20 20  sult(interp, .  
91b0: 20 20 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a     Tcl_NewIntObj
91c0: 28 73 71 6c 69 74 65 33 5f 74 72 61 6e 73 66 65  (sqlite3_transfe
91d0: 72 5f 62 69 6e 64 69 6e 67 73 28 70 53 74 6d 74  r_bindings(pStmt
91e0: 31 2c 70 53 74 6d 74 32 29 29 29 3b 0a 20 20 72  1,pStmt2)));.  r
91f0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
9200: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
9210: 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 20 44  qlite3_changes D
9220: 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  B.**.** Return t
9230: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61  he number of cha
9240: 6e 67 65 73 20 6d 61 64 65 20 74 6f 20 74 68 65  nges made to the
9250: 20 64 61 74 61 62 61 73 65 20 62 79 20 74 68 65   database by the
9260: 20 6c 61 73 74 20 53 51 4c 0a 2a 2a 20 65 78 65   last SQL.** exe
9270: 63 75 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61 74 69  cution..*/.stati
9280: 63 20 69 6e 74 20 74 65 73 74 5f 63 68 61 6e 67  c int test_chang
9290: 65 73 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  es(.  void * cli
92a0: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
92b0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
92c0: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
92d0: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
92e0: 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  [].){.  sqlite3 
92f0: 2a 64 62 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21  *db;.  if( objc!
9300: 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =2 ){.    Tcl_Ap
9310: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
9320: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
9330: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
9340: 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  .       Tcl_GetS
9350: 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20  tring(objv[0]), 
9360: 22 20 44 42 22 2c 20 30 29 3b 0a 20 20 20 20 72  " DB", 0);.    r
9370: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
9380: 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
9390: 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
93a0: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
93b0: 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72  jv[1]), &db) ) r
93c0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
93d0: 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  .  Tcl_SetObjRes
93e0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
93f0: 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65  NewIntObj(sqlite
9400: 33 5f 63 68 61 6e 67 65 73 28 64 62 29 29 29 3b  3_changes(db)));
9410: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
9420: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  ;.}../*.** This 
9430: 69 73 20 74 68 65 20 22 73 74 61 74 69 63 5f 62  is the "static_b
9440: 69 6e 64 5f 76 61 6c 75 65 22 20 74 68 61 74 20  ind_value" that 
9450: 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 62 6f  variables are bo
9460: 75 6e 64 20 74 6f 20 77 68 65 6e 0a 2a 2a 20 74  und to when.** t
9470: 68 65 20 46 4c 41 47 20 6f 70 74 69 6f 6e 20 6f  he FLAG option o
9480: 66 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 20 69  f sqlite3_bind i
9490: 73 20 22 73 74 61 74 69 63 22 0a 2a 2f 0a 73 74  s "static".*/.st
94a0: 61 74 69 63 20 63 68 61 72 20 2a 73 71 6c 69 74  atic char *sqlit
94b0: 65 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f 76 61  e_static_bind_va
94c0: 6c 75 65 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20  lue = 0;../*.** 
94d0: 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f  Usage:  sqlite3_
94e0: 62 69 6e 64 20 20 56 4d 20 20 49 44 58 20 20 56  bind  VM  IDX  V
94f0: 41 4c 55 45 20 20 46 4c 41 47 53 0a 2a 2a 0a 2a  ALUE  FLAGS.**.*
9500: 2a 20 53 65 74 73 20 74 68 65 20 76 61 6c 75 65  * Sets the value
9510: 20 6f 66 20 74 68 65 20 49 44 58 2d 74 68 20 6f   of the IDX-th o
9520: 63 63 75 72 61 6e 63 65 20 6f 66 20 22 3f 22 20  ccurance of "?" 
9530: 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  in the original 
9540: 53 51 4c 0a 2a 2a 20 73 74 72 69 6e 67 2e 20 20  SQL.** string.  
9550: 56 41 4c 55 45 20 69 73 20 74 68 65 20 6e 65 77  VALUE is the new
9560: 20 76 61 6c 75 65 2e 20 20 49 66 20 46 4c 41 47   value.  If FLAG
9570: 53 3d 3d 22 6e 75 6c 6c 22 20 74 68 65 6e 20 56  S=="null" then V
9580: 41 4c 55 45 20 69 73 0a 2a 2a 20 69 67 6e 6f 72  ALUE is.** ignor
9590: 65 64 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65  ed and the value
95a0: 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e   is set to NULL.
95b0: 20 20 49 66 20 46 4c 41 47 53 3d 3d 22 73 74 61    If FLAGS=="sta
95c0: 74 69 63 22 20 74 68 65 6e 0a 2a 2a 20 74 68 65  tic" then.** the
95d0: 20 76 61 6c 75 65 20 69 73 20 73 65 74 20 74 6f   value is set to
95e0: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20   the value of a 
95f0: 73 74 61 74 69 63 20 76 61 72 69 61 62 6c 65 20  static variable 
9600: 6e 61 6d 65 64 0a 2a 2a 20 22 73 71 6c 69 74 65  named.** "sqlite
9610: 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f 76 61 6c  _static_bind_val
9620: 75 65 22 2e 20 20 49 66 20 46 4c 41 47 53 3d 3d  ue".  If FLAGS==
9630: 22 6e 6f 72 6d 61 6c 22 20 74 68 65 6e 20 61 20  "normal" then a 
9640: 63 6f 70 79 0a 2a 2a 20 6f 66 20 74 68 65 20 56  copy.** of the V
9650: 41 4c 55 45 20 69 73 20 6d 61 64 65 2e 20 20 49  ALUE is made.  I
9660: 66 20 46 4c 41 47 53 3d 3d 22 62 6c 6f 62 31 30  f FLAGS=="blob10
9670: 22 20 74 68 65 6e 20 61 20 56 41 4c 55 45 20 69  " then a VALUE i
9680: 73 20 69 67 6e 6f 72 65 64 0a 2a 2a 20 61 6e 20  s ignored.** an 
9690: 61 20 31 30 2d 62 79 74 65 20 62 6c 6f 62 20 22  a 10-byte blob "
96a0: 61 62 63 5c 30 30 30 78 79 7a 5c 30 30 30 70 71  abc\000xyz\000pq
96b0: 22 20 69 73 20 69 6e 73 65 72 74 65 64 2e 0a 2a  " is inserted..*
96c0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
96d0: 74 5f 62 69 6e 64 28 0a 20 20 76 6f 69 64 20 2a  t_bind(.  void *
96e0: 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49  NotUsed,.  Tcl_I
96f0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20  nterp *interp,  
9700: 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74    /* The TCL int
9710: 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e  erpreter that in
9720: 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61  voked this comma
9730: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63  nd */.  int argc
9740: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
9750: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
9760: 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20  ments */.  char 
9770: 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20  **argv          
9780: 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63    /* Text of eac
9790: 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b  h argument */.){
97a0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
97b0: 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 72 63  *pStmt;.  int rc
97c0: 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 69  ;.  int idx;.  i
97d0: 66 28 20 61 72 67 63 21 3d 35 20 29 7b 0a 20 20  f( argc!=5 ){.  
97e0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
97f0: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
9800: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
9810: 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
9820: 2c 20 0a 20 20 20 20 20 20 20 22 20 56 4d 20 49  , .       " VM I
9830: 44 58 20 56 41 4c 55 45 20 28 6e 75 6c 6c 7c 73  DX VALUE (null|s
9840: 74 61 74 69 63 7c 6e 6f 72 6d 61 6c 29 5c 22 22  tatic|normal)\""
9850: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
9860: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
9870: 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
9880: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67  nter(interp, arg
9890: 76 5b 31 5d 2c 20 26 70 53 74 6d 74 29 20 29 20  v[1], &pStmt) ) 
98a0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
98b0: 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49  ;.  if( Tcl_GetI
98c0: 6e 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  nt(interp, argv[
98d0: 32 5d 2c 20 26 69 64 78 29 20 29 20 72 65 74 75  2], &idx) ) retu
98e0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
98f0: 69 66 28 20 73 74 72 63 6d 70 28 61 72 67 76 5b  if( strcmp(argv[
9900: 34 5d 2c 22 6e 75 6c 6c 22 29 3d 3d 30 20 29 7b  4],"null")==0 ){
9910: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
9920: 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 70 53 74 6d  3_bind_null(pStm
9930: 74 2c 20 69 64 78 29 3b 0a 20 20 7d 65 6c 73 65  t, idx);.  }else
9940: 20 69 66 28 20 73 74 72 63 6d 70 28 61 72 67 76   if( strcmp(argv
9950: 5b 34 5d 2c 22 73 74 61 74 69 63 22 29 3d 3d 30  [4],"static")==0
9960: 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
9970: 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 70  ite3_bind_text(p
9980: 53 74 6d 74 2c 20 69 64 78 2c 20 73 71 6c 69 74  Stmt, idx, sqlit
9990: 65 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f 76 61  e_static_bind_va
99a0: 6c 75 65 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 7d  lue, -1, 0);.  }
99b0: 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
99c0: 61 72 67 76 5b 34 5d 2c 22 6e 6f 72 6d 61 6c 22  argv[4],"normal"
99d0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d  )==0 ){.    rc =
99e0: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65   sqlite3_bind_te
99f0: 78 74 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 61  xt(pStmt, idx, a
9a00: 72 67 76 5b 33 5d 2c 20 2d 31 2c 20 53 51 4c 49  rgv[3], -1, SQLI
9a10: 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20  TE_TRANSIENT);. 
9a20: 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
9a30: 70 28 61 72 67 76 5b 34 5d 2c 22 62 6c 6f 62 31  p(argv[4],"blob1
9a40: 30 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63  0")==0 ){.    rc
9a50: 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f   = sqlite3_bind_
9a60: 74 65 78 74 28 70 53 74 6d 74 2c 20 69 64 78 2c  text(pStmt, idx,
9a70: 20 22 61 62 63 5c 30 30 30 78 79 7a 5c 30 30 30   "abc\000xyz\000
9a80: 70 71 22 2c 20 31 30 2c 20 53 51 4c 49 54 45 5f  pq", 10, SQLITE_
9a90: 53 54 41 54 49 43 29 3b 0a 20 20 7d 65 6c 73 65  STATIC);.  }else
9aa0: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
9ab0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
9ac0: 34 74 68 20 61 72 67 75 6d 65 6e 74 20 73 68 6f  4th argument sho
9ad0: 75 6c 64 20 62 65 20 22 0a 20 20 20 20 20 20 20  uld be ".       
9ae0: 20 22 5c 22 6e 75 6c 6c 5c 22 20 6f 72 20 5c 22   "\"null\" or \"
9af0: 73 74 61 74 69 63 5c 22 20 6f 72 20 5c 22 6e 6f  static\" or \"no
9b00: 72 6d 61 6c 5c 22 22 2c 20 30 29 3b 0a 20 20 20  rmal\"", 0);.   
9b10: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
9b20: 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c  R;.  }.  if( sql
9b30: 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28  ite3TestErrCode(
9b40: 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62  interp, StmtToDb
9b50: 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29 20 72  (pStmt), rc) ) r
9b60: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
9b70: 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20  .  if( rc ){.   
9b80: 20 63 68 61 72 20 7a 42 75 66 5b 35 30 5d 3b 0a   char zBuf[50];.
9b90: 20 20 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66      sprintf(zBuf
9ba0: 2c 20 22 28 25 64 29 20 22 2c 20 72 63 29 3b 0a  , "(%d) ", rc);.
9bb0: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
9bc0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75  sult(interp, zBu
9bd0: 66 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74 72  f, sqlite3ErrStr
9be0: 28 72 63 29 2c 20 30 29 3b 0a 20 20 20 20 72 65  (rc), 0);.    re
9bf0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
9c00: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c    }.  return TCL
9c10: 5f 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  _OK;.}..#ifndef 
9c20: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
9c30: 36 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 61  6./*.** Usage: a
9c40: 64 64 5f 74 65 73 74 5f 63 6f 6c 6c 61 74 65 20  dd_test_collate 
9c50: 3c 64 62 20 70 74 72 3e 20 3c 75 74 66 38 3e 20  <db ptr> <utf8> 
9c60: 3c 75 74 66 31 36 6c 65 3e 20 3c 75 74 66 31 36  <utf16le> <utf16
9c70: 62 65 3e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66  be>.**.** This f
9c80: 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20  unction is used 
9c90: 74 6f 20 74 65 73 74 20 74 68 61 74 20 53 51 4c  to test that SQL
9ca0: 69 74 65 20 73 65 6c 65 63 74 73 20 74 68 65 20  ite selects the 
9cb0: 63 6f 72 72 65 63 74 20 63 6f 6c 6c 61 74 69 6f  correct collatio
9cc0: 6e 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 63 61  n.** sequence ca
9cd0: 6c 6c 62 61 63 6b 20 77 68 65 6e 20 6d 75 6c 74  llback when mult
9ce0: 69 70 6c 65 20 76 65 72 73 69 6f 6e 73 20 28 66  iple versions (f
9cf0: 6f 72 20 64 69 66 66 65 72 65 6e 74 20 74 65 78  or different tex
9d00: 74 20 65 6e 63 6f 64 69 6e 67 73 29 0a 2a 2a 20  t encodings).** 
9d10: 61 72 65 20 61 76 61 69 6c 61 62 6c 65 2e 0a 2a  are available..*
9d20: 2a 0a 2a 2a 20 43 61 6c 6c 69 6e 67 20 74 68 69  *.** Calling thi
9d30: 73 20 72 6f 75 74 69 6e 65 20 72 65 67 69 73 74  s routine regist
9d40: 65 72 73 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f  ers the collatio
9d50: 6e 20 73 65 71 75 65 6e 63 65 20 22 74 65 73 74  n sequence "test
9d60: 5f 63 6f 6c 6c 61 74 65 22 0a 2a 2a 20 77 69 74  _collate".** wit
9d70: 68 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  h database handl
9d80: 65 20 3c 64 62 3e 2e 20 54 68 65 20 73 65 63 6f  e <db>. The seco
9d90: 6e 64 20 61 72 67 75 6d 65 6e 74 20 6d 75 73 74  nd argument must
9da0: 20 62 65 20 61 20 6c 69 73 74 20 6f 66 20 74 68   be a list of th
9db0: 72 65 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 76  ree.** boolean v
9dc0: 61 6c 75 65 73 2e 20 49 66 20 74 68 65 20 66 69  alues. If the fi
9dd0: 72 73 74 20 69 73 20 74 72 75 65 2c 20 74 68 65  rst is true, the
9de0: 6e 20 61 20 76 65 72 73 69 6f 6e 20 6f 66 20 74  n a version of t
9df0: 65 73 74 5f 63 6f 6c 6c 61 74 65 20 69 73 0a 2a  est_collate is.*
9e00: 2a 20 72 65 67 69 73 74 65 72 65 64 20 66 6f 72  * registered for
9e10: 20 55 54 46 2d 38 2c 20 69 66 20 74 68 65 20 73   UTF-8, if the s
9e20: 65 63 6f 6e 64 20 69 73 20 74 72 75 65 2c 20 61  econd is true, a
9e30: 20 76 65 72 73 69 6f 6e 20 69 73 20 72 65 67 69   version is regi
9e40: 73 74 65 72 65 64 20 66 6f 72 0a 2a 2a 20 55 54  stered for.** UT
9e50: 46 2d 31 36 6c 65 2c 20 69 66 20 74 68 65 20 74  F-16le, if the t
9e60: 68 69 72 64 20 69 73 20 74 72 75 65 2c 20 61 20  hird is true, a 
9e70: 55 54 46 2d 31 36 62 65 20 76 65 72 73 69 6f 6e  UTF-16be version
9e80: 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0a 2a   is available..*
9e90: 2a 20 50 72 65 76 69 6f 75 73 20 76 65 72 73 69  * Previous versi
9ea0: 6f 6e 73 20 6f 66 20 74 65 73 74 5f 63 6f 6c 6c  ons of test_coll
9eb0: 61 74 65 20 61 72 65 20 64 65 6c 65 74 65 64 2e  ate are deleted.
9ec0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 6c 61  .**.** The colla
9ed0: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 74 65  tion sequence te
9ee0: 73 74 5f 63 6f 6c 6c 61 74 65 20 69 73 20 69 6d  st_collate is im
9ef0: 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 61 6c  plemented by cal
9f00: 6c 69 6e 67 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c  ling the.** foll
9f10: 6f 77 69 6e 67 20 54 43 4c 20 73 63 72 69 70 74  owing TCL script
9f20: 3a 0a 2a 2a 0a 2a 2a 20 20 20 22 74 65 73 74 5f  :.**.**   "test_
9f30: 63 6f 6c 6c 61 74 65 20 3c 65 6e 63 3e 20 3c 6c  collate <enc> <l
9f40: 68 73 3e 20 3c 72 68 73 3e 22 0a 2a 2a 0a 2a 2a  hs> <rhs>".**.**
9f50: 20 54 68 65 20 3c 6c 68 73 3e 20 61 6e 64 20 3c   The <lhs> and <
9f60: 72 68 73 3e 20 61 72 65 20 74 68 65 20 74 77 6f  rhs> are the two
9f70: 20 76 61 6c 75 65 73 20 62 65 69 6e 67 20 63 6f   values being co
9f80: 6d 70 61 72 65 64 2c 20 65 6e 63 6f 64 65 64 20  mpared, encoded 
9f90: 69 6e 20 55 54 46 2d 38 2e 0a 2a 2a 20 54 68 65  in UTF-8..** The
9fa0: 20 3c 65 6e 63 3e 20 70 61 72 61 6d 65 74 65 72   <enc> parameter
9fb0: 20 69 73 20 74 68 65 20 65 6e 63 6f 64 69 6e 67   is the encoding
9fc0: 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f   of the collatio
9fd0: 6e 20 66 75 6e 63 74 69 6f 6e 20 74 68 61 74 0a  n function that.
9fe0: 2a 2a 20 53 51 4c 69 74 65 20 73 65 6c 65 63 74  ** SQLite select
9ff0: 65 64 20 74 6f 20 63 61 6c 6c 2e 20 54 68 65 20  ed to call. The 
a000: 54 43 4c 20 74 65 73 74 20 73 63 72 69 70 74 20  TCL test script 
a010: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 0a 2a  implements the.*
a020: 2a 20 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22  * "test_collate"
a030: 20 70 72 6f 63 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74   proc..**.** Not
a040: 65 20 74 68 61 74 20 74 68 69 73 20 77 69 6c 6c  e that this will
a050: 20 6f 6e 6c 79 20 77 6f 72 6b 20 77 69 74 68 20   only work with 
a060: 6f 6e 65 20 69 6e 74 65 70 72 65 74 65 72 20 61  one intepreter a
a070: 74 20 61 20 74 69 6d 65 2c 20 61 73 20 74 68 65  t a time, as the
a080: 0a 2a 2a 20 69 6e 74 65 72 70 20 70 6f 69 6e 74  .** interp point
a090: 65 72 20 74 6f 20 75 73 65 20 77 68 65 6e 20 65  er to use when e
a0a0: 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 54 43  valuating the TC
a0b0: 4c 20 73 63 72 69 70 74 20 69 73 20 73 74 6f 72  L script is stor
a0c0: 65 64 20 69 6e 0a 2a 2a 20 70 54 65 73 74 43 6f  ed in.** pTestCo
a0d0: 6c 6c 61 74 65 49 6e 74 65 72 70 2e 0a 2a 2f 0a  llateInterp..*/.
a0e0: 73 74 61 74 69 63 20 54 63 6c 5f 49 6e 74 65 72  static Tcl_Inter
a0f0: 70 2a 20 70 54 65 73 74 43 6f 6c 6c 61 74 65 49  p* pTestCollateI
a100: 6e 74 65 72 70 3b 0a 73 74 61 74 69 63 20 69 6e  nterp;.static in
a110: 74 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 66  t test_collate_f
a120: 75 6e 63 28 0a 20 20 76 6f 69 64 20 2a 70 43 74  unc(.  void *pCt
a130: 78 2c 20 0a 20 20 69 6e 74 20 6e 41 2c 20 63 6f  x, .  int nA, co
a140: 6e 73 74 20 76 6f 69 64 20 2a 7a 41 2c 0a 20 20  nst void *zA,.  
a150: 69 6e 74 20 6e 42 2c 20 63 6f 6e 73 74 20 76 6f  int nB, const vo
a160: 69 64 20 2a 7a 42 0a 29 7b 0a 20 20 54 63 6c 5f  id *zB.){.  Tcl_
a170: 49 6e 74 65 72 70 20 2a 69 20 3d 20 70 54 65 73  Interp *i = pTes
a180: 74 43 6f 6c 6c 61 74 65 49 6e 74 65 72 70 3b 0a  tCollateInterp;.
a190: 20 20 69 6e 74 20 65 6e 63 69 6e 20 3d 20 28 69    int encin = (i
a1a0: 6e 74 29 70 43 74 78 3b 0a 20 20 69 6e 74 20 72  nt)pCtx;.  int r
a1b0: 65 73 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20  es;.  int n;..  
a1c0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
a1d0: 56 61 6c 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  Val;.  Tcl_Obj *
a1e0: 70 58 3b 0a 0a 20 20 70 58 20 3d 20 54 63 6c 5f  pX;..  pX = Tcl_
a1f0: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 74 65  NewStringObj("te
a200: 73 74 5f 63 6f 6c 6c 61 74 65 22 2c 20 2d 31 29  st_collate", -1)
a210: 3b 0a 20 20 54 63 6c 5f 49 6e 63 72 52 65 66 43  ;.  Tcl_IncrRefC
a220: 6f 75 6e 74 28 70 58 29 3b 0a 0a 20 20 73 77 69  ount(pX);..  swi
a230: 74 63 68 28 20 65 6e 63 69 6e 20 29 7b 0a 20 20  tch( encin ){.  
a240: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 55 54    case SQLITE_UT
a250: 46 38 3a 0a 20 20 20 20 20 20 54 63 6c 5f 4c 69  F8:.      Tcl_Li
a260: 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65  stObjAppendEleme
a270: 6e 74 28 69 2c 70 58 2c 54 63 6c 5f 4e 65 77 53  nt(i,pX,Tcl_NewS
a280: 74 72 69 6e 67 4f 62 6a 28 22 55 54 46 2d 38 22  tringObj("UTF-8"
a290: 2c 2d 31 29 29 3b 0a 20 20 20 20 20 20 62 72 65  ,-1));.      bre
a2a0: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
a2b0: 49 54 45 5f 55 54 46 31 36 4c 45 3a 0a 20 20 20  ITE_UTF16LE:.   
a2c0: 20 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70     Tcl_ListObjAp
a2d0: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 2c 70 58  pendElement(i,pX
a2e0: 2c 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62  ,Tcl_NewStringOb
a2f0: 6a 28 22 55 54 46 2d 31 36 4c 45 22 2c 2d 31 29  j("UTF-16LE",-1)
a300: 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  );.      break;.
a310: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
a320: 55 54 46 31 36 42 45 3a 0a 20 20 20 20 20 20 54  UTF16BE:.      T
a330: 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64  cl_ListObjAppend
a340: 45 6c 65 6d 65 6e 74 28 69 2c 70 58 2c 54 63 6c  Element(i,pX,Tcl
a350: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 55  _NewStringObj("U
a360: 54 46 2d 31 36 42 45 22 2c 2d 31 29 29 3b 0a 20  TF-16BE",-1));. 
a370: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
a380: 64 65 66 61 75 6c 74 3a 0a 20 20 20 20 20 20 61  default:.      a
a390: 73 73 65 72 74 28 30 29 3b 0a 20 20 7d 0a 0a 20  ssert(0);.  }.. 
a3a0: 20 70 56 61 6c 20 3d 20 73 71 6c 69 74 65 33 56   pVal = sqlite3V
a3b0: 61 6c 75 65 4e 65 77 28 29 3b 0a 20 20 73 71 6c  alueNew();.  sql
a3c0: 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28  ite3ValueSetStr(
a3d0: 70 56 61 6c 2c 20 6e 41 2c 20 7a 41 2c 20 65 6e  pVal, nA, zA, en
a3e0: 63 69 6e 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  cin, SQLITE_STAT
a3f0: 49 43 29 3b 0a 20 20 6e 20 3d 20 73 71 6c 69 74  IC);.  n = sqlit
a400: 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 70  e3_value_bytes(p
a410: 56 61 6c 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74  Val);.  Tcl_List
a420: 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  ObjAppendElement
a430: 28 69 2c 70 58 2c 0a 20 20 20 20 20 20 54 63 6c  (i,pX,.      Tcl
a440: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 28 63  _NewStringObj((c
a450: 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c  har*)sqlite3_val
a460: 75 65 5f 74 65 78 74 28 70 56 61 6c 29 2c 6e 29  ue_text(pVal),n)
a470: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75  );.  sqlite3Valu
a480: 65 53 65 74 53 74 72 28 70 56 61 6c 2c 20 6e 42  eSetStr(pVal, nB
a490: 2c 20 7a 42 2c 20 65 6e 63 69 6e 2c 20 53 51 4c  , zB, encin, SQL
a4a0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 6e  ITE_STATIC);.  n
a4b0: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
a4c0: 5f 62 79 74 65 73 28 70 56 61 6c 29 3b 0a 20 20  _bytes(pVal);.  
a4d0: 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e  Tcl_ListObjAppen
a4e0: 64 45 6c 65 6d 65 6e 74 28 69 2c 70 58 2c 0a 20  dElement(i,pX,. 
a4f0: 20 20 20 20 20 54 63 6c 5f 4e 65 77 53 74 72 69       Tcl_NewStri
a500: 6e 67 4f 62 6a 28 28 63 68 61 72 2a 29 73 71 6c  ngObj((char*)sql
a510: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
a520: 70 56 61 6c 29 2c 6e 29 29 3b 0a 20 20 73 71 6c  pVal),n));.  sql
a530: 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 70 56  ite3ValueFree(pV
a540: 61 6c 29 3b 0a 0a 20 20 54 63 6c 5f 45 76 61 6c  al);..  Tcl_Eval
a550: 4f 62 6a 45 78 28 69 2c 20 70 58 2c 20 30 29 3b  ObjEx(i, pX, 0);
a560: 0a 20 20 54 63 6c 5f 44 65 63 72 52 65 66 43 6f  .  Tcl_DecrRefCo
a570: 75 6e 74 28 70 58 29 3b 0a 20 20 54 63 6c 5f 47  unt(pX);.  Tcl_G
a580: 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 2c 20  etIntFromObj(i, 
a590: 54 63 6c 5f 47 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_GetObjResult
a5a0: 28 69 29 2c 20 26 72 65 73 29 3b 0a 20 20 72 65  (i), &res);.  re
a5b0: 74 75 72 6e 20 72 65 73 3b 0a 7d 0a 73 74 61 74  turn res;.}.stat
a5c0: 69 63 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c 6c  ic int test_coll
a5d0: 61 74 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  ate(.  void * cl
a5e0: 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
a5f0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
a600: 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
a610: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
a620: 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
a630: 20 2a 64 62 3b 0a 20 20 69 6e 74 20 76 61 6c 3b   *db;.  int val;
a640: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
a650: 20 2a 70 56 61 6c 3b 0a 20 20 69 6e 74 20 72 63   *pVal;.  int rc
a660: 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 35  ;..  if( objc!=5
a670: 20 29 20 67 6f 74 6f 20 62 61 64 5f 61 72 67 73   ) goto bad_args
a680: 3b 0a 20 20 70 54 65 73 74 43 6f 6c 6c 61 74 65  ;.  pTestCollate
a690: 49 6e 74 65 72 70 20 3d 20 69 6e 74 65 72 70 3b  Interp = interp;
a6a0: 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e  .  if( getDbPoin
a6b0: 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
a6c0: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
a6d0: 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74 75 72  ]), &db) ) retur
a6e0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
a6f0: 69 66 28 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f  if( TCL_OK!=Tcl_
a700: 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62  GetBooleanFromOb
a710: 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32  j(interp, objv[2
a720: 5d 2c 20 26 76 61 6c 29 20 29 20 72 65 74 75 72  ], &val) ) retur
a730: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72  n TCL_ERROR;.  r
a740: 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61  c = sqlite3_crea
a750: 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c  te_collation(db,
a760: 20 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22 2c   "test_collate",
a770: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 0a 20   SQLITE_UTF8, . 
a780: 20 20 20 20 20 20 20 20 20 28 76 6f 69 64 20 2a           (void *
a790: 29 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 76 61  )SQLITE_UTF8, va
a7a0: 6c 3f 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 66  l?test_collate_f
a7b0: 75 6e 63 3a 30 29 3b 0a 20 20 69 66 28 20 72 63  unc:0);.  if( rc
a7c0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
a7d0: 20 20 20 69 66 28 20 54 43 4c 5f 4f 4b 21 3d 54     if( TCL_OK!=T
a7e0: 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f  cl_GetBooleanFro
a7f0: 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
a800: 76 5b 33 5d 2c 20 26 76 61 6c 29 20 29 20 72 65  v[3], &val) ) re
a810: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
a820: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
a830: 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f  _create_collatio
a840: 6e 28 64 62 2c 20 22 74 65 73 74 5f 63 6f 6c 6c  n(db, "test_coll
a850: 61 74 65 22 2c 20 53 51 4c 49 54 45 5f 55 54 46  ate", SQLITE_UTF
a860: 31 36 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20  16LE, .         
a870: 20 20 20 28 76 6f 69 64 20 2a 29 53 51 4c 49 54     (void *)SQLIT
a880: 45 5f 55 54 46 31 36 4c 45 2c 20 76 61 6c 3f 74  E_UTF16LE, val?t
a890: 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 66 75 6e 63  est_collate_func
a8a0: 3a 30 29 3b 0a 20 20 20 20 69 66 28 20 54 43 4c  :0);.    if( TCL
a8b0: 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c  _OK!=Tcl_GetBool
a8c0: 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  eanFromObj(inter
a8d0: 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 26 76 61 6c  p, objv[4], &val
a8e0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
a8f0: 52 52 4f 52 3b 0a 0a 23 69 66 64 65 66 20 53 51  RROR;..#ifdef SQ
a900: 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20  LITE_MEMDEBUG.  
a910: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69 4d    if( sqlite3_iM
a920: 61 6c 6c 6f 63 46 61 69 6c 3e 30 20 29 7b 0a 20  allocFail>0 ){. 
a930: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 4d 61       sqlite3_iMa
a940: 6c 6c 6f 63 46 61 69 6c 2b 2b 3b 0a 20 20 20 20  llocFail++;.    
a950: 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 70 56 61  }.#endif.    pVa
a960: 6c 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65  l = sqlite3Value
a970: 4e 65 77 28 29 3b 0a 20 20 20 20 73 71 6c 69 74  New();.    sqlit
a980: 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 70 56  e3ValueSetStr(pV
a990: 61 6c 2c 20 2d 31 2c 20 22 74 65 73 74 5f 63 6f  al, -1, "test_co
a9a0: 6c 6c 61 74 65 22 2c 20 53 51 4c 49 54 45 5f 55  llate", SQLITE_U
a9b0: 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  TF8, SQLITE_STAT
a9c0: 49 43 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  IC);.    rc = sq
a9d0: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c  lite3_create_col
a9e0: 6c 61 74 69 6f 6e 31 36 28 64 62 2c 20 0a 20 20  lation16(db, .  
a9f0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
aa00: 61 6c 75 65 54 65 78 74 28 70 56 61 6c 2c 20 53  alueText(pVal, S
aa10: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
aa20: 45 29 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36  E), SQLITE_UTF16
aa30: 42 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 28  BE, .          (
aa40: 76 6f 69 64 20 2a 29 53 51 4c 49 54 45 5f 55 54  void *)SQLITE_UT
aa50: 46 31 36 42 45 2c 20 76 61 6c 3f 74 65 73 74 5f  F16BE, val?test_
aa60: 63 6f 6c 6c 61 74 65 5f 66 75 6e 63 3a 30 29 3b  collate_func:0);
aa70: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75  .    sqlite3Valu
aa80: 65 46 72 65 65 28 70 56 61 6c 29 3b 0a 20 20 7d  eFree(pVal);.  }
aa90: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65  .  if( sqlite3Te
aaa0: 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70  stErrCode(interp
aab0: 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65 74 75  , db, rc) ) retu
aac0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
aad0: 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
aae0: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f  E_OK ){.    Tcl_
aaf0: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
ab00: 65 72 70 2c 20 73 71 6c 69 74 65 33 54 65 73 74  erp, sqlite3Test
ab10: 45 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 30  ErrorName(rc), 0
ab20: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
ab30: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72  L_ERROR;.  }.  r
ab40: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 0a 62  eturn TCL_OK;..b
ab50: 61 64 5f 61 72 67 73 3a 0a 20 20 54 63 6c 5f 41  ad_args:.  Tcl_A
ab60: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
ab70: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
ab80: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
ab90: 2c 0a 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  ,.      Tcl_GetS
aba0: 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a  tringFromObj(obj
abb0: 76 5b 30 5d 2c 20 30 29 2c 20 22 20 3c 44 42 3e  v[0], 0), " <DB>
abc0: 20 3c 75 74 66 38 3e 20 3c 75 74 66 31 36 6c 65   <utf8> <utf16le
abd0: 3e 20 3c 75 74 66 31 36 62 65 3e 22 2c 20 30 29  > <utf16be>", 0)
abe0: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ;.  return TCL_E
abf0: 52 52 4f 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57  RROR;.}../*.** W
ac00: 68 65 6e 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f  hen the collatio
ac10: 6e 20 6e 65 65 64 65 64 20 63 61 6c 6c 62 61 63  n needed callbac
ac20: 6b 20 69 73 20 69 6e 76 6f 6b 65 64 2c 20 72 65  k is invoked, re
ac30: 63 6f 72 64 20 74 68 65 20 6e 61 6d 65 20 6f 66  cord the name of
ac40: 20 0a 2a 2a 20 74 68 65 20 72 65 71 75 65 73 74   .** the request
ac50: 65 64 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  ed collating fun
ac60: 63 74 69 6f 6e 20 68 65 72 65 2e 20 20 54 68 65  ction here.  The
ac70: 20 72 65 63 6f 72 64 65 64 20 6e 61 6d 65 20 69   recorded name i
ac80: 73 20 6c 69 6e 6b 65 64 0a 2a 2a 20 74 6f 20 61  s linked.** to a
ac90: 20 54 43 4c 20 76 61 72 69 61 62 6c 65 20 61 6e   TCL variable an
aca0: 64 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73  d used to make s
acb0: 75 72 65 20 74 68 61 74 20 74 68 65 20 72 65 71  ure that the req
acc0: 75 65 73 74 65 64 20 63 6f 6c 6c 61 74 69 6f 6e  uested collation
acd0: 0a 2a 2a 20 6e 61 6d 65 20 69 73 20 63 6f 72 72  .** name is corr
ace0: 65 63 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63  ect..*/.static c
acf0: 68 61 72 20 7a 4e 65 65 64 65 64 43 6f 6c 6c 61  har zNeededColla
ad00: 74 69 6f 6e 5b 32 30 30 5d 3b 0a 73 74 61 74 69  tion[200];.stati
ad10: 63 20 63 68 61 72 20 2a 70 7a 4e 65 65 64 65 64  c char *pzNeeded
ad20: 43 6f 6c 6c 61 74 69 6f 6e 20 3d 20 7a 4e 65 65  Collation = zNee
ad30: 64 65 64 43 6f 6c 6c 61 74 69 6f 6e 3b 0a 0a 0a  dedCollation;...
ad40: 2f 2a 0a 2a 2a 20 43 61 6c 6c 65 64 20 77 68 65  /*.** Called whe
ad50: 6e 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  n a collating se
ad60: 71 75 65 6e 63 65 20 69 73 20 6e 65 65 64 65 64  quence is needed
ad70: 2e 20 20 52 65 67 69 73 74 65 72 65 64 20 75 73  .  Registered us
ad80: 69 6e 67 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63  ing.** sqlite3_c
ad90: 6f 6c 6c 61 74 69 6f 6e 5f 6e 65 65 64 65 64 31  ollation_needed1
ada0: 36 28 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  6()..*/.static v
adb0: 6f 69 64 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65  oid test_collate
adc0: 5f 6e 65 65 64 65 64 5f 63 62 28 0a 20 20 76 6f  _needed_cb(.  vo
add0: 69 64 20 2a 70 43 74 78 2c 20 0a 20 20 73 71 6c  id *pCtx, .  sql
ade0: 69 74 65 33 20 2a 64 62 2c 0a 20 20 69 6e 74 20  ite3 *db,.  int 
adf0: 65 54 65 78 74 52 65 70 2c 0a 20 20 63 6f 6e 73  eTextRep,.  cons
ae00: 74 20 76 6f 69 64 20 2a 70 4e 61 6d 65 0a 29 7b  t void *pName.){
ae10: 0a 20 20 69 6e 74 20 65 6e 63 20 3d 20 45 4e 43  .  int enc = ENC
ae20: 28 64 62 29 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  (db);.  int i;. 
ae30: 20 63 68 61 72 20 2a 7a 3b 0a 20 20 66 6f 72 28   char *z;.  for(
ae40: 7a 20 3d 20 28 63 68 61 72 2a 29 70 4e 61 6d 65  z = (char*)pName
ae50: 2c 20 69 3d 30 3b 20 2a 7a 20 7c 7c 20 7a 5b 31  , i=0; *z || z[1
ae60: 5d 3b 20 7a 2b 2b 29 7b 0a 20 20 20 20 69 66 28  ]; z++){.    if(
ae70: 20 2a 7a 20 29 20 7a 4e 65 65 64 65 64 43 6f 6c   *z ) zNeededCol
ae80: 6c 61 74 69 6f 6e 5b 69 2b 2b 5d 20 3d 20 2a 7a  lation[i++] = *z
ae90: 3b 0a 20 20 7d 0a 20 20 7a 4e 65 65 64 65 64 43  ;.  }.  zNeededC
aea0: 6f 6c 6c 61 74 69 6f 6e 5b 69 5d 20 3d 20 30 3b  ollation[i] = 0;
aeb0: 0a 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  .  sqlite3_creat
aec0: 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 0a 20 20 20  e_collation(.   
aed0: 20 20 20 64 62 2c 20 22 74 65 73 74 5f 63 6f 6c     db, "test_col
aee0: 6c 61 74 65 22 2c 20 45 4e 43 28 64 62 29 2c 20  late", ENC(db), 
aef0: 28 76 6f 69 64 20 2a 29 65 6e 63 2c 20 74 65 73  (void *)enc, tes
af00: 74 5f 63 6f 6c 6c 61 74 65 5f 66 75 6e 63 29 3b  t_collate_func);
af10: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
af20: 20 61 64 64 5f 74 65 73 74 5f 63 6f 6c 6c 61 74   add_test_collat
af30: 65 5f 6e 65 65 64 65 64 20 44 42 0a 2a 2f 0a 73  e_needed DB.*/.s
af40: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63  tatic int test_c
af50: 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64 28 0a 20  ollate_needed(. 
af60: 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
af70: 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
af80: 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
af90: 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
afa0: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
afb0: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a  .  sqlite3 *db;.
afc0: 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28    int rc;..  if(
afd0: 20 6f 62 6a 63 21 3d 32 20 29 20 67 6f 74 6f 20   objc!=2 ) goto 
afe0: 62 61 64 5f 61 72 67 73 3b 0a 20 20 69 66 28 20  bad_args;.  if( 
aff0: 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
b000: 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
b010: 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62  ng(objv[1]), &db
b020: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
b030: 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c  RROR;.  rc = sql
b040: 69 74 65 33 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 6e  ite3_collation_n
b050: 65 65 64 65 64 31 36 28 64 62 2c 20 30 2c 20 74  eeded16(db, 0, t
b060: 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65 64  est_collate_need
b070: 65 64 5f 63 62 29 3b 0a 20 20 7a 4e 65 65 64 65  ed_cb);.  zNeede
b080: 64 43 6f 6c 6c 61 74 69 6f 6e 5b 30 5d 20 3d 20  dCollation[0] = 
b090: 30 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  0;.  if( sqlite3
b0a0: 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65  TestErrCode(inte
b0b0: 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65  rp, db, rc) ) re
b0c0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
b0d0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
b0e0: 0a 0a 62 61 64 5f 61 72 67 73 3a 0a 20 20 54 63  ..bad_args:.  Tc
b0f0: 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69  l_WrongNumArgs(i
b100: 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20  nterp, 1, objv, 
b110: 22 44 42 22 29 3b 0a 20 20 72 65 74 75 72 6e 20  "DB");.  return 
b120: 54 43 4c 5f 45 52 52 4f 52 3b 0a 7d 0a 23 65 6e  TCL_ERROR;.}.#en
b130: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
b140: 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 2f 2a 0a  IT_UTF16 */../*.
b150: 2a 2a 20 55 73 61 67 65 3a 20 61 64 64 5f 74 65  ** Usage: add_te
b160: 73 74 5f 66 75 6e 63 74 69 6f 6e 20 3c 64 62 20  st_function <db 
b170: 70 74 72 3e 20 3c 75 74 66 38 3e 20 3c 75 74 66  ptr> <utf8> <utf
b180: 31 36 6c 65 3e 20 3c 75 74 66 31 36 62 65 3e 0a  16le> <utf16be>.
b190: 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74  **.** This funct
b1a0: 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 74  ion is used to t
b1b0: 65 73 74 20 74 68 61 74 20 53 51 4c 69 74 65 20  est that SQLite 
b1c0: 73 65 6c 65 63 74 73 20 74 68 65 20 63 6f 72 72  selects the corr
b1d0: 65 63 74 20 75 73 65 72 0a 2a 2a 20 66 75 6e 63  ect user.** func
b1e0: 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 77 68  tion callback wh
b1f0: 65 6e 20 6d 75 6c 74 69 70 6c 65 20 76 65 72 73  en multiple vers
b200: 69 6f 6e 73 20 28 66 6f 72 20 64 69 66 66 65 72  ions (for differ
b210: 65 6e 74 20 74 65 78 74 20 65 6e 63 6f 64 69 6e  ent text encodin
b220: 67 73 29 0a 2a 2a 20 61 72 65 20 61 76 61 69 6c  gs).** are avail
b230: 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c  able..**.** Call
b240: 69 6e 67 20 74 68 69 73 20 72 6f 75 74 69 6e 65  ing this routine
b250: 20 72 65 67 69 73 74 65 72 73 20 75 70 20 74 6f   registers up to
b260: 20 74 68 72 65 65 20 76 65 72 73 69 6f 6e 73 20   three versions 
b270: 6f 66 20 74 68 65 20 75 73 65 72 20 66 75 6e 63  of the user func
b280: 74 69 6f 6e 0a 2a 2a 20 22 74 65 73 74 5f 66 75  tion.** "test_fu
b290: 6e 63 74 69 6f 6e 22 20 77 69 74 68 20 64 61 74  nction" with dat
b2a0: 61 62 61 73 65 20 68 61 6e 64 6c 65 20 3c 64 62  abase handle <db
b2b0: 3e 2e 20 20 49 66 20 74 68 65 20 73 65 63 6f 6e  >.  If the secon
b2c0: 64 20 61 72 67 75 6d 65 6e 74 20 69 73 0a 2a 2a  d argument is.**
b2d0: 20 74 72 75 65 2c 20 74 68 65 6e 20 61 20 76 65   true, then a ve
b2e0: 72 73 69 6f 6e 20 6f 66 20 74 65 73 74 5f 66 75  rsion of test_fu
b2f0: 6e 63 74 69 6f 6e 20 69 73 20 72 65 67 69 73 74  nction is regist
b300: 65 72 65 64 20 66 6f 72 20 55 54 46 2d 38 2c 20  ered for UTF-8, 
b310: 69 66 20 74 68 65 0a 2a 2a 20 74 68 69 72 64 20  if the.** third 
b320: 69 73 20 74 72 75 65 2c 20 61 20 76 65 72 73 69  is true, a versi
b330: 6f 6e 20 69 73 20 72 65 67 69 73 74 65 72 65 64  on is registered
b340: 20 66 6f 72 20 55 54 46 2d 31 36 6c 65 2c 20 69   for UTF-16le, i
b350: 66 20 74 68 65 20 66 6f 75 72 74 68 20 69 73 0a  f the fourth is.
b360: 2a 2a 20 74 72 75 65 2c 20 61 20 55 54 46 2d 31  ** true, a UTF-1
b370: 36 62 65 20 76 65 72 73 69 6f 6e 20 69 73 20 61  6be version is a
b380: 76 61 69 6c 61 62 6c 65 2e 20 20 50 72 65 76 69  vailable.  Previ
b390: 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a  ous versions of.
b3a0: 2a 2a 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e  ** test_function
b3b0: 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 2a 2a   are deleted..**
b3c0: 0a 2a 2a 20 54 68 65 20 75 73 65 72 20 66 75 6e  .** The user fun
b3d0: 63 74 69 6f 6e 20 69 73 20 69 6d 70 6c 65 6d 65  ction is impleme
b3e0: 6e 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20  nted by calling 
b3f0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 54 43  the following TC
b400: 4c 20 73 63 72 69 70 74 3a 0a 2a 2a 0a 2a 2a 20  L script:.**.** 
b410: 20 20 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e    "test_function
b420: 20 3c 65 6e 63 3e 20 3c 61 72 67 3e 22 0a 2a 2a   <enc> <arg>".**
b430: 0a 2a 2a 20 57 68 65 72 65 20 3c 65 6e 63 3e 20  .** Where <enc> 
b440: 69 73 20 6f 6e 65 20 6f 66 20 55 54 46 2d 38 2c  is one of UTF-8,
b450: 20 55 54 46 2d 31 36 4c 45 20 6f 72 20 55 54 46   UTF-16LE or UTF
b460: 31 36 42 45 2c 20 61 6e 64 20 3c 61 72 67 3e 20  16BE, and <arg> 
b470: 69 73 20 74 68 65 0a 2a 2a 20 73 69 6e 67 6c 65  is the.** single
b480: 20 61 72 67 75 6d 65 6e 74 20 70 61 73 73 65 64   argument passed
b490: 20 74 6f 20 74 68 65 20 53 51 4c 20 66 75 6e 63   to the SQL func
b4a0: 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65 20  tion. The value 
b4b0: 72 65 74 75 72 6e 65 64 20 62 79 0a 2a 2a 20 74  returned by.** t
b4c0: 68 65 20 54 43 4c 20 73 63 72 69 70 74 20 69 73  he TCL script is
b4d0: 20 75 73 65 64 20 61 73 20 74 68 65 20 72 65 74   used as the ret
b4e0: 75 72 6e 20 76 61 6c 75 65 20 6f 66 20 74 68 65  urn value of the
b4f0: 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2e 20 49   SQL function. I
b500: 74 0a 2a 2a 20 69 73 20 70 61 73 73 65 64 20 74  t.** is passed t
b510: 6f 20 53 51 4c 69 74 65 20 75 73 69 6e 67 20 55  o SQLite using U
b520: 54 46 2d 31 36 42 45 20 66 6f 72 20 61 20 55 54  TF-16BE for a UT
b530: 46 2d 38 20 74 65 73 74 5f 66 75 6e 63 74 69 6f  F-8 test_functio
b540: 6e 28 29 2c 20 55 54 46 2d 38 0a 2a 2a 20 66 6f  n(), UTF-8.** fo
b550: 72 20 61 20 55 54 46 2d 31 36 4c 45 20 74 65 73  r a UTF-16LE tes
b560: 74 5f 66 75 6e 63 74 69 6f 6e 28 29 2c 20 61 6e  t_function(), an
b570: 64 20 55 54 46 2d 31 36 4c 45 20 66 6f 72 20 61  d UTF-16LE for a
b580: 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  n implementation
b590: 20 74 68 61 74 0a 2a 2a 20 70 72 65 66 65 72 73   that.** prefers
b5a0: 20 55 54 46 2d 31 36 42 45 2e 0a 2a 2f 0a 23 69   UTF-16BE..*/.#i
b5b0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
b5c0: 54 5f 55 54 46 31 36 0a 73 74 61 74 69 63 20 76  T_UTF16.static v
b5d0: 6f 69 64 20 74 65 73 74 5f 66 75 6e 63 74 69 6f  oid test_functio
b5e0: 6e 5f 75 74 66 38 28 0a 20 20 73 71 6c 69 74 65  n_utf8(.  sqlite
b5f0: 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c  3_context *pCtx,
b600: 20 0a 20 20 69 6e 74 20 6e 41 72 67 2c 0a 20 20   .  int nArg,.  
b610: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
b620: 61 72 67 76 0a 29 7b 0a 20 20 54 63 6c 5f 49 6e  argv.){.  Tcl_In
b630: 74 65 72 70 20 2a 69 6e 74 65 72 70 3b 0a 20 20  terp *interp;.  
b640: 54 63 6c 5f 4f 62 6a 20 2a 70 58 3b 0a 20 20 73  Tcl_Obj *pX;.  s
b650: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56  qlite3_value *pV
b660: 61 6c 3b 0a 20 20 69 6e 74 65 72 70 20 3d 20 28  al;.  interp = (
b670: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 29 73 71 6c  Tcl_Interp *)sql
b680: 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 70  ite3_user_data(p
b690: 43 74 78 29 3b 0a 20 20 70 58 20 3d 20 54 63 6c  Ctx);.  pX = Tcl
b6a0: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 74  _NewStringObj("t
b6b0: 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 2d  est_function", -
b6c0: 31 29 3b 0a 20 20 54 63 6c 5f 49 6e 63 72 52 65  1);.  Tcl_IncrRe
b6d0: 66 43 6f 75 6e 74 28 70 58 29 3b 0a 20 20 54 63  fCount(pX);.  Tc
b6e0: 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45  l_ListObjAppendE
b6f0: 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 70  lement(interp, p
b700: 58 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  X, Tcl_NewString
b710: 4f 62 6a 28 22 55 54 46 2d 38 22 2c 20 2d 31 29  Obj("UTF-8", -1)
b720: 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a  );.  Tcl_ListObj
b730: 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e  AppendElement(in
b740: 74 65 72 70 2c 20 70 58 2c 20 0a 20 20 20 20 20  terp, pX, .     
b750: 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
b760: 6a 28 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33  j((char*)sqlite3
b770: 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67 76  _value_text(argv
b780: 5b 30 5d 29 2c 20 2d 31 29 29 3b 0a 20 20 54 63  [0]), -1));.  Tc
b790: 6c 5f 45 76 61 6c 4f 62 6a 45 78 28 69 6e 74 65  l_EvalObjEx(inte
b7a0: 72 70 2c 20 70 58 2c 20 30 29 3b 0a 20 20 54 63  rp, pX, 0);.  Tc
b7b0: 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28 70  l_DecrRefCount(p
b7c0: 58 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65  X);.  sqlite3_re
b7d0: 73 75 6c 74 5f 74 65 78 74 28 70 43 74 78 2c 20  sult_text(pCtx, 
b7e0: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 52 65 73  Tcl_GetStringRes
b7f0: 75 6c 74 28 69 6e 74 65 72 70 29 2c 20 2d 31 2c  ult(interp), -1,
b800: 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
b810: 54 29 3b 0a 20 20 70 56 61 6c 20 3d 20 73 71 6c  T);.  pVal = sql
b820: 69 74 65 33 56 61 6c 75 65 4e 65 77 28 29 3b 0a  ite3ValueNew();.
b830: 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65    sqlite3ValueSe
b840: 74 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c 20 54  tStr(pVal, -1, T
b850: 63 6c 5f 47 65 74 53 74 72 69 6e 67 52 65 73 75  cl_GetStringResu
b860: 6c 74 28 69 6e 74 65 72 70 29 2c 20 0a 20 20 20  lt(interp), .   
b870: 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20     SQLITE_UTF8, 
b880: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
b890: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
b8a0: 5f 74 65 78 74 31 36 62 65 28 70 43 74 78 2c 20  _text16be(pCtx, 
b8b0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
b8c0: 78 74 31 36 62 65 28 70 56 61 6c 29 2c 0a 20 20  xt16be(pVal),.  
b8d0: 20 20 20 20 2d 31 2c 20 53 51 4c 49 54 45 5f 54      -1, SQLITE_T
b8e0: 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 73 71 6c  RANSIENT);.  sql
b8f0: 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 70 56  ite3ValueFree(pV
b900: 61 6c 29 3b 0a 7d 0a 73 74 61 74 69 63 20 76 6f  al);.}.static vo
b910: 69 64 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e  id test_function
b920: 5f 75 74 66 31 36 6c 65 28 0a 20 20 73 71 6c 69  _utf16le(.  sqli
b930: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74  te3_context *pCt
b940: 78 2c 20 0a 20 20 69 6e 74 20 6e 41 72 67 2c 0a  x, .  int nArg,.
b950: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
b960: 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 54 63 6c 5f  **argv.){.  Tcl_
b970: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 3b 0a  Interp *interp;.
b980: 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 58 3b 0a 20    Tcl_Obj *pX;. 
b990: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
b9a0: 70 56 61 6c 3b 0a 20 20 69 6e 74 65 72 70 20 3d  pVal;.  interp =
b9b0: 20 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 29 73   (Tcl_Interp *)s
b9c0: 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
b9d0: 28 70 43 74 78 29 3b 0a 20 20 70 58 20 3d 20 54  (pCtx);.  pX = T
b9e0: 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
b9f0: 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c  "test_function",
ba00: 20 2d 31 29 3b 0a 20 20 54 63 6c 5f 49 6e 63 72   -1);.  Tcl_Incr
ba10: 52 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a 20 20  RefCount(pX);.  
ba20: 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e  Tcl_ListObjAppen
ba30: 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c  dElement(interp,
ba40: 20 70 58 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69   pX, Tcl_NewStri
ba50: 6e 67 4f 62 6a 28 22 55 54 46 2d 31 36 4c 45 22  ngObj("UTF-16LE"
ba60: 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 4c 69  , -1));.  Tcl_Li
ba70: 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65  stObjAppendEleme
ba80: 6e 74 28 69 6e 74 65 72 70 2c 20 70 58 2c 20 0a  nt(interp, pX, .
ba90: 20 20 20 20 20 20 54 63 6c 5f 4e 65 77 53 74 72        Tcl_NewStr
baa0: 69 6e 67 4f 62 6a 28 28 63 68 61 72 2a 29 73 71  ingObj((char*)sq
bab0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
bac0: 28 61 72 67 76 5b 30 5d 29 2c 20 2d 31 29 29 3b  (argv[0]), -1));
bad0: 0a 20 20 54 63 6c 5f 45 76 61 6c 4f 62 6a 45 78  .  Tcl_EvalObjEx
bae0: 28 69 6e 74 65 72 70 2c 20 70 58 2c 20 30 29 3b  (interp, pX, 0);
baf0: 0a 20 20 54 63 6c 5f 44 65 63 72 52 65 66 43 6f  .  Tcl_DecrRefCo
bb00: 75 6e 74 28 70 58 29 3b 0a 20 20 70 56 61 6c 20  unt(pX);.  pVal 
bb10: 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65  = sqlite3ValueNe
bb20: 77 28 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 61  w();.  sqlite3Va
bb30: 6c 75 65 53 65 74 53 74 72 28 70 56 61 6c 2c 20  lueSetStr(pVal, 
bb40: 2d 31 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  -1, Tcl_GetStrin
bb50: 67 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29 2c  gResult(interp),
bb60: 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 55   .      SQLITE_U
bb70: 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  TF8, SQLITE_STAT
bb80: 49 43 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72  IC);.  sqlite3_r
bb90: 65 73 75 6c 74 5f 74 65 78 74 28 70 43 74 78 2c  esult_text(pCtx,
bba0: 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76  (char*)sqlite3_v
bbb0: 61 6c 75 65 5f 74 65 78 74 28 70 56 61 6c 29 2c  alue_text(pVal),
bbc0: 2d 31 2c 53 51 4c 49 54 45 5f 54 52 41 4e 53 49  -1,SQLITE_TRANSI
bbd0: 45 4e 54 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  ENT);.  sqlite3V
bbe0: 61 6c 75 65 46 72 65 65 28 70 56 61 6c 29 3b 0a  alueFree(pVal);.
bbf0: 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74 65  }.static void te
bc00: 73 74 5f 66 75 6e 63 74 69 6f 6e 5f 75 74 66 31  st_function_utf1
bc10: 36 62 65 28 0a 20 20 73 71 6c 69 74 65 33 5f 63  6be(.  sqlite3_c
bc20: 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 0a 20  ontext *pCtx, . 
bc30: 20 69 6e 74 20 6e 41 72 67 2c 0a 20 20 73 71 6c   int nArg,.  sql
bc40: 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67  ite3_value **arg
bc50: 76 0a 29 7b 0a 20 20 54 63 6c 5f 49 6e 74 65 72  v.){.  Tcl_Inter
bc60: 70 20 2a 69 6e 74 65 72 70 3b 0a 20 20 54 63 6c  p *interp;.  Tcl
bc70: 5f 4f 62 6a 20 2a 70 58 3b 0a 20 20 73 71 6c 69  _Obj *pX;.  sqli
bc80: 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 3b  te3_value *pVal;
bc90: 0a 20 20 69 6e 74 65 72 70 20 3d 20 28 54 63 6c  .  interp = (Tcl
bca0: 5f 49 6e 74 65 72 70 20 2a 29 73 71 6c 69 74 65  _Interp *)sqlite
bcb0: 33 5f 75 73 65 72 5f 64 61 74 61 28 70 43 74 78  3_user_data(pCtx
bcc0: 29 3b 0a 20 20 70 58 20 3d 20 54 63 6c 5f 4e 65  );.  pX = Tcl_Ne
bcd0: 77 53 74 72 69 6e 67 4f 62 6a 28 22 74 65 73 74  wStringObj("test
bce0: 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 2d 31 29 3b  _function", -1);
bcf0: 0a 20 20 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f  .  Tcl_IncrRefCo
bd00: 75 6e 74 28 70 58 29 3b 0a 20 20 54 63 6c 5f 4c  unt(pX);.  Tcl_L
bd10: 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d  istObjAppendElem
bd20: 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 58 2c 20  ent(interp, pX, 
bd30: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
bd40: 28 22 55 54 46 2d 31 36 42 45 22 2c 20 2d 31 29  ("UTF-16BE", -1)
bd50: 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a  );.  Tcl_ListObj
bd60: 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e  AppendElement(in
bd70: 74 65 72 70 2c 20 70 58 2c 20 0a 20 20 20 20 20  terp, pX, .     
bd80: 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
bd90: 6a 28 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33  j((char*)sqlite3
bda0: 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67 76  _value_text(argv
bdb0: 5b 30 5d 29 2c 20 2d 31 29 29 3b 0a 20 20 54 63  [0]), -1));.  Tc
bdc0: 6c 5f 45 76 61 6c 4f 62 6a 45 78 28 69 6e 74 65  l_EvalObjEx(inte
bdd0: 72 70 2c 20 70 58 2c 20 30 29 3b 0a 20 20 54 63  rp, pX, 0);.  Tc
bde0: 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28 70  l_DecrRefCount(p
bdf0: 58 29 3b 0a 20 20 70 56 61 6c 20 3d 20 73 71 6c  X);.  pVal = sql
be00: 69 74 65 33 56 61 6c 75 65 4e 65 77 28 29 3b 0a  ite3ValueNew();.
be10: 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65    sqlite3ValueSe
be20: 74 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c 20 54  tStr(pVal, -1, T
be30: 63 6c 5f 47 65 74 53 74 72 69 6e 67 52 65 73 75  cl_GetStringResu
be40: 6c 74 28 69 6e 74 65 72 70 29 2c 20 0a 20 20 20  lt(interp), .   
be50: 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20     SQLITE_UTF8, 
be60: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
be70: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
be80: 5f 74 65 78 74 31 36 6c 65 28 70 43 74 78 2c 20  _text16le(pCtx, 
be90: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
bea0: 78 74 31 36 6c 65 28 70 56 61 6c 29 2c 0a 20 20  xt16le(pVal),.  
beb0: 20 20 20 20 2d 31 2c 20 53 51 4c 49 54 45 5f 54      -1, SQLITE_T
bec0: 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 73 71 6c  RANSIENT);.  sql
bed0: 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 70 56  ite3ValueFree(pV
bee0: 61 6c 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  al);.}.#endif /*
bef0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
bf00: 31 36 20 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  16 */.static int
bf10: 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 28 0a   test_function(.
bf20: 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
bf30: 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
bf40: 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
bf50: 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
bf60: 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
bf70: 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  {.#ifndef SQLITE
bf80: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 73 71  _OMIT_UTF16.  sq
bf90: 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74  lite3 *db;.  int
bfa0: 20 76 61 6c 3b 0a 0a 20 20 69 66 28 20 6f 62 6a   val;..  if( obj
bfb0: 63 21 3d 35 20 29 20 67 6f 74 6f 20 62 61 64 5f  c!=5 ) goto bad_
bfc0: 61 72 67 73 3b 0a 20 20 69 66 28 20 67 65 74 44  args;.  if( getD
bfd0: 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  bPointer(interp,
bfe0: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
bff0: 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20  bjv[1]), &db) ) 
c000: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
c010: 3b 0a 0a 20 20 69 66 28 20 54 43 4c 5f 4f 4b 21  ;..  if( TCL_OK!
c020: 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46  =Tcl_GetBooleanF
c030: 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
c040: 62 6a 76 5b 32 5d 2c 20 26 76 61 6c 29 20 29 20  bjv[2], &val) ) 
c050: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
c060: 3b 0a 20 20 69 66 28 20 76 61 6c 20 29 7b 0a 20  ;.  if( val ){. 
c070: 20 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74     sqlite3_creat
c080: 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22  e_function(db, "
c090: 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20  test_function", 
c0a0: 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  1, SQLITE_UTF8, 
c0b0: 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 70 2c  .        interp,
c0c0: 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 5f 75   test_function_u
c0d0: 74 66 38 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a  tf8, 0, 0);.  }.
c0e0: 20 20 69 66 28 20 54 43 4c 5f 4f 4b 21 3d 54 63    if( TCL_OK!=Tc
c0f0: 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d  l_GetBooleanFrom
c100: 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
c110: 5b 33 5d 2c 20 26 76 61 6c 29 20 29 20 72 65 74  [3], &val) ) ret
c120: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
c130: 20 69 66 28 20 76 61 6c 20 29 7b 0a 20 20 20 20   if( val ){.    
c140: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
c150: 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22 74 65 73  unction(db, "tes
c160: 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 31 2c 20  t_function", 1, 
c170: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 2c 20  SQLITE_UTF16LE, 
c180: 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 70 2c  .        interp,
c190: 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 5f 75   test_function_u
c1a0: 74 66 31 36 6c 65 2c 20 30 2c 20 30 29 3b 0a 20  tf16le, 0, 0);. 
c1b0: 20 7d 0a 20 20 69 66 28 20 54 43 4c 5f 4f 4b 21   }.  if( TCL_OK!
c1c0: 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46  =Tcl_GetBooleanF
c1d0: 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
c1e0: 62 6a 76 5b 34 5d 2c 20 26 76 61 6c 29 20 29 20  bjv[4], &val) ) 
c1f0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
c200: 3b 0a 20 20 69 66 28 20 76 61 6c 20 29 7b 0a 20  ;.  if( val ){. 
c210: 20 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74     sqlite3_creat
c220: 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22  e_function(db, "
c230: 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20  test_function", 
c240: 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42  1, SQLITE_UTF16B
c250: 45 2c 20 0a 20 20 20 20 20 20 20 20 69 6e 74 65  E, .        inte
c260: 72 70 2c 20 74 65 73 74 5f 66 75 6e 63 74 69 6f  rp, test_functio
c270: 6e 5f 75 74 66 31 36 62 65 2c 20 30 2c 20 30 29  n_utf16be, 0, 0)
c280: 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20  ;.  }..  return 
c290: 54 43 4c 5f 4f 4b 3b 0a 62 61 64 5f 61 72 67 73  TCL_OK;.bad_args
c2a0: 3a 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65  :.  Tcl_AppendRe
c2b0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
c2c0: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
c2d0: 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20  ld be \"",.     
c2e0: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72   Tcl_GetStringFr
c2f0: 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30  omObj(objv[0], 0
c300: 29 2c 20 22 20 3c 44 42 3e 20 3c 75 74 66 38 3e  ), " <DB> <utf8>
c310: 20 3c 75 74 66 31 36 6c 65 3e 20 3c 75 74 66 31   <utf16le> <utf1
c320: 36 62 65 3e 22 2c 20 30 29 3b 0a 23 65 6e 64 69  6be>", 0);.#endi
c330: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
c340: 5f 55 54 46 31 36 20 2a 2f 0a 20 20 72 65 74 75  _UTF16 */.  retu
c350: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 7d 0a  rn TCL_ERROR;.}.
c360: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20  ./*.** Usage:   
c370: 20 20 20 20 20 20 74 65 73 74 5f 65 72 72 73 74        test_errst
c380: 72 20 3c 65 72 72 20 63 6f 64 65 3e 0a 2a 2a 0a  r <err code>.**.
c390: 2a 2a 20 54 65 73 74 20 74 68 61 74 20 74 68 65  ** Test that the
c3a0: 20 65 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67   english languag
c3b0: 65 20 73 74 72 69 6e 67 20 65 71 75 69 76 61 6c  e string equival
c3c0: 65 6e 74 73 20 66 6f 72 20 73 71 6c 69 74 65 20  ents for sqlite 
c3d0: 65 72 72 6f 72 20 63 6f 64 65 73 0a 2a 2a 20 61  error codes.** a
c3e0: 72 65 20 73 61 6e 65 2e 20 54 68 65 20 70 61 72  re sane. The par
c3f0: 61 6d 65 74 65 72 20 69 73 20 61 6e 20 69 6e 74  ameter is an int
c400: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 69 6e  eger representin
c410: 67 20 61 6e 20 73 71 6c 69 74 65 20 65 72 72 6f  g an sqlite erro
c420: 72 20 63 6f 64 65 2e 0a 2a 2a 20 54 68 65 20 72  r code..** The r
c430: 65 73 75 6c 74 20 69 73 20 61 20 6c 69 73 74 20  esult is a list 
c440: 6f 66 20 74 77 6f 20 65 6c 65 6d 65 6e 74 73 2c  of two elements,
c450: 20 74 68 65 20 73 74 72 69 6e 67 20 72 65 70 72   the string repr
c460: 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
c470: 65 0a 2a 2a 20 65 72 72 6f 72 20 63 6f 64 65 20  e.** error code 
c480: 61 6e 64 20 74 68 65 20 65 6e 67 6c 69 73 68 20  and the english 
c490: 6c 61 6e 67 75 61 67 65 20 65 78 70 6c 61 6e 61  language explana
c4a0: 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  tion..*/.static 
c4b0: 69 6e 74 20 74 65 73 74 5f 65 72 72 73 74 72 28  int test_errstr(
c4c0: 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
c4d0: 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
c4e0: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
c4f0: 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
c500: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
c510: 29 7b 0a 20 20 63 68 61 72 20 2a 7a 43 6f 64 65  ){.  char *zCode
c520: 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 66 28  ;.  int i;.  if(
c530: 20 6f 62 6a 63 21 3d 31 20 29 7b 0a 20 20 20 20   objc!=1 ){.    
c540: 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73  Tcl_WrongNumArgs
c550: 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76  (interp, 1, objv
c560: 2c 20 22 3c 65 72 72 6f 72 20 63 6f 64 65 3e 22  , "<error code>"
c570: 29 3b 0a 20 20 7d 0a 0a 20 20 7a 43 6f 64 65 20  );.  }..  zCode 
c580: 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  = Tcl_GetString(
c590: 6f 62 6a 76 5b 31 5d 29 3b 0a 20 20 66 6f 72 28  objv[1]);.  for(
c5a0: 69 3d 30 3b 20 69 3c 32 30 30 3b 20 69 2b 2b 29  i=0; i<200; i++)
c5b0: 7b 0a 20 20 20 20 69 66 28 20 30 3d 3d 73 74 72  {.    if( 0==str
c5c0: 63 6d 70 28 65 72 72 6f 72 4e 61 6d 65 28 69 29  cmp(errorName(i)
c5d0: 2c 20 7a 43 6f 64 65 29 20 29 20 62 72 65 61 6b  , zCode) ) break
c5e0: 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 53 65 74 52  ;.  }.  Tcl_SetR
c5f0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63  esult(interp, (c
c600: 68 61 72 20 2a 29 73 71 6c 69 74 65 33 45 72 72  har *)sqlite3Err
c610: 53 74 72 28 69 29 2c 20 30 29 3b 0a 20 20 72 65  Str(i), 0);.  re
c620: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
c630: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 20  /*.** Usage:    
c640: 62 72 65 61 6b 70 6f 69 6e 74 0a 2a 2a 0a 2a 2a  breakpoint.**.**
c650: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 65 78   This routine ex
c660: 69 73 74 73 20 66 6f 72 20 6f 6e 65 20 70 75 72  ists for one pur
c670: 70 6f 73 65 20 2d 20 74 6f 20 70 72 6f 76 69 64  pose - to provid
c680: 65 20 61 20 70 6c 61 63 65 20 74 6f 20 70 75 74  e a place to put
c690: 20 61 0a 2a 2a 20 62 72 65 61 6b 70 6f 69 6e 74   a.** breakpoint
c6a0: 20 77 69 74 68 20 47 44 42 20 74 68 61 74 20 63   with GDB that c
c6b0: 61 6e 20 62 65 20 74 72 69 67 67 65 72 65 64 20  an be triggered 
c6c0: 75 73 69 6e 67 20 54 43 4c 20 63 6f 64 65 2e 20  using TCL code. 
c6d0: 20 54 68 65 20 75 73 65 0a 2a 2a 20 66 6f 72 20   The use.** for 
c6e0: 74 68 69 73 20 69 73 20 77 68 65 6e 20 61 20 70  this is when a p
c6f0: 61 72 74 69 63 75 6c 61 72 20 74 65 73 74 20 66  articular test f
c700: 61 69 6c 73 20 6f 6e 20 28 73 61 79 29 20 74 68  ails on (say) th
c710: 65 20 31 34 38 35 74 68 20 69 74 65 72 61 74 69  e 1485th iterati
c720: 6f 6e 2e 0a 2a 2a 20 49 6e 20 74 68 65 20 54 43  on..** In the TC
c730: 4c 20 74 65 73 74 20 73 63 72 69 70 74 2c 20 77  L test script, w
c740: 65 20 63 61 6e 20 61 64 64 20 63 6f 64 65 20 6c  e can add code l
c750: 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20  ike this:.**.** 
c760: 20 20 20 20 69 66 20 7b 24 69 3d 3d 31 34 38 35      if {$i==1485
c770: 7d 20 62 72 65 61 6b 70 6f 69 6e 74 0a 2a 2a 0a  } breakpoint.**.
c780: 2a 2a 20 54 68 65 6e 20 72 75 6e 20 74 65 73 74  ** Then run test
c790: 66 69 78 74 75 72 65 20 69 6e 20 74 68 65 20 64  fixture in the d
c7a0: 65 62 75 67 67 65 72 20 61 6e 64 20 77 61 69 74  ebugger and wait
c7b0: 20 66 6f 72 20 74 68 65 20 62 72 65 61 6b 70 6f   for the breakpo
c7c0: 69 6e 74 20 74 6f 0a 2a 2a 20 66 69 72 65 2e 20  int to.** fire. 
c7d0: 20 54 68 65 6e 20 61 64 64 69 74 69 6f 6e 61 6c   Then additional
c7e0: 20 62 72 65 61 6b 70 6f 69 6e 74 73 20 63 61 6e   breakpoints can
c7f0: 20 62 65 20 73 65 74 20 74 6f 20 74 72 61 63 65   be set to trace
c800: 20 64 6f 77 6e 20 74 68 65 20 62 75 67 2e 0a 2a   down the bug..*
c810: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
c820: 74 5f 62 72 65 61 6b 70 6f 69 6e 74 28 0a 20 20  t_breakpoint(.  
c830: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
c840: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
c850: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
c860: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
c870: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
c880: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
c890: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
c8a0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
c8b0: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
c8c0: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
c8d0: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
c8e0: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
c8f0: 20 2a 2f 0a 29 7b 0a 20 20 72 65 74 75 72 6e 20   */.){.  return 
c900: 54 43 4c 5f 4f 4b 3b 20 20 20 20 20 20 20 20 20  TCL_OK;         
c910: 2f 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 20 2a 2f  /* Do nothing */
c920: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
c930: 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f     sqlite3_bind_
c940: 69 6e 74 20 20 53 54 4d 54 20 4e 20 56 41 4c 55  int  STMT N VALU
c950: 45 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65  E.**.** Test the
c960: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e   sqlite3_bind_in
c970: 74 20 69 6e 74 65 72 66 61 63 65 2e 20 20 53 54  t interface.  ST
c980: 4d 54 20 69 73 20 61 20 70 72 65 70 61 72 65 64  MT is a prepared
c990: 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e   statement..** N
c9a0: 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66   is the index of
c9b0: 20 61 20 77 69 6c 64 63 61 72 64 20 69 6e 20 74   a wildcard in t
c9c0: 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74  he prepared stat
c9d0: 65 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 6f 6d  ement.  This com
c9e0: 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64 73 20 61 20  mand.** binds a 
c9f0: 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 56  32-bit integer V
ca00: 41 4c 55 45 20 74 6f 20 74 68 61 74 20 77 69 6c  ALUE to that wil
ca10: 64 63 61 72 64 2e 0a 2a 2f 0a 73 74 61 74 69 63  dcard..*/.static
ca20: 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f 69   int test_bind_i
ca30: 6e 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  nt(.  void * cli
ca40: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
ca50: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
ca60: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
ca70: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
ca80: 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  [].){.  sqlite3_
ca90: 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69  stmt *pStmt;.  i
caa0: 6e 74 20 69 64 78 3b 0a 20 20 69 6e 74 20 76 61  nt idx;.  int va
cab0: 6c 75 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  lue;.  int rc;..
cac0: 20 20 69 66 28 20 6f 62 6a 63 21 3d 34 20 29 7b    if( objc!=4 ){
cad0: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
cae0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
caf0: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
cb00: 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20  uld be \"",.    
cb10: 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
cb20: 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d  gFromObj(objv[0]
cb30: 2c 20 30 29 2c 20 22 20 53 54 4d 54 20 4e 20 56  , 0), " STMT N V
cb40: 41 4c 55 45 22 2c 20 30 29 3b 0a 20 20 20 20 72  ALUE", 0);.    r
cb50: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
cb60: 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53  .  }..  if( getS
cb70: 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tmtPointer(inter
cb80: 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
cb90: 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d  (objv[1]), &pStm
cba0: 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  t) ) return TCL_
cbb0: 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c  ERROR;.  if( Tcl
cbc0: 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
cbd0: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20  nterp, objv[2], 
cbe0: 26 69 64 78 29 20 29 20 72 65 74 75 72 6e 20 54  &idx) ) return T
cbf0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
cc00: 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62  Tcl_GetIntFromOb
cc10: 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33  j(interp, objv[3
cc20: 5d 2c 20 26 76 61 6c 75 65 29 20 29 20 72 65 74  ], &value) ) ret
cc30: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a  urn TCL_ERROR;..
cc40: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62    rc = sqlite3_b
cc50: 69 6e 64 5f 69 6e 74 28 70 53 74 6d 74 2c 20 69  ind_int(pStmt, i
cc60: 64 78 2c 20 76 61 6c 75 65 29 3b 0a 20 20 69 66  dx, value);.  if
cc70: 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72  ( sqlite3TestErr
cc80: 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 53 74 6d  Code(interp, Stm
cc90: 74 54 6f 44 62 28 70 53 74 6d 74 29 2c 20 72 63  tToDb(pStmt), rc
cca0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
ccb0: 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 63 21 3d  RROR;.  if( rc!=
ccc0: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
ccd0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
cce0: 52 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e  R;.  }..  return
ccf0: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a   TCL_OK;.}.../*.
cd00: 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69  ** Usage:   sqli
cd10: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 20 20  te3_bind_int64  
cd20: 53 54 4d 54 20 4e 20 56 41 4c 55 45 0a 2a 2a 0a  STMT N VALUE.**.
cd30: 2a 2a 20 54 65 73 74 20 74 68 65 20 73 71 6c 69  ** Test the sqli
cd40: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 20 69  te3_bind_int64 i
cd50: 6e 74 65 72 66 61 63 65 2e 20 20 53 54 4d 54 20  nterface.  STMT 
cd60: 69 73 20 61 20 70 72 65 70 61 72 65 64 20 73 74  is a prepared st
cd70: 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73  atement..** N is
cd80: 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20   the index of a 
cd90: 77 69 6c 64 63 61 72 64 20 69 6e 20 74 68 65 20  wildcard in the 
cda0: 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
cdb0: 6e 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e  nt.  This comman
cdc0: 64 0a 2a 2a 20 62 69 6e 64 73 20 61 20 36 34 2d  d.** binds a 64-
cdd0: 62 69 74 20 69 6e 74 65 67 65 72 20 56 41 4c 55  bit integer VALU
cde0: 45 20 74 6f 20 74 68 61 74 20 77 69 6c 64 63 61  E to that wildca
cdf0: 72 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  rd..*/.static in
ce00: 74 20 74 65 73 74 5f 62 69 6e 64 5f 69 6e 74 36  t test_bind_int6
ce10: 34 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  4(.  void * clie
ce20: 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
ce30: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
ce40: 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
ce50: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
ce60: 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ].){.  sqlite3_s
ce70: 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e  tmt *pStmt;.  in
ce80: 74 20 69 64 78 3b 0a 20 20 69 36 34 20 76 61 6c  t idx;.  i64 val
ce90: 75 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20  ue;.  int rc;.. 
cea0: 20 69 66 28 20 6f 62 6a 63 21 3d 34 20 29 7b 0a   if( objc!=4 ){.
ceb0: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
cec0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
ced0: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
cee0: 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20  ld be \"",.     
cef0: 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
cf00: 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c  FromObj(objv[0],
cf10: 20 30 29 2c 20 22 20 53 54 4d 54 20 4e 20 56 41   0), " STMT N VA
cf20: 4c 55 45 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  LUE", 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 0a 20 20 69 66 28 20 67 65 74 53 74    }..  if( getSt
cf50: 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  mtPointer(interp
cf60: 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
cf70: 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74  objv[1]), &pStmt
cf80: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
cf90: 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f  RROR;.  if( Tcl_
cfa0: 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e  GetIntFromObj(in
cfb0: 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26  terp, objv[2], &
cfc0: 69 64 78 29 20 29 20 72 65 74 75 72 6e 20 54 43  idx) ) return TC
cfd0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54  L_ERROR;.  if( T
cfe0: 63 6c 5f 47 65 74 57 69 64 65 49 6e 74 46 72 6f  cl_GetWideIntFro
cff0: 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
d000: 76 5b 33 5d 2c 20 26 76 61 6c 75 65 29 20 29 20  v[3], &value) ) 
d010: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
d020: 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  ;..  rc = sqlite
d030: 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 70 53 74  3_bind_int64(pSt
d040: 6d 74 2c 20 69 64 78 2c 20 76 61 6c 75 65 29 3b  mt, idx, value);
d050: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65  .  if( sqlite3Te
d060: 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70  stErrCode(interp
d070: 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74 6d 74  , StmtToDb(pStmt
d080: 29 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20  ), rc) ) return 
d090: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  TCL_ERROR;.  if(
d0a0: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
d0b0: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  {.    return TCL
d0c0: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72  _ERROR;.  }..  r
d0d0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
d0e0: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
d0f0: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f   sqlite3_bind_do
d100: 75 62 6c 65 20 20 53 54 4d 54 20 4e 20 56 41 4c  uble  STMT N VAL
d110: 55 45 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68  UE.**.** Test th
d120: 65 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64  e sqlite3_bind_d
d130: 6f 75 62 6c 65 20 69 6e 74 65 72 66 61 63 65 2e  ouble interface.
d140: 20 20 53 54 4d 54 20 69 73 20 61 20 70 72 65 70    STMT is a prep
d150: 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a  ared statement..
d160: 2a 2a 20 4e 20 69 73 20 74 68 65 20 69 6e 64 65  ** N is the inde
d170: 78 20 6f 66 20 61 20 77 69 6c 64 63 61 72 64 20  x of a wildcard 
d180: 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20  in the prepared 
d190: 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 69 73  statement.  This
d1a0: 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64   command.** bind
d1b0: 73 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67  s a 64-bit integ
d1c0: 65 72 20 56 41 4c 55 45 20 74 6f 20 74 68 61 74  er VALUE to that
d1d0: 20 77 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73 74   wildcard..*/.st
d1e0: 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69  atic int test_bi
d1f0: 6e 64 5f 64 6f 75 62 6c 65 28 0a 20 20 76 6f 69  nd_double(.  voi
d200: 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
d210: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
d220: 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
d230: 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
d240: 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73  ST objv[].){.  s
d250: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
d260: 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20  mt;.  int idx;. 
d270: 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 3b 0a 20   double value;. 
d280: 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20   int rc;..  if( 
d290: 6f 62 6a 63 21 3d 34 20 29 7b 0a 20 20 20 20 54  objc!=4 ){.    T
d2a0: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
d2b0: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
d2c0: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
d2d0: 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63   \"",.        Tc
d2e0: 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f  l_GetStringFromO
d2f0: 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20  bj(objv[0], 0), 
d300: 22 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 22 2c  " STMT N VALUE",
d310: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
d320: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
d330: 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
d340: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
d350: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
d360: 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72  1]), &pStmt) ) r
d370: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
d380: 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e  .  if( Tcl_GetIn
d390: 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
d3a0: 20 6f 62 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20   objv[2], &idx) 
d3b0: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
d3c0: 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65  OR;.  if( Tcl_Ge
d3d0: 74 44 6f 75 62 6c 65 46 72 6f 6d 4f 62 6a 28 69  tDoubleFromObj(i
d3e0: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20  nterp, objv[3], 
d3f0: 26 76 61 6c 75 65 29 20 29 20 72 65 74 75 72 6e  &value) ) return
d400: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72   TCL_ERROR;..  r
d410: 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  c = sqlite3_bind
d420: 5f 64 6f 75 62 6c 65 28 70 53 74 6d 74 2c 20 69  _double(pStmt, i
d430: 64 78 2c 20 76 61 6c 75 65 29 3b 0a 20 20 69 66  dx, value);.  if
d440: 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72  ( sqlite3TestErr
d450: 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 53 74 6d  Code(interp, Stm
d460: 74 54 6f 44 62 28 70 53 74 6d 74 29 2c 20 72 63  tToDb(pStmt), rc
d470: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
d480: 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 63 21 3d  RROR;.  if( rc!=
d490: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
d4a0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
d4b0: 52 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e  R;.  }..  return
d4c0: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
d4d0: 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74  * Usage:   sqlit
d4e0: 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 20 20 53 54  e3_bind_null  ST
d4f0: 4d 54 20 4e 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20  MT N.**.** Test 
d500: 74 68 65 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  the sqlite3_bind
d510: 5f 6e 75 6c 6c 20 69 6e 74 65 72 66 61 63 65 2e  _null interface.
d520: 20 20 53 54 4d 54 20 69 73 20 61 20 70 72 65 70    STMT is a prep
d530: 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a  ared statement..
d540: 2a 2a 20 4e 20 69 73 20 74 68 65 20 69 6e 64 65  ** N is the inde
d550: 78 20 6f 66 20 61 20 77 69 6c 64 63 61 72 64 20  x of a wildcard 
d560: 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20  in the prepared 
d570: 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 69 73  statement.  This
d580: 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64   command.** bind
d590: 73 20 61 20 4e 55 4c 4c 20 74 6f 20 74 68 65 20  s a NULL to the 
d5a0: 77 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73 74 61  wildcard..*/.sta
d5b0: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e  tic int test_bin
d5c0: 64 5f 6e 75 6c 6c 28 0a 20 20 76 6f 69 64 20 2a  d_null(.  void *
d5d0: 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
d5e0: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
d5f0: 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
d600: 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
d610: 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
d620: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
d630: 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 69 6e  .  int idx;.  in
d640: 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  t rc;..  if( obj
d650: 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
d660: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
d670: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
d680: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
d690: 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47  ",.        Tcl_G
d6a0: 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28  etStringFromObj(
d6b0: 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 53  objv[0], 0), " S
d6c0: 54 4d 54 20 4e 22 2c 20 30 29 3b 0a 20 20 20 20  TMT N", 0);.    
d6d0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
d6e0: 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
d6f0: 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
d700: 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
d710: 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
d720: 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
d730: 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63  _ERROR;.  if( Tc
d740: 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
d750: 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c  interp, objv[2],
d760: 20 26 69 64 78 29 20 29 20 72 65 74 75 72 6e 20   &idx) ) return 
d770: 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63  TCL_ERROR;..  rc
d780: 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f   = sqlite3_bind_
d790: 6e 75 6c 6c 28 70 53 74 6d 74 2c 20 69 64 78 29  null(pStmt, idx)
d7a0: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54  ;.  if( sqlite3T
d7b0: 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72  estErrCode(inter
d7c0: 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74 6d  p, StmtToDb(pStm
d7d0: 74 29 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e  t), rc) ) return
d7e0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
d7f0: 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
d800: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  ){.    return TC
d810: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
d820: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
d830: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
d840: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65   sqlite3_bind_te
d850: 78 74 20 20 53 54 4d 54 20 4e 20 53 54 52 49 4e  xt  STMT N STRIN
d860: 47 20 42 59 54 45 53 0a 2a 2a 0a 2a 2a 20 54 65  G BYTES.**.** Te
d870: 73 74 20 74 68 65 20 73 71 6c 69 74 65 33 5f 62  st the sqlite3_b
d880: 69 6e 64 5f 74 65 78 74 20 69 6e 74 65 72 66 61  ind_text interfa
d890: 63 65 2e 20 20 53 54 4d 54 20 69 73 20 61 20 70  ce.  STMT is a p
d8a0: 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
d8b0: 74 2e 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20 69  t..** N is the i
d8c0: 6e 64 65 78 20 6f 66 20 61 20 77 69 6c 64 63 61  ndex of a wildca
d8d0: 72 64 20 69 6e 20 74 68 65 20 70 72 65 70 61 72  rd in the prepar
d8e0: 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  ed statement.  T
d8f0: 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62  his command.** b
d900: 69 6e 64 73 20 61 20 55 54 46 2d 38 20 73 74 72  inds a UTF-8 str
d910: 69 6e 67 20 53 54 52 49 4e 47 20 74 6f 20 74 68  ing STRING to th
d920: 65 20 77 69 6c 64 63 61 72 64 2e 20 20 54 68 65  e wildcard.  The
d930: 20 73 74 72 69 6e 67 20 69 73 20 42 59 54 45 53   string is BYTES
d940: 20 62 79 74 65 73 0a 2a 2a 20 6c 6f 6e 67 2e 0a   bytes.** long..
d950: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
d960: 73 74 5f 62 69 6e 64 5f 74 65 78 74 28 0a 20 20  st_bind_text(.  
d970: 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
d980: 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
d990: 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
d9a0: 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
d9b0: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
d9c0: 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
d9d0: 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78  pStmt;.  int idx
d9e0: 3b 0a 20 20 69 6e 74 20 62 79 74 65 73 3b 0a 20  ;.  int bytes;. 
d9f0: 20 63 68 61 72 20 2a 76 61 6c 75 65 3b 0a 20 20   char *value;.  
da00: 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f  int rc;..  if( o
da10: 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63  bjc!=5 ){.    Tc
da20: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
da30: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
da40: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
da50: 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c  \"",.        Tcl
da60: 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62  _GetStringFromOb
da70: 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22  j(objv[0], 0), "
da80: 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 20 42 59   STMT N VALUE BY
da90: 54 45 53 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  TES", 0);.    re
daa0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
dab0: 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74    }..  if( getSt
dac0: 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  mtPointer(interp
dad0: 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
dae0: 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74  objv[1]), &pStmt
daf0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
db00: 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f  RROR;.  if( Tcl_
db10: 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e  GetIntFromObj(in
db20: 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26  terp, objv[2], &
db30: 69 64 78 29 20 29 20 72 65 74 75 72 6e 20 54 43  idx) ) return TC
db40: 4c 5f 45 52 52 4f 52 3b 0a 20 20 76 61 6c 75 65  L_ERROR;.  value
db50: 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67   = Tcl_GetString
db60: 28 6f 62 6a 76 5b 33 5d 29 3b 0a 20 20 69 66 28  (objv[3]);.  if(
db70: 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f   Tcl_GetIntFromO
db80: 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
db90: 34 5d 2c 20 26 62 79 74 65 73 29 20 29 20 72 65  4], &bytes) ) re
dba0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
dbb0: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
dbc0: 62 69 6e 64 5f 74 65 78 74 28 70 53 74 6d 74 2c  bind_text(pStmt,
dbd0: 20 69 64 78 2c 20 76 61 6c 75 65 2c 20 62 79 74   idx, value, byt
dbe0: 65 73 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  es, SQLITE_TRANS
dbf0: 49 45 4e 54 29 3b 0a 20 20 69 66 28 20 73 71 6c  IENT);.  if( sql
dc00: 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28  ite3TestErrCode(
dc10: 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62  interp, StmtToDb
dc20: 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29 20 72  (pStmt), rc) ) r
dc30: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
dc40: 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
dc50: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f  E_OK ){.    Tcl_
dc60: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
dc70: 65 72 70 2c 20 73 71 6c 69 74 65 33 54 65 73 74  erp, sqlite3Test
dc80: 45 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 30  ErrorName(rc), 0
dc90: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
dca0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
dcb0: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
dcc0: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
dcd0: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65   sqlite3_bind_te
dce0: 78 74 31 36 20 3f 2d 73 74 61 74 69 63 3f 20 53  xt16 ?-static? S
dcf0: 54 4d 54 20 4e 20 53 54 52 49 4e 47 20 42 59 54  TMT N STRING BYT
dd00: 45 53 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68  ES.**.** Test th
dd10: 65 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74  e sqlite3_bind_t
dd20: 65 78 74 31 36 20 69 6e 74 65 72 66 61 63 65 2e  ext16 interface.
dd30: 20 20 53 54 4d 54 20 69 73 20 61 20 70 72 65 70    STMT is a prep
dd40: 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a  ared statement..
dd50: 2a 2a 20 4e 20 69 73 20 74 68 65 20 69 6e 64 65  ** N is the inde
dd60: 78 20 6f 66 20 61 20 77 69 6c 64 63 61 72 64 20  x of a wildcard 
dd70: 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20  in the prepared 
dd80: 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 69 73  statement.  This
dd90: 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64   command.** bind
dda0: 73 20 61 20 55 54 46 2d 31 36 20 73 74 72 69 6e  s a UTF-16 strin
ddb0: 67 20 53 54 52 49 4e 47 20 74 6f 20 74 68 65 20  g STRING to the 
ddc0: 77 69 6c 64 63 61 72 64 2e 20 20 54 68 65 20 73  wildcard.  The s
ddd0: 74 72 69 6e 67 20 69 73 20 42 59 54 45 53 20 62  tring is BYTES b
dde0: 79 74 65 73 0a 2a 2a 20 6c 6f 6e 67 2e 0a 2a 2f  ytes.** long..*/
ddf0: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
de00: 5f 62 69 6e 64 5f 74 65 78 74 31 36 28 0a 20 20  _bind_text16(.  
de10: 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
de20: 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
de30: 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
de40: 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
de50: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
de60: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
de70: 4d 49 54 5f 55 54 46 31 36 0a 20 20 73 71 6c 69  MIT_UTF16.  sqli
de80: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
de90: 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 69 6e  .  int idx;.  in
dea0: 74 20 62 79 74 65 73 3b 0a 20 20 63 68 61 72 20  t bytes;.  char 
deb0: 2a 76 61 6c 75 65 3b 0a 20 20 69 6e 74 20 72 63  *value;.  int rc
dec0: 3b 0a 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c  ;..  void (*xDel
ded0: 29 28 29 20 3d 20 28 6f 62 6a 63 3d 3d 36 3f 53  )() = (objc==6?S
dee0: 51 4c 49 54 45 5f 53 54 41 54 49 43 3a 53 51 4c  QLITE_STATIC:SQL
def0: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a  ITE_TRANSIENT);.
df00: 20 20 54 63 6c 5f 4f 62 6a 20 2a 6f 53 74 6d 74    Tcl_Obj *oStmt
df10: 20 20 20 20 3d 20 6f 62 6a 76 5b 6f 62 6a 63 2d      = objv[objc-
df20: 34 5d 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 6f  4];.  Tcl_Obj *o
df30: 4e 20 20 20 20 20 20 20 3d 20 6f 62 6a 76 5b 6f  N       = objv[o
df40: 62 6a 63 2d 33 5d 3b 0a 20 20 54 63 6c 5f 4f 62  bjc-3];.  Tcl_Ob
df50: 6a 20 2a 6f 53 74 72 69 6e 67 20 20 3d 20 6f 62  j *oString  = ob
df60: 6a 76 5b 6f 62 6a 63 2d 32 5d 3b 0a 20 20 54 63  jv[objc-2];.  Tc
df70: 6c 5f 4f 62 6a 20 2a 6f 42 79 74 65 73 20 20 20  l_Obj *oBytes   
df80: 3d 20 6f 62 6a 76 5b 6f 62 6a 63 2d 31 5d 3b 0a  = objv[objc-1];.
df90: 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 35 20 26  .  if( objc!=5 &
dfa0: 26 20 6f 62 6a 63 21 3d 36 29 7b 0a 20 20 20 20  & objc!=6){.    
dfb0: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
dfc0: 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
dfd0: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
dfe0: 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54  e \"",.        T
dff0: 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d  cl_GetStringFrom
e000: 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c  Obj(objv[0], 0),
e010: 20 22 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 20   " STMT N VALUE 
e020: 42 59 54 45 53 22 2c 20 30 29 3b 0a 20 20 20 20  BYTES", 0);.    
e030: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
e040: 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
e050: 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
e060: 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
e070: 67 28 6f 53 74 6d 74 29 2c 20 26 70 53 74 6d 74  g(oStmt), &pStmt
e080: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
e090: 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f  RROR;.  if( Tcl_
e0a0: 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e  GetIntFromObj(in
e0b0: 74 65 72 70 2c 20 6f 4e 2c 20 26 69 64 78 29 20  terp, oN, &idx) 
e0c0: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
e0d0: 4f 52 3b 0a 20 20 76 61 6c 75 65 20 3d 20 28 63  OR;.  value = (c
e0e0: 68 61 72 2a 29 54 63 6c 5f 47 65 74 42 79 74 65  har*)Tcl_GetByte
e0f0: 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28 6f 53 74  ArrayFromObj(oSt
e100: 72 69 6e 67 2c 20 30 29 3b 0a 20 20 69 66 28 20  ring, 0);.  if( 
e110: 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62  Tcl_GetIntFromOb
e120: 6a 28 69 6e 74 65 72 70 2c 20 6f 42 79 74 65 73  j(interp, oBytes
e130: 2c 20 26 62 79 74 65 73 29 20 29 20 72 65 74 75  , &bytes) ) retu
e140: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20  rn TCL_ERROR;.. 
e150: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69   rc = sqlite3_bi
e160: 6e 64 5f 74 65 78 74 31 36 28 70 53 74 6d 74 2c  nd_text16(pStmt,
e170: 20 69 64 78 2c 20 28 76 6f 69 64 20 2a 29 76 61   idx, (void *)va
e180: 6c 75 65 2c 20 62 79 74 65 73 2c 20 78 44 65 6c  lue, bytes, xDel
e190: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
e1a0: 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65  TestErrCode(inte
e1b0: 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74  rp, StmtToDb(pSt
e1c0: 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74 75 72  mt), rc) ) retur
e1d0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
e1e0: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
e1f0: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54   ){.    return T
e200: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 23  CL_ERROR;.  }..#
e210: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
e220: 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 20 20  OMIT_UTF16 */.  
e230: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
e240: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
e250: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c   sqlite3_bind_bl
e260: 6f 62 20 20 53 54 4d 54 20 4e 20 44 41 54 41 20  ob  STMT N DATA 
e270: 42 59 54 45 53 0a 2a 2a 0a 2a 2a 20 54 65 73 74  BYTES.**.** Test
e280: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 62 69 6e   the sqlite3_bin
e290: 64 5f 62 6c 6f 62 20 69 6e 74 65 72 66 61 63 65  d_blob interface
e2a0: 2e 20 20 53 54 4d 54 20 69 73 20 61 20 70 72 65  .  STMT is a pre
e2b0: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e  pared statement.
e2c0: 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20 69 6e 64  .** N is the ind
e2d0: 65 78 20 6f 66 20 61 20 77 69 6c 64 63 61 72 64  ex of a wildcard
e2e0: 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
e2f0: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 69   statement.  Thi
e300: 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e  s command.** bin
e310: 64 73 20 61 20 42 4c 4f 42 20 74 6f 20 74 68 65  ds a BLOB to the
e320: 20 77 69 6c 64 63 61 72 64 2e 20 20 54 68 65 20   wildcard.  The 
e330: 42 4c 4f 42 20 69 73 20 42 59 54 45 53 20 62 79  BLOB is BYTES by
e340: 74 65 73 20 69 6e 20 73 69 7a 65 2e 0a 2a 2f 0a  tes in size..*/.
e350: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
e360: 62 69 6e 64 5f 62 6c 6f 62 28 0a 20 20 76 6f 69  bind_blob(.  voi
e370: 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
e380: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
e390: 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
e3a0: 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
e3b0: 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73  ST objv[].){.  s
e3c0: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
e3d0: 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20  mt;.  int idx;. 
e3e0: 20 69 6e 74 20 62 79 74 65 73 3b 0a 20 20 63 68   int bytes;.  ch
e3f0: 61 72 20 2a 76 61 6c 75 65 3b 0a 20 20 69 6e 74  ar *value;.  int
e400: 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63   rc;..  if( objc
e410: 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=5 ){.    Tcl_A
e420: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
e430: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
e440: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
e450: 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65  ,.        Tcl_Ge
e460: 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f  tStringFromObj(o
e470: 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 53 54  bjv[0], 0), " ST
e480: 4d 54 20 4e 20 44 41 54 41 20 42 59 54 45 53 22  MT N DATA BYTES"
e490: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
e4a0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
e4b0: 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f  .  if( getStmtPo
e4c0: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
e4d0: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
e4e0: 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20  [1]), &pStmt) ) 
e4f0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
e500: 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49  ;.  if( Tcl_GetI
e510: 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  ntFromObj(interp
e520: 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 69 64 78 29  , objv[2], &idx)
e530: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
e540: 52 4f 52 3b 0a 20 20 76 61 6c 75 65 20 3d 20 54  ROR;.  value = T
e550: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
e560: 76 5b 33 5d 29 3b 0a 20 20 69 66 28 20 54 63 6c  v[3]);.  if( Tcl
e570: 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
e580: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20  nterp, objv[4], 
e590: 26 62 79 74 65 73 29 20 29 20 72 65 74 75 72 6e  &bytes) ) return
e5a0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72   TCL_ERROR;..  r
e5b0: 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  c = sqlite3_bind
e5c0: 5f 62 6c 6f 62 28 70 53 74 6d 74 2c 20 69 64 78  _blob(pStmt, idx
e5d0: 2c 20 76 61 6c 75 65 2c 20 62 79 74 65 73 2c 20  , value, bytes, 
e5e0: 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54  SQLITE_TRANSIENT
e5f0: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
e600: 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65  TestErrCode(inte
e610: 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74  rp, StmtToDb(pSt
e620: 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74 75 72  mt), rc) ) retur
e630: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
e640: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
e650: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54   ){.    return T
e660: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
e670: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
e680: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
e690: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70    sqlite3_bind_p
e6a0: 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 20 20  arameter_count  
e6b0: 53 54 4d 54 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72  STMT.**.** Retur
e6c0: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
e6d0: 77 69 6c 64 63 61 72 64 73 20 69 6e 20 74 68 65  wildcards in the
e6e0: 20 67 69 76 65 6e 20 73 74 61 74 65 6d 65 6e 74   given statement
e6f0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
e700: 74 65 73 74 5f 62 69 6e 64 5f 70 61 72 61 6d 65  test_bind_parame
e710: 74 65 72 5f 63 6f 75 6e 74 28 0a 20 20 76 6f 69  ter_count(.  voi
e720: 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
e730: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
e740: 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
e750: 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
e760: 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73  ST objv[].){.  s
e770: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
e780: 6d 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  mt;..  if( objc!
e790: 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72  =2 ){.    Tcl_Wr
e7a0: 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72  ongNumArgs(inter
e7b0: 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 53 54 4d  p, 1, objv, "STM
e7c0: 54 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  T");.    return 
e7d0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
e7e0: 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
e7f0: 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
e800: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
e810: 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
e820: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
e830: 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
e840: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
e850: 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33  ewIntObj(sqlite3
e860: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
e870: 63 6f 75 6e 74 28 70 53 74 6d 74 29 29 29 3b 0a  count(pStmt)));.
e880: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
e890: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
e8a0: 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f     sqlite3_bind_
e8b0: 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 20 20  parameter_name  
e8c0: 53 54 4d 54 20 20 4e 0a 2a 2a 0a 2a 2a 20 52 65  STMT  N.**.** Re
e8d0: 74 75 72 6e 20 74 68 65 20 6e 61 6d 65 20 6f 66  turn the name of
e8e0: 20 74 68 65 20 4e 74 68 20 77 69 6c 64 63 61 72   the Nth wildcar
e8f0: 64 2e 20 20 54 68 65 20 66 69 72 73 74 20 77 69  d.  The first wi
e900: 6c 64 63 61 72 64 20 69 73 20 31 2e 0a 2a 2a 20  ldcard is 1..** 
e910: 41 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 20  An empty string 
e920: 69 73 20 72 65 74 75 72 6e 65 64 20 69 66 20 4e  is returned if N
e930: 20 69 73 20 6f 75 74 20 6f 66 20 72 61 6e 67 65   is out of range
e940: 20 6f 72 20 69 66 20 74 68 65 20 77 69 6c 64 63   or if the wildc
e950: 61 72 64 0a 2a 2a 20 69 73 20 6e 61 6d 65 6c 65  ard.** is namele
e960: 73 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ss..*/.static in
e970: 74 20 74 65 73 74 5f 62 69 6e 64 5f 70 61 72 61  t test_bind_para
e980: 6d 65 74 65 72 5f 6e 61 6d 65 28 0a 20 20 76 6f  meter_name(.  vo
e990: 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
e9a0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
e9b0: 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
e9c0: 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
e9d0: 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
e9e0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
e9f0: 74 6d 74 3b 0a 20 20 69 6e 74 20 69 3b 0a 0a 20  tmt;.  int i;.. 
ea00: 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a   if( objc!=3 ){.
ea10: 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d      Tcl_WrongNum
ea20: 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20  Args(interp, 1, 
ea30: 6f 62 6a 76 2c 20 22 53 54 4d 54 20 4e 22 29 3b  objv, "STMT N");
ea40: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
ea50: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
ea60: 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28   getStmtPointer(
ea70: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
ea80: 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
ea90: 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e  &pStmt) ) return
eaa0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
eab0: 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d  ( Tcl_GetIntFrom
eac0: 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
ead0: 5b 32 5d 2c 20 26 69 29 20 29 20 72 65 74 75 72  [2], &i) ) retur
eae0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54  n TCL_ERROR;.  T
eaf0: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
eb00: 69 6e 74 65 72 70 2c 20 0a 20 20 20 20 20 54 63  interp, .     Tc
eb10: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 73  l_NewStringObj(s
eb20: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
eb30: 6d 65 74 65 72 5f 6e 61 6d 65 28 70 53 74 6d 74  meter_name(pStmt
eb40: 2c 69 29 2c 2d 31 29 0a 20 20 29 3b 0a 20 20 72  ,i),-1).  );.  r
eb50: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
eb60: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20  ./*.** Usage:   
eb70: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
eb80: 61 6d 65 74 65 72 5f 69 6e 64 65 78 20 20 53 54  ameter_index  ST
eb90: 4d 54 20 20 4e 41 4d 45 0a 2a 2a 0a 2a 2a 20 52  MT  NAME.**.** R
eba0: 65 74 75 72 6e 20 74 68 65 20 69 6e 64 65 78 20  eturn the index 
ebb0: 6f 66 20 74 68 65 20 77 69 6c 64 63 61 72 64 20  of the wildcard 
ebc0: 63 61 6c 6c 65 64 20 4e 41 4d 45 2e 20 20 52 65  called NAME.  Re
ebd0: 74 75 72 6e 20 30 20 69 66 20 74 68 65 72 65 20  turn 0 if there 
ebe0: 69 73 0a 2a 2a 20 6e 6f 20 73 75 63 68 20 77 69  is.** no such wi
ebf0: 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73 74 61 74 69  ldcard..*/.stati
ec00: 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f  c int test_bind_
ec10: 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 28  parameter_index(
ec20: 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
ec30: 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
ec40: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
ec50: 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
ec60: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
ec70: 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
ec80: 74 20 2a 70 53 74 6d 74 3b 0a 0a 20 20 69 66 28  t *pStmt;..  if(
ec90: 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20   objc!=3 ){.    
eca0: 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73  Tcl_WrongNumArgs
ecb0: 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76  (interp, 1, objv
ecc0: 2c 20 22 53 54 4d 54 20 4e 41 4d 45 22 29 3b 0a  , "STMT NAME");.
ecd0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
ece0: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
ecf0: 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69  getStmtPointer(i
ed00: 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
ed10: 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
ed20: 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20  pStmt) ) return 
ed30: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c  TCL_ERROR;.  Tcl
ed40: 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
ed50: 74 65 72 70 2c 20 0a 20 20 20 20 20 54 63 6c 5f  terp, .     Tcl_
ed60: 4e 65 77 49 6e 74 4f 62 6a 28 0a 20 20 20 20 20  NewIntObj(.     
ed70: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70    sqlite3_bind_p
ed80: 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 28 70  arameter_index(p
ed90: 53 74 6d 74 2c 54 63 6c 5f 47 65 74 53 74 72 69  Stmt,Tcl_GetStri
eda0: 6e 67 28 6f 62 6a 76 5b 32 5d 29 29 0a 20 20 20  ng(objv[2])).   
edb0: 20 20 29 0a 20 20 29 3b 0a 20 20 72 65 74 75 72    ).  );.  retur
edc0: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
edd0: 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69  ** Usage:   sqli
ede0: 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e  te3_clear_bindin
edf0: 67 73 20 53 54 4d 54 0a 2a 2a 0a 2a 2f 0a 23 69  gs STMT.**.*/.#i
ee00: 66 20 30 0a 73 74 61 74 69 63 20 69 6e 74 20 74  f 0.static int t
ee10: 65 73 74 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e  est_clear_bindin
ee20: 67 73 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  gs(.  void * cli
ee30: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
ee40: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
ee50: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
ee60: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
ee70: 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  [].){.  sqlite3_
ee80: 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 0a 20 20  stmt *pStmt;..  
ee90: 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20  if( objc!=2 ){. 
eea0: 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41     Tcl_WrongNumA
eeb0: 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f  rgs(interp, 1, o
eec0: 62 6a 76 2c 20 22 53 54 4d 54 22 29 3b 0a 20 20  bjv, "STMT");.  
eed0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
eee0: 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
eef0: 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74  tStmtPointer(int
ef00: 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
ef10: 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53  ng(objv[1]), &pS
ef20: 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43  tmt) ) return TC
ef30: 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53  L_ERROR;.  Tcl_S
ef40: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
ef50: 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62  rp, Tcl_NewIntOb
ef60: 6a 28 73 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f  j(sqlite3_clear_
ef70: 62 69 6e 64 69 6e 67 73 28 70 53 74 6d 74 29 29  bindings(pStmt))
ef80: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
ef90: 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OK;.}.#endif../*
efa0: 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
efb0: 65 33 5f 65 72 72 63 6f 64 65 20 44 42 0a 2a 2a  e3_errcode DB.**
efc0: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 73  .** Return the s
efd0: 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61  tring representa
efe0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6d 6f 73 74  tion of the most
eff0: 20 72 65 63 65 6e 74 20 73 71 6c 69 74 65 33 5f   recent sqlite3_
f000: 2a 20 41 50 49 0a 2a 2a 20 65 72 72 6f 72 20 63  * API.** error c
f010: 6f 64 65 2e 20 65 2e 67 2e 20 22 53 51 4c 49 54  ode. e.g. "SQLIT
f020: 45 5f 45 52 52 4f 52 22 2e 0a 2a 2f 0a 73 74 61  E_ERROR"..*/.sta
f030: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 65 72 72  tic int test_err
f040: 63 6f 64 65 28 0a 20 20 76 6f 69 64 20 2a 20 63  code(.  void * c
f050: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
f060: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
f070: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
f080: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
f090: 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
f0a0: 33 20 2a 64 62 3b 0a 0a 20 20 69 66 28 20 6f 62  3 *db;..  if( ob
f0b0: 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=2 ){.    Tcl
f0c0: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
f0d0: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
f0e0: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
f0f0: 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f  "", .       Tcl_
f100: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30  GetString(objv[0
f110: 5d 29 2c 20 22 20 44 42 22 2c 20 30 29 3b 0a 20  ]), " DB", 0);. 
f120: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
f130: 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67  ROR;.  }.  if( g
f140: 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65  etDbPointer(inte
f150: 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
f160: 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29  g(objv[1]), &db)
f170: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
f180: 52 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65  ROR;.  Tcl_SetRe
f190: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68  sult(interp, (ch
f1a0: 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28 73  ar *)errorName(s
f1b0: 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28 64  qlite3_errcode(d
f1c0: 62 29 29 2c 20 30 29 3b 0a 20 20 72 65 74 75 72  b)), 0);.  retur
f1d0: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
f1e0: 2a 2a 20 55 73 61 67 65 3a 20 20 20 74 65 73 74  ** Usage:   test
f1f0: 5f 65 72 72 6d 73 67 20 44 42 0a 2a 2a 0a 2a 2a  _errmsg DB.**.**
f200: 20 52 65 74 75 72 6e 73 20 74 68 65 20 55 54 46   Returns the UTF
f210: 2d 38 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  -8 representatio
f220: 6e 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20 6d  n of the error m
f230: 65 73 73 61 67 65 20 73 74 72 69 6e 67 20 66 6f  essage string fo
f240: 72 20 74 68 65 0a 2a 2a 20 6d 6f 73 74 20 72 65  r the.** most re
f250: 63 65 6e 74 20 73 71 6c 69 74 65 33 5f 2a 20 41  cent sqlite3_* A
f260: 50 49 20 63 61 6c 6c 2e 0a 2a 2f 0a 73 74 61 74  PI call..*/.stat
f270: 69 63 20 69 6e 74 20 74 65 73 74 5f 65 72 72 6d  ic int test_errm
f280: 73 67 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  sg(.  void * cli
f290: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
f2a0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
f2b0: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
f2c0: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
f2d0: 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  [].){.  sqlite3 
f2e0: 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  *db;.  const cha
f2f0: 72 20 2a 7a 45 72 72 3b 0a 0a 20 20 69 66 28 20  r *zErr;..  if( 
f300: 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  objc!=2 ){.    T
f310: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
f320: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
f330: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
f340: 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63   \"", .       Tc
f350: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
f360: 5b 30 5d 29 2c 20 22 20 44 42 22 2c 20 30 29 3b  [0]), " DB", 0);
f370: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
f380: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
f390: 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e   getDbPointer(in
f3a0: 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
f3b0: 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64  ing(objv[1]), &d
f3c0: 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
f3d0: 45 52 52 4f 52 3b 0a 0a 20 20 7a 45 72 72 20 3d  ERROR;..  zErr =
f3e0: 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28   sqlite3_errmsg(
f3f0: 64 62 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62  db);.  Tcl_SetOb
f400: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
f410: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
f420: 28 7a 45 72 72 2c 20 2d 31 29 29 3b 0a 20 20 72  (zErr, -1));.  r
f430: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
f440: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20  ./*.** Usage:   
f450: 74 65 73 74 5f 65 72 72 6d 73 67 31 36 20 44 42  test_errmsg16 DB
f460: 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 73 20 74  .**.** Returns t
f470: 68 65 20 55 54 46 2d 31 36 20 72 65 70 72 65 73  he UTF-16 repres
f480: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
f490: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74  error message st
f4a0: 72 69 6e 67 20 66 6f 72 20 74 68 65 0a 2a 2a 20  ring for the.** 
f4b0: 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 71 6c 69  most recent sqli
f4c0: 74 65 33 5f 2a 20 41 50 49 20 63 61 6c 6c 2e 20  te3_* API call. 
f4d0: 54 68 69 73 20 69 73 20 61 20 62 79 74 65 20 61  This is a byte a
f4e0: 72 72 61 79 20 6f 62 6a 65 63 74 20 61 74 20 74  rray object at t
f4f0: 68 65 20 54 43 4c 20 0a 2a 2a 20 6c 65 76 65 6c  he TCL .** level
f500: 2c 20 61 6e 64 20 69 74 20 69 6e 63 6c 75 64 65  , and it include
f510: 73 20 74 68 65 20 30 78 30 30 20 30 78 30 30 20  s the 0x00 0x00 
f520: 74 65 72 6d 69 6e 61 74 6f 72 20 62 79 74 65 73  terminator bytes
f530: 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
f540: 68 65 0a 2a 2a 20 55 54 46 2d 31 36 20 73 74 72  he.** UTF-16 str
f550: 69 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ing..*/.static i
f560: 6e 74 20 74 65 73 74 5f 65 72 72 6d 73 67 31 36  nt test_errmsg16
f570: 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
f580: 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
f590: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
f5a0: 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
f5b0: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
f5c0: 0a 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .){.#ifndef SQLI
f5d0: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20  TE_OMIT_UTF16.  
f5e0: 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 63  sqlite3 *db;.  c
f5f0: 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 45 72 72 3b  onst void *zErr;
f600: 0a 20 20 69 6e 74 20 62 79 74 65 73 20 3d 20 30  .  int bytes = 0
f610: 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32  ;..  if( objc!=2
f620: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
f630: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
f640: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
f650: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a  should be \"", .
f660: 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
f670: 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22  ring(objv[0]), "
f680: 20 44 42 22 2c 20 30 29 3b 0a 20 20 20 20 72 65   DB", 0);.    re
f690: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
f6a0: 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
f6b0: 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
f6c0: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
f6d0: 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65  v[1]), &db) ) re
f6e0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
f6f0: 0a 20 20 7a 45 72 72 20 3d 20 73 71 6c 69 74 65  .  zErr = sqlite
f700: 33 5f 65 72 72 6d 73 67 31 36 28 64 62 29 3b 0a  3_errmsg16(db);.
f710: 20 20 69 66 28 20 7a 45 72 72 20 29 7b 0a 20 20    if( zErr ){.  
f720: 20 20 62 79 74 65 73 20 3d 20 73 71 6c 69 74 65    bytes = sqlite
f730: 33 75 74 66 31 36 42 79 74 65 4c 65 6e 28 7a 45  3utf16ByteLen(zE
f740: 72 72 2c 20 2d 31 29 3b 0a 20 20 7d 0a 20 20 54  rr, -1);.  }.  T
f750: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
f760: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 42  interp, Tcl_NewB
f770: 79 74 65 41 72 72 61 79 4f 62 6a 28 7a 45 72 72  yteArrayObj(zErr
f780: 2c 20 62 79 74 65 73 29 29 3b 0a 23 65 6e 64 69  , bytes));.#endi
f790: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
f7a0: 5f 55 54 46 31 36 20 2a 2f 0a 20 20 72 65 74 75  _UTF16 */.  retu
f7b0: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
f7c0: 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
f7d0: 65 33 5f 70 72 65 70 61 72 65 20 44 42 20 73 71  e3_prepare DB sq
f7e0: 6c 20 62 79 74 65 73 20 74 61 69 6c 76 61 72 0a  l bytes tailvar.
f7f0: 2a 2a 0a 2a 2a 20 43 6f 6d 70 69 6c 65 20 75 70  **.** Compile up
f800: 20 74 6f 20 3c 62 79 74 65 73 3e 20 62 79 74 65   to <bytes> byte
f810: 73 20 6f 66 20 74 68 65 20 73 75 70 70 6c 69 65  s of the supplie
f820: 64 20 53 51 4c 20 73 74 72 69 6e 67 20 3c 73 71  d SQL string <sq
f830: 6c 3e 20 75 73 69 6e 67 0a 2a 2a 20 64 61 74 61  l> using.** data
f840: 62 61 73 65 20 68 61 6e 64 6c 65 20 3c 44 42 3e  base handle <DB>
f850: 2e 20 54 68 65 20 70 61 72 61 6d 65 74 65 72 20  . The parameter 
f860: 3c 74 61 69 6c 76 61 6c 3e 20 69 73 20 74 68 65  <tailval> is the
f870: 20 6e 61 6d 65 20 6f 66 20 61 20 67 6c 6f 62 61   name of a globa
f880: 6c 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 74 68  l.** variable th
f890: 61 74 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  at is set to the
f8a0: 20 75 6e 75 73 65 64 20 70 6f 72 74 69 6f 6e 20   unused portion 
f8b0: 6f 66 20 3c 73 71 6c 3e 20 28 69 66 20 61 6e 79  of <sql> (if any
f8c0: 29 2e 20 41 0a 2a 2a 20 53 54 4d 54 20 68 61 6e  ). A.** STMT han
f8d0: 64 6c 65 20 69 73 20 72 65 74 75 72 6e 65 64 2e  dle is returned.
f8e0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
f8f0: 65 73 74 5f 70 72 65 70 61 72 65 28 0a 20 20 76  est_prepare(.  v
f900: 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
f910: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
f920: 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
f930: 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
f940: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
f950: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
f960: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c  const char *zSql
f970: 3b 0a 20 20 69 6e 74 20 62 79 74 65 73 3b 0a 20  ;.  int bytes;. 
f980: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61   const char *zTa
f990: 69 6c 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65  il = 0;.  sqlite
f9a0: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20  3_stmt *pStmt = 
f9b0: 30 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 35  0;.  char zBuf[5
f9c0: 30 5d 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20  0];.  int rc;.. 
f9d0: 20 69 66 28 20 6f 62 6a 63 21 3d 35 20 29 7b 0a   if( objc!=5 ){.
f9e0: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
f9f0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
fa00: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
fa10: 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20  ld be \"", .    
fa20: 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
fa30: 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44 42 20  (objv[0]), " DB 
fa40: 73 71 6c 20 62 79 74 65 73 20 74 61 69 6c 76 61  sql bytes tailva
fa50: 72 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  r", 0);.    retu
fa60: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
fa70: 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  }.  if( getDbPoi
fa80: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
fa90: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
faa0: 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74 75  1]), &db) ) retu
fab0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
fac0: 7a 53 71 6c 20 3d 20 54 63 6c 5f 47 65 74 53 74  zSql = Tcl_GetSt
fad0: 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 3b 0a 20  ring(objv[2]);. 
fae0: 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46   if( Tcl_GetIntF
faf0: 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
fb00: 62 6a 76 5b 33 5d 2c 20 26 62 79 74 65 73 29 20  bjv[3], &bytes) 
fb10: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
fb20: 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69  OR;..  rc = sqli
fb30: 74 65 33 5f 70 72 65 70 61 72 65 28 64 62 2c 20  te3_prepare(db, 
fb40: 7a 53 71 6c 2c 20 62 79 74 65 73 2c 20 26 70 53  zSql, bytes, &pS
fb50: 74 6d 74 2c 20 26 7a 54 61 69 6c 29 3b 0a 20 20  tmt, &zTail);.  
fb60: 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45  if( sqlite3TestE
fb70: 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64  rrCode(interp, d
fb80: 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20  b, rc) ) return 
fb90: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  TCL_ERROR;.  if(
fba0: 20 7a 54 61 69 6c 20 29 7b 0a 20 20 20 20 69 66   zTail ){.    if
fbb0: 28 20 62 79 74 65 73 3e 3d 30 20 29 7b 0a 20 20  ( bytes>=0 ){.  
fbc0: 20 20 20 20 62 79 74 65 73 20 3d 20 62 79 74 65      bytes = byte
fbd0: 73 20 2d 20 28 7a 54 61 69 6c 2d 7a 53 71 6c 29  s - (zTail-zSql)
fbe0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 54 63 6c 5f  ;.    }.    Tcl_
fbf0: 4f 62 6a 53 65 74 56 61 72 32 28 69 6e 74 65 72  ObjSetVar2(inter
fc00: 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 30 2c 20 54  p, objv[4], 0, T
fc10: 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
fc20: 7a 54 61 69 6c 2c 20 62 79 74 65 73 29 2c 20 30  zTail, bytes), 0
fc30: 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 21  );.  }.  if( rc!
fc40: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
fc50: 20 20 61 73 73 65 72 74 28 20 70 53 74 6d 74 3d    assert( pStmt=
fc60: 3d 30 20 29 3b 0a 20 20 20 20 73 70 72 69 6e 74  =0 );.    sprint
fc70: 66 28 7a 42 75 66 2c 20 22 28 25 64 29 20 22 2c  f(zBuf, "(%d) ",
fc80: 20 72 63 29 3b 0a 20 20 20 20 54 63 6c 5f 41 70   rc);.    Tcl_Ap
fc90: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
fca0: 70 2c 20 7a 42 75 66 2c 20 73 71 6c 69 74 65 33  p, zBuf, sqlite3
fcb0: 5f 65 72 72 6d 73 67 28 64 62 29 2c 20 30 29 3b  _errmsg(db), 0);
fcc0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
fcd0: 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66  ERROR;.  }..  if
fce0: 28 20 70 53 74 6d 74 20 29 7b 0a 20 20 20 20 69  ( pStmt ){.    i
fcf0: 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 4d 61  f( sqlite3TestMa
fd00: 6b 65 50 6f 69 6e 74 65 72 53 74 72 28 69 6e 74  kePointerStr(int
fd10: 65 72 70 2c 20 7a 42 75 66 2c 20 70 53 74 6d 74  erp, zBuf, pStmt
fd20: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
fd30: 52 52 4f 52 3b 0a 20 20 20 20 54 63 6c 5f 41 70  RROR;.    Tcl_Ap
fd40: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
fd50: 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 20 20 7d  p, zBuf, 0);.  }
fd60: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
fd70: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
fd80: 3a 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  : sqlite3_prepar
fd90: 65 20 44 42 20 73 71 6c 20 62 79 74 65 73 20 74  e DB sql bytes t
fda0: 61 69 6c 76 61 72 0a 2a 2a 0a 2a 2a 20 43 6f 6d  ailvar.**.** Com
fdb0: 70 69 6c 65 20 75 70 20 74 6f 20 3c 62 79 74 65  pile up to <byte
fdc0: 73 3e 20 62 79 74 65 73 20 6f 66 20 74 68 65 20  s> bytes of the 
fdd0: 73 75 70 70 6c 69 65 64 20 53 51 4c 20 73 74 72  supplied SQL str
fde0: 69 6e 67 20 3c 73 71 6c 3e 20 75 73 69 6e 67 0a  ing <sql> using.
fdf0: 2a 2a 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  ** database hand
fe00: 6c 65 20 3c 44 42 3e 2e 20 54 68 65 20 70 61 72  le <DB>. The par
fe10: 61 6d 65 74 65 72 20 3c 74 61 69 6c 76 61 6c 3e  ameter <tailval>
fe20: 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
fe30: 61 20 67 6c 6f 62 61 6c 0a 2a 2a 20 76 61 72 69  a global.** vari
fe40: 61 62 6c 65 20 74 68 61 74 20 69 73 20 73 65 74  able that is set
fe50: 20 74 6f 20 74 68 65 20 75 6e 75 73 65 64 20 70   to the unused p
fe60: 6f 72 74 69 6f 6e 20 6f 66 20 3c 73 71 6c 3e 20  ortion of <sql> 
fe70: 28 69 66 20 61 6e 79 29 2e 20 41 0a 2a 2a 20 53  (if any). A.** S
fe80: 54 4d 54 20 68 61 6e 64 6c 65 20 69 73 20 72 65  TMT handle is re
fe90: 74 75 72 6e 65 64 2e 0a 2a 2f 0a 73 74 61 74 69  turned..*/.stati
fea0: 63 20 69 6e 74 20 74 65 73 74 5f 70 72 65 70 61  c int test_prepa
feb0: 72 65 31 36 28 0a 20 20 76 6f 69 64 20 2a 20 63  re16(.  void * c
fec0: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
fed0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
fee0: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
fef0: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
ff00: 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20  jv[].){.#ifndef 
ff10: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
ff20: 36 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  6.  sqlite3 *db;
ff30: 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a  .  const void *z
ff40: 53 71 6c 3b 0a 20 20 63 6f 6e 73 74 20 76 6f 69  Sql;.  const voi
ff50: 64 20 2a 7a 54 61 69 6c 20 3d 20 30 3b 0a 20 20  d *zTail = 0;.  
ff60: 54 63 6c 5f 4f 62 6a 20 2a 70 54 61 69 6c 20 3d  Tcl_Obj *pTail =
ff70: 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74   0;.  sqlite3_st
ff80: 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30 3b 0a 20  mt *pStmt = 0;. 
ff90: 20 63 68 61 72 20 7a 42 75 66 5b 35 30 5d 3b 20   char zBuf[50]; 
ffa0: 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e 74  .  int rc;.  int
ffb0: 20 62 79 74 65 73 3b 20 20 20 20 20 20 20 20 20   bytes;         
ffc0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 69 6e         /* The in
ffd0: 74 65 67 65 72 20 73 70 65 63 69 66 69 65 64 20  teger specified 
ffe0: 61 73 20 61 72 67 20 33 20 2a 2f 0a 20 20 69 6e  as arg 3 */.  in
fff0: 74 20 6f 62 6a 6c 65 6e 3b 20 20 20 20 20 20 20  t objlen;       
10000 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 62          /* The b
10010 79 74 65 2d 61 72 72 61 79 20 6c 65 6e 67 74 68  yte-array length
10020 20 6f 66 20 61 72 67 20 32 20 2a 2f 0a 0a 20 20   of arg 2 */..  
10030 69 66 28 20 6f 62 6a 63 21 3d 35 20 29 7b 0a 20  if( objc!=5 ){. 
10040 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
10050 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
10060 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
10070 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20  d be \"", .     
10080 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28    Tcl_GetString(
10090 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44 42 20 73  objv[0]), " DB s
100a0 71 6c 20 62 79 74 65 73 20 74 61 69 6c 76 61 72  ql bytes tailvar
100b0 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
100c0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
100d0 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e  .  if( getDbPoin
100e0 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
100f0 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
10100 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74 75 72  ]), &db) ) retur
10110 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a  n TCL_ERROR;.  z
10120 53 71 6c 20 3d 20 54 63 6c 5f 47 65 74 42 79 74  Sql = Tcl_GetByt
10130 65 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28 6f 62  eArrayFromObj(ob
10140 6a 76 5b 32 5d 2c 20 26 6f 62 6a 6c 65 6e 29 3b  jv[2], &objlen);
10150 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e  .  if( Tcl_GetIn
10160 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
10170 20 6f 62 6a 76 5b 33 5d 2c 20 26 62 79 74 65 73   objv[3], &bytes
10180 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
10190 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71  RROR;..  rc = sq
101a0 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 28  lite3_prepare16(
101b0 64 62 2c 20 7a 53 71 6c 2c 20 62 79 74 65 73 2c  db, zSql, bytes,
101c0 20 26 70 53 74 6d 74 2c 20 26 7a 54 61 69 6c 29   &pStmt, &zTail)
101d0 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54  ;.  if( sqlite3T
101e0 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72  estErrCode(inter
101f0 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65 74  p, db, rc) ) ret
10200 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
10210 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 72   if( rc ){.    r
10220 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
10230 0a 20 20 7d 0a 0a 20 20 69 66 28 20 7a 54 61 69  .  }..  if( zTai
10240 6c 20 29 7b 0a 20 20 20 20 6f 62 6a 6c 65 6e 20  l ){.    objlen 
10250 3d 20 6f 62 6a 6c 65 6e 20 2d 20 28 28 75 38 20  = objlen - ((u8 
10260 2a 29 7a 54 61 69 6c 2d 28 75 38 20 2a 29 7a 53  *)zTail-(u8 *)zS
10270 71 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ql);.  }else{.  
10280 20 20 6f 62 6a 6c 65 6e 20 3d 20 30 3b 0a 20 20    objlen = 0;.  
10290 7d 0a 20 20 70 54 61 69 6c 20 3d 20 54 63 6c 5f  }.  pTail = Tcl_
102a0 4e 65 77 42 79 74 65 41 72 72 61 79 4f 62 6a 28  NewByteArrayObj(
102b0 28 75 38 20 2a 29 7a 54 61 69 6c 2c 20 6f 62 6a  (u8 *)zTail, obj
102c0 6c 65 6e 29 3b 0a 20 20 54 63 6c 5f 49 6e 63 72  len);.  Tcl_Incr
102d0 52 65 66 43 6f 75 6e 74 28 70 54 61 69 6c 29 3b  RefCount(pTail);
102e0 0a 20 20 54 63 6c 5f 4f 62 6a 53 65 74 56 61 72  .  Tcl_ObjSetVar
102f0 32 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 34  2(interp, objv[4
10300 5d 2c 20 30 2c 20 70 54 61 69 6c 2c 20 30 29 3b  ], 0, pTail, 0);
10310 0a 20 20 54 63 6c 5f 44 65 63 72 52 65 66 43 6f  .  Tcl_DecrRefCo
10320 75 6e 74 28 70 54 61 69 6c 29 3b 0a 0a 20 20 69  unt(pTail);..  i
10330 66 28 20 70 53 74 6d 74 20 29 7b 0a 20 20 20 20  f( pStmt ){.    
10340 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 4d  if( sqlite3TestM
10350 61 6b 65 50 6f 69 6e 74 65 72 53 74 72 28 69 6e  akePointerStr(in
10360 74 65 72 70 2c 20 7a 42 75 66 2c 20 70 53 74 6d  terp, zBuf, pStm
10370 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  t) ) return TCL_
10380 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 54 63 6c  ERROR;.  }.  Tcl
10390 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
103a0 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a  terp, zBuf, 0);.
103b0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
103c0 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 20  _OMIT_UTF16 */. 
103d0 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
103e0 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
103f0 73 71 6c 69 74 65 33 5f 6f 70 65 6e 20 66 69 6c  sqlite3_open fil
10400 65 6e 61 6d 65 20 3f 6f 70 74 69 6f 6e 73 2d 6c  ename ?options-l
10410 69 73 74 3f 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ist?.*/.static i
10420 6e 74 20 74 65 73 74 5f 6f 70 65 6e 28 0a 20 20  nt test_open(.  
10430 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
10440 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
10450 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
10460 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
10470 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
10480 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46    const char *zF
10490 69 6c 65 6e 61 6d 65 3b 0a 20 20 73 71 6c 69 74  ilename;.  sqlit
104a0 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63  e3 *db;.  int rc
104b0 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 31 30  ;.  char zBuf[10
104c0 30 5d 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  0];..  if( objc!
104d0 3d 33 20 26 26 20 6f 62 6a 63 21 3d 32 20 29 7b  =3 && objc!=2 ){
104e0 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
104f0 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
10500 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
10510 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20  uld be \"", .   
10520 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
10530 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 66 69  g(objv[0]), " fi
10540 6c 65 6e 61 6d 65 20 6f 70 74 69 6f 6e 73 2d 6c  lename options-l
10550 69 73 74 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  ist", 0);.    re
10560 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
10570 20 20 7d 0a 0a 20 20 7a 46 69 6c 65 6e 61 6d 65    }..  zFilename
10580 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67   = Tcl_GetString
10590 28 6f 62 6a 76 5b 31 5d 29 3b 0a 20 20 72 63 20  (objv[1]);.  rc 
105a0 3d 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28 7a  = sqlite3_open(z
105b0 46 69 6c 65 6e 61 6d 65 2c 20 26 64 62 29 3b 0a  Filename, &db);.
105c0 20 20 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33    .  if( sqlite3
105d0 54 65 73 74 4d 61 6b 65 50 6f 69 6e 74 65 72 53  TestMakePointerS
105e0 74 72 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c  tr(interp, zBuf,
105f0 20 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43   db) ) return TC
10600 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 41  L_ERROR;.  Tcl_A
10610 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
10620 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 20 20  rp, zBuf, 0);.  
10630 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
10640 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
10650 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 20 66 69  qlite3_open16 fi
10660 6c 65 6e 61 6d 65 20 6f 70 74 69 6f 6e 73 0a 2a  lename options.*
10670 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
10680 74 5f 6f 70 65 6e 31 36 28 0a 20 20 76 6f 69 64  t_open16(.  void
10690 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
106a0 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
106b0 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
106c0 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
106d0 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e  T objv[].){.#ifn
106e0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
106f0 55 54 46 31 36 0a 20 20 63 6f 6e 73 74 20 76 6f  UTF16.  const vo
10700 69 64 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 0a 20  id *zFilename;. 
10710 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
10720 69 6e 74 20 72 63 3b 0a 20 20 63 68 61 72 20 7a  int rc;.  char z
10730 42 75 66 5b 31 30 30 5d 3b 0a 0a 20 20 69 66 28  Buf[100];..  if(
10740 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20   objc!=3 ){.    
10750 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
10760 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
10770 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
10780 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54  e \"", .       T
10790 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
107a0 76 5b 30 5d 29 2c 20 22 20 66 69 6c 65 6e 61 6d  v[0]), " filenam
107b0 65 20 6f 70 74 69 6f 6e 73 2d 6c 69 73 74 22 2c  e options-list",
107c0 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
107d0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
107e0 20 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 54 63    zFilename = Tc
107f0 6c 5f 47 65 74 42 79 74 65 41 72 72 61 79 46 72  l_GetByteArrayFr
10800 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 31 5d 2c 20 30  omObj(objv[1], 0
10810 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
10820 33 5f 6f 70 65 6e 31 36 28 7a 46 69 6c 65 6e 61  3_open16(zFilena
10830 6d 65 2c 20 26 64 62 29 3b 0a 20 20 0a 20 20 69  me, &db);.  .  i
10840 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 4d 61  f( sqlite3TestMa
10850 6b 65 50 6f 69 6e 74 65 72 53 74 72 28 69 6e 74  kePointerStr(int
10860 65 72 70 2c 20 7a 42 75 66 2c 20 64 62 29 20 29  erp, zBuf, db) )
10870 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
10880 52 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  R;.  Tcl_AppendR
10890 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42  esult(interp, zB
108a0 75 66 2c 20 30 29 3b 0a 23 65 6e 64 69 66 20 2f  uf, 0);.#endif /
108b0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  * SQLITE_OMIT_UT
108c0 46 31 36 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20  F16 */.  return 
108d0 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
108e0 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
108f0 63 6f 6d 70 6c 65 74 65 31 36 20 3c 55 54 46 2d  complete16 <UTF-
10900 31 36 20 73 74 72 69 6e 67 3e 0a 2a 2a 0a 2a 2a  16 string>.**.**
10910 20 52 65 74 75 72 6e 20 31 20 69 66 20 74 68 65   Return 1 if the
10920 20 73 75 70 70 6c 69 65 64 20 61 72 67 75 6d 65   supplied argume
10930 6e 74 20 69 73 20 61 20 63 6f 6d 70 6c 65 74 65  nt is a complete
10940 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2c 20   SQL statement, 
10950 6f 72 20 7a 65 72 6f 0a 2a 2a 20 6f 74 68 65 72  or zero.** other
10960 77 69 73 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  wise..*/.static 
10970 69 6e 74 20 74 65 73 74 5f 63 6f 6d 70 6c 65 74  int test_complet
10980 65 31 36 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  e16(.  void * cl
10990 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
109a0 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
109b0 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
109c0 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
109d0 76 5b 5d 0a 29 7b 0a 23 69 66 20 21 64 65 66 69  v[].){.#if !defi
109e0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
109f0 43 4f 4d 50 4c 45 54 45 29 20 26 26 20 21 64 65  COMPLETE) && !de
10a00 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
10a10 54 5f 55 54 46 31 36 29 0a 20 20 63 68 61 72 20  T_UTF16).  char 
10a20 2a 7a 42 75 66 3b 0a 0a 20 20 69 66 28 20 6f 62  *zBuf;..  if( ob
10a30 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=2 ){.    Tcl
10a40 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e  _WrongNumArgs(in
10a50 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22  terp, 1, objv, "
10a60 3c 75 74 66 2d 31 36 20 73 71 6c 3e 22 29 3b 0a  <utf-16 sql>");.
10a70 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
10a80 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 7a 42 75  RROR;.  }..  zBu
10a90 66 20 3d 20 28 63 68 61 72 2a 29 54 63 6c 5f 47  f = (char*)Tcl_G
10aa0 65 74 42 79 74 65 41 72 72 61 79 46 72 6f 6d 4f  etByteArrayFromO
10ab0 62 6a 28 6f 62 6a 76 5b 31 5d 2c 20 30 29 3b 0a  bj(objv[1], 0);.
10ac0 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
10ad0 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
10ae0 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33  ewIntObj(sqlite3
10af0 5f 63 6f 6d 70 6c 65 74 65 31 36 28 7a 42 75 66  _complete16(zBuf
10b00 29 29 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  )));.#endif /* S
10b10 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 4c  QLITE_OMIT_COMPL
10b20 45 54 45 20 26 26 20 53 51 4c 49 54 45 5f 4f 4d  ETE && SQLITE_OM
10b30 49 54 5f 55 54 46 31 36 20 2a 2f 0a 20 20 72 65  IT_UTF16 */.  re
10b40 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
10b50 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  /*.** Usage: sql
10b60 69 74 65 33 5f 73 74 65 70 20 53 54 4d 54 0a 2a  ite3_step STMT.*
10b70 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 74 68 65  *.** Advance the
10b80 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 74 68   statement to th
10b90 65 20 6e 65 78 74 20 72 6f 77 2e 0a 2a 2f 0a 73  e next row..*/.s
10ba0 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 73  tatic int test_s
10bb0 74 65 70 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  tep(.  void * cl
10bc0 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
10bd0 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
10be0 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
10bf0 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
10c00 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
10c10 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20  _stmt *pStmt;.  
10c20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f  int rc;..  if( o
10c30 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  bjc!=2 ){.    Tc
10c40 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
10c50 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
10c60 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
10c70 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c  \"", .       Tcl
10c80 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
10c90 30 5d 29 2c 20 22 20 53 54 4d 54 22 2c 20 30 29  0]), " STMT", 0)
10ca0 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
10cb0 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69  _ERROR;.  }..  i
10cc0 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
10cd0 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
10ce0 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
10cf0 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
10d00 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
10d10 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 65  rc = sqlite3_ste
10d20 70 28 70 53 74 6d 74 29 3b 0a 0a 20 20 2f 2a 20  p(pStmt);..  /* 
10d30 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 44  if( rc!=SQLITE_D
10d40 4f 4e 45 20 26 26 20 72 63 21 3d 53 51 4c 49 54  ONE && rc!=SQLIT
10d50 45 5f 52 4f 57 20 29 20 72 65 74 75 72 6e 20 54  E_ROW ) return T
10d60 43 4c 5f 45 52 52 4f 52 3b 20 2a 2f 0a 20 20 54  CL_ERROR; */.  T
10d70 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74  cl_SetResult(int
10d80 65 72 70 2c 20 28 63 68 61 72 20 2a 29 65 72 72  erp, (char *)err
10d90 6f 72 4e 61 6d 65 28 72 63 29 2c 20 30 29 3b 0a  orName(rc), 0);.
10da0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
10db0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
10dc0 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
10dd0 63 6f 75 6e 74 20 53 54 4d 54 20 0a 2a 2a 0a 2a  count STMT .**.*
10de0 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d  * Return the num
10df0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 72  ber of columns r
10e00 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 73  eturned by the s
10e10 71 6c 20 73 74 61 74 65 6d 65 6e 74 20 53 54 4d  ql statement STM
10e20 54 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  T..*/.static int
10e30 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 63 6f 75   test_column_cou
10e40 6e 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  nt(.  void * cli
10e50 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
10e60 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
10e70 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
10e80 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
10e90 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  [].){.  sqlite3_
10ea0 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 0a 20 20  stmt *pStmt;..  
10eb0 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20  if( objc!=2 ){. 
10ec0 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
10ed0 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
10ee0 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
10ef0 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20  d be \"", .     
10f00 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28    Tcl_GetString(
10f10 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54  objv[0]), " STMT
10f20 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20   column", 0);.  
10f30 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
10f40 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67  OR;.  }..  if( g
10f50 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e  etStmtPointer(in
10f60 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
10f70 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70  ing(objv[1]), &p
10f80 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
10f90 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 54 63 6c  CL_ERROR;..  Tcl
10fa0 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
10fb0 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74  terp, Tcl_NewInt
10fc0 4f 62 6a 28 73 71 6c 69 74 65 33 5f 63 6f 6c 75  Obj(sqlite3_colu
10fd0 6d 6e 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29 29  mn_count(pStmt))
10fe0 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
10ff0 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
11000 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ge: sqlite3_colu
11010 6d 6e 5f 74 79 70 65 20 53 54 4d 54 20 63 6f 6c  mn_type STMT col
11020 75 6d 6e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e  umn.**.** Return
11030 20 74 68 65 20 74 79 70 65 20 6f 66 20 74 68 65   the type of the
11040 20 64 61 74 61 20 69 6e 20 63 6f 6c 75 6d 6e 20   data in column 
11050 27 63 6f 6c 75 6d 6e 27 20 6f 66 20 74 68 65 20  'column' of the 
11060 63 75 72 72 65 6e 74 20 72 6f 77 2e 0a 2a 2f 0a  current row..*/.
11070 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
11080 63 6f 6c 75 6d 6e 5f 74 79 70 65 28 0a 20 20 76  column_type(.  v
11090 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
110a0 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
110b0 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
110c0 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
110d0 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
110e0 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
110f0 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b  Stmt;.  int col;
11100 0a 20 20 69 6e 74 20 74 70 3b 0a 0a 20 20 69 66  .  int tp;..  if
11110 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20  ( objc!=3 ){.   
11120 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
11130 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
11140 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
11150 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20  be \"", .       
11160 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
11170 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20 63  jv[0]), " STMT c
11180 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20  olumn", 0);.    
11190 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
111a0 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
111b0 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
111c0 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
111d0 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
111e0 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
111f0 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63  _ERROR;.  if( Tc
11200 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
11210 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c  interp, objv[2],
11220 20 26 63 6f 6c 29 20 29 20 72 65 74 75 72 6e 20   &col) ) return 
11230 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 74 70  TCL_ERROR;..  tp
11240 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d   = sqlite3_colum
11250 6e 5f 74 79 70 65 28 70 53 74 6d 74 2c 20 63 6f  n_type(pStmt, co
11260 6c 29 3b 0a 20 20 73 77 69 74 63 68 28 20 74 70  l);.  switch( tp
11270 20 29 7b 0a 20 20 20 20 63 61 73 65 20 53 51 4c   ){.    case SQL
11280 49 54 45 5f 49 4e 54 45 47 45 52 3a 20 0a 20 20  ITE_INTEGER: .  
11290 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c      Tcl_SetResul
112a0 74 28 69 6e 74 65 72 70 2c 20 22 49 4e 54 45 47  t(interp, "INTEG
112b0 45 52 22 2c 20 54 43 4c 5f 53 54 41 54 49 43 29  ER", TCL_STATIC)
112c0 3b 20 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  ; .      break;.
112d0 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
112e0 4e 55 4c 4c 3a 0a 20 20 20 20 20 20 54 63 6c 5f  NULL:.      Tcl_
112f0 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70  SetResult(interp
11300 2c 20 22 4e 55 4c 4c 22 2c 20 54 43 4c 5f 53 54  , "NULL", TCL_ST
11310 41 54 49 43 29 3b 20 0a 20 20 20 20 20 20 62 72  ATIC); .      br
11320 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
11330 4c 49 54 45 5f 46 4c 4f 41 54 3a 0a 20 20 20 20  LITE_FLOAT:.    
11340 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28    Tcl_SetResult(
11350 69 6e 74 65 72 70 2c 20 22 46 4c 4f 41 54 22 2c  interp, "FLOAT",
11360 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 20 0a 20   TCL_STATIC); . 
11370 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
11380 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45 58 54  case SQLITE_TEXT
11390 3a 0a 20 20 20 20 20 20 54 63 6c 5f 53 65 74 52  :.      Tcl_SetR
113a0 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 54  esult(interp, "T
113b0 45 58 54 22 2c 20 54 43 4c 5f 53 54 41 54 49 43  EXT", TCL_STATIC
113c0 29 3b 20 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  ); .      break;
113d0 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
113e0 5f 42 4c 4f 42 3a 0a 20 20 20 20 20 20 54 63 6c  _BLOB:.      Tcl
113f0 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
11400 70 2c 20 22 42 4c 4f 42 22 2c 20 54 43 4c 5f 53  p, "BLOB", TCL_S
11410 54 41 54 49 43 29 3b 20 0a 20 20 20 20 20 20 62  TATIC); .      b
11420 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c  reak;.    defaul
11430 74 3a 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  t:.      assert(
11440 30 29 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72  0);.  }..  retur
11450 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
11460 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65  ** Usage: sqlite
11470 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 20 53  3_column_int64 S
11480 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a  TMT column.**.**
11490 20 52 65 74 75 72 6e 20 74 68 65 20 64 61 74 61   Return the data
114a0 20 69 6e 20 63 6f 6c 75 6d 6e 20 27 63 6f 6c 75   in column 'colu
114b0 6d 6e 27 20 6f 66 20 74 68 65 20 63 75 72 72 65  mn' of the curre
114c0 6e 74 20 72 6f 77 20 63 61 73 74 20 61 73 20 61  nt row cast as a
114d0 6e 0a 2a 2a 20 77 69 64 65 20 28 36 34 2d 62 69  n.** wide (64-bi
114e0 74 29 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 73  t) integer..*/.s
114f0 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63  tatic int test_c
11500 6f 6c 75 6d 6e 5f 69 6e 74 36 34 28 0a 20 20 76  olumn_int64(.  v
11510 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
11520 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
11530 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
11540 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
11550 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
11560 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
11570 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b  Stmt;.  int col;
11580 0a 20 20 69 36 34 20 69 56 61 6c 3b 0a 0a 20 20  .  i64 iVal;..  
11590 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20  if( objc!=3 ){. 
115a0 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
115b0 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
115c0 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
115d0 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20  d be \"", .     
115e0 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28    Tcl_GetString(
115f0 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54  objv[0]), " STMT
11600 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20   column", 0);.  
11610 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
11620 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67  OR;.  }..  if( g
11630 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e  etStmtPointer(in
11640 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
11650 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70  ing(objv[1]), &p
11660 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
11670 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
11680 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62  Tcl_GetIntFromOb
11690 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32  j(interp, objv[2
116a0 5d 2c 20 26 63 6f 6c 29 20 29 20 72 65 74 75 72  ], &col) ) retur
116b0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
116c0 69 56 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63  iVal = sqlite3_c
116d0 6f 6c 75 6d 6e 5f 69 6e 74 36 34 28 70 53 74 6d  olumn_int64(pStm
116e0 74 2c 20 63 6f 6c 29 3b 0a 20 20 54 63 6c 5f 53  t, col);.  Tcl_S
116f0 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
11700 72 70 2c 20 54 63 6c 5f 4e 65 77 57 69 64 65 49  rp, Tcl_NewWideI
11710 6e 74 4f 62 6a 28 69 56 61 6c 29 29 3b 0a 20 20  ntObj(iVal));.  
11720 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
11730 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
11740 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c  qlite3_column_bl
11750 6f 62 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a  ob STMT column.*
11760 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
11770 74 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 0a 20  t_column_blob(. 
11780 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
11790 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
117a0 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
117b0 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
117c0 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
117d0 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
117e0 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63 6f  *pStmt;.  int co
117f0 6c 3b 0a 0a 20 20 69 6e 74 20 6c 65 6e 3b 0a 20  l;..  int len;. 
11800 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 42 6c   const void *pBl
11810 6f 62 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  ob;..  if( objc!
11820 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =3 ){.    Tcl_Ap
11830 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
11840 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
11850 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
11860 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74   .       Tcl_Get
11870 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c  String(objv[0]),
11880 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c   " STMT column",
11890 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
118a0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
118b0 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
118c0 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
118d0 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
118e0 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72  1]), &pStmt) ) r
118f0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
11900 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e  .  if( Tcl_GetIn
11910 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
11920 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20   objv[2], &col) 
11930 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
11940 4f 52 3b 0a 0a 20 20 70 42 6c 6f 62 20 3d 20 73  OR;..  pBlob = s
11950 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c  qlite3_column_bl
11960 6f 62 28 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a  ob(pStmt, col);.
11970 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 5f    len = sqlite3_
11980 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 70 53 74  column_bytes(pSt
11990 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20 54 63 6c 5f  mt, col);.  Tcl_
119a0 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
119b0 65 72 70 2c 20 54 63 6c 5f 4e 65 77 42 79 74 65  erp, Tcl_NewByte
119c0 41 72 72 61 79 4f 62 6a 28 70 42 6c 6f 62 2c 20  ArrayObj(pBlob, 
119d0 6c 65 6e 29 29 3b 0a 20 20 72 65 74 75 72 6e 20  len));.  return 
119e0 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
119f0 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
11a00 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 20 53 54  column_double ST
11a10 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20  MT column.**.** 
11a20 52 65 74 75 72 6e 20 74 68 65 20 64 61 74 61 20  Return the data 
11a30 69 6e 20 63 6f 6c 75 6d 6e 20 27 63 6f 6c 75 6d  in column 'colum
11a40 6e 27 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  n' of the curren
11a50 74 20 72 6f 77 20 63 61 73 74 20 61 73 20 61 20  t row cast as a 
11a60 64 6f 75 62 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69  double..*/.stati
11a70 63 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c 75 6d  c int test_colum
11a80 6e 5f 64 6f 75 62 6c 65 28 0a 20 20 76 6f 69 64  n_double(.  void
11a90 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
11aa0 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
11ab0 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
11ac0 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
11ad0 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
11ae0 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
11af0 74 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a 20 20  t;.  int col;.  
11b00 64 6f 75 62 6c 65 20 72 56 61 6c 3b 0a 0a 20 20  double rVal;..  
11b10 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20  if( objc!=3 ){. 
11b20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
11b30 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
11b40 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
11b50 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20  d be \"", .     
11b60 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28    Tcl_GetString(
11b70 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54  objv[0]), " STMT
11b80 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20   column", 0);.  
11b90 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
11ba0 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67  OR;.  }..  if( g
11bb0 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e  etStmtPointer(in
11bc0 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
11bd0 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70  ing(objv[1]), &p
11be0 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
11bf0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
11c00 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62  Tcl_GetIntFromOb
11c10 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32  j(interp, objv[2
11c20 5d 2c 20 26 63 6f 6c 29 20 29 20 72 65 74 75 72  ], &col) ) retur
11c30 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
11c40 72 56 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63  rVal = sqlite3_c
11c50 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28 70 53 74  olumn_double(pSt
11c60 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20 54 63 6c 5f  mt, col);.  Tcl_
11c70 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
11c80 65 72 70 2c 20 54 63 6c 5f 4e 65 77 44 6f 75 62  erp, Tcl_NewDoub
11c90 6c 65 4f 62 6a 28 72 56 61 6c 29 29 3b 0a 20 20  leObj(rVal));.  
11ca0 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
11cb0 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
11cc0 71 6c 69 74 65 33 5f 64 61 74 61 5f 63 6f 75 6e  qlite3_data_coun
11cd0 74 20 53 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 52 65  t STMT .**.** Re
11ce0 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  turn the number 
11cf0 6f 66 20 63 6f 6c 75 6d 6e 73 20 72 65 74 75 72  of columns retur
11d00 6e 65 64 20 62 79 20 74 68 65 20 73 71 6c 20 73  ned by the sql s
11d10 74 61 74 65 6d 65 6e 74 20 53 54 4d 54 2e 0a 2a  tatement STMT..*
11d20 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
11d30 74 5f 64 61 74 61 5f 63 6f 75 6e 74 28 0a 20 20  t_data_count(.  
11d40 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
11d50 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
11d60 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
11d70 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
11d80 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
11d90 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
11da0 70 53 74 6d 74 3b 0a 0a 20 20 69 66 28 20 6f 62  pStmt;..  if( ob
11db0 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=2 ){.    Tcl
11dc0 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
11dd0 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
11de0 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
11df0 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f  "", .       Tcl_
11e00 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30  GetString(objv[0
11e10 5d 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d  ]), " STMT colum
11e20 6e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  n", 0);.    retu
11e30 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
11e40 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74  }..  if( getStmt
11e50 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
11e60 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
11e70 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20  jv[1]), &pStmt) 
11e80 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
11e90 4f 52 3b 0a 0a 20 20 54 63 6c 5f 53 65 74 4f 62  OR;..  Tcl_SetOb
11ea0 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
11eb0 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71  Tcl_NewIntObj(sq
11ec0 6c 69 74 65 33 5f 64 61 74 61 5f 63 6f 75 6e 74  lite3_data_count
11ed0 28 70 53 74 6d 74 29 29 29 3b 0a 20 20 72 65 74  (pStmt)));.  ret
11ee0 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
11ef0 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69  *.** Usage: sqli
11f00 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 20  te3_column_text 
11f10 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a  STMT column.**.*
11f20 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33  * Usage: sqlite3
11f30 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65  _column_decltype
11f40 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a   STMT column.**.
11f50 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65  ** Usage: sqlite
11f60 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 20 53 54  3_column_name ST
11f70 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2f 0a 73 74 61  MT column.*/.sta
11f80 74 69 63 20 69 6e 74 20 74 65 73 74 5f 73 74 6d  tic int test_stm
11f90 74 5f 75 74 66 38 28 0a 20 20 76 6f 69 64 20 2a  t_utf8(.  void *
11fa0 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 20 20 20   clientData,    
11fb0 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
11fc0 6f 20 53 51 4c 69 74 65 20 41 50 49 20 66 75 6e  o SQLite API fun
11fd0 63 74 69 6f 6e 20 74 6f 20 62 65 20 69 6e 76 6f  ction to be invo
11fe0 6b 65 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65  ke */.  Tcl_Inte
11ff0 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
12000 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
12010 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
12020 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
12030 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20  t *pStmt;.  int 
12040 63 6f 6c 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  col;.  const cha
12050 72 20 2a 28 2a 78 46 75 6e 63 29 28 73 71 6c 69  r *(*xFunc)(sqli
12060 74 65 33 5f 73 74 6d 74 2a 2c 20 69 6e 74 29 20  te3_stmt*, int) 
12070 3d 20 63 6c 69 65 6e 74 44 61 74 61 3b 0a 20 20  = clientData;.  
12080 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 52 65 74  const char *zRet
12090 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33  ;..  if( objc!=3
120a0 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
120b0 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
120c0 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
120d0 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a  should be \"", .
120e0 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
120f0 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22  ring(objv[0]), "
12100 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30   STMT column", 0
12110 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
12120 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
12130 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  if( getStmtPoint
12140 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
12150 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
12160 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74  ), &pStmt) ) ret
12170 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
12180 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46   if( Tcl_GetIntF
12190 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
121a0 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20 29 20  bjv[2], &col) ) 
121b0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
121c0 3b 0a 20 20 7a 52 65 74 20 3d 20 78 46 75 6e 63  ;.  zRet = xFunc
121d0 28 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20  (pStmt, col);.  
121e0 69 66 28 20 7a 52 65 74 20 29 7b 0a 20 20 20 20  if( zRet ){.    
121f0 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
12200 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 7a 52  terp, (char *)zR
12210 65 74 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 72 65  et, 0);.  }.  re
12220 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
12230 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
12240 67 6c 6f 62 61 6c 5f 72 65 63 6f 76 65 72 28 0a  global_recover(.
12250 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
12260 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
12270 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
12280 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
12290 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
122a0 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  {.#ifndef SQLITE
122b0 5f 4f 4d 49 54 5f 47 4c 4f 42 41 4c 52 45 43 4f  _OMIT_GLOBALRECO
122c0 56 45 52 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  VER.  int rc;.  
122d0 69 66 28 20 6f 62 6a 63 21 3d 31 20 29 7b 0a 20  if( objc!=1 ){. 
122e0 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41     Tcl_WrongNumA
122f0 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f  rgs(interp, 1, o
12300 62 6a 76 2c 20 22 22 29 3b 0a 20 20 20 20 72 65  bjv, "");.    re
12310 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
12320 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
12330 65 33 5f 67 6c 6f 62 61 6c 5f 72 65 63 6f 76 65  e3_global_recove
12340 72 28 29 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65  r();.  Tcl_SetRe
12350 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68  sult(interp, (ch
12360 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72  ar *)errorName(r
12370 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b  c), TCL_STATIC);
12380 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e  .#endif.  return
12390 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
123a0 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33  * Usage: sqlite3
123b0 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 53 54 4d  _column_text STM
123c0 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55  T column.**.** U
123d0 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f  sage: sqlite3_co
123e0 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 20 53 54  lumn_decltype ST
123f0 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20  MT column.**.** 
12400 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63  Usage: sqlite3_c
12410 6f 6c 75 6d 6e 5f 6e 61 6d 65 20 53 54 4d 54 20  olumn_name STMT 
12420 63 6f 6c 75 6d 6e 0a 2a 2f 0a 73 74 61 74 69 63  column.*/.static
12430 20 69 6e 74 20 74 65 73 74 5f 73 74 6d 74 5f 75   int test_stmt_u
12440 74 66 31 36 28 0a 20 20 76 6f 69 64 20 2a 20 63  tf16(.  void * c
12450 6c 69 65 6e 74 44 61 74 61 2c 20 20 20 20 20 2f  lientData,     /
12460 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 53 51 4c  * Pointer to SQL
12470 69 74 65 20 41 50 49 20 66 75 6e 63 74 69 6f 6e  ite API function
12480 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64 20 2a   to be invoked *
12490 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  /.  Tcl_Interp *
124a0 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
124b0 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
124c0 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23  ONST objv[].){.#
124d0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
124e0 49 54 5f 55 54 46 31 36 0a 20 20 73 71 6c 69 74  IT_UTF16.  sqlit
124f0 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a  e3_stmt *pStmt;.
12500 20 20 69 6e 74 20 63 6f 6c 3b 0a 20 20 54 63 6c    int col;.  Tcl
12510 5f 4f 62 6a 20 2a 70 52 65 74 3b 0a 20 20 63 6f  _Obj *pRet;.  co
12520 6e 73 74 20 76 6f 69 64 20 2a 7a 4e 61 6d 65 31  nst void *zName1
12530 36 3b 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20  6;.  const void 
12540 2a 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74 65  *(*xFunc)(sqlite
12550 33 5f 73 74 6d 74 2a 2c 20 69 6e 74 29 20 3d 20  3_stmt*, int) = 
12560 63 6c 69 65 6e 74 44 61 74 61 3b 0a 0a 20 20 69  clientData;..  i
12570 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20  f( objc!=3 ){.  
12580 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
12590 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
125a0 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
125b0 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20   be \"", .      
125c0 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
125d0 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20  bjv[0]), " STMT 
125e0 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20  column", 0);.   
125f0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
12600 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65  R;.  }..  if( ge
12610 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74  tStmtPointer(int
12620 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
12630 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53  ng(objv[1]), &pS
12640 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43  tmt) ) return TC
12650 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54  L_ERROR;.  if( T
12660 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a  cl_GetIntFromObj
12670 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d  (interp, objv[2]
12680 2c 20 26 63 6f 6c 29 20 29 20 72 65 74 75 72 6e  , &col) ) return
12690 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 7a   TCL_ERROR;..  z
126a0 4e 61 6d 65 31 36 20 3d 20 78 46 75 6e 63 28 70  Name16 = xFunc(p
126b0 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20 69 66  Stmt, col);.  if
126c0 28 20 7a 4e 61 6d 65 31 36 20 29 7b 0a 20 20 20  ( zName16 ){.   
126d0 20 70 52 65 74 20 3d 20 54 63 6c 5f 4e 65 77 42   pRet = Tcl_NewB
126e0 79 74 65 41 72 72 61 79 4f 62 6a 28 7a 4e 61 6d  yteArrayObj(zNam
126f0 65 31 36 2c 20 73 71 6c 69 74 65 33 75 74 66 31  e16, sqlite3utf1
12700 36 42 79 74 65 4c 65 6e 28 7a 4e 61 6d 65 31 36  6ByteLen(zName16
12710 2c 20 2d 31 29 2b 32 29 3b 0a 20 20 20 20 54 63  , -1)+2);.    Tc
12720 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
12730 6e 74 65 72 70 2c 20 70 52 65 74 29 3b 0a 20 20  nterp, pRet);.  
12740 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
12750 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f  TE_OMIT_UTF16 */
12760 0a 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ..  return TCL_O
12770 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
12780 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  e: sqlite3_colum
12790 6e 5f 69 6e 74 20 53 54 4d 54 20 63 6f 6c 75 6d  n_int STMT colum
127a0 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  n.**.** Usage: s
127b0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79  qlite3_column_by
127c0 74 65 73 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a  tes STMT column.
127d0 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  **.** Usage: sql
127e0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65  ite3_column_byte
127f0 73 31 36 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a  s16 STMT column.
12800 2a 2a 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  **.*/.static int
12810 20 74 65 73 74 5f 73 74 6d 74 5f 69 6e 74 28 0a   test_stmt_int(.
12820 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
12830 61 74 61 2c 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ata,    /* Point
12840 65 72 20 74 6f 20 53 51 4c 69 74 65 20 41 50 49  er to SQLite API
12850 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20   function to be 
12860 69 6e 76 6f 6b 65 64 20 2a 2f 0a 20 20 54 63 6c  invoked */.  Tcl
12870 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
12880 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
12890 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
128a0 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
128b0 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
128c0 20 69 6e 74 20 63 6f 6c 3b 0a 20 20 69 6e 74 20   int col;.  int 
128d0 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33  (*xFunc)(sqlite3
128e0 5f 73 74 6d 74 2a 2c 20 69 6e 74 29 20 3d 20 63  _stmt*, int) = c
128f0 6c 69 65 6e 74 44 61 74 61 3b 0a 0a 20 20 69 66  lientData;..  if
12900 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20  ( objc!=3 ){.   
12910 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
12920 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
12930 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
12940 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20  be \"", .       
12950 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
12960 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20 63  jv[0]), " STMT c
12970 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20  olumn", 0);.    
12980 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
12990 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
129a0 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
129b0 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
129c0 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
129d0 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
129e0 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63  _ERROR;.  if( Tc
129f0 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
12a00 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c  interp, objv[2],
12a10 20 26 63 6f 6c 29 20 29 20 72 65 74 75 72 6e 20   &col) ) return 
12a20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 54 63  TCL_ERROR;..  Tc
12a30 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
12a40 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e  nterp, Tcl_NewIn
12a50 74 4f 62 6a 28 78 46 75 6e 63 28 70 53 74 6d 74  tObj(xFunc(pStmt
12a60 2c 20 63 6f 6c 29 29 29 3b 0a 20 20 72 65 74 75  , col)));.  retu
12a70 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 23 69  rn TCL_OK;.}..#i
12a80 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
12a90 54 5f 44 49 53 4b 49 4f 0a 2f 2a 0a 2a 2a 20 55  T_DISKIO./*.** U
12aa0 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 4f 73  sage:  sqlite3Os
12ab0 4f 70 65 6e 52 65 61 64 57 72 69 74 65 20 3c 66  OpenReadWrite <f
12ac0 69 6c 65 6e 61 6d 65 3e 0a 2a 2f 0a 73 74 61 74  ilename>.*/.stat
12ad0 69 63 20 69 6e 74 20 74 65 73 74 5f 73 71 6c 69  ic int test_sqli
12ae0 74 65 33 4f 73 4f 70 65 6e 52 65 61 64 57 72 69  te3OsOpenReadWri
12af0 74 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  te(.  void * cli
12b00 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
12b10 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
12b20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
12b30 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
12b40 5b 5d 0a 29 7b 0a 20 20 4f 73 46 69 6c 65 20 2a  [].){.  OsFile *
12b50 70 46 69 6c 65 3b 0a 20 20 69 6e 74 20 72 63 3b  pFile;.  int rc;
12b60 0a 20 20 69 6e 74 20 64 75 6d 6d 79 3b 0a 20 20  .  int dummy;.  
12b70 63 68 61 72 20 7a 42 75 66 5b 31 30 30 5d 3b 0a  char zBuf[100];.
12b80 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29  .  if( objc!=2 )
12b90 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
12ba0 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
12bb0 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
12bc0 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20  ould be \"", .  
12bd0 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
12be0 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 66  ng(objv[0]), " f
12bf0 69 6c 65 6e 61 6d 65 22 2c 20 30 29 3b 0a 20 20  ilename", 0);.  
12c00 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
12c10 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72 63 20 3d 20  OR;.  }..  rc = 
12c20 73 71 6c 69 74 65 33 4f 73 4f 70 65 6e 52 65 61  sqlite3OsOpenRea
12c30 64 57 72 69 74 65 28 54 63 6c 5f 47 65 74 53 74  dWrite(Tcl_GetSt
12c40 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
12c50 70 46 69 6c 65 2c 20 26 64 75 6d 6d 79 29 3b 0a  pFile, &dummy);.
12c60 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
12c70 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53  _OK ){.    Tcl_S
12c80 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
12c90 20 28 63 68 61 72 20 2a 29 65 72 72 6f 72 4e 61   (char *)errorNa
12ca0 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54  me(rc), TCL_STAT
12cb0 49 43 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  IC);.    return 
12cc0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
12cd0 20 73 71 6c 69 74 65 33 54 65 73 74 4d 61 6b 65   sqlite3TestMake
12ce0 50 6f 69 6e 74 65 72 53 74 72 28 69 6e 74 65 72  PointerStr(inter
12cf0 70 2c 20 7a 42 75 66 2c 20 70 46 69 6c 65 29 3b  p, zBuf, pFile);
12d00 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74  .  Tcl_SetResult
12d10 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 30  (interp, zBuf, 0
12d20 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
12d30 45 52 52 4f 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  ERROR;.}../*.** 
12d40 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 4f  Usage:  sqlite3O
12d50 73 43 6c 6f 73 65 20 3c 66 69 6c 65 20 68 61 6e  sClose <file han
12d60 64 6c 65 3e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  dle>.*/.static i
12d70 6e 74 20 74 65 73 74 5f 73 71 6c 69 74 65 33 4f  nt test_sqlite3O
12d80 73 43 6c 6f 73 65 28 0a 20 20 76 6f 69 64 20 2a  sClose(.  void *
12d90 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
12da0 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
12db0 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
12dc0 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
12dd0 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 4f 73 46 69  objv[].){.  OsFi
12de0 6c 65 20 2a 70 46 69 6c 65 3b 0a 20 20 69 6e 74  le *pFile;.  int
12df0 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63   rc;..  if( objc
12e00 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=2 ){.    Tcl_A
12e10 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
12e20 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
12e30 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
12e40 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65  , .       Tcl_Ge
12e50 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29  tString(objv[0])
12e60 2c 20 22 20 66 69 6c 65 68 61 6e 64 6c 65 22 2c  , " filehandle",
12e70 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
12e80 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
12e90 20 20 69 66 28 20 67 65 74 46 69 6c 65 50 6f 69    if( getFilePoi
12ea0 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
12eb0 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
12ec0 31 5d 29 2c 20 26 70 46 69 6c 65 29 20 29 7b 0a  1]), &pFile) ){.
12ed0 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
12ee0 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  RROR;.  }.  rc =
12ef0 20 73 71 6c 69 74 65 33 4f 73 43 6c 6f 73 65 28   sqlite3OsClose(
12f00 26 70 46 69 6c 65 29 3b 0a 20 20 69 66 28 20 72  &pFile);.  if( r
12f10 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
12f20 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c      Tcl_SetResul
12f30 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20  t(interp, (char 
12f40 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c  *)errorName(rc),
12f50 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20   TCL_STATIC);.  
12f60 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
12f70 4f 52 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  OR;.  }.  return
12f80 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
12f90 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
12fa0 33 4f 73 4c 6f 63 6b 20 3c 66 69 6c 65 20 68 61  3OsLock <file ha
12fb0 6e 64 6c 65 3e 20 3c 6c 6f 63 6b 74 79 70 65 3e  ndle> <locktype>
12fc0 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
12fd0 65 73 74 5f 73 71 6c 69 74 65 33 4f 73 4c 6f 63  est_sqlite3OsLoc
12fe0 6b 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  k(.  void * clie
12ff0 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
13000 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
13010 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
13020 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
13030 5d 0a 29 7b 0a 20 20 4f 73 46 69 6c 65 20 2a 20  ].){.  OsFile * 
13040 70 46 69 6c 65 3b 0a 20 20 69 6e 74 20 72 63 3b  pFile;.  int rc;
13050 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20  ..  if( objc!=3 
13060 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
13070 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
13080 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
13090 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20  hould be \"", . 
130a0 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
130b0 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 0a  ring(objv[0]), .
130c0 20 20 20 20 20 20 20 20 22 20 66 69 6c 65 68 61          " fileha
130d0 6e 64 6c 65 20 28 53 48 41 52 45 44 7c 52 45 53  ndle (SHARED|RES
130e0 45 52 56 45 44 7c 50 45 4e 44 49 4e 47 7c 45 58  ERVED|PENDING|EX
130f0 43 4c 55 53 49 56 45 29 22 2c 20 30 29 3b 0a 20  CLUSIVE)", 0);. 
13100 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
13110 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  ROR;.  }..  if( 
13120 67 65 74 46 69 6c 65 50 6f 69 6e 74 65 72 28 69  getFilePointer(i
13130 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
13140 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
13150 70 46 69 6c 65 29 20 29 7b 0a 20 20 20 20 72 65  pFile) ){.    re
13160 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
13170 20 20 7d 0a 0a 20 20 69 66 28 20 30 3d 3d 73 74    }..  if( 0==st
13180 72 63 6d 70 28 22 53 48 41 52 45 44 22 2c 20 54  rcmp("SHARED", T
13190 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
131a0 76 5b 32 5d 29 29 20 29 7b 0a 20 20 20 20 72 63  v[2])) ){.    rc
131b0 20 3d 20 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b   = sqlite3OsLock
131c0 28 70 46 69 6c 65 2c 20 53 48 41 52 45 44 5f 4c  (pFile, SHARED_L
131d0 4f 43 4b 29 3b 0a 20 20 7d 0a 20 20 65 6c 73 65  OCK);.  }.  else
131e0 20 69 66 28 20 30 3d 3d 73 74 72 63 6d 70 28 22   if( 0==strcmp("
131f0 52 45 53 45 52 56 45 44 22 2c 20 54 63 6c 5f 47  RESERVED", Tcl_G
13200 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d  etString(objv[2]
13210 29 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  )) ){.    rc = s
13220 71 6c 69 74 65 33 4f 73 4c 6f 63 6b 28 70 46 69  qlite3OsLock(pFi
13230 6c 65 2c 20 52 45 53 45 52 56 45 44 5f 4c 4f 43  le, RESERVED_LOC
13240 4b 29 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69  K);.  }.  else i
13250 66 28 20 30 3d 3d 73 74 72 63 6d 70 28 22 50 45  f( 0==strcmp("PE
13260 4e 44 49 4e 47 22 2c 20 54 63 6c 5f 47 65 74 53  NDING", Tcl_GetS
13270 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 29 20  tring(objv[2])) 
13280 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
13290 74 65 33 4f 73 4c 6f 63 6b 28 70 46 69 6c 65 2c  te3OsLock(pFile,
132a0 20 50 45 4e 44 49 4e 47 5f 4c 4f 43 4b 29 3b 0a   PENDING_LOCK);.
132b0 20 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20 30    }.  else if( 0
132c0 3d 3d 73 74 72 63 6d 70 28 22 45 58 43 4c 55 53  ==strcmp("EXCLUS
132d0 49 56 45 22 2c 20 54 63 6c 5f 47 65 74 53 74 72  IVE", Tcl_GetStr
132e0 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 29 20 29 7b  ing(objv[2])) ){
132f0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
13300 33 4f 73 4c 6f 63 6b 28 70 46 69 6c 65 2c 20 45  3OsLock(pFile, E
13310 58 43 4c 55 53 49 56 45 5f 4c 4f 43 4b 29 3b 0a  XCLUSIVE_LOCK);.
13320 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 54 63 6c    }else{.    Tcl
13330 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
13340 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
13350 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
13360 22 22 2c 20 0a 20 20 20 20 20 20 20 20 54 63 6c  "", .        Tcl
13370 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
13380 30 5d 29 2c 20 0a 20 20 20 20 20 20 20 20 22 20  0]), .        " 
13390 66 69 6c 65 68 61 6e 64 6c 65 20 28 53 48 41 52  filehandle (SHAR
133a0 45 44 7c 52 45 53 45 52 56 45 44 7c 50 45 4e 44  ED|RESERVED|PEND
133b0 49 4e 47 7c 45 58 43 4c 55 53 49 56 45 29 22 2c  ING|EXCLUSIVE)",
133c0 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
133d0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
133e0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
133f0 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53  _OK ){.    Tcl_S
13400 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
13410 20 28 63 68 61 72 20 2a 29 65 72 72 6f 72 4e 61   (char *)errorNa
13420 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54  me(rc), TCL_STAT
13430 49 43 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  IC);.    return 
13440 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
13450 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
13460 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
13470 20 73 71 6c 69 74 65 33 4f 73 55 6e 6c 6f 63 6b   sqlite3OsUnlock
13480 20 3c 66 69 6c 65 20 68 61 6e 64 6c 65 3e 0a 2a   <file handle>.*
13490 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
134a0 74 5f 73 71 6c 69 74 65 33 4f 73 55 6e 6c 6f 63  t_sqlite3OsUnloc
134b0 6b 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  k(.  void * clie
134c0 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
134d0 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
134e0 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
134f0 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
13500 5d 0a 29 7b 0a 20 20 4f 73 46 69 6c 65 20 2a 20  ].){.  OsFile * 
13510 70 46 69 6c 65 3b 0a 20 20 69 6e 74 20 72 63 3b  pFile;.  int rc;
13520 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20  ..  if( objc!=2 
13530 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
13540 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
13550 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
13560 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20  hould be \"", . 
13570 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
13580 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20  ing(objv[0]), " 
13590 66 69 6c 65 68 61 6e 64 6c 65 22 2c 20 30 29 3b  filehandle", 0);
135a0 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
135b0 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66  ERROR;.  }..  if
135c0 28 20 67 65 74 46 69 6c 65 50 6f 69 6e 74 65 72  ( getFilePointer
135d0 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
135e0 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
135f0 20 26 70 46 69 6c 65 29 20 29 7b 0a 20 20 20 20   &pFile) ){.    
13600 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
13610 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
13620 69 74 65 33 4f 73 55 6e 6c 6f 63 6b 28 70 46 69  ite3OsUnlock(pFi
13630 6c 65 2c 20 4e 4f 5f 4c 4f 43 4b 29 3b 0a 20 20  le, NO_LOCK);.  
13640 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
13650 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74  K ){.    Tcl_Set
13660 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28  Result(interp, (
13670 63 68 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65  char *)errorName
13680 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43  (rc), TCL_STATIC
13690 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
136a0 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72  L_ERROR;.  }.  r
136b0 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
136c0 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
136d0 71 6c 69 74 65 33 4f 73 54 65 6d 70 46 69 6c 65  qlite3OsTempFile
136e0 4e 61 6d 65 0a 2a 2f 0a 73 74 61 74 69 63 20 69  Name.*/.static i
136f0 6e 74 20 74 65 73 74 5f 73 71 6c 69 74 65 33 4f  nt test_sqlite3O
13700 73 54 65 6d 70 46 69 6c 65 4e 61 6d 65 28 0a 20  sTempFileName(. 
13710 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
13720 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
13730 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
13740 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
13750 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
13760 0a 20 20 63 68 61 72 20 7a 46 69 6c 65 5b 53 51  .  char zFile[SQ
13770 4c 49 54 45 5f 54 45 4d 50 4e 41 4d 45 5f 53 49  LITE_TEMPNAME_SI
13780 5a 45 5d 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  ZE];.  int rc;..
13790 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73    rc = sqlite3Os
137a0 54 65 6d 70 46 69 6c 65 4e 61 6d 65 28 7a 46 69  TempFileName(zFi
137b0 6c 65 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53  le);.  if( rc!=S
137c0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
137d0 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
137e0 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 65 72  terp, (char *)er
137f0 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c  rorName(rc), TCL
13800 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 72 65  _STATIC);.    re
13810 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
13820 20 20 7d 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64    }.  Tcl_Append
13830 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a  Result(interp, z
13840 46 69 6c 65 2c 20 30 29 3b 0a 20 20 72 65 74 75  File, 0);.  retu
13850 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 23 65 6e  rn TCL_OK;.}.#en
13860 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  dif../*.** Usage
13870 3a 20 20 73 71 6c 69 74 65 5f 73 65 74 5f 6d 61  :  sqlite_set_ma
13880 67 69 63 20 20 44 42 20 20 4d 41 47 49 43 2d 4e  gic  DB  MAGIC-N
13890 55 4d 42 45 52 0a 2a 2a 0a 2a 2a 20 53 65 74 20  UMBER.**.** Set 
138a0 74 68 65 20 64 62 2d 3e 6d 61 67 69 63 20 76 61  the db->magic va
138b0 6c 75 65 2e 20 20 54 68 69 73 20 69 73 20 75 73  lue.  This is us
138c0 65 64 20 74 6f 20 74 65 73 74 20 65 72 72 6f 72  ed to test error
138d0 20 72 65 63 6f 76 65 72 79 20 6c 6f 67 69 63 2e   recovery logic.
138e0 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73  .*/.static int s
138f0 71 6c 69 74 65 5f 73 65 74 5f 6d 61 67 69 63 28  qlite_set_magic(
13900 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
13910 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
13920 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
13930 74 20 61 72 67 63 2c 0a 20 20 63 68 61 72 20 2a  t argc,.  char *
13940 2a 61 72 67 76 0a 29 7b 0a 20 20 73 71 6c 69 74  *argv.){.  sqlit
13950 65 33 20 2a 64 62 3b 0a 20 20 69 66 28 20 61 72  e3 *db;.  if( ar
13960 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=3 ){.    Tcl
13970 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
13980 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
13990 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
139a0 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20  "", argv[0],.   
139b0 20 20 20 20 20 20 22 20 44 42 20 4d 41 47 49 43        " DB MAGIC
139c0 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
139d0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
139e0 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e  .  if( getDbPoin
139f0 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76  ter(interp, argv
13a00 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75  [1], &db) ) retu
13a10 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
13a20 69 66 28 20 73 74 72 63 6d 70 28 61 72 67 76 5b  if( strcmp(argv[
13a30 32 5d 2c 20 22 53 51 4c 49 54 45 5f 4d 41 47 49  2], "SQLITE_MAGI
13a40 43 5f 4f 50 45 4e 22 29 3d 3d 30 20 29 7b 0a 20  C_OPEN")==0 ){. 
13a50 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53     db->magic = S
13a60 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e  QLITE_MAGIC_OPEN
13a70 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74  ;.  }else if( st
13a80 72 63 6d 70 28 61 72 67 76 5b 32 5d 2c 20 22 53  rcmp(argv[2], "S
13a90 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53  QLITE_MAGIC_CLOS
13aa0 45 44 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 64  ED")==0 ){.    d
13ab0 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54  b->magic = SQLIT
13ac0 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 3b 0a  E_MAGIC_CLOSED;.
13ad0 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
13ae0 6d 70 28 61 72 67 76 5b 32 5d 2c 20 22 53 51 4c  mp(argv[2], "SQL
13af0 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 22 29  ITE_MAGIC_BUSY")
13b00 3d 3d 30 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d  ==0 ){.    db->m
13b10 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41  agic = SQLITE_MA
13b20 47 49 43 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73  GIC_BUSY;.  }els
13b30 65 20 69 66 28 20 73 74 72 63 6d 70 28 61 72 67  e if( strcmp(arg
13b40 76 5b 32 5d 2c 20 22 53 51 4c 49 54 45 5f 4d 41  v[2], "SQLITE_MA
13b50 47 49 43 5f 45 52 52 4f 52 22 29 3d 3d 30 20 29  GIC_ERROR")==0 )
13b60 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20  {.    db->magic 
13b70 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45  = SQLITE_MAGIC_E
13b80 52 52 4f 52 3b 0a 20 20 7d 65 6c 73 65 20 69 66  RROR;.  }else if
13b90 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74  ( Tcl_GetInt(int
13ba0 65 72 70 2c 20 61 72 67 76 5b 32 5d 2c 20 26 64  erp, argv[2], &d
13bb0 62 2d 3e 6d 61 67 69 63 29 20 29 7b 0a 20 20 20  b->magic) ){.   
13bc0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
13bd0 52 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  R;.  }.  return 
13be0 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
13bf0 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33   Usage:  sqlite3
13c00 5f 69 6e 74 65 72 72 75 70 74 20 20 44 42 20 0a  _interrupt  DB .
13c10 2a 2a 0a 2a 2a 20 54 72 69 67 67 65 72 20 61 6e  **.** Trigger an
13c20 20 69 6e 74 65 72 72 75 70 74 20 6f 6e 20 44 42   interrupt on DB
13c30 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
13c40 65 73 74 5f 69 6e 74 65 72 72 75 70 74 28 0a 20  est_interrupt(. 
13c50 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
13c60 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
13c70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
13c80 61 72 67 63 2c 0a 20 20 63 68 61 72 20 2a 2a 61  argc,.  char **a
13c90 72 67 76 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  rgv.){.  sqlite3
13ca0 20 2a 64 62 3b 0a 20 20 69 66 28 20 61 72 67 63   *db;.  if( argc
13cb0 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=2 ){.    Tcl_A
13cc0 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
13cd0 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
13ce0 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
13cf0 2c 20 61 72 67 76 5b 30 5d 2c 20 22 20 44 42 22  , argv[0], " DB"
13d00 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
13d10 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
13d20 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74    if( getDbPoint
13d30 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  er(interp, argv[
13d40 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72  1], &db) ) retur
13d50 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 73  n TCL_ERROR;.  s
13d60 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
13d70 28 64 62 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  (db);.  return T
13d80 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 73 74 61 74 69 63  CL_OK;.}..static
13d90 20 75 38 20 2a 73 71 6c 69 74 65 33 5f 73 74 61   u8 *sqlite3_sta
13da0 63 6b 5f 62 61 73 65 6c 69 6e 65 20 3d 20 30 3b  ck_baseline = 0;
13db0 0a 0a 2f 2a 0a 2a 2a 20 46 69 6c 6c 20 74 68 65  ../*.** Fill the
13dc0 20 73 74 61 63 6b 20 77 69 74 68 20 61 20 6b 6e   stack with a kn
13dd0 6f 77 6e 20 62 69 74 70 61 74 74 65 72 6e 2e 0a  own bitpattern..
13de0 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 70  */.static void p
13df0 72 65 70 53 74 61 63 6b 28 76 6f 69 64 29 7b 0a  repStack(void){.
13e00 20 20 69 6e 74 20 69 3b 0a 20 20 75 33 32 20 62    int i;.  u32 b
13e10 69 67 42 75 66 5b 36 35 35 33 36 5d 3b 0a 20 20  igBuf[65536];.  
13e20 66 6f 72 28 69 3d 30 3b 20 69 3c 73 69 7a 65 6f  for(i=0; i<sizeo
13e30 66 28 62 69 67 42 75 66 29 3b 20 69 2b 2b 29 20  f(bigBuf); i++) 
13e40 62 69 67 42 75 66 5b 69 5d 20 3d 20 30 78 64 65  bigBuf[i] = 0xde
13e50 61 64 62 65 65 66 3b 0a 20 20 73 71 6c 69 74 65  adbeef;.  sqlite
13e60 33 5f 73 74 61 63 6b 5f 62 61 73 65 6c 69 6e 65  3_stack_baseline
13e70 20 3d 20 28 75 38 2a 29 26 62 69 67 42 75 66 5b   = (u8*)&bigBuf[
13e80 36 35 35 33 36 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  65536];.}../*.**
13e90 20 47 65 74 20 74 68 65 20 63 75 72 72 65 6e 74   Get the current
13ea0 20 73 74 61 63 6b 20 64 65 70 74 68 2e 20 20 55   stack depth.  U
13eb0 73 65 64 20 66 6f 72 20 64 65 62 75 67 67 69 6e  sed for debuggin
13ec0 67 20 6f 6e 6c 79 2e 0a 2a 2f 0a 75 36 34 20 73  g only..*/.u64 s
13ed0 71 6c 69 74 65 33 53 74 61 63 6b 44 65 70 74 68  qlite3StackDepth
13ee0 28 76 6f 69 64 29 7b 0a 20 20 75 38 20 78 3b 0a  (void){.  u8 x;.
13ef0 20 20 72 65 74 75 72 6e 20 28 75 36 34 29 28 73    return (u64)(s
13f00 71 6c 69 74 65 33 5f 73 74 61 63 6b 5f 62 61 73  qlite3_stack_bas
13f10 65 6c 69 6e 65 20 2d 20 26 78 29 3b 0a 7d 0a 0a  eline - &x);.}..
13f20 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
13f30 6c 69 74 65 33 5f 73 74 61 63 6b 5f 75 73 65 64  lite3_stack_used
13f40 20 44 42 20 53 51 4c 0a 2a 2a 0a 2a 2a 20 54 72   DB SQL.**.** Tr
13f50 79 20 74 6f 20 6d 65 61 73 75 72 65 20 74 68 65  y to measure the
13f60 20 61 6d 6f 75 6e 74 20 6f 66 20 73 74 61 63 6b   amount of stack
13f70 20 73 70 61 63 65 20 75 73 65 64 20 62 79 20 61   space used by a
13f80 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33   call to sqlite3
13f90 5f 65 78 65 63 0a 2a 2f 0a 73 74 61 74 69 63 20  _exec.*/.static 
13fa0 69 6e 74 20 74 65 73 74 5f 73 74 61 63 6b 5f 75  int test_stack_u
13fb0 73 65 64 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  sed(.  void * cl
13fc0 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
13fd0 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
13fe0 20 20 69 6e 74 20 61 72 67 63 2c 0a 20 20 63 68    int argc,.  ch
13ff0 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 73  ar **argv.){.  s
14000 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e  qlite3 *db;.  in
14010 74 20 69 3b 0a 20 20 69 66 28 20 61 72 67 63 21  t i;.  if( argc!
14020 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =3 ){.    Tcl_Ap
14030 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
14040 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
14050 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
14060 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20   argv[0], .     
14070 20 20 20 22 20 44 42 20 53 51 4c 22 2c 20 30 29     " DB SQL", 0)
14080 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
14090 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
140a0 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69  ( getDbPointer(i
140b0 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20  nterp, argv[1], 
140c0 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
140d0 4c 5f 45 52 52 4f 52 3b 0a 20 20 70 72 65 70 53  L_ERROR;.  prepS
140e0 74 61 63 6b 28 29 3b 0a 20 20 73 71 6c 69 74 65  tack();.  sqlite
140f0 33 5f 65 78 65 63 28 64 62 2c 20 61 72 67 76 5b  3_exec(db, argv[
14100 32 5d 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20  2], 0, 0, 0);.  
14110 66 6f 72 28 69 3d 36 35 35 33 35 3b 20 69 3e 3d  for(i=65535; i>=
14120 30 20 26 26 20 28 28 75 33 32 2a 29 73 71 6c 69  0 && ((u32*)sqli
14130 74 65 33 5f 73 74 61 63 6b 5f 62 61 73 65 6c 69  te3_stack_baseli
14140 6e 65 29 5b 2d 69 5d 3d 3d 30 78 64 65 61 64 62  ne)[-i]==0xdeadb
14150 65 65 66 3b 20 69 2d 2d 29 7b 7d 0a 20 20 54 63  eef; i--){}.  Tc
14160 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
14170 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e  nterp, Tcl_NewIn
14180 74 4f 62 6a 28 69 2a 34 29 29 3b 0a 20 20 72 65  tObj(i*4));.  re
14190 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
141a0 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  /*.** Usage: sql
141b0 69 74 65 5f 64 65 6c 65 74 65 5f 66 75 6e 63 74  ite_delete_funct
141c0 69 6f 6e 20 44 42 20 66 75 6e 63 74 69 6f 6e 2d  ion DB function-
141d0 6e 61 6d 65 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74  name.**.** Delet
141e0 65 20 74 68 65 20 75 73 65 72 20 66 75 6e 63 74  e the user funct
141f0 69 6f 6e 20 27 66 75 6e 63 74 69 6f 6e 2d 6e 61  ion 'function-na
14200 6d 65 27 20 66 72 6f 6d 20 64 61 74 61 62 61 73  me' from databas
14210 65 20 68 61 6e 64 6c 65 20 44 42 2e 20 49 74 0a  e handle DB. It.
14220 2a 2a 20 69 73 20 61 73 73 75 6d 65 64 20 74 68  ** is assumed th
14230 61 74 20 74 68 65 20 75 73 65 72 20 66 75 6e 63  at the user func
14240 74 69 6f 6e 20 77 61 73 20 63 72 65 61 74 65 64  tion was created
14250 20 61 73 20 55 54 46 38 2c 20 61 6e 79 20 6e 75   as UTF8, any nu
14260 6d 62 65 72 20 6f 66 0a 2a 2a 20 61 72 67 75 6d  mber of.** argum
14270 65 6e 74 73 20 28 74 68 65 20 77 61 79 20 74 68  ents (the way th
14280 65 20 54 43 4c 20 69 6e 74 65 72 66 61 63 65 20  e TCL interface 
14290 64 6f 65 73 20 69 74 29 2e 0a 2a 2f 0a 73 74 61  does it)..*/.sta
142a0 74 69 63 20 69 6e 74 20 64 65 6c 65 74 65 5f 66  tic int delete_f
142b0 75 6e 63 74 69 6f 6e 28 0a 20 20 76 6f 69 64 20  unction(.  void 
142c0 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
142d0 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
142e0 72 70 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a  rp,.  int argc,.
142f0 20 20 63 68 61 72 20 2a 2a 61 72 67 76 0a 29 7b    char **argv.){
14300 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 73 71 6c  .  int rc;.  sql
14310 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 66 28 20  ite3 *db;.  if( 
14320 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54  argc!=3 ){.    T
14330 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
14340 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
14350 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
14360 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a   \"", argv[0], .
14370 20 20 20 20 20 20 20 20 22 20 44 42 20 66 75 6e          " DB fun
14380 63 74 69 6f 6e 2d 6e 61 6d 65 22 2c 20 30 29 3b  ction-name", 0);
14390 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
143a0 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
143b0 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e   getDbPointer(in
143c0 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26  terp, argv[1], &
143d0 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  db) ) return TCL
143e0 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73  _ERROR;.  rc = s
143f0 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
14400 6e 63 74 69 6f 6e 28 64 62 2c 20 61 72 67 76 5b  nction(db, argv[
14410 32 5d 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55  2], -1, SQLITE_U
14420 54 46 38 2c 20 30 2c 20 30 2c 20 30 2c 20 30 29  TF8, 0, 0, 0, 0)
14430 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c  ;.  Tcl_SetResul
14440 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20  t(interp, (char 
14450 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c  *)errorName(rc),
14460 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20   TCL_STATIC);.  
14470 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
14480 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
14490 71 6c 69 74 65 5f 64 65 6c 65 74 65 5f 63 6f 6c  qlite_delete_col
144a0 6c 61 74 69 6f 6e 20 44 42 20 63 6f 6c 6c 61 74  lation DB collat
144b0 69 6f 6e 2d 6e 61 6d 65 0a 2a 2a 0a 2a 2a 20 44  ion-name.**.** D
144c0 65 6c 65 74 65 20 74 68 65 20 63 6f 6c 6c 61 74  elete the collat
144d0 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 27 63 6f  ion sequence 'co
144e0 6c 6c 61 74 69 6f 6e 2d 6e 61 6d 65 27 20 66 72  llation-name' fr
144f0 6f 6d 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  om database hand
14500 6c 65 20 0a 2a 2a 20 44 42 2e 20 49 74 20 69 73  le .** DB. It is
14510 20 61 73 73 75 6d 65 64 20 74 68 61 74 20 74 68   assumed that th
14520 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  e collation sequ
14530 65 6e 63 65 20 77 61 73 20 63 72 65 61 74 65 64  ence was created
14540 20 61 73 20 55 54 46 38 20 28 74 68 65 20 0a 2a   as UTF8 (the .*
14550 2a 20 77 61 79 20 74 68 65 20 54 43 4c 20 69 6e  * way the TCL in
14560 74 65 72 66 61 63 65 20 64 6f 65 73 20 69 74 29  terface does it)
14570 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
14580 64 65 6c 65 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e  delete_collation
14590 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
145a0 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
145b0 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
145c0 6e 74 20 61 72 67 63 2c 0a 20 20 63 68 61 72 20  nt argc,.  char 
145d0 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 69 6e 74 20  **argv.){.  int 
145e0 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  rc;.  sqlite3 *d
145f0 62 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 33  b;.  if( argc!=3
14600 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
14610 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
14620 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
14630 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61  should be \"", a
14640 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20  rgv[0], .       
14650 20 22 20 44 42 20 66 75 6e 63 74 69 6f 6e 2d 6e   " DB function-n
14660 61 6d 65 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  ame", 0);.    re
14670 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
14680 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
14690 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61  ointer(interp, a
146a0 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72  rgv[1], &db) ) r
146b0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
146c0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
146d0 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e  create_collation
146e0 28 64 62 2c 20 61 72 67 76 5b 32 5d 2c 20 53 51  (db, argv[2], SQ
146f0 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 20 30 29  LITE_UTF8, 0, 0)
14700 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c  ;.  Tcl_SetResul
14710 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20  t(interp, (char 
14720 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c  *)errorName(rc),
14730 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20   TCL_STATIC);.  
14740 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
14750 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
14760 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63  qlite3_get_autoc
14770 6f 6d 6d 69 74 20 44 42 0a 2a 2a 0a 2a 2a 20 52  ommit DB.**.** R
14780 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 74 68  eturn true if th
14790 65 20 64 61 74 61 62 61 73 65 20 44 42 20 69 73  e database DB is
147a0 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 61 75   currently in au
147b0 74 6f 2d 63 6f 6d 6d 69 74 20 6d 6f 64 65 2e 0a  to-commit mode..
147c0 2a 2a 20 52 65 74 75 72 6e 20 66 61 6c 73 65 20  ** Return false 
147d0 69 66 20 6e 6f 74 2e 0a 2a 2f 0a 73 74 61 74 69  if not..*/.stati
147e0 63 20 69 6e 74 20 67 65 74 5f 61 75 74 6f 63 6f  c int get_autoco
147f0 6d 6d 69 74 28 0a 20 20 76 6f 69 64 20 2a 20 63  mmit(.  void * c
14800 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
14810 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
14820 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a 20 20 63  .  int argc,.  c
14830 68 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20  har **argv.){.  
14840 63 68 61 72 20 7a 42 75 66 5b 33 30 5d 3b 0a 20  char zBuf[30];. 
14850 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
14860 69 66 28 20 61 72 67 63 21 3d 32 20 29 7b 0a 20  if( argc!=2 ){. 
14870 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
14880 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
14890 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
148a0 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30  d be \"", argv[0
148b0 5d 2c 20 0a 20 20 20 20 20 20 20 20 22 20 44 42  ], .        " DB
148c0 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
148d0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
148e0 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e  .  if( getDbPoin
148f0 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76  ter(interp, argv
14900 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75  [1], &db) ) retu
14910 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
14920 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 25  sprintf(zBuf, "%
14930 64 22 2c 20 73 71 6c 69 74 65 33 5f 67 65 74 5f  d", sqlite3_get_
14940 61 75 74 6f 63 6f 6d 6d 69 74 28 64 62 29 29 3b  autocommit(db));
14950 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73  .  Tcl_AppendRes
14960 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66  ult(interp, zBuf
14970 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  , 0);.  return T
14980 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
14990 55 73 61 67 65 3a 20 20 74 63 6c 5f 76 61 72 69  Usage:  tcl_vari
149a0 61 62 6c 65 5f 74 79 70 65 20 56 41 52 49 41 42  able_type VARIAB
149b0 4c 45 4e 41 4d 45 0a 2a 2a 0a 2a 2a 20 52 65 74  LENAME.**.** Ret
149c0 75 72 6e 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  urn the name of 
149d0 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  the internal rep
149e0 72 65 73 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20  resentation for 
149f0 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20  the.** value of 
14a00 74 68 65 20 67 69 76 65 6e 20 76 61 72 69 61 62  the given variab
14a10 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  le..*/.static in
14a20 74 20 74 63 6c 5f 76 61 72 69 61 62 6c 65 5f 74  t tcl_variable_t
14a30 79 70 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  ype(.  void * cl
14a40 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
14a50 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
14a60 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
14a70 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
14a80 76 5b 5d 0a 29 7b 0a 20 20 54 63 6c 5f 4f 62 6a  v[].){.  Tcl_Obj
14a90 20 2a 70 56 61 72 3b 0a 20 20 69 66 28 20 6f 62   *pVar;.  if( ob
14aa0 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=2 ){.    Tcl
14ab0 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e  _WrongNumArgs(in
14ac0 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22  terp, 1, objv, "
14ad0 56 41 52 49 41 42 4c 45 22 29 3b 0a 20 20 20 20  VARIABLE");.    
14ae0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
14af0 3b 0a 20 20 7d 0a 20 20 70 56 61 72 20 3d 20 54  ;.  }.  pVar = T
14b00 63 6c 5f 47 65 74 56 61 72 32 45 78 28 69 6e 74  cl_GetVar2Ex(int
14b10 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
14b20 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 30 2c 20  ng(objv[1]), 0, 
14b30 54 43 4c 5f 4c 45 41 56 45 5f 45 52 52 5f 4d 53  TCL_LEAVE_ERR_MS
14b40 47 29 3b 0a 20 20 69 66 28 20 70 56 61 72 3d 3d  G);.  if( pVar==
14b50 30 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  0 ) return TCL_E
14b60 52 52 4f 52 3b 0a 20 20 69 66 28 20 70 56 61 72  RROR;.  if( pVar
14b70 2d 3e 74 79 70 65 50 74 72 20 29 7b 0a 20 20 20  ->typePtr ){.   
14b80 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c   Tcl_SetObjResul
14b90 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
14ba0 77 53 74 72 69 6e 67 4f 62 6a 28 70 56 61 72 2d  wStringObj(pVar-
14bb0 3e 74 79 70 65 50 74 72 2d 3e 6e 61 6d 65 2c 20  >typePtr->name, 
14bc0 2d 31 29 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  -1));.  }.  retu
14bd0 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
14be0 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
14bf0 74 65 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f  te3_release_memo
14c00 72 79 20 3f 4e 3f 0a 2a 2a 0a 2a 2a 20 41 74 74  ry ?N?.**.** Att
14c10 65 6d 70 74 20 74 6f 20 72 65 6c 65 61 73 65 20  empt to release 
14c20 6d 65 6d 6f 72 79 20 63 75 72 72 65 6e 74 6c 79  memory currently
14c30 20 68 65 6c 64 20 62 75 74 20 6e 6f 74 20 61 63   held but not ac
14c40 74 75 61 6c 6c 79 20 72 65 71 75 69 72 65 64 2e  tually required.
14c50 0a 2a 2a 20 54 68 65 20 69 6e 74 65 67 65 72 20  .** The integer 
14c60 4e 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  N is the number 
14c70 6f 66 20 62 79 74 65 73 20 77 65 20 61 72 65 20  of bytes we are 
14c80 74 72 79 69 6e 67 20 74 6f 20 72 65 6c 65 61 73  trying to releas
14c90 65 2e 20 20 54 68 65 20 0a 2a 2a 20 72 65 74 75  e.  The .** retu
14ca0 72 6e 20 76 61 6c 75 65 20 69 73 20 74 68 65 20  rn value is the 
14cb0 61 6d 6f 75 6e 74 20 6f 66 20 6d 65 6d 6f 72 79  amount of memory
14cc0 20 61 63 74 75 61 6c 6c 79 20 72 65 6c 65 61 73   actually releas
14cd0 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ed..*/.static in
14ce0 74 20 74 65 73 74 5f 72 65 6c 65 61 73 65 5f 6d  t test_release_m
14cf0 65 6d 6f 72 79 28 0a 20 20 76 6f 69 64 20 2a 20  emory(.  void * 
14d00 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
14d10 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
14d20 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
14d30 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
14d40 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 20 64 65 66  bjv[].){.#if def
14d50 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
14d60 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45  LE_MEMORY_MANAGE
14d70 4d 45 4e 54 29 20 26 26 20 21 64 65 66 69 6e 65  MENT) && !define
14d80 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 49  d(SQLITE_OMIT_DI
14d90 53 4b 49 4f 29 0a 20 20 69 6e 74 20 4e 3b 0a 20  SKIO).  int N;. 
14da0 20 69 6e 74 20 61 6d 74 3b 0a 20 20 69 66 28 20   int amt;.  if( 
14db0 6f 62 6a 63 21 3d 31 20 26 26 20 6f 62 6a 63 21  objc!=1 && objc!
14dc0 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72  =2 ){.    Tcl_Wr
14dd0 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72  ongNumArgs(inter
14de0 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 3f 4e 3f  p, 1, objv, "?N?
14df0 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  ");.    return T
14e00 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
14e10 69 66 28 20 6f 62 6a 63 3d 3d 32 20 29 7b 0a 20  if( objc==2 ){. 
14e20 20 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e     if( Tcl_GetIn
14e30 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
14e40 20 6f 62 6a 76 5b 31 5d 2c 20 26 4e 29 20 29 20   objv[1], &N) ) 
14e50 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
14e60 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 4e  ;.  }else{.    N
14e70 20 3d 20 2d 31 3b 0a 20 20 7d 0a 20 20 61 6d 74   = -1;.  }.  amt
14e80 20 3d 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61   = sqlite3_relea
14e90 73 65 5f 6d 65 6d 6f 72 79 28 4e 29 3b 0a 20 20  se_memory(N);.  
14ea0 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
14eb0 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
14ec0 49 6e 74 4f 62 6a 28 61 6d 74 29 29 3b 0a 23 65  IntObj(amt));.#e
14ed0 6e 64 69 66 0a 20 20 72 65 74 75 72 6e 20 54 43  ndif.  return TC
14ee0 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
14ef0 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 73  sage:  sqlite3_s
14f00 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 20 3f  oft_heap_limit ?
14f10 4e 3f 0a 2a 2a 0a 2a 2a 20 51 75 65 72 79 20 6f  N?.**.** Query o
14f20 72 20 73 65 74 20 74 68 65 20 73 6f 66 74 20 68  r set the soft h
14f30 65 61 70 20 6c 69 6d 69 74 20 66 6f 72 20 74 68  eap limit for th
14f40 65 20 63 75 72 72 65 6e 74 20 74 68 72 65 61 64  e current thread
14f50 2e 20 20 54 68 65 0a 2a 2a 20 6c 69 6d 69 74 20  .  The.** limit 
14f60 69 73 20 6f 6e 6c 79 20 63 68 61 6e 67 65 64 20  is only changed 
14f70 69 66 20 74 68 65 20 4e 20 69 73 20 70 72 65 73  if the N is pres
14f80 65 6e 74 2e 20 20 54 68 65 20 70 72 65 76 69 6f  ent.  The previo
14f90 75 73 20 6c 69 6d 69 74 0a 2a 2a 20 69 73 20 72  us limit.** is r
14fa0 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a 73 74 61 74  eturned..*/.stat
14fb0 69 63 20 69 6e 74 20 74 65 73 74 5f 73 6f 66 74  ic int test_soft
14fc0 5f 68 65 61 70 5f 6c 69 6d 69 74 28 0a 20 20 76  _heap_limit(.  v
14fd0 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
14fe0 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
14ff0 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
15000 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
15010 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23  ONST objv[].){.#
15020 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
15030 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f  E_ENABLE_MEMORY_
15040 4d 41 4e 41 47 45 4d 45 4e 54 29 20 26 26 20 21  MANAGEMENT) && !
15050 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
15060 4d 49 54 5f 44 49 53 4b 49 4f 29 0a 20 20 69 6e  MIT_DISKIO).  in
15070 74 20 61 6d 74 3b 0a 20 20 69 66 28 20 6f 62 6a  t amt;.  if( obj
15080 63 21 3d 31 20 26 26 20 6f 62 6a 63 21 3d 32 20  c!=1 && objc!=2 
15090 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67  ){.    Tcl_Wrong
150a0 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20  NumArgs(interp, 
150b0 31 2c 20 6f 62 6a 76 2c 20 22 3f 4e 3f 22 29 3b  1, objv, "?N?");
150c0 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
150d0 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 61 6d 74  ERROR;.  }.  amt
150e0 20 3d 20 73 71 6c 69 74 65 33 54 68 72 65 61 64   = sqlite3Thread
150f0 44 61 74 61 52 65 61 64 4f 6e 6c 79 28 29 2d 3e  DataReadOnly()->
15100 6e 53 6f 66 74 48 65 61 70 4c 69 6d 69 74 3b 0a  nSoftHeapLimit;.
15110 20 20 69 66 28 20 6f 62 6a 63 3d 3d 32 20 29 7b    if( objc==2 ){
15120 0a 20 20 20 20 69 6e 74 20 4e 3b 0a 20 20 20 20  .    int N;.    
15130 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72  if( Tcl_GetIntFr
15140 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
15150 6a 76 5b 31 5d 2c 20 26 4e 29 20 29 20 72 65 74  jv[1], &N) ) ret
15160 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
15170 20 20 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f     sqlite3_soft_
15180 68 65 61 70 5f 6c 69 6d 69 74 28 4e 29 3b 0a 20  heap_limit(N);. 
15190 20 7d 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52   }.  Tcl_SetObjR
151a0 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
151b0 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 61 6d 74 29  l_NewIntObj(amt)
151c0 29 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75  );.#endif.  retu
151d0 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
151e0 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c  .** Usage:   sql
151f0 69 74 65 33 5f 63 6c 65 61 72 5f 74 73 64 5f 6d  ite3_clear_tsd_m
15200 65 6d 64 65 62 75 67 0a 2a 2a 0a 2a 2a 20 43 6c  emdebug.**.** Cl
15210 65 61 72 20 61 6c 6c 20 6f 66 20 74 68 65 20 4d  ear all of the M
15220 45 4d 44 45 42 55 47 20 69 6e 66 6f 72 6d 61 74  EMDEBUG informat
15230 69 6f 6e 20 6f 75 74 20 6f 66 20 74 68 72 65 61  ion out of threa
15240 64 2d 73 70 65 63 69 66 69 63 20 64 61 74 61 2e  d-specific data.
15250 0a 2a 2a 20 54 68 69 73 20 77 69 6c 6c 20 61 6c  .** This will al
15260 6c 6f 77 20 69 74 20 74 6f 20 62 65 20 64 65 61  low it to be dea
15270 6c 6c 6f 63 61 74 65 64 2e 0a 2a 2f 0a 73 74 61  llocated..*/.sta
15280 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63 6c 65  tic int test_cle
15290 61 72 5f 74 73 64 5f 6d 65 6d 64 65 62 75 67 28  ar_tsd_memdebug(
152a0 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
152b0 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
152c0 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
152d0 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
152e0 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
152f0 29 7b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  ){.  return TCL_
15300 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
15310 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 74 73  ge:   sqlite3_ts
15320 64 5f 72 65 6c 65 61 73 65 0a 2a 2a 0a 2a 2a 20  d_release.**.** 
15330 43 61 6c 6c 20 73 71 6c 69 74 65 33 52 65 6c 65  Call sqlite3Rele
15340 61 73 65 54 68 72 65 61 64 44 61 74 61 2e 0a 2a  aseThreadData..*
15350 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
15360 74 5f 74 73 64 5f 72 65 6c 65 61 73 65 28 0a 20  t_tsd_release(. 
15370 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
15380 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
15390 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
153a0 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
153b0 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
153c0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
153d0 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 0a 20 20  ITE_MEMDEBUG).  
153e0 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 68  sqlite3ReleaseTh
153f0 72 65 61 64 44 61 74 61 28 29 3b 0a 23 65 6e 64  readData();.#end
15400 69 66 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  if.  return TCL_
15410 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
15420 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 74 68  ge:   sqlite3_th
15430 72 65 61 64 5f 63 6c 65 61 6e 75 70 0a 2a 2a 0a  read_cleanup.**.
15440 2a 2a 20 43 61 6c 6c 20 74 68 65 20 73 71 6c 69  ** Call the sqli
15450 74 65 33 5f 74 68 72 65 61 64 5f 63 6c 65 61 6e  te3_thread_clean
15460 75 70 20 41 50 49 2e 0a 2a 2f 0a 73 74 61 74 69  up API..*/.stati
15470 63 20 69 6e 74 20 74 65 73 74 5f 74 68 72 65 61  c int test_threa
15480 64 5f 63 6c 65 61 6e 75 70 28 0a 20 20 76 6f 69  d_cleanup(.  voi
15490 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
154a0 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
154b0 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
154c0 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
154d0 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73  ST objv[].){.  s
154e0 71 6c 69 74 65 33 5f 74 68 72 65 61 64 5f 63 6c  qlite3_thread_cl
154f0 65 61 6e 75 70 28 29 3b 0a 20 20 72 65 74 75 72  eanup();.  retur
15500 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a  n TCL_OK;.}.../*
15510 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65  .** This routine
15520 20 73 65 74 73 20 65 6e 74 72 69 65 73 20 69 6e   sets entries in
15530 20 74 68 65 20 67 6c 6f 62 61 6c 20 3a 3a 73 71   the global ::sq
15540 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 28 29 20 61  lite_options() a
15550 72 72 61 79 20 76 61 72 69 61 62 6c 65 0a 2a 2a  rray variable.**
15560 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68   according to th
15570 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63  e compile-time c
15580 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 66 20  onfiguration of 
15590 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54  the database.  T
155a0 65 73 74 0a 2a 2a 20 70 72 6f 63 65 64 75 72 65  est.** procedure
155b0 73 20 75 73 65 20 74 68 69 73 20 74 6f 20 64 65  s use this to de
155c0 74 65 72 6d 69 6e 65 20 77 68 65 6e 20 74 65 73  termine when tes
155d0 74 73 20 73 68 6f 75 6c 64 20 62 65 20 6f 6d 69  ts should be omi
155e0 74 74 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  tted..*/.static 
155f0 76 6f 69 64 20 73 65 74 5f 6f 70 74 69 6f 6e 73  void set_options
15600 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74  (Tcl_Interp *int
15610 65 72 70 29 7b 0a 23 69 66 64 65 66 20 53 51 4c  erp){.#ifdef SQL
15620 49 54 45 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a  ITE_32BIT_ROWID.
15630 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
15640 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
15650 74 69 6f 6e 73 22 2c 20 22 72 6f 77 69 64 33 32  tions", "rowid32
15660 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
15670 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
15680 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
15690 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
156a0 74 69 6f 6e 73 22 2c 20 22 72 6f 77 69 64 33 32  tions", "rowid32
156b0 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
156c0 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
156d0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
156e0 43 41 53 45 5f 53 45 4e 53 49 54 49 56 45 5f 4c  CASE_SENSITIVE_L
156f0 49 4b 45 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  IKE.  Tcl_SetVar
15700 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
15710 65 5f 6f 70 74 69 6f 6e 73 22 2c 22 63 61 73 65  e_options","case
15720 73 65 6e 73 69 74 69 76 65 6c 69 6b 65 22 2c 22  sensitivelike","
15730 31 22 2c 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  1",TCL_GLOBAL_ON
15740 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
15750 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
15760 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
15770 22 2c 22 63 61 73 65 73 65 6e 73 69 74 69 76 65  ","casesensitive
15780 6c 69 6b 65 22 2c 22 30 22 2c 54 43 4c 5f 47 4c  like","0",TCL_GL
15790 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
157a0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
157b0 45 5f 44 49 53 41 42 4c 45 5f 44 49 52 53 59 4e  E_DISABLE_DIRSYN
157c0 43 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  C.  Tcl_SetVar2(
157d0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
157e0 6f 70 74 69 6f 6e 73 22 2c 20 22 64 69 72 73 79  options", "dirsy
157f0 6e 63 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  nc", "0", TCL_GL
15800 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
15810 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
15820 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
15830 6f 70 74 69 6f 6e 73 22 2c 20 22 64 69 72 73 79  options", "dirsy
15840 6e 63 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  nc", "1", TCL_GL
15850 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
15860 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
15870 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53 0a 20 20  E_DISABLE_LFS.  
15880 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
15890 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
158a0 6f 6e 73 22 2c 20 22 6c 66 73 22 2c 20 22 30 22  ons", "lfs", "0"
158b0 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
158c0 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
158d0 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
158e0 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
158f0 2c 20 22 6c 66 73 22 2c 20 22 31 22 2c 20 54 43  , "lfs", "1", TC
15900 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
15910 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
15920 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52  QLITE_OMIT_ALTER
15930 54 41 42 4c 45 0a 20 20 54 63 6c 5f 53 65 74 56  TABLE.  Tcl_SetV
15940 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
15950 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 61  ite_options", "a
15960 6c 74 65 72 74 61 62 6c 65 22 2c 20 22 30 22 2c  ltertable", "0",
15970 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
15980 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
15990 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
159a0 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
159b0 20 22 61 6c 74 65 72 74 61 62 6c 65 22 2c 20 22   "altertable", "
159c0 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
159d0 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
159e0 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
159f0 5f 41 4e 41 4c 59 5a 45 0a 20 20 54 63 6c 5f 53  _ANALYZE.  Tcl_S
15a00 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
15a10 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
15a20 20 22 61 6e 61 6c 79 7a 65 22 2c 20 22 30 22 2c   "analyze", "0",
15a30 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
15a40 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
15a50 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
15a60 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
15a70 20 22 61 6e 61 6c 79 7a 65 22 2c 20 22 31 22 2c   "analyze", "1",
15a80 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
15a90 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
15aa0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
15ab0 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 54 63  THORIZATION.  Tc
15ac0 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
15ad0 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
15ae0 73 22 2c 20 22 61 75 74 68 22 2c 20 22 30 22 2c  s", "auth", "0",
15af0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
15b00 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
15b10 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
15b20 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
15b30 20 22 61 75 74 68 22 2c 20 22 31 22 2c 20 54 43   "auth", "1", TC
15b40 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
15b50 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
15b60 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
15b70 4e 43 52 45 4d 45 4e 54 0a 20 20 54 63 6c 5f 53  NCREMENT.  Tcl_S
15b80 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
15b90 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
15ba0 20 22 61 75 74 6f 69 6e 63 22 2c 20 22 30 22 2c   "autoinc", "0",
15bb0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
15bc0 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
15bd0 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
15be0 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
15bf0 20 22 61 75 74 6f 69 6e 63 22 2c 20 22 31 22 2c   "autoinc", "1",
15c00 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
15c10 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
15c20 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
15c30 54 4f 56 41 43 55 55 4d 0a 20 20 54 63 6c 5f 53  TOVACUUM.  Tcl_S
15c40 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
15c50 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
15c60 20 22 61 75 74 6f 76 61 63 75 75 6d 22 2c 20 22   "autovacuum", "
15c70 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
15c80 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
15c90 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
15ca0 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
15cb0 73 22 2c 20 22 61 75 74 6f 76 61 63 75 75 6d 22  s", "autovacuum"
15cc0 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
15cd0 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 20  L_ONLY);.#endif 
15ce0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  /* SQLITE_OMIT_A
15cf0 55 54 4f 56 41 43 55 55 4d 20 2a 2f 0a 23 69 66  UTOVACUUM */.#if
15d00 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
15d10 5f 44 45 46 41 55 4c 54 5f 41 55 54 4f 56 41 43  _DEFAULT_AUTOVAC
15d20 55 55 4d 29 20 7c 7c 20 53 51 4c 49 54 45 5f 44  UUM) || SQLITE_D
15d30 45 46 41 55 4c 54 5f 41 55 54 4f 56 41 43 55 55  EFAULT_AUTOVACUU
15d40 4d 3d 3d 30 0a 20 20 54 63 6c 5f 53 65 74 56 61  M==0.  Tcl_SetVa
15d50 72 32 28 69 6e 74 65 72 70 2c 22 73 71 6c 69 74  r2(interp,"sqlit
15d60 65 5f 6f 70 74 69 6f 6e 73 22 2c 22 64 65 66 61  e_options","defa
15d70 75 6c 74 5f 61 75 74 6f 76 61 63 75 75 6d 22 2c  ult_autovacuum",
15d80 22 30 22 2c 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  "0",TCL_GLOBAL_O
15d90 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
15da0 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
15db0 2c 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73  ,"sqlite_options
15dc0 22 2c 22 64 65 66 61 75 6c 74 5f 61 75 74 6f 76  ","default_autov
15dd0 61 63 75 75 6d 22 2c 22 31 22 2c 54 43 4c 5f 47  acuum","1",TCL_G
15de0 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
15df0 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
15e00 54 45 5f 4f 4d 49 54 5f 42 45 54 57 45 45 4e 5f  TE_OMIT_BETWEEN_
15e10 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 0a 20 20 54  OPTIMIZATION.  T
15e20 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
15e30 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
15e40 6e 73 22 2c 20 22 62 65 74 77 65 65 6e 5f 6f 70  ns", "between_op
15e50 74 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  t", "0", TCL_GLO
15e60 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
15e70 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
15e80 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
15e90 70 74 69 6f 6e 73 22 2c 20 22 62 65 74 77 65 65  ptions", "betwee
15ea0 6e 5f 6f 70 74 22 2c 20 22 31 22 2c 20 54 43 4c  n_opt", "1", TCL
15eb0 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
15ec0 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
15ed0 4c 49 54 45 5f 4f 4d 49 54 5f 42 4c 4f 42 5f 4c  LITE_OMIT_BLOB_L
15ee0 49 54 45 52 41 4c 0a 20 20 54 63 6c 5f 53 65 74  ITERAL.  Tcl_Set
15ef0 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
15f00 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
15f10 62 6c 6f 62 6c 69 74 22 2c 20 22 30 22 2c 20 54  bloblit", "0", T
15f20 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
15f30 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
15f40 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
15f50 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
15f60 62 6c 6f 62 6c 69 74 22 2c 20 22 31 22 2c 20 54  bloblit", "1", T
15f70 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
15f80 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
15f90 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54  SQLITE_OMIT_CAST
15fa0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
15fb0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
15fc0 70 74 69 6f 6e 73 22 2c 20 22 63 61 73 74 22 2c  ptions", "cast",
15fd0 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
15fe0 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
15ff0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
16000 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
16010 6f 6e 73 22 2c 20 22 63 61 73 74 22 2c 20 22 31  ons", "cast", "1
16020 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
16030 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
16040 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
16050 43 48 45 43 4b 0a 20 20 54 63 6c 5f 53 65 74 56  CHECK.  Tcl_SetV
16060 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
16070 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63  ite_options", "c
16080 68 65 63 6b 22 2c 20 22 30 22 2c 20 54 43 4c 5f  heck", "0", TCL_
16090 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
160a0 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
160b0 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
160c0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63 68 65  e_options", "che
160d0 63 6b 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  ck", "1", TCL_GL
160e0 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
160f0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
16100 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f  E_ENABLE_COLUMN_
16110 4d 45 54 41 44 41 54 41 0a 20 20 54 63 6c 5f 53  METADATA.  Tcl_S
16120 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
16130 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
16140 20 22 63 6f 6c 75 6d 6e 6d 65 74 61 64 61 74 61   "columnmetadata
16150 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
16160 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
16170 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
16180 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
16190 74 69 6f 6e 73 22 2c 20 22 63 6f 6c 75 6d 6e 6d  tions", "columnm
161a0 65 74 61 64 61 74 61 22 2c 20 22 30 22 2c 20 54  etadata", "0", T
161b0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
161c0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
161d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50  SQLITE_OMIT_COMP
161e0 4c 45 54 45 0a 20 20 54 63 6c 5f 53 65 74 56 61  LETE.  Tcl_SetVa
161f0 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
16200 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63 6f  te_options", "co
16210 6d 70 6c 65 74 65 22 2c 20 22 30 22 2c 20 54 43  mplete", "0", TC
16220 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
16230 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
16240 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
16250 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63  ite_options", "c
16260 6f 6d 70 6c 65 74 65 22 2c 20 22 31 22 2c 20 54  omplete", "1", T
16270 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
16280 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
16290 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50  SQLITE_OMIT_COMP
162a0 4f 55 4e 44 5f 53 45 4c 45 43 54 0a 20 20 54 63  OUND_SELECT.  Tc
162b0 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
162c0 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
162d0 73 22 2c 20 22 63 6f 6d 70 6f 75 6e 64 22 2c 20  s", "compound", 
162e0 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
162f0 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
16300 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
16310 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
16320 6e 73 22 2c 20 22 63 6f 6d 70 6f 75 6e 64 22 2c  ns", "compound",
16330 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
16340 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
16350 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
16360 49 54 5f 43 4f 4e 46 4c 49 43 54 5f 43 4c 41 55  IT_CONFLICT_CLAU
16370 53 45 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  SE.  Tcl_SetVar2
16380 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
16390 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63 6f 6e 66  _options", "conf
163a0 6c 69 63 74 22 2c 20 22 30 22 2c 20 54 43 4c 5f  lict", "0", TCL_
163b0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
163c0 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
163d0 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
163e0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63 6f 6e  e_options", "con
163f0 66 6c 69 63 74 22 2c 20 22 31 22 2c 20 54 43 4c  flict", "1", TCL
16400 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
16410 65 6e 64 69 66 0a 0a 23 69 66 20 4f 53 5f 55 4e  endif..#if OS_UN
16420 49 58 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  IX.  Tcl_SetVar2
16430 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
16440 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63 72 61 73  _options", "cras
16450 68 74 65 73 74 22 2c 20 22 31 22 2c 20 54 43 4c  htest", "1", TCL
16460 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
16470 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
16480 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
16490 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63 72  te_options", "cr
164a0 61 73 68 74 65 73 74 22 2c 20 22 30 22 2c 20 54  ashtest", "0", T
164b0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
164c0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
164d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54 45  SQLITE_OMIT_DATE
164e0 54 49 4d 45 5f 46 55 4e 43 53 0a 20 20 54 63 6c  TIME_FUNCS.  Tcl
164f0 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
16500 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
16510 22 2c 20 22 64 61 74 65 74 69 6d 65 22 2c 20 22  ", "datetime", "
16520 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
16530 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
16540 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
16550 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
16560 73 22 2c 20 22 64 61 74 65 74 69 6d 65 22 2c 20  s", "datetime", 
16570 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
16580 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
16590 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
165a0 54 5f 44 49 53 4b 49 4f 0a 20 20 54 63 6c 5f 53  T_DISKIO.  Tcl_S
165b0 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
165c0 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
165d0 20 22 64 69 73 6b 69 6f 22 2c 20 22 30 22 2c 20   "diskio", "0", 
165e0 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
165f0 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
16600 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
16610 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
16620 22 64 69 73 6b 69 6f 22 2c 20 22 31 22 2c 20 54  "diskio", "1", T
16630 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
16640 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
16650 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c  SQLITE_OMIT_EXPL
16660 41 49 4e 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  AIN.  Tcl_SetVar
16670 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
16680 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 65 78 70  e_options", "exp
16690 6c 61 69 6e 22 2c 20 22 30 22 2c 20 54 43 4c 5f  lain", "0", TCL_
166a0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
166b0 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
166c0 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
166d0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 65 78 70  e_options", "exp
166e0 6c 61 69 6e 22 2c 20 22 31 22 2c 20 54 43 4c 5f  lain", "1", TCL_
166f0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
16700 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
16710 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
16720 47 5f 50 4f 49 4e 54 0a 20 20 54 63 6c 5f 53 65  G_POINT.  Tcl_Se
16730 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
16740 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
16750 22 66 6c 6f 61 74 69 6e 67 70 6f 69 6e 74 22 2c  "floatingpoint",
16760 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
16770 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
16780 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
16790 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
167a0 6f 6e 73 22 2c 20 22 66 6c 6f 61 74 69 6e 67 70  ons", "floatingp
167b0 6f 69 6e 74 22 2c 20 22 31 22 2c 20 54 43 4c 5f  oint", "1", TCL_
167c0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
167d0 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
167e0 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
167f0 5f 4b 45 59 0a 20 20 54 63 6c 5f 53 65 74 56 61  _KEY.  Tcl_SetVa
16800 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
16810 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 66 6f  te_options", "fo
16820 72 65 69 67 6e 6b 65 79 22 2c 20 22 30 22 2c 20  reignkey", "0", 
16830 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
16840 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
16850 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
16860 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
16870 22 66 6f 72 65 69 67 6e 6b 65 79 22 2c 20 22 31  "foreignkey", "1
16880 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
16890 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
168a0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
168b0 47 4c 4f 42 41 4c 52 45 43 4f 56 45 52 0a 20 20  GLOBALRECOVER.  
168c0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
168d0 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
168e0 6f 6e 73 22 2c 20 22 67 6c 6f 62 61 6c 72 65 63  ons", "globalrec
168f0 6f 76 65 72 22 2c 20 22 30 22 2c 20 54 43 4c 5f  over", "0", TCL_
16900 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
16910 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
16920 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
16930 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 67 6c 6f  e_options", "glo
16940 62 61 6c 72 65 63 6f 76 65 72 22 2c 20 22 31 22  balrecover", "1"
16950 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
16960 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  Y);.#endif..#ifd
16970 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49  ef SQLITE_OMIT_I
16980 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 20  NTEGRITY_CHECK. 
16990 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
169a0 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
169b0 69 6f 6e 73 22 2c 20 22 69 6e 74 65 67 72 69 74  ions", "integrit
169c0 79 63 6b 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  yck", "0", TCL_G
169d0 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
169e0 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
169f0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
16a00 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 69 6e 74 65  _options", "inte
16a10 67 72 69 74 79 63 6b 22 2c 20 22 31 22 2c 20 54  grityck", "1", T
16a20 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
16a30 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
16a40 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 49 4b 45  SQLITE_OMIT_LIKE
16a50 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 0a 20 20  _OPTIMIZATION.  
16a60 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
16a70 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
16a80 6f 6e 73 22 2c 20 22 6c 69 6b 65 5f 6f 70 74 22  ons", "like_opt"
16a90 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
16aa0 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
16ab0 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
16ac0 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
16ad0 69 6f 6e 73 22 2c 20 22 6c 69 6b 65 5f 6f 70 74  ions", "like_opt
16ae0 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
16af0 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
16b00 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
16b10 4f 4d 49 54 5f 4d 45 4d 4f 52 59 44 42 0a 20 20  OMIT_MEMORYDB.  
16b20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
16b30 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
16b40 6f 6e 73 22 2c 20 22 6d 65 6d 6f 72 79 64 62 22  ons", "memorydb"
16b50 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
16b60 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
16b70 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
16b80 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
16b90 69 6f 6e 73 22 2c 20 22 6d 65 6d 6f 72 79 64 62  ions", "memorydb
16ba0 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
16bb0 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
16bc0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
16bd0 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41  ENABLE_MEMORY_MA
16be0 4e 41 47 45 4d 45 4e 54 0a 20 20 54 63 6c 5f 53  NAGEMENT.  Tcl_S
16bf0 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
16c00 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
16c10 20 22 6d 65 6d 6f 72 79 6d 61 6e 61 67 65 22 2c   "memorymanage",
16c20 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
16c30 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
16c40 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
16c50 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
16c60 6f 6e 73 22 2c 20 22 6d 65 6d 6f 72 79 6d 61 6e  ons", "memoryman
16c70 61 67 65 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  age", "0", TCL_G
16c80 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
16c90 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
16ca0 54 45 5f 4f 4d 49 54 5f 4f 52 5f 4f 50 54 49 4d  TE_OMIT_OR_OPTIM
16cb0 49 5a 41 54 49 4f 4e 0a 20 20 54 63 6c 5f 53 65  IZATION.  Tcl_Se
16cc0 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
16cd0 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
16ce0 22 6f 72 5f 6f 70 74 22 2c 20 22 30 22 2c 20 54  "or_opt", "0", T
16cf0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
16d00 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
16d10 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
16d20 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
16d30 6f 72 5f 6f 70 74 22 2c 20 22 31 22 2c 20 54 43  or_opt", "1", TC
16d40 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
16d50 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
16d60 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
16d70 5f 50 52 41 47 4d 41 53 0a 20 20 54 63 6c 5f 53  _PRAGMAS.  Tcl_S
16d80 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
16d90 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
16da0 20 22 70 61 67 65 72 5f 70 72 61 67 6d 61 73 22   "pager_pragmas"
16db0 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
16dc0 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
16dd0 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
16de0 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
16df0 69 6f 6e 73 22 2c 20 22 70 61 67 65 72 5f 70 72  ions", "pager_pr
16e00 61 67 6d 61 73 22 2c 20 22 31 22 2c 20 54 43 4c  agmas", "1", TCL
16e10 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
16e20 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
16e30 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 52 53 45 52  LITE_OMIT_PARSER
16e40 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
16e50 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
16e60 70 74 69 6f 6e 73 22 2c 20 22 70 61 72 73 65 72  ptions", "parser
16e70 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
16e80 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
16e90 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
16ea0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
16eb0 74 69 6f 6e 73 22 2c 20 22 70 61 72 73 65 72 22  tions", "parser"
16ec0 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
16ed0 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
16ee0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
16ef0 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 29  ITE_OMIT_PRAGMA)
16f00 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
16f10 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41  TE_OMIT_FLAG_PRA
16f20 47 4d 41 53 29 0a 20 20 54 63 6c 5f 53 65 74 56  GMAS).  Tcl_SetV
16f30 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
16f40 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 70  ite_options", "p
16f50 72 61 67 6d 61 22 2c 20 22 30 22 2c 20 54 43 4c  ragma", "0", TCL
16f60 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 20  _GLOBAL_ONLY);. 
16f70 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
16f80 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
16f90 69 6f 6e 73 22 2c 20 22 69 6e 74 65 67 72 69 74  ions", "integrit
16fa0 79 63 6b 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  yck", "0", TCL_G
16fb0 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
16fc0 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
16fd0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
16fe0 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 70 72 61 67  _options", "prag
16ff0 6d 61 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  ma", "1", TCL_GL
17000 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
17010 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
17020 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f  E_OMIT_PROGRESS_
17030 43 41 4c 4c 42 41 43 4b 0a 20 20 54 63 6c 5f 53  CALLBACK.  Tcl_S
17040 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
17050 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
17060 20 22 70 72 6f 67 72 65 73 73 22 2c 20 22 30 22   "progress", "0"
17070 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
17080 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
17090 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
170a0 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
170b0 2c 20 22 70 72 6f 67 72 65 73 73 22 2c 20 22 31  , "progress", "1
170c0 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
170d0 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
170e0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
170f0 45 5f 52 45 44 45 46 5f 49 4f 0a 20 20 54 63 6c  E_REDEF_IO.  Tcl
17100 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
17110 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
17120 22 2c 20 22 72 65 64 65 66 69 6f 22 2c 20 22 31  ", "redefio", "1
17130 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
17140 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
17150 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
17160 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
17170 22 2c 20 22 72 65 64 65 66 69 6f 22 2c 20 22 30  ", "redefio", "0
17180 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
17190 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
171a0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
171b0 52 45 49 4e 44 45 58 0a 20 20 54 63 6c 5f 53 65  REINDEX.  Tcl_Se
171c0 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
171d0 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
171e0 22 72 65 69 6e 64 65 78 22 2c 20 22 30 22 2c 20  "reindex", "0", 
171f0 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
17200 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
17210 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
17220 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
17230 22 72 65 69 6e 64 65 78 22 2c 20 22 31 22 2c 20  "reindex", "1", 
17240 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
17250 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
17260 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48   SQLITE_OMIT_SCH
17270 45 4d 41 5f 50 52 41 47 4d 41 53 0a 20 20 54 63  EMA_PRAGMAS.  Tc
17280 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
17290 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
172a0 73 22 2c 20 22 73 63 68 65 6d 61 5f 70 72 61 67  s", "schema_prag
172b0 6d 61 73 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  mas", "0", TCL_G
172c0 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
172d0 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
172e0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
172f0 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 73 63 68 65  _options", "sche
17300 6d 61 5f 70 72 61 67 6d 61 73 22 2c 20 22 31 22  ma_pragmas", "1"
17310 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
17320 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  Y);.#endif..#ifd
17330 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
17340 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52  CHEMA_VERSION_PR
17350 41 47 4d 41 53 0a 20 20 54 63 6c 5f 53 65 74 56  AGMAS.  Tcl_SetV
17360 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
17370 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 73  ite_options", "s
17380 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 22 2c 20  chema_version", 
17390 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
173a0 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
173b0 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
173c0 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
173d0 6e 73 22 2c 20 22 73 63 68 65 6d 61 5f 76 65 72  ns", "schema_ver
173e0 73 69 6f 6e 22 2c 20 22 31 22 2c 20 54 43 4c 5f  sion", "1", TCL_
173f0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
17400 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
17410 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
17420 43 41 43 48 45 0a 20 20 54 63 6c 5f 53 65 74 56  CACHE.  Tcl_SetV
17430 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
17440 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 73  ite_options", "s
17450 68 61 72 65 64 5f 63 61 63 68 65 22 2c 20 22 30  hared_cache", "0
17460 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
17470 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
17480 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
17490 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
174a0 22 2c 20 22 73 68 61 72 65 64 5f 63 61 63 68 65  ", "shared_cache
174b0 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
174c0 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
174d0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
174e0 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 0a 20 20  OMIT_SUBQUERY.  
174f0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
17500 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
17510 6f 6e 73 22 2c 20 22 73 75 62 71 75 65 72 79 22  ons", "subquery"
17520 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
17530 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
17540 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
17550 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
17560 69 6f 6e 73 22 2c 20 22 73 75 62 71 75 65 72 79  ions", "subquery
17570 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
17580 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
17590 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
175a0 4f 4d 49 54 5f 54 43 4c 5f 56 41 52 49 41 42 4c  OMIT_TCL_VARIABL
175b0 45 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  E.  Tcl_SetVar2(
175c0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
175d0 6f 70 74 69 6f 6e 73 22 2c 20 22 74 63 6c 76 61  options", "tclva
175e0 72 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  r", "0", TCL_GLO
175f0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
17600 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
17610 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
17620 70 74 69 6f 6e 73 22 2c 20 22 74 63 6c 76 61 72  ptions", "tclvar
17630 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
17640 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
17650 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 54 48  ..#if defined(TH
17660 52 45 41 44 53 41 46 45 29 20 26 26 20 54 48 52  READSAFE) && THR
17670 45 41 44 53 41 46 45 0a 20 20 54 63 6c 5f 53 65  EADSAFE.  Tcl_Se
17680 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
17690 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
176a0 22 74 68 72 65 61 64 73 61 66 65 22 2c 20 22 31  "threadsafe", "1
176b0 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
176c0 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
176d0 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
176e0 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
176f0 22 2c 20 22 74 68 72 65 61 64 73 61 66 65 22 2c  ", "threadsafe",
17700 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
17710 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
17720 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
17730 49 54 5f 54 52 41 43 45 0a 20 20 54 63 6c 5f 53  IT_TRACE.  Tcl_S
17740 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
17750 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
17760 20 22 74 72 61 63 65 22 2c 20 22 30 22 2c 20 54   "trace", "0", T
17770 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
17780 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
17790 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
177a0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
177b0 74 72 61 63 65 22 2c 20 22 31 22 2c 20 54 43 4c  trace", "1", TCL
177c0 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
177d0 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
177e0 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
177f0 52 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  R.  Tcl_SetVar2(
17800 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
17810 6f 70 74 69 6f 6e 73 22 2c 20 22 74 72 69 67 67  options", "trigg
17820 65 72 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  er", "0", TCL_GL
17830 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
17840 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
17850 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
17860 6f 70 74 69 6f 6e 73 22 2c 20 22 74 72 69 67 67  options", "trigg
17870 65 72 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  er", "1", TCL_GL
17880 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
17890 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
178a0 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 20 20  E_OMIT_TEMPDB.  
178b0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
178c0 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
178d0 6f 6e 73 22 2c 20 22 74 65 6d 70 64 62 22 2c 20  ons", "tempdb", 
178e0 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
178f0 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
17900 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
17910 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
17920 6e 73 22 2c 20 22 74 65 6d 70 64 62 22 2c 20 22  ns", "tempdb", "
17930 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
17940 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
17950 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
17960 5f 55 54 46 31 36 0a 20 20 54 63 6c 5f 53 65 74  _UTF16.  Tcl_Set
17970 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
17980 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
17990 75 74 66 31 36 22 2c 20 22 30 22 2c 20 54 43 4c  utf16", "0", TCL
179a0 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
179b0 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
179c0 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
179d0 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 75 74  te_options", "ut
179e0 66 31 36 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47  f16", "1", TCL_G
179f0 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
17a00 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
17a10 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 0a 20  TE_OMIT_VACUUM. 
17a20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
17a30 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
17a40 69 6f 6e 73 22 2c 20 22 76 61 63 75 75 6d 22 2c  ions", "vacuum",
17a50 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
17a60 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
17a70 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
17a80 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
17a90 6f 6e 73 22 2c 20 22 76 61 63 75 75 6d 22 2c 20  ons", "vacuum", 
17aa0 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
17ab0 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
17ac0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
17ad0 54 5f 56 49 45 57 0a 20 20 54 63 6c 5f 53 65 74  T_VIEW.  Tcl_Set
17ae0 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
17af0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
17b00 76 69 65 77 22 2c 20 22 30 22 2c 20 54 43 4c 5f  view", "0", TCL_
17b10 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
17b20 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
17b30 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
17b40 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 76 69 65  e_options", "vie
17b50 77 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  w", "1", TCL_GLO
17b60 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
17b70 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73  f.}../*.** Regis
17b80 74 65 72 20 63 6f 6d 6d 61 6e 64 73 20 77 69 74  ter commands wit
17b90 68 20 74 68 65 20 54 43 4c 20 69 6e 74 65 72 70  h the TCL interp
17ba0 72 65 74 65 72 2e 0a 2a 2f 0a 69 6e 74 20 53 71  reter..*/.int Sq
17bb0 6c 69 74 65 74 65 73 74 31 5f 49 6e 69 74 28 54  litetest1_Init(T
17bc0 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
17bd0 70 29 7b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74  p){.  extern int
17be0 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
17bf0 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20  count;.  extern 
17c00 69 6e 74 20 73 71 6c 69 74 65 33 5f 69 6e 74 65  int sqlite3_inte
17c10 72 72 75 70 74 5f 63 6f 75 6e 74 3b 0a 20 20 65  rrupt_count;.  e
17c20 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
17c30 33 5f 6f 70 65 6e 5f 66 69 6c 65 5f 63 6f 75 6e  3_open_file_coun
17c40 74 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20  t;.  extern int 
17c50 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75  sqlite3_sort_cou
17c60 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74  nt;.  extern int
17c70 20 73 71 6c 69 74 65 33 5f 63 75 72 72 65 6e 74   sqlite3_current
17c80 5f 74 69 6d 65 3b 0a 20 20 73 74 61 74 69 63 20  _time;.  static 
17c90 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 63 68  struct {.     ch
17ca0 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20 20  ar *zName;.     
17cb0 54 63 6c 5f 43 6d 64 50 72 6f 63 20 2a 78 50 72  Tcl_CmdProc *xPr
17cc0 6f 63 3b 0a 20 20 7d 20 61 43 6d 64 5b 5d 20 3d  oc;.  } aCmd[] =
17cd0 20 7b 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74   {.     { "sqlit
17ce0 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 22 2c  e3_mprintf_int",
17cf0 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f             (Tcl_
17d00 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33  CmdProc*)sqlite3
17d10 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 20 20 20 20  _mprintf_int    
17d20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
17d30 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 36 34  e3_mprintf_int64
17d40 22 2c 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f  ",         (Tcl_
17d50 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33  CmdProc*)sqlite3
17d60 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 36 34 20 20  _mprintf_int64  
17d70 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
17d80 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72 22 2c  e3_mprintf_str",
17d90 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f             (Tcl_
17da0 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33  CmdProc*)sqlite3
17db0 5f 6d 70 72 69 6e 74 66 5f 73 74 72 20 20 20 20  _mprintf_str    
17dc0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
17dd0 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72 6f 6e  e3_mprintf_stron
17de0 6c 79 22 2c 20 20 20 20 20 20 20 28 54 63 6c 5f  ly",       (Tcl_
17df0 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33  CmdProc*)sqlite3
17e00 5f 6d 70 72 69 6e 74 66 5f 73 74 72 6f 6e 6c 79  _mprintf_stronly
17e10 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
17e20 65 33 5f 6d 70 72 69 6e 74 66 5f 64 6f 75 62 6c  e3_mprintf_doubl
17e30 65 22 2c 20 20 20 20 20 20 20 20 28 54 63 6c 5f  e",        (Tcl_
17e40 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33  CmdProc*)sqlite3
17e50 5f 6d 70 72 69 6e 74 66 5f 64 6f 75 62 6c 65 20  _mprintf_double 
17e60 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
17e70 65 33 5f 6d 70 72 69 6e 74 66 5f 73 63 61 6c 65  e3_mprintf_scale
17e80 64 22 2c 20 20 20 20 20 20 20 20 28 54 63 6c 5f  d",        (Tcl_
17e90 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33  CmdProc*)sqlite3
17ea0 5f 6d 70 72 69 6e 74 66 5f 73 63 61 6c 65 64 20  _mprintf_scaled 
17eb0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
17ec0 65 33 5f 6d 70 72 69 6e 74 66 5f 68 65 78 64 6f  e3_mprintf_hexdo
17ed0 75 62 6c 65 22 2c 20 20 20 28 54 63 6c 5f 43 6d  uble",   (Tcl_Cm
17ee0 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33 5f 6d  dProc*)sqlite3_m
17ef0 70 72 69 6e 74 66 5f 68 65 78 64 6f 75 62 6c 65  printf_hexdouble
17f00 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
17f10 65 33 5f 6d 70 72 69 6e 74 66 5f 7a 5f 74 65 73  e3_mprintf_z_tes
17f20 74 22 2c 20 20 20 20 20 20 20 20 28 54 63 6c 5f  t",        (Tcl_
17f30 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 6d 70  CmdProc*)test_mp
17f40 72 69 6e 74 66 5f 7a 20 20 20 20 20 20 20 20 7d  rintf_z        }
17f50 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
17f60 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  3_last_insert_ro
17f70 77 69 64 22 2c 20 20 20 20 20 28 54 63 6c 5f 43  wid",     (Tcl_C
17f80 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 6c 61 73  mdProc*)test_las
17f90 74 5f 72 6f 77 69 64 20 20 20 20 20 20 20 7d 2c  t_rowid       },
17fa0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
17fb0 5f 65 78 65 63 5f 70 72 69 6e 74 66 22 2c 20 20  _exec_printf",  
17fc0 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d           (Tcl_Cm
17fd0 64 50 72 6f 63 2a 29 74 65 73 74 5f 65 78 65 63  dProc*)test_exec
17fe0 5f 70 72 69 6e 74 66 20 20 20 20 20 20 7d 2c 0a  _printf      },.
17ff0 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
18000 67 65 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74 66  get_table_printf
18010 22 2c 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64  ",      (Tcl_Cmd
18020 50 72 6f 63 2a 29 74 65 73 74 5f 67 65 74 5f 74  Proc*)test_get_t
18030 61 62 6c 65 5f 70 72 69 6e 74 66 20 7d 2c 0a 20  able_printf },. 
18040 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63      { "sqlite3_c
18050 6c 6f 73 65 22 2c 20 20 20 20 20 20 20 20 20 20  lose",          
18060 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
18070 72 6f 63 2a 29 73 71 6c 69 74 65 5f 74 65 73 74  roc*)sqlite_test
18080 5f 63 6c 6f 73 65 20 20 20 20 20 7d 2c 0a 20 20  _close     },.  
18090 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 72     { "sqlite3_cr
180a0 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 22 2c 20  eate_function", 
180b0 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72        (Tcl_CmdPr
180c0 6f 63 2a 29 74 65 73 74 5f 63 72 65 61 74 65 5f  oc*)test_create_
180d0 66 75 6e 63 74 69 6f 6e 20 20 7d 2c 0a 20 20 20  function  },.   
180e0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 72 65    { "sqlite3_cre
180f0 61 74 65 5f 61 67 67 72 65 67 61 74 65 22 2c 20  ate_aggregate", 
18100 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f       (Tcl_CmdPro
18110 63 2a 29 74 65 73 74 5f 63 72 65 61 74 65 5f 61  c*)test_create_a
18120 67 67 72 65 67 61 74 65 20 7d 2c 0a 20 20 20 20  ggregate },.    
18130 20 7b 20 22 73 71 6c 69 74 65 5f 72 65 67 69 73   { "sqlite_regis
18140 74 65 72 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f  ter_test_functio
18150 6e 22 2c 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63  n", (Tcl_CmdProc
18160 2a 29 74 65 73 74 5f 72 65 67 69 73 74 65 72 5f  *)test_register_
18170 66 75 6e 63 20 20 20 20 7d 2c 0a 20 20 20 20 20  func    },.     
18180 7b 20 22 73 71 6c 69 74 65 5f 61 62 6f 72 74 22  { "sqlite_abort"
18190 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
181a0 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
181b0 29 73 71 6c 69 74 65 5f 61 62 6f 72 74 20 20 20  )sqlite_abort   
181c0 20 20 20 20 20 20 20 7d 2c 0a 23 69 66 64 65 66         },.#ifdef
181d0 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
181e0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 5f  .     { "sqlite_
181f0 6d 61 6c 6c 6f 63 5f 66 61 69 6c 22 2c 20 20 20  malloc_fail",   
18200 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d           (Tcl_Cm
18210 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 5f 6d 61  dProc*)sqlite_ma
18220 6c 6c 6f 63 5f 66 61 69 6c 20 20 20 20 7d 2c 0a  lloc_fail    },.
18230 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 5f 6d       { "sqlite_m
18240 61 6c 6c 6f 63 5f 73 74 61 74 22 2c 20 20 20 20  alloc_stat",    
18250 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64          (Tcl_Cmd
18260 50 72 6f 63 2a 29 73 71 6c 69 74 65 5f 6d 61 6c  Proc*)sqlite_mal
18270 6c 6f 63 5f 73 74 61 74 20 20 20 20 7d 2c 0a 23  loc_stat    },.#
18280 65 6e 64 69 66 0a 20 20 20 20 20 7b 20 22 73 71  endif.     { "sq
18290 6c 69 74 65 5f 62 69 6e 64 22 2c 20 20 20 20 20  lite_bind",     
182a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54                (T
182b0 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74  cl_CmdProc*)test
182c0 5f 62 69 6e 64 20 20 20 20 20 20 20 20 20 20 20  _bind           
182d0 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 62 72 65    },.     { "bre
182e0 61 6b 70 6f 69 6e 74 22 2c 20 20 20 20 20 20 20  akpoint",       
182f0 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63               (Tc
18300 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f  l_CmdProc*)test_
18310 62 72 65 61 6b 70 6f 69 6e 74 20 20 20 20 20 20  breakpoint      
18320 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
18330 74 65 33 5f 6b 65 79 22 2c 20 20 20 20 20 20 20  te3_key",       
18340 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c              (Tcl
18350 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 6b  _CmdProc*)test_k
18360 65 79 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ey              
18370 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
18380 65 33 5f 72 65 6b 65 79 22 2c 20 20 20 20 20 20  e3_rekey",      
18390 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f             (Tcl_
183a0 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 72 65  CmdProc*)test_re
183b0 6b 65 79 20 20 20 20 20 20 20 20 20 20 20 20 7d  key            }
183c0 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
183d0 5f 73 65 74 5f 6d 61 67 69 63 22 2c 20 20 20 20  _set_magic",    
183e0 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43            (Tcl_C
183f0 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 5f 73  mdProc*)sqlite_s
18400 65 74 5f 6d 61 67 69 63 20 20 20 20 20 20 7d 2c  et_magic      },
18410 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
18420 5f 69 6e 74 65 72 72 75 70 74 22 2c 20 20 20 20  _interrupt",    
18430 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d           (Tcl_Cm
18440 64 50 72 6f 63 2a 29 74 65 73 74 5f 69 6e 74 65  dProc*)test_inte
18450 72 72 75 70 74 20 20 20 20 20 20 20 20 7d 2c 0a  rrupt        },.
18460 23 69 66 20 30 0a 20 20 20 20 20 7b 20 22 73 71  #if 0.     { "sq
18470 6c 69 74 65 33 5f 73 6c 65 65 70 22 2c 20 20 20  lite3_sleep",   
18480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54                (T
18490 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74  cl_CmdProc*)test
184a0 5f 73 6c 65 65 70 20 20 20 20 20 20 20 20 20 20  _sleep          
184b0 20 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 20 20    },.#endif.    
184c0 20 7b 20 22 73 71 6c 69 74 65 5f 64 65 6c 65 74   { "sqlite_delet
184d0 65 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 20 20 20  e_function",    
184e0 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63      (Tcl_CmdProc
184f0 2a 29 64 65 6c 65 74 65 5f 66 75 6e 63 74 69 6f  *)delete_functio
18500 6e 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20  n       },.     
18510 7b 20 22 73 71 6c 69 74 65 5f 64 65 6c 65 74 65  { "sqlite_delete
18520 5f 63 6f 6c 6c 61 74 69 6f 6e 22 2c 20 20 20 20  _collation",    
18530 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
18540 29 64 65 6c 65 74 65 5f 63 6f 6c 6c 61 74 69 6f  )delete_collatio
18550 6e 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b  n      },.     {
18560 20 22 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75   "sqlite3_get_au
18570 74 6f 63 6f 6d 6d 69 74 22 2c 20 20 20 20 20 20  tocommit",      
18580 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29    (Tcl_CmdProc*)
18590 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 20  get_autocommit  
185a0 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20        },.     { 
185b0 22 73 71 6c 69 74 65 33 5f 73 74 61 63 6b 5f 75  "sqlite3_stack_u
185c0 73 65 64 22 2c 20 20 20 20 20 20 20 20 20 20 20  sed",           
185d0 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74   (Tcl_CmdProc*)t
185e0 65 73 74 5f 73 74 61 63 6b 5f 75 73 65 64 20 20  est_stack_used  
185f0 20 20 20 20 20 7d 2c 0a 20 20 7d 3b 0a 20 20 73       },.  };.  s
18600 74 61 74 69 63 20 73 74 72 75 63 74 20 7b 0a 20  tatic struct {. 
18610 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
18620 0a 20 20 20 20 20 54 63 6c 5f 4f 62 6a 43 6d 64  .     Tcl_ObjCmd
18630 50 72 6f 63 20 2a 78 50 72 6f 63 3b 0a 20 20 20  Proc *xProc;.   
18640 20 20 76 6f 69 64 20 2a 63 6c 69 65 6e 74 44 61    void *clientDa
18650 74 61 3b 0a 20 20 7d 20 61 4f 62 6a 43 6d 64 5b  ta;.  } aObjCmd[
18660 5d 20 3d 20 7b 0a 20 20 20 20 20 7b 20 22 73 71  ] = {.     { "sq
18670 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e  lite3_connection
18680 5f 70 6f 69 6e 74 65 72 22 2c 20 20 20 20 67 65  _pointer",    ge
18690 74 5f 73 71 6c 69 74 65 5f 70 6f 69 6e 74 65 72  t_sqlite_pointer
186a0 2c 20 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73  , 0 },.     { "s
186b0 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 22  qlite3_bind_int"
186c0 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  ,              t
186d0 65 73 74 5f 62 69 6e 64 5f 69 6e 74 2c 20 20 20  est_bind_int,   
186e0 20 20 20 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22     0 },.     { "
186f0 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
18700 36 34 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  64",            
18710 74 65 73 74 5f 62 69 6e 64 5f 69 6e 74 36 34 2c  test_bind_int64,
18720 20 20 20 20 30 20 7d 2c 0a 20 20 20 20 20 7b 20      0 },.     { 
18730 22 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f  "sqlite3_bind_do
18740 75 62 6c 65 22 2c 20 20 20 20 20 20 20 20 20 20  uble",          
18750 20 74 65 73 74 5f 62 69 6e 64 5f 64 6f 75 62 6c   test_bind_doubl
18760 65 2c 20 20 20 30 20 7d 2c 0a 20 20 20 20 20 7b  e,   0 },.     {
18770 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e   "sqlite3_bind_n
18780 75 6c 6c 22 2c 20 20 20 20 20 20 20 20 20 20 20  ull",           
18790 20 20 74 65 73 74 5f 62 69 6e 64 5f 6e 75 6c 6c    test_bind_null
187a0 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20       ,0 },.     
187b0 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  { "sqlite3_bind_
187c0 74 65 78 74 22 2c 20 20 20 20 20 20 20 20 20 20  text",          
187d0 20 20 20 74 65 73 74 5f 62 69 6e 64 5f 74 65 78     test_bind_tex
187e0 74 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20  t     ,0 },.    
187f0 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64   { "sqlite3_bind
18800 5f 74 65 78 74 31 36 22 2c 20 20 20 20 20 20 20  _text16",       
18810 20 20 20 20 74 65 73 74 5f 62 69 6e 64 5f 74 65      test_bind_te
18820 78 74 31 36 20 20 20 2c 30 20 7d 2c 0a 20 20 20  xt16   ,0 },.   
18830 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e    { "sqlite3_bin
18840 64 5f 62 6c 6f 62 22 2c 20 20 20 20 20 20 20 20  d_blob",        
18850 20 20 20 20 20 74 65 73 74 5f 62 69 6e 64 5f 62       test_bind_b
18860 6c 6f 62 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20  lob     ,0 },.  
18870 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69     { "sqlite3_bi
18880 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f 75  nd_parameter_cou
18890 6e 74 22 2c 20 20 74 65 73 74 5f 62 69 6e 64 5f  nt",  test_bind_
188a0 70 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 2c  parameter_count,
188b0 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c   0},.     { "sql
188c0 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
188d0 74 65 72 5f 6e 61 6d 65 22 2c 20 20 20 74 65 73  ter_name",   tes
188e0 74 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  t_bind_parameter
188f0 5f 6e 61 6d 65 2c 20 20 30 7d 2c 0a 20 20 20 20  _name,  0},.    
18900 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64   { "sqlite3_bind
18910 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78  _parameter_index
18920 22 2c 20 20 74 65 73 74 5f 62 69 6e 64 5f 70 61  ",  test_bind_pa
18930 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 2c 20 30  rameter_index, 0
18940 7d 2c 0a 23 69 66 20 30 0a 20 20 20 20 20 7b 20  },.#if 0.     { 
18950 22 73 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f 62  "sqlite3_clear_b
18960 69 6e 64 69 6e 67 73 22 2c 20 20 20 20 20 20 20  indings",       
18970 20 74 65 73 74 5f 63 6c 65 61 72 5f 62 69 6e 64   test_clear_bind
18980 69 6e 67 73 2c 20 30 7d 2c 0a 23 65 6e 64 69 66  ings, 0},.#endif
18990 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
189a0 5f 65 72 72 63 6f 64 65 22 2c 20 20 20 20 20 20  _errcode",      
189b0 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 65 72           test_er
189c0 72 63 6f 64 65 20 20 20 20 20 20 20 2c 30 20 7d  rcode       ,0 }
189d0 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
189e0 33 5f 65 72 72 6d 73 67 22 2c 20 20 20 20 20 20  3_errmsg",      
189f0 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 65            test_e
18a00 72 72 6d 73 67 20 20 20 20 20 20 20 20 2c 30 20  rrmsg        ,0 
18a10 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
18a20 65 33 5f 65 72 72 6d 73 67 31 36 22 2c 20 20 20  e3_errmsg16",   
18a30 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f             test_
18a40 65 72 72 6d 73 67 31 36 20 20 20 20 20 20 2c 30  errmsg16      ,0
18a50 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
18a60 74 65 33 5f 6f 70 65 6e 22 2c 20 20 20 20 20 20  te3_open",      
18a70 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
18a80 5f 6f 70 65 6e 20 20 20 20 20 20 20 20 20 20 2c  _open          ,
18a90 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
18aa0 69 74 65 33 5f 6f 70 65 6e 31 36 22 2c 20 20 20  ite3_open16",   
18ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73               tes
18ac0 74 5f 6f 70 65 6e 31 36 20 20 20 20 20 20 20 20  t_open16        
18ad0 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  ,0 },.     { "sq
18ae0 6c 69 74 65 33 5f 63 6f 6d 70 6c 65 74 65 31 36  lite3_complete16
18af0 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 74 65  ",            te
18b00 73 74 5f 63 6f 6d 70 6c 65 74 65 31 36 20 20 20  st_complete16   
18b10 20 2c 30 20 7d 2c 0a 0a 20 20 20 20 20 7b 20 22   ,0 },..     { "
18b20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 22  sqlite3_prepare"
18b30 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
18b40 74 65 73 74 5f 70 72 65 70 61 72 65 20 20 20 20  test_prepare    
18b50 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20     ,0 },.     { 
18b60 22 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  "sqlite3_prepare
18b70 31 36 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  16",            
18b80 20 74 65 73 74 5f 70 72 65 70 61 72 65 31 36 20   test_prepare16 
18b90 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b      ,0 },.     {
18ba0 20 22 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69   "sqlite3_finali
18bb0 7a 65 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  ze",            
18bc0 20 20 74 65 73 74 5f 66 69 6e 61 6c 69 7a 65 20    test_finalize 
18bd0 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20       ,0 },.     
18be0 7b 20 22 73 71 6c 69 74 65 33 5f 72 65 73 65 74  { "sqlite3_reset
18bf0 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ",              
18c00 20 20 20 74 65 73 74 5f 72 65 73 65 74 20 20 20     test_reset   
18c10 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20        ,0 },.    
18c20 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 78 70 69   { "sqlite3_expi
18c30 72 65 64 22 2c 20 20 20 20 20 20 20 20 20 20 20  red",           
18c40 20 20 20 20 74 65 73 74 5f 65 78 70 69 72 65 64      test_expired
18c50 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20         ,0 },.   
18c60 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 74 72 61    { "sqlite3_tra
18c70 6e 73 66 65 72 5f 62 69 6e 64 69 6e 67 73 22 2c  nsfer_bindings",
18c80 20 20 20 20 20 74 65 73 74 5f 74 72 61 6e 73 66       test_transf
18c90 65 72 5f 62 69 6e 64 20 2c 30 20 7d 2c 0a 20 20  er_bind ,0 },.  
18ca0 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 68     { "sqlite3_ch
18cb0 61 6e 67 65 73 22 2c 20 20 20 20 20 20 20 20 20  anges",         
18cc0 20 20 20 20 20 20 74 65 73 74 5f 63 68 61 6e 67        test_chang
18cd0 65 73 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20  es       ,0 },. 
18ce0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 73      { "sqlite3_s
18cf0 74 65 70 22 2c 20 20 20 20 20 20 20 20 20 20 20  tep",           
18d00 20 20 20 20 20 20 20 74 65 73 74 5f 73 74 65 70         test_step
18d10 20 20 20 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a            ,0 },.
18d20 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
18d30 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 22  _release_memory"
18d40 2c 20 20 20 20 20 20 20 20 74 65 73 74 5f 72 65  ,        test_re
18d50 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 2c 20 20 20  lease_memory,   
18d60 20 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71    0},.     { "sq
18d70 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f  lite3_soft_heap_
18d80 6c 69 6d 69 74 22 2c 20 20 20 20 20 20 20 74 65  limit",       te
18d90 73 74 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d  st_soft_heap_lim
18da0 69 74 2c 20 20 20 20 30 7d 2c 0a 20 20 20 20 20  it,    0},.     
18db0 7b 20 22 73 71 6c 69 74 65 33 5f 63 6c 65 61 72  { "sqlite3_clear
18dc0 5f 74 73 64 5f 6d 65 6d 64 65 62 75 67 22 2c 20  _tsd_memdebug", 
18dd0 20 20 20 74 65 73 74 5f 63 6c 65 61 72 5f 74 73     test_clear_ts
18de0 64 5f 6d 65 6d 64 65 62 75 67 2c 20 30 7d 2c 0a  d_memdebug, 0},.
18df0 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
18e00 74 73 64 5f 72 65 6c 65 61 73 65 22 2c 20 20 20  tsd_release",   
18e10 20 20 20 20 20 20 20 20 74 65 73 74 5f 74 73 64          test_tsd
18e20 5f 72 65 6c 65 61 73 65 2c 20 20 20 20 20 20 20  _release,       
18e30 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c   0},.     { "sql
18e40 69 74 65 33 5f 74 68 72 65 61 64 5f 63 6c 65 61  ite3_thread_clea
18e50 6e 75 70 22 2c 20 20 20 20 20 20 20 20 74 65 73  nup",        tes
18e60 74 5f 74 68 72 65 61 64 5f 63 6c 65 61 6e 75 70  t_thread_cleanup
18e70 2c 20 20 20 20 20 30 7d 2c 0a 0a 20 20 20 20 20  ,     0},..     
18e80 2f 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  /* sqlite3_colum
18e90 6e 5f 2a 28 29 20 41 50 49 20 2a 2f 0a 20 20 20  n_*() API */.   
18ea0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c    { "sqlite3_col
18eb0 75 6d 6e 5f 63 6f 75 6e 74 22 2c 20 20 20 20 20  umn_count",     
18ec0 20 20 20 20 20 74 65 73 74 5f 63 6f 6c 75 6d 6e       test_column
18ed0 5f 63 6f 75 6e 74 20 20 2c 30 20 7d 2c 0a 20 20  _count  ,0 },.  
18ee0 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 64 61     { "sqlite3_da
18ef0 74 61 5f 63 6f 75 6e 74 22 2c 20 20 20 20 20 20  ta_count",      
18f00 20 20 20 20 20 20 74 65 73 74 5f 64 61 74 61 5f        test_data_
18f10 63 6f 75 6e 74 20 20 20 20 2c 30 20 7d 2c 0a 20  count    ,0 },. 
18f20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63      { "sqlite3_c
18f30 6f 6c 75 6d 6e 5f 74 79 70 65 22 2c 20 20 20 20  olumn_type",    
18f40 20 20 20 20 20 20 20 74 65 73 74 5f 63 6f 6c 75         test_colu
18f50 6d 6e 5f 74 79 70 65 20 20 20 2c 30 20 7d 2c 0a  mn_type   ,0 },.
18f60 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
18f70 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 22 2c 20 20 20  column_blob",   
18f80 20 20 20 20 20 20 20 20 74 65 73 74 5f 63 6f 6c          test_col
18f90 75 6d 6e 5f 62 6c 6f 62 20 20 20 2c 30 20 7d 2c  umn_blob   ,0 },
18fa0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
18fb0 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 22 2c  _column_double",
18fc0 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 63 6f           test_co
18fd0 6c 75 6d 6e 5f 64 6f 75 62 6c 65 20 2c 30 20 7d  lumn_double ,0 }
18fe0 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
18ff0 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 22 2c  3_column_int64",
19000 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 63            test_c
19010 6f 6c 75 6d 6e 5f 69 6e 74 36 34 20 20 2c 30 20  olumn_int64  ,0 
19020 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
19030 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 22 2c  e3_column_text",
19040 20 20 20 20 20 20 20 74 65 73 74 5f 73 74 6d 74         test_stmt
19050 5f 75 74 66 38 2c 20 20 73 71 6c 69 74 65 33 5f  _utf8,  sqlite3_
19060 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 20 20 20 20  column_text     
19070 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
19080 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74  te3_column_declt
19090 79 70 65 22 2c 20 20 20 74 65 73 74 5f 73 74 6d  ype",   test_stm
190a0 74 5f 75 74 66 38 2c 20 20 73 71 6c 69 74 65 33  t_utf8,  sqlite3
190b0 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65  _column_decltype
190c0 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c    },.     { "sql
190d0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  ite3_column_name
190e0 22 2c 20 20 20 20 20 20 20 74 65 73 74 5f 73 74  ",       test_st
190f0 6d 74 5f 75 74 66 38 2c 20 20 73 71 6c 69 74 65  mt_utf8,  sqlite
19100 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 20 20 20  3_column_name   
19110 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71     },.     { "sq
19120 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
19130 22 2c 20 20 20 20 20 20 20 20 74 65 73 74 5f 73  ",        test_s
19140 74 6d 74 5f 69 6e 74 2c 20 20 20 73 71 6c 69 74  tmt_int,   sqlit
19150 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 20 20  e3_column_int   
19160 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73      },.     { "s
19170 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79  qlite3_column_by
19180 74 65 73 22 2c 20 20 20 20 20 20 74 65 73 74 5f  tes",      test_
19190 73 74 6d 74 5f 69 6e 74 2c 20 20 20 73 71 6c 69  stmt_int,   sqli
191a0 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73  te3_column_bytes
191b0 20 20 20 20 20 7d 2c 0a 23 69 66 64 65 66 20 53       },.#ifdef S
191c0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c  QLITE_ENABLE_COL
191d0 55 4d 4e 5f 4d 45 54 41 44 41 54 41 0a 7b 20 22  UMN_METADATA.{ "
191e0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
191f0 61 74 61 62 61 73 65 5f 6e 61 6d 65 22 2c 20 74  atabase_name", t
19200 65 73 74 5f 73 74 6d 74 5f 75 74 66 38 2c 20 73  est_stmt_utf8, s
19210 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61  qlite3_column_da
19220 74 61 62 61 73 65 5f 6e 61 6d 65 7d 2c 0a 7b 20  tabase_name},.{ 
19230 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  "sqlite3_column_
19240 74 61 62 6c 65 5f 6e 61 6d 65 22 2c 20 74 65 73  table_name", tes
19250 74 5f 73 74 6d 74 5f 75 74 66 38 2c 20 73 71 6c  t_stmt_utf8, sql
19260 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c  ite3_column_tabl
19270 65 5f 6e 61 6d 65 7d 2c 0a 7b 20 22 73 71 6c 69  e_name},.{ "sqli
19280 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69  te3_column_origi
19290 6e 5f 6e 61 6d 65 22 2c 20 74 65 73 74 5f 73 74  n_name", test_st
192a0 6d 74 5f 75 74 66 38 2c 20 73 71 6c 69 74 65 33  mt_utf8, sqlite3
192b0 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e  _column_origin_n
192c0 61 6d 65 7d 2c 0a 23 65 6e 64 69 66 0a 0a 23 69  ame},.#endif..#i
192d0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
192e0 54 5f 55 54 46 31 36 0a 20 20 20 20 20 7b 20 22  T_UTF16.     { "
192f0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62  sqlite3_column_b
19300 79 74 65 73 31 36 22 2c 20 20 20 20 74 65 73 74  ytes16",    test
19310 5f 73 74 6d 74 5f 69 6e 74 2c 20 20 20 73 71 6c  _stmt_int,   sql
19320 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65  ite3_column_byte
19330 73 31 36 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20  s16   },.     { 
19340 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  "sqlite3_column_
19350 74 65 78 74 31 36 22 2c 20 20 20 20 20 74 65 73  text16",     tes
19360 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c 20 73 71  t_stmt_utf16, sq
19370 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
19380 74 31 36 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b  t16    },.     {
19390 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   "sqlite3_column
193a0 5f 64 65 63 6c 74 79 70 65 31 36 22 2c 20 74 65  _decltype16", te
193b0 73 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c 20 73  st_stmt_utf16, s
193c0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65  qlite3_column_de
193d0 63 6c 74 79 70 65 31 36 7d 2c 0a 20 20 20 20 20  cltype16},.     
193e0 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  { "sqlite3_colum
193f0 6e 5f 6e 61 6d 65 31 36 22 2c 20 20 20 20 20 74  n_name16",     t
19400 65 73 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c 20  est_stmt_utf16, 
19410 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e  sqlite3_column_n
19420 61 6d 65 31 36 20 20 20 20 7d 2c 0a 23 69 66 64  ame16    },.#ifd
19430 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
19440 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41 54 41  _COLUMN_METADATA
19450 0a 7b 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  .{"sqlite3_colum
19460 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 31  n_database_name1
19470 36 22 2c 0a 20 20 74 65 73 74 5f 73 74 6d 74 5f  6",.  test_stmt_
19480 75 74 66 31 36 2c 20 73 71 6c 69 74 65 33 5f 63  utf16, sqlite3_c
19490 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e  olumn_database_n
194a0 61 6d 65 31 36 7d 2c 0a 7b 22 73 71 6c 69 74 65  ame16},.{"sqlite
194b0 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e  3_column_table_n
194c0 61 6d 65 31 36 22 2c 20 74 65 73 74 5f 73 74 6d  ame16", test_stm
194d0 74 5f 75 74 66 31 36 2c 20 73 71 6c 69 74 65 33  t_utf16, sqlite3
194e0 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61  _column_table_na
194f0 6d 65 31 36 7d 2c 0a 7b 22 73 71 6c 69 74 65 33  me16},.{"sqlite3
19500 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e  _column_origin_n
19510 61 6d 65 31 36 22 2c 20 74 65 73 74 5f 73 74 6d  ame16", test_stm
19520 74 5f 75 74 66 31 36 2c 20 73 71 6c 69 74 65 33  t_utf16, sqlite3
19530 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e  _column_origin_n
19540 61 6d 65 31 36 7d 2c 0a 23 65 6e 64 69 66 0a 23  ame16},.#endif.#
19550 65 6e 64 69 66 0a 20 20 20 20 20 7b 20 22 73 71  endif.     { "sq
19560 6c 69 74 65 33 5f 67 6c 6f 62 61 6c 5f 72 65 63  lite3_global_rec
19570 6f 76 65 72 22 2c 20 20 20 20 74 65 73 74 5f 67  over",    test_g
19580 6c 6f 62 61 6c 5f 72 65 63 6f 76 65 72 2c 20 30  lobal_recover, 0
19590 20 20 20 7d 2c 0a 0a 20 20 20 20 20 2f 2a 20 46     },..     /* F
195a0 75 6e 63 74 69 6f 6e 73 20 66 72 6f 6d 20 6f 73  unctions from os
195b0 2e 68 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  .h */.#ifndef SQ
195c0 4c 49 54 45 5f 4f 4d 49 54 5f 44 49 53 4b 49 4f  LITE_OMIT_DISKIO
195d0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
195e0 4f 73 4f 70 65 6e 52 65 61 64 57 72 69 74 65 22  OsOpenReadWrite"
195f0 2c 74 65 73 74 5f 73 71 6c 69 74 65 33 4f 73 4f  ,test_sqlite3OsO
19600 70 65 6e 52 65 61 64 57 72 69 74 65 2c 20 30 20  penReadWrite, 0 
19610 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
19620 65 33 4f 73 43 6c 6f 73 65 22 2c 20 20 20 20 20  e3OsClose",     
19630 20 20 20 74 65 73 74 5f 73 71 6c 69 74 65 33 4f     test_sqlite3O
19640 73 43 6c 6f 73 65 2c 20 30 20 7d 2c 0a 20 20 20  sClose, 0 },.   
19650 20 20 7b 20 22 73 71 6c 69 74 65 33 4f 73 4c 6f    { "sqlite3OsLo
19660 63 6b 22 2c 20 20 20 20 20 20 20 20 20 74 65 73  ck",         tes
19670 74 5f 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b 2c  t_sqlite3OsLock,
19680 20 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71   0 },.     { "sq
19690 6c 69 74 65 33 4f 73 54 65 6d 70 46 69 6c 65 4e  lite3OsTempFileN
196a0 61 6d 65 22 2c 20 74 65 73 74 5f 73 71 6c 69 74  ame", test_sqlit
196b0 65 33 4f 73 54 65 6d 70 46 69 6c 65 4e 61 6d 65  e3OsTempFileName
196c0 2c 20 30 20 7d 2c 0a 20 20 20 0a 20 20 20 20 20  , 0 },.   .     
196d0 2f 2a 20 43 75 73 74 6f 6d 20 74 65 73 74 20 69  /* Custom test i
196e0 6e 74 65 72 66 61 63 65 73 20 2a 2f 0a 20 20 20  nterfaces */.   
196f0 20 20 7b 20 22 73 71 6c 69 74 65 33 4f 73 55 6e    { "sqlite3OsUn
19700 6c 6f 63 6b 22 2c 20 20 20 20 20 20 20 20 20 74  lock",         t
19710 65 73 74 5f 73 71 6c 69 74 65 33 4f 73 55 6e 6c  est_sqlite3OsUnl
19720 6f 63 6b 2c 20 30 20 20 20 20 7d 2c 0a 23 65 6e  ock, 0    },.#en
19730 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
19740 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20  TE_OMIT_UTF16.  
19750 20 20 20 7b 20 22 61 64 64 5f 74 65 73 74 5f 63     { "add_test_c
19760 6f 6c 6c 61 74 65 22 2c 20 20 20 20 20 20 20 20  ollate",        
19770 74 65 73 74 5f 63 6f 6c 6c 61 74 65 2c 20 30 20  test_collate, 0 
19780 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20             },.  
19790 20 20 20 7b 20 22 61 64 64 5f 74 65 73 74 5f 63     { "add_test_c
197a0 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64 22 2c 20  ollate_needed", 
197b0 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65  test_collate_nee
197c0 64 65 64 2c 20 30 20 20 20 20 20 7d 2c 0a 20 20  ded, 0     },.  
197d0 20 20 20 7b 20 22 61 64 64 5f 74 65 73 74 5f 66     { "add_test_f
197e0 75 6e 63 74 69 6f 6e 22 2c 20 20 20 20 20 20 20  unction",       
197f0 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 2c 20 30  test_function, 0
19800 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 23 65             },.#e
19810 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
19820 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 20 20  TE_MEMDEBUG.    
19830 20 7b 20 22 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f   { "sqlite_mallo
19840 63 5f 6f 75 74 73 74 61 6e 64 69 6e 67 22 2c 20  c_outstanding", 
19850 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75  sqlite_malloc_ou
19860 74 73 74 61 6e 64 69 6e 67 2c 20 30 7d 2c 0a 23  tstanding, 0},.#
19870 65 6e 64 69 66 0a 20 20 20 20 20 7b 20 22 73 71  endif.     { "sq
19880 6c 69 74 65 33 5f 74 65 73 74 5f 65 72 72 73 74  lite3_test_errst
19890 72 22 2c 20 20 20 20 20 74 65 73 74 5f 65 72 72  r",     test_err
198a0 73 74 72 2c 20 30 20 20 20 20 20 20 20 20 20 20  str, 0          
198b0 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 74 63     },.     { "tc
198c0 6c 5f 76 61 72 69 61 62 6c 65 5f 74 79 70 65 22  l_variable_type"
198d0 2c 20 20 20 20 20 20 20 74 63 6c 5f 76 61 72 69  ,       tcl_vari
198e0 61 62 6c 65 5f 74 79 70 65 2c 20 30 20 20 20 20  able_type, 0    
198f0 20 20 20 7d 2c 0a 23 69 66 6e 64 65 66 20 53 51     },.#ifndef SQ
19900 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44  LITE_OMIT_SHARED
19910 5f 43 41 43 48 45 0a 20 20 20 20 20 7b 20 22 73  _CACHE.     { "s
19920 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 73 68  qlite3_enable_sh
19930 61 72 65 64 5f 63 61 63 68 65 22 2c 20 74 65 73  ared_cache", tes
19940 74 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 2c  t_enable_shared,
19950 20 30 20 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20   0  },.#endif.  
19960 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6c 69     { "sqlite3_li
19970 62 76 65 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 22  bversion_number"
19980 2c 20 74 65 73 74 5f 6c 69 62 76 65 72 73 69 6f  , test_libversio
19990 6e 5f 6e 75 6d 62 65 72 2c 20 30 20 20 7d 2c 0a  n_number, 0  },.
199a0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
199b0 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41  ABLE_COLUMN_META
199c0 44 41 54 41 0a 20 20 20 20 20 7b 20 22 73 71 6c  DATA.     { "sql
199d0 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d  ite3_table_colum
199e0 6e 5f 6d 65 74 61 64 61 74 61 22 2c 20 74 65 73  n_metadata", tes
199f0 74 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d  t_table_column_m
19a00 65 74 61 64 61 74 61 2c 20 30 20 20 7d 2c 0a 23  etadata, 0  },.#
19a10 65 6e 64 69 66 0a 20 20 7d 3b 0a 20 20 73 74 61  endif.  };.  sta
19a20 74 69 63 20 69 6e 74 20 62 69 74 6d 61 73 6b 5f  tic int bitmask_
19a30 73 69 7a 65 20 3d 20 73 69 7a 65 6f 66 28 42 69  size = sizeof(Bi
19a40 74 6d 61 73 6b 29 2a 38 3b 0a 20 20 69 6e 74 20  tmask)*8;.  int 
19a50 69 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20  i;.  extern int 
19a60 73 71 6c 69 74 65 33 5f 6f 73 5f 74 72 61 63 65  sqlite3_os_trace
19a70 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  ;.  extern int s
19a80 71 6c 69 74 65 33 5f 77 68 65 72 65 5f 74 72 61  qlite3_where_tra
19a90 63 65 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74  ce;.  extern int
19aa0 20 73 71 6c 69 74 65 33 5f 73 79 6e 63 5f 63 6f   sqlite3_sync_co
19ab0 75 6e 74 2c 20 73 71 6c 69 74 65 33 5f 66 75 6c  unt, sqlite3_ful
19ac0 6c 73 79 6e 63 5f 63 6f 75 6e 74 3b 0a 20 20 65  lsync_count;.  e
19ad0 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
19ae0 33 5f 6f 70 65 6e 74 65 6d 70 5f 63 6f 75 6e 74  3_opentemp_count
19af0 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  ;.  extern int s
19b00 71 6c 69 74 65 33 5f 6d 65 6d 55 73 65 64 3b 0a  qlite3_memUsed;.
19b10 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c    extern int sql
19b20 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 69 64 3b 0a  ite3_malloc_id;.
19b30 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c    extern int sql
19b40 69 74 65 33 5f 6d 65 6d 4d 61 78 3b 0a 20 20 65  ite3_memMax;.  e
19b50 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
19b60 33 5f 6c 69 6b 65 5f 63 6f 75 6e 74 3b 0a 20 20  3_like_count;.  
19b70 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74  extern int sqlit
19b80 65 33 5f 74 73 64 5f 63 6f 75 6e 74 3b 0a 23 69  e3_tsd_count;.#i
19b90 66 20 4f 53 5f 55 4e 49 58 20 26 26 20 64 65 66  f OS_UNIX && def
19ba0 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
19bb0 29 20 26 26 20 64 65 66 69 6e 65 64 28 54 48 52  ) && defined(THR
19bc0 45 41 44 53 41 46 45 29 20 26 26 20 54 48 52 45  EADSAFE) && THRE
19bd0 41 44 53 41 46 45 0a 20 20 65 78 74 65 72 6e 20  ADSAFE.  extern 
19be0 69 6e 74 20 74 68 72 65 61 64 73 4f 76 65 72 72  int threadsOverr
19bf0 69 64 65 45 61 63 68 4f 74 68 65 72 73 4c 6f 63  ideEachOthersLoc
19c00 6b 73 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 4f  ks;.#endif.#if O
19c10 53 5f 57 49 4e 0a 20 20 65 78 74 65 72 6e 20 69  S_WIN.  extern i
19c20 6e 74 20 73 71 6c 69 74 65 33 5f 6f 73 5f 74 79  nt sqlite3_os_ty
19c30 70 65 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  pe;.#endif.#ifde
19c40 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
19c50 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69   extern int sqli
19c60 74 65 33 5f 76 64 62 65 5f 61 64 64 6f 70 5f 74  te3_vdbe_addop_t
19c70 72 61 63 65 3b 0a 23 65 6e 64 69 66 0a 23 69 66  race;.#endif.#if
19c80 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
19c90 20 20 65 78 74 65 72 6e 20 63 68 61 72 20 73 71    extern char sq
19ca0 6c 69 74 65 33 5f 71 75 65 72 79 5f 70 6c 61 6e  lite3_query_plan
19cb0 5b 5d 3b 0a 20 20 73 74 61 74 69 63 20 63 68 61  [];.  static cha
19cc0 72 20 2a 71 75 65 72 79 5f 70 6c 61 6e 20 3d 20  r *query_plan = 
19cd0 73 71 6c 69 74 65 33 5f 71 75 65 72 79 5f 70 6c  sqlite3_query_pl
19ce0 61 6e 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 66 6f  an;.#endif..  fo
19cf0 72 28 69 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28  r(i=0; i<sizeof(
19d00 61 43 6d 64 29 2f 73 69 7a 65 6f 66 28 61 43 6d  aCmd)/sizeof(aCm
19d10 64 5b 30 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20 20  d[0]); i++){.   
19d20 20 54 63 6c 5f 43 72 65 61 74 65 43 6f 6d 6d 61   Tcl_CreateComma
19d30 6e 64 28 69 6e 74 65 72 70 2c 20 61 43 6d 64 5b  nd(interp, aCmd[
19d40 69 5d 2e 7a 4e 61 6d 65 2c 20 61 43 6d 64 5b 69  i].zName, aCmd[i
19d50 5d 2e 78 50 72 6f 63 2c 20 30 2c 20 30 29 3b 0a  ].xProc, 0, 0);.
19d60 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69    }.  for(i=0; i
19d70 3c 73 69 7a 65 6f 66 28 61 4f 62 6a 43 6d 64 29  <sizeof(aObjCmd)
19d80 2f 73 69 7a 65 6f 66 28 61 4f 62 6a 43 6d 64 5b  /sizeof(aObjCmd[
19d90 30 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 54  0]); i++){.    T
19da0 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d 6d  cl_CreateObjComm
19db0 61 6e 64 28 69 6e 74 65 72 70 2c 20 61 4f 62 6a  and(interp, aObj
19dc0 43 6d 64 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 0a 20  Cmd[i].zName, . 
19dd0 20 20 20 20 20 20 20 61 4f 62 6a 43 6d 64 5b 69         aObjCmd[i
19de0 5d 2e 78 50 72 6f 63 2c 20 61 4f 62 6a 43 6d 64  ].xProc, aObjCmd
19df0 5b 69 5d 2e 63 6c 69 65 6e 74 44 61 74 61 2c 20  [i].clientData, 
19e00 30 29 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 4c 69  0);.  }.  Tcl_Li
19e10 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73  nkVar(interp, "s
19e20 71 6c 69 74 65 5f 73 65 61 72 63 68 5f 63 6f 75  qlite_search_cou
19e30 6e 74 22 2c 20 0a 20 20 20 20 20 20 28 63 68 61  nt", .      (cha
19e40 72 2a 29 26 73 71 6c 69 74 65 33 5f 73 65 61 72  r*)&sqlite3_sear
19e50 63 68 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49  ch_count, TCL_LI
19e60 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c  NK_INT);.  Tcl_L
19e70 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22  inkVar(interp, "
19e80 73 71 6c 69 74 65 5f 73 6f 72 74 5f 63 6f 75 6e  sqlite_sort_coun
19e90 74 22 2c 20 0a 20 20 20 20 20 20 28 63 68 61 72  t", .      (char
19ea0 2a 29 26 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f  *)&sqlite3_sort_
19eb0 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f  count, TCL_LINK_
19ec0 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b  INT);.  Tcl_Link
19ed0 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  Var(interp, "sql
19ee0 69 74 65 5f 6c 69 6b 65 5f 63 6f 75 6e 74 22 2c  ite_like_count",
19ef0 20 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26   .      (char*)&
19f00 73 71 6c 69 74 65 33 5f 6c 69 6b 65 5f 63 6f 75  sqlite3_like_cou
19f10 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54  nt, TCL_LINK_INT
19f20 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72  );.  Tcl_LinkVar
19f30 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
19f40 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
19f50 22 2c 20 0a 20 20 20 20 20 20 28 63 68 61 72 2a  ", .      (char*
19f60 29 26 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  )&sqlite3_interr
19f70 75 70 74 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c  upt_count, TCL_L
19f80 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f  INK_INT);.  Tcl_
19f90 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20  LinkVar(interp, 
19fa0 22 73 71 6c 69 74 65 5f 6f 70 65 6e 5f 66 69 6c  "sqlite_open_fil
19fb0 65 5f 63 6f 75 6e 74 22 2c 20 0a 20 20 20 20 20  e_count", .     
19fc0 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33   (char*)&sqlite3
19fd0 5f 6f 70 65 6e 5f 66 69 6c 65 5f 63 6f 75 6e 74  _open_file_count
19fe0 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b  , TCL_LINK_INT);
19ff0 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
1a000 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 63  nterp, "sqlite_c
1a010 75 72 72 65 6e 74 5f 74 69 6d 65 22 2c 20 0a 20  urrent_time", . 
1a020 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c       (char*)&sql
1a030 69 74 65 33 5f 63 75 72 72 65 6e 74 5f 74 69 6d  ite3_current_tim
1a040 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29  e, TCL_LINK_INT)
1a050 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  ;.  Tcl_LinkVar(
1a060 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
1a070 6f 73 5f 74 72 61 63 65 22 2c 0a 20 20 20 20 20  os_trace",.     
1a080 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33   (char*)&sqlite3
1a090 5f 6f 73 5f 74 72 61 63 65 2c 20 54 43 4c 5f 4c  _os_trace, TCL_L
1a0a0 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f  INK_INT);.  Tcl_
1a0b0 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20  LinkVar(interp, 
1a0c0 22 73 71 6c 69 74 65 33 5f 74 73 64 5f 63 6f 75  "sqlite3_tsd_cou
1a0d0 6e 74 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72  nt",.      (char
1a0e0 2a 29 26 73 71 6c 69 74 65 33 5f 74 73 64 5f 63  *)&sqlite3_tsd_c
1a0f0 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49  ount, TCL_LINK_I
1a100 4e 54 29 3b 0a 23 69 66 20 4f 53 5f 55 4e 49 58  NT);.#if OS_UNIX
1a110 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
1a120 54 45 5f 54 45 53 54 29 20 26 26 20 64 65 66 69  TE_TEST) && defi
1a130 6e 65 64 28 54 48 52 45 41 44 53 41 46 45 29 20  ned(THREADSAFE) 
1a140 26 26 20 54 48 52 45 41 44 53 41 46 45 0a 20 20  && THREADSAFE.  
1a150 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
1a160 72 70 2c 20 22 74 68 72 65 61 64 73 4f 76 65 72  rp, "threadsOver
1a170 72 69 64 65 45 61 63 68 4f 74 68 65 72 73 4c 6f  rideEachOthersLo
1a180 63 6b 73 22 2c 0a 20 20 20 20 20 20 28 63 68 61  cks",.      (cha
1a190 72 2a 29 26 74 68 72 65 61 64 73 4f 76 65 72 72  r*)&threadsOverr
1a1a0 69 64 65 45 61 63 68 4f 74 68 65 72 73 4c 6f 63  ideEachOthersLoc
1a1b0 6b 73 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54  ks, TCL_LINK_INT
1a1c0 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  );.#endif.#ifnde
1a1d0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
1a1e0 46 31 36 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61  F16.  Tcl_LinkVa
1a1f0 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  r(interp, "sqlit
1a200 65 5f 6c 61 73 74 5f 6e 65 65 64 65 64 5f 63 6f  e_last_needed_co
1a210 6c 6c 61 74 69 6f 6e 22 2c 0a 20 20 20 20 20 20  llation",.      
1a220 28 63 68 61 72 2a 29 26 70 7a 4e 65 65 64 65 64  (char*)&pzNeeded
1a230 43 6f 6c 6c 61 74 69 6f 6e 2c 20 54 43 4c 5f 4c  Collation, TCL_L
1a240 49 4e 4b 5f 53 54 52 49 4e 47 7c 54 43 4c 5f 4c  INK_STRING|TCL_L
1a250 49 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59 29 3b 0a  INK_READ_ONLY);.
1a260 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
1a270 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20  LITE_MEMDEBUG.  
1a280 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
1a290 72 70 2c 20 22 73 71 6c 69 74 65 5f 6d 61 6c 6c  rp, "sqlite_mall
1a2a0 6f 63 5f 69 64 22 2c 0a 20 20 20 20 20 20 28 63  oc_id",.      (c
1a2b0 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6d 61  har*)&sqlite3_ma
1a2c0 6c 6c 6f 63 5f 69 64 2c 20 54 43 4c 5f 4c 49 4e  lloc_id, TCL_LIN
1a2d0 4b 5f 53 54 52 49 4e 47 29 3b 0a 23 65 6e 64 69  K_STRING);.#endi
1a2e0 66 0a 23 69 66 20 4f 53 5f 57 49 4e 0a 20 20 54  f.#if OS_WIN.  T
1a2f0 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72  cl_LinkVar(inter
1a300 70 2c 20 22 73 71 6c 69 74 65 5f 6f 73 5f 74 79  p, "sqlite_os_ty
1a310 70 65 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72  pe",.      (char
1a320 2a 29 26 73 71 6c 69 74 65 33 5f 6f 73 5f 74 79  *)&sqlite3_os_ty
1a330 70 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54  pe, TCL_LINK_INT
1a340 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  );.#endif.#ifdef
1a350 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 54   SQLITE_TEST.  T
1a360 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72  cl_LinkVar(inter
1a370 70 2c 20 22 73 71 6c 69 74 65 5f 71 75 65 72 79  p, "sqlite_query
1a380 5f 70 6c 61 6e 22 2c 0a 20 20 20 20 20 20 28 63  _plan",.      (c
1a390 68 61 72 2a 29 26 71 75 65 72 79 5f 70 6c 61 6e  har*)&query_plan
1a3a0 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 53 54 52 49 4e  , TCL_LINK_STRIN
1a3b0 47 7c 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41 44 5f  G|TCL_LINK_READ_
1a3c0 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 23 69  ONLY);.#endif.#i
1a3d0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
1a3e0 47 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  G.  Tcl_LinkVar(
1a3f0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
1a400 61 64 64 6f 70 5f 74 72 61 63 65 22 2c 0a 20 20  addop_trace",.  
1a410 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69      (char*)&sqli
1a420 74 65 33 5f 76 64 62 65 5f 61 64 64 6f 70 5f 74  te3_vdbe_addop_t
1a430 72 61 63 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49  race, TCL_LINK_I
1a440 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56  NT);.  Tcl_LinkV
1a450 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  ar(interp, "sqli
1a460 74 65 5f 77 68 65 72 65 5f 74 72 61 63 65 22 2c  te_where_trace",
1a470 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73  .      (char*)&s
1a480 71 6c 69 74 65 33 5f 77 68 65 72 65 5f 74 72 61  qlite3_where_tra
1a490 63 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54  ce, TCL_LINK_INT
1a4a0 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  );.#endif.#ifdef
1a4b0 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
1a4c0 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
1a4d0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6d  nterp, "sqlite_m
1a4e0 65 6d 75 73 65 64 22 2c 0a 20 20 20 20 20 20 28  emused",.      (
1a4f0 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6d  char*)&sqlite3_m
1a500 65 6d 55 73 65 64 2c 20 54 43 4c 5f 4c 49 4e 4b  emUsed, TCL_LINK
1a510 5f 49 4e 54 20 7c 20 54 43 4c 5f 4c 49 4e 4b 5f  _INT | TCL_LINK_
1a520 52 45 41 44 5f 4f 4e 4c 59 29 3b 0a 20 20 54 63  READ_ONLY);.  Tc
1a530 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70  l_LinkVar(interp
1a540 2c 20 22 73 71 6c 69 74 65 5f 6d 65 6d 6d 61 78  , "sqlite_memmax
1a550 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29  ",.      (char*)
1a560 26 73 71 6c 69 74 65 33 5f 6d 65 6d 4d 61 78 2c  &sqlite3_memMax,
1a570 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 20 7c 20   TCL_LINK_INT | 
1a580 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e  TCL_LINK_READ_ON
1a590 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e  LY);.#endif.#ifn
1a5a0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1a5b0 44 49 53 4b 49 4f 0a 20 20 54 63 6c 5f 4c 69 6e  DISKIO.  Tcl_Lin
1a5c0 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71  kVar(interp, "sq
1a5d0 6c 69 74 65 5f 6f 70 65 6e 74 65 6d 70 5f 63 6f  lite_opentemp_co
1a5e0 75 6e 74 22 2c 0a 20 20 20 20 20 20 28 63 68 61  unt",.      (cha
1a5f0 72 2a 29 26 73 71 6c 69 74 65 33 5f 6f 70 65 6e  r*)&sqlite3_open
1a600 74 65 6d 70 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f  temp_count, TCL_
1a610 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23 65 6e 64 69  LINK_INT);.#endi
1a620 66 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  f.  Tcl_LinkVar(
1a630 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
1a640 73 74 61 74 69 63 5f 62 69 6e 64 5f 76 61 6c 75  static_bind_valu
1a650 65 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a  e",.      (char*
1a660 29 26 73 71 6c 69 74 65 5f 73 74 61 74 69 63 5f  )&sqlite_static_
1a670 62 69 6e 64 5f 76 61 6c 75 65 2c 20 54 43 4c 5f  bind_value, TCL_
1a680 4c 49 4e 4b 5f 53 54 52 49 4e 47 29 3b 0a 20 20  LINK_STRING);.  
1a690 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
1a6a0 72 70 2c 20 22 73 71 6c 69 74 65 5f 74 65 6d 70  rp, "sqlite_temp
1a6b0 5f 64 69 72 65 63 74 6f 72 79 22 2c 0a 20 20 20  _directory",.   
1a6c0 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74     (char*)&sqlit
1a6d0 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72  e3_temp_director
1a6e0 79 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 53 54 52 49  y, TCL_LINK_STRI
1a6f0 4e 47 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56  NG);.  Tcl_LinkV
1a700 61 72 28 69 6e 74 65 72 70 2c 20 22 62 69 74 6d  ar(interp, "bitm
1a710 61 73 6b 5f 73 69 7a 65 22 2c 0a 20 20 20 20 20  ask_size",.     
1a720 20 28 63 68 61 72 2a 29 26 62 69 74 6d 61 73 6b   (char*)&bitmask
1a730 5f 73 69 7a 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f  _size, TCL_LINK_
1a740 49 4e 54 7c 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41  INT|TCL_LINK_REA
1a750 44 5f 4f 4e 4c 59 29 3b 0a 23 69 66 20 4f 53 5f  D_ONLY);.#if OS_
1a760 55 4e 49 58 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56  UNIX.  Tcl_LinkV
1a770 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  ar(interp, "sqli
1a780 74 65 5f 73 79 6e 63 5f 63 6f 75 6e 74 22 2c 0a  te_sync_count",.
1a790 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71        (char*)&sq
1a7a0 6c 69 74 65 33 5f 73 79 6e 63 5f 63 6f 75 6e 74  lite3_sync_count
1a7b0 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b  , TCL_LINK_INT);
1a7c0 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
1a7d0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 66  nterp, "sqlite_f
1a7e0 75 6c 6c 73 79 6e 63 5f 63 6f 75 6e 74 22 2c 0a  ullsync_count",.
1a7f0 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71        (char*)&sq
1a800 6c 69 74 65 33 5f 66 75 6c 6c 73 79 6e 63 5f 63  lite3_fullsync_c
1a810 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49  ount, TCL_LINK_I
1a820 4e 54 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 4f  NT);.#endif /* O
1a830 53 5f 55 4e 49 58 20 2a 2f 0a 20 20 73 65 74 5f  S_UNIX */.  set_
1a840 6f 70 74 69 6f 6e 73 28 69 6e 74 65 72 70 29 3b  options(interp);
1a850 0a 0a 20 20 7b 0a 23 69 66 64 65 66 20 53 51 4c  ..  {.#ifdef SQL
1a860 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 65 78  ITE_DEBUG.    ex
1a870 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
1a880 5f 73 68 61 72 65 64 5f 63 61 63 68 65 5f 72 65  _shared_cache_re
1a890 70 6f 72 74 28 76 6f 69 64 20 2a 2c 20 54 63 6c  port(void *, Tcl
1a8a0 5f 49 6e 74 65 72 70 20 2a 2c 0a 20 20 20 20 20  _Interp *,.     
1a8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1a8d0 6e 74 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  nt, Tcl_Obj *CON
1a8e0 53 54 5b 5d 29 3b 0a 20 20 20 20 54 63 6c 5f 43  ST[]);.    Tcl_C
1a8f0 72 65 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28  reateObjCommand(
1a900 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
1a910 73 68 61 72 65 64 5f 63 61 63 68 65 5f 72 65 70  shared_cache_rep
1a920 6f 72 74 22 2c 20 0a 20 20 20 20 20 20 20 20 73  ort", .        s
1a930 71 6c 69 74 65 33 5f 73 68 61 72 65 64 5f 63 61  qlite3_shared_ca
1a940 63 68 65 5f 72 65 70 6f 72 74 2c 20 30 2c 20 30  che_report, 0, 0
1a950 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20  );.#endif.  }.  
1a960 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
1a970 0a                                               .