/ Hex Artifact Content
Login

Artifact deb48cd5ab369a2ffccb62b017d248188a3be201:


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 31 39 34 20 32 30 30 36 2f 30 31  ,v 1.194 2006/01
0240: 2f 31 38 20 30 34 3a 32 36 3a 30 37 20 64 61 6e  /18 04:26:07 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 2f 0a 74 79   function..*/.ty
4120: 70 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 75  pedef struct Cou
4130: 6e 74 43 74 78 20 43 6f 75 6e 74 43 74 78 3b 0a  ntCtx CountCtx;.
4140: 73 74 72 75 63 74 20 43 6f 75 6e 74 43 74 78 20  struct CountCtx 
4150: 7b 0a 20 20 69 6e 74 20 6e 3b 0a 7d 3b 0a 73 74  {.  int n;.};.st
4160: 61 74 69 63 20 76 6f 69 64 20 63 6f 75 6e 74 53  atic void countS
4170: 74 65 70 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  tep(sqlite3_cont
4180: 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c 20 69 6e  ext *context, in
4190: 74 20 61 72 67 63 2c 20 73 71 6c 69 74 65 33 5f  t argc, sqlite3_
41a0: 76 61 6c 75 65 20 2a 2a 61 72 67 76 29 7b 0a 20  value **argv){. 
41b0: 20 43 6f 75 6e 74 43 74 78 20 2a 70 3b 0a 20 20   CountCtx *p;.  
41c0: 70 20 3d 20 73 71 6c 69 74 65 33 5f 61 67 67 72  p = sqlite3_aggr
41d0: 65 67 61 74 65 5f 63 6f 6e 74 65 78 74 28 63 6f  egate_context(co
41e0: 6e 74 65 78 74 2c 20 73 69 7a 65 6f 66 28 2a 70  ntext, sizeof(*p
41f0: 29 29 3b 0a 20 20 69 66 28 20 28 61 72 67 63 3d  ));.  if( (argc=
4200: 3d 30 20 7c 7c 20 53 51 4c 49 54 45 5f 4e 55 4c  =0 || SQLITE_NUL
4210: 4c 21 3d 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  L!=sqlite3_value
4220: 5f 74 79 70 65 28 61 72 67 76 5b 30 5d 29 20 29  _type(argv[0]) )
4230: 20 26 26 20 70 20 29 7b 0a 20 20 20 20 70 2d 3e   && p ){.    p->
4240: 6e 2b 2b 3b 0a 20 20 7d 0a 7d 20 20 20 0a 73 74  n++;.  }.}   .st
4250: 61 74 69 63 20 76 6f 69 64 20 63 6f 75 6e 74 46  atic void countF
4260: 69 6e 61 6c 69 7a 65 28 73 71 6c 69 74 65 33 5f  inalize(sqlite3_
4270: 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78 74  context *context
4280: 29 7b 0a 20 20 43 6f 75 6e 74 43 74 78 20 2a 70  ){.  CountCtx *p
4290: 3b 0a 20 20 70 20 3d 20 73 71 6c 69 74 65 33 5f  ;.  p = sqlite3_
42a0: 61 67 67 72 65 67 61 74 65 5f 63 6f 6e 74 65 78  aggregate_contex
42b0: 74 28 63 6f 6e 74 65 78 74 2c 20 73 69 7a 65 6f  t(context, sizeo
42c0: 66 28 2a 70 29 29 3b 0a 20 20 73 71 6c 69 74 65  f(*p));.  sqlite
42d0: 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28 63 6f 6e  3_result_int(con
42e0: 74 65 78 74 2c 20 70 20 3f 20 70 2d 3e 6e 20 3a  text, p ? p->n :
42f0: 20 30 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73   0);.}../*.** Us
4300: 61 67 65 3a 20 20 73 71 6c 69 74 65 5f 74 65 73  age:  sqlite_tes
4310: 74 5f 63 72 65 61 74 65 5f 61 67 67 72 65 67 61  t_create_aggrega
4320: 74 65 20 44 42 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c  te DB.**.** Call
4330: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63 72 65   the sqlite3_cre
4340: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 20 41 50 49  ate_function API
4350: 20 6f 6e 20 74 68 65 20 67 69 76 65 6e 20 64 61   on the given da
4360: 74 61 62 61 73 65 20 69 6e 20 6f 72 64 65 72 0a  tabase in order.
4370: 2a 2a 20 74 6f 20 63 72 65 61 74 65 20 61 20 66  ** to create a f
4380: 75 6e 63 74 69 6f 6e 20 6e 61 6d 65 64 20 22 78  unction named "x
4390: 5f 63 6f 75 6e 74 22 2e 20 20 54 68 69 73 20 66  _count".  This f
43a0: 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 74 68 65  unction does the
43b0: 20 73 61 6d 65 20 74 68 69 6e 67 0a 2a 2a 20 61   same thing.** a
43c0: 73 20 74 68 65 20 22 6d 64 35 73 75 6d 22 20 66  s the "md5sum" f
43d0: 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  unction..**.** T
43e0: 68 65 20 6f 72 69 67 69 6e 61 6c 20 6d 6f 74 69  he original moti
43f0: 76 61 74 69 6f 6e 20 66 6f 72 20 74 68 69 73 20  vation for this 
4400: 72 6f 75 74 69 6e 65 20 77 61 73 20 74 6f 20 62  routine was to b
4410: 65 20 61 62 6c 65 20 74 6f 20 63 61 6c 6c 20 74  e able to call t
4420: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 72  he.** sqlite3_cr
4430: 65 61 74 65 5f 61 67 67 72 65 67 61 74 65 20 66  eate_aggregate f
4440: 75 6e 63 74 69 6f 6e 20 77 68 69 6c 65 20 61 20  unction while a 
4450: 71 75 65 72 79 20 69 73 20 69 6e 20 70 72 6f 67  query is in prog
4460: 72 65 73 73 20 69 6e 20 6f 72 64 65 72 0a 2a 2a  ress in order.**
4470: 20 74 6f 20 74 65 73 74 20 74 68 65 20 53 51 4c   to test the SQL
4480: 49 54 45 5f 4d 49 53 55 53 45 20 64 65 74 65 63  ITE_MISUSE detec
4490: 74 69 6f 6e 20 6c 6f 67 69 63 2e 0a 2a 2f 0a 73  tion logic..*/.s
44a0: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63  tatic int test_c
44b0: 72 65 61 74 65 5f 61 67 67 72 65 67 61 74 65 28  reate_aggregate(
44c0: 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64  .  void *NotUsed
44d0: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
44e0: 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
44f0: 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
4500: 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
4510: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
4520: 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20   int argc,      
4530: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
4540: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
4550: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20  /.  char **argv 
4560: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
4570: 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d  xt of each argum
4580: 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69  ent */.){.  sqli
4590: 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72  te3 *db;.  int r
45a0: 63 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 32  c;.  if( argc!=2
45b0: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
45c0: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
45d0: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
45e0: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61  should be \"", a
45f0: 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22  rgv[0],.       "
4600: 20 46 49 4c 45 4e 41 4d 45 5c 22 22 2c 20 30 29   FILENAME\"", 0)
4610: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
4620: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
4630: 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69  ( getDbPointer(i
4640: 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20  nterp, argv[1], 
4650: 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
4660: 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20  L_ERROR;.  rc = 
4670: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
4680: 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22 78 5f 63  unction(db, "x_c
4690: 6f 75 6e 74 22 2c 20 30 2c 20 53 51 4c 49 54 45  ount", 0, SQLITE
46a0: 5f 55 54 46 38 2c 20 30 2c 20 30 2c 0a 20 20 20  _UTF8, 0, 0,.   
46b0: 20 20 20 63 6f 75 6e 74 53 74 65 70 2c 63 6f 75     countStep,cou
46c0: 6e 74 46 69 6e 61 6c 69 7a 65 29 3b 0a 20 20 69  ntFinalize);.  i
46d0: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
46e0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   ){.    sqlite3_
46f0: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
4700: 64 62 2c 20 22 78 5f 63 6f 75 6e 74 22 2c 20 31  db, "x_count", 1
4710: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30  , SQLITE_UTF8, 0
4720: 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 63 6f 75  , 0,.        cou
4730: 6e 74 53 74 65 70 2c 63 6f 75 6e 74 46 69 6e 61  ntStep,countFina
4740: 6c 69 7a 65 29 3b 0a 20 20 7d 0a 20 20 69 66 28  lize);.  }.  if(
4750: 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43   sqlite3TestErrC
4760: 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20  ode(interp, db, 
4770: 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  rc) ) return TCL
4780: 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74 75 72 6e  _ERROR;.  return
4790: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 0a 2f 2a   TCL_OK;.}..../*
47a0: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
47b0: 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 20  te3_mprintf_int 
47c0: 46 4f 52 4d 41 54 20 49 4e 54 45 47 45 52 20 49  FORMAT INTEGER I
47d0: 4e 54 45 47 45 52 20 49 4e 54 45 47 45 52 0a 2a  NTEGER INTEGER.*
47e0: 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e 74  *.** Call mprint
47f0: 66 20 77 69 74 68 20 74 68 72 65 65 20 69 6e 74  f with three int
4800: 65 67 65 72 20 61 72 67 75 6d 65 6e 74 73 0a 2a  eger arguments.*
4810: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c  /.static int sql
4820: 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74  ite3_mprintf_int
4830: 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65  (.  void *NotUse
4840: 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  d,.  Tcl_Interp 
4850: 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
4860: 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
4870: 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
4880: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
4890: 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20    int argc,     
48a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
48b0: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
48c0: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  */.  char **argv
48d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
48e0: 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75  ext of each argu
48f0: 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  ment */.){.  int
4900: 20 61 5b 33 5d 2c 20 69 3b 0a 20 20 63 68 61 72   a[3], i;.  char
4910: 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72 67 63 21   *z;.  if( argc!
4920: 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =5 ){.    Tcl_Ap
4930: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
4940: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
4950: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
4960: 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20   argv[0],.      
4970: 20 22 20 46 4f 52 4d 41 54 20 49 4e 54 20 49 4e   " FORMAT INT IN
4980: 54 20 49 4e 54 5c 22 22 2c 20 30 29 3b 0a 20 20  T INT\"", 0);.  
4990: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
49a0: 4f 52 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d  OR;.  }.  for(i=
49b0: 32 3b 20 69 3c 35 3b 20 69 2b 2b 29 7b 0a 20 20  2; i<5; i++){.  
49c0: 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
49d0: 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 69 5d  (interp, argv[i]
49e0: 2c 20 26 61 5b 69 2d 32 5d 29 20 29 20 72 65 74  , &a[i-2]) ) ret
49f0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
4a00: 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33   }.  z = sqlite3
4a10: 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b 31 5d  _mprintf(argv[1]
4a20: 2c 20 61 5b 30 5d 2c 20 61 5b 31 5d 2c 20 61 5b  , a[0], a[1], a[
4a30: 32 5d 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e  2]);.  Tcl_Appen
4a40: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
4a50: 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33  z, 0);.  sqlite3
4a60: 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65 74 75  _free(z);.  retu
4a70: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
4a80: 0a 2a 2a 20 49 66 20 7a 4e 75 6d 20 72 65 70 72  .** If zNum repr
4a90: 65 73 65 6e 74 73 20 61 6e 20 69 6e 74 65 67 65  esents an intege
4aa0: 72 20 74 68 61 74 20 77 69 6c 6c 20 66 69 74 20  r that will fit 
4ab0: 69 6e 20 36 34 2d 62 69 74 73 2c 20 74 68 65 6e  in 64-bits, then
4ac0: 20 73 65 74 0a 2a 2a 20 2a 70 56 61 6c 75 65 20   set.** *pValue 
4ad0: 74 6f 20 74 68 61 74 20 69 6e 74 65 67 65 72 20  to that integer 
4ae0: 61 6e 64 20 72 65 74 75 72 6e 20 74 72 75 65 2e  and return true.
4af0: 20 20 4f 74 68 65 72 77 69 73 65 20 72 65 74 75    Otherwise retu
4b00: 72 6e 20 66 61 6c 73 65 2e 0a 2a 2f 0a 73 74 61  rn false..*/.sta
4b10: 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33 47  tic int sqlite3G
4b20: 65 74 49 6e 74 36 34 28 63 6f 6e 73 74 20 63 68  etInt64(const ch
4b30: 61 72 20 2a 7a 4e 75 6d 2c 20 69 36 34 20 2a 70  ar *zNum, i64 *p
4b40: 56 61 6c 75 65 29 7b 0a 20 20 69 66 28 20 73 71  Value){.  if( sq
4b50: 6c 69 74 65 33 46 69 74 73 49 6e 36 34 42 69 74  lite3FitsIn64Bit
4b60: 73 28 7a 4e 75 6d 29 20 29 7b 0a 20 20 20 20 73  s(zNum) ){.    s
4b70: 71 6c 69 74 65 33 61 74 6f 69 36 34 28 7a 4e 75  qlite3atoi64(zNu
4b80: 6d 2c 20 70 56 61 6c 75 65 29 3b 0a 20 20 20 20  m, pValue);.    
4b90: 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20  return 1;.  }.  
4ba0: 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a  return 0;.}../*.
4bb0: 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
4bc0: 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 36 34  e3_mprintf_int64
4bd0: 20 46 4f 52 4d 41 54 20 49 4e 54 45 47 45 52 20   FORMAT INTEGER 
4be0: 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45 52 0a  INTEGER INTEGER.
4bf0: 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e  **.** Call mprin
4c00: 74 66 20 77 69 74 68 20 74 68 72 65 65 20 36 34  tf with three 64
4c10: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 61 72 67  -bit integer arg
4c20: 75 6d 65 6e 74 73 0a 2a 2f 0a 73 74 61 74 69 63  uments.*/.static
4c30: 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 70 72   int sqlite3_mpr
4c40: 69 6e 74 66 5f 69 6e 74 36 34 28 0a 20 20 76 6f  intf_int64(.  vo
4c50: 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54  id *NotUsed,.  T
4c60: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
4c70: 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c  p,    /* The TCL
4c80: 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61   interpreter tha
4c90: 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63  t invoked this c
4ca0: 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  ommand */.  int 
4cb0: 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20  argc,           
4cc0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
4cd0: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63  arguments */.  c
4ce0: 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20  har **argv      
4cf0: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
4d00: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a   each argument *
4d10: 2f 0a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  /.){.  int i;.  
4d20: 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 61 5b 33  sqlite_int64 a[3
4d30: 5d 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20  ];.  char *z;.  
4d40: 69 66 28 20 61 72 67 63 21 3d 35 20 29 7b 0a 20  if( argc!=5 ){. 
4d50: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
4d60: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
4d70: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
4d80: 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30  d be \"", argv[0
4d90: 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 4f 52 4d  ],.       " FORM
4da0: 41 54 20 49 4e 54 20 49 4e 54 20 49 4e 54 5c 22  AT INT INT INT\"
4db0: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
4dc0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
4dd0: 0a 20 20 66 6f 72 28 69 3d 32 3b 20 69 3c 35 3b  .  for(i=2; i<5;
4de0: 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 21   i++){.    if( !
4df0: 73 71 6c 69 74 65 33 47 65 74 49 6e 74 36 34 28  sqlite3GetInt64(
4e00: 61 72 67 76 5b 69 5d 2c 20 26 61 5b 69 2d 32 5d  argv[i], &a[i-2]
4e10: 29 20 29 7b 0a 20 20 20 20 20 20 54 63 6c 5f 41  ) ){.      Tcl_A
4e20: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
4e30: 72 70 2c 20 22 61 72 67 75 6d 65 6e 74 20 69 73  rp, "argument is
4e40: 20 6e 6f 74 20 61 20 76 61 6c 69 64 20 36 34 2d   not a valid 64-
4e50: 62 69 74 20 69 6e 74 65 67 65 72 22 2c 20 30 29  bit integer", 0)
4e60: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 54  ;.      return T
4e70: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a  CL_ERROR;.    }.
4e80: 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65    }.  z = sqlite
4e90: 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b 31  3_mprintf(argv[1
4ea0: 5d 2c 20 61 5b 30 5d 2c 20 61 5b 31 5d 2c 20 61  ], a[0], a[1], a
4eb0: 5b 32 5d 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65  [2]);.  Tcl_Appe
4ec0: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
4ed0: 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65   z, 0);.  sqlite
4ee0: 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65 74  3_free(z);.  ret
4ef0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
4f00: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
4f10: 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72  ite3_mprintf_str
4f20: 20 46 4f 52 4d 41 54 20 49 4e 54 45 47 45 52 20   FORMAT INTEGER 
4f30: 49 4e 54 45 47 45 52 20 53 54 52 49 4e 47 0a 2a  INTEGER STRING.*
4f40: 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e 74  *.** Call mprint
4f50: 66 20 77 69 74 68 20 74 77 6f 20 69 6e 74 65 67  f with two integ
4f60: 65 72 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64  er arguments and
4f70: 20 6f 6e 65 20 73 74 72 69 6e 67 20 61 72 67 75   one string argu
4f80: 6d 65 6e 74 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ment.*/.static i
4f90: 6e 74 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  nt sqlite3_mprin
4fa0: 74 66 5f 73 74 72 28 0a 20 20 76 6f 69 64 20 2a  tf_str(.  void *
4fb0: 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49  NotUsed,.  Tcl_I
4fc0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20  nterp *interp,  
4fd0: 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74    /* The TCL int
4fe0: 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e  erpreter that in
4ff0: 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61  voked this comma
5000: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63  nd */.  int argc
5010: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
5020: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
5030: 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20  ments */.  char 
5040: 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20  **argv          
5050: 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63    /* Text of eac
5060: 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b  h argument */.){
5070: 0a 20 20 69 6e 74 20 61 5b 33 5d 2c 20 69 3b 0a  .  int a[3], i;.
5080: 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69 66 28    char *z;.  if(
5090: 20 61 72 67 63 3c 34 20 7c 7c 20 61 72 67 63 3e   argc<4 || argc>
50a0: 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  5 ){.    Tcl_App
50b0: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
50c0: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
50d0: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
50e0: 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20  argv[0],.       
50f0: 22 20 46 4f 52 4d 41 54 20 49 4e 54 20 49 4e 54  " FORMAT INT INT
5100: 20 3f 53 54 52 49 4e 47 3f 5c 22 22 2c 20 30 29   ?STRING?\"", 0)
5110: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
5120: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 66 6f  _ERROR;.  }.  fo
5130: 72 28 69 3d 32 3b 20 69 3c 34 3b 20 69 2b 2b 29  r(i=2; i<4; i++)
5140: 7b 0a 20 20 20 20 69 66 28 20 54 63 6c 5f 47 65  {.    if( Tcl_Ge
5150: 74 49 6e 74 28 69 6e 74 65 72 70 2c 20 61 72 67  tInt(interp, arg
5160: 76 5b 69 5d 2c 20 26 61 5b 69 2d 32 5d 29 20 29  v[i], &a[i-2]) )
5170: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
5180: 52 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c  R;.  }.  z = sql
5190: 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 61 72 67  ite3_mprintf(arg
51a0: 76 5b 31 5d 2c 20 61 5b 30 5d 2c 20 61 5b 31 5d  v[1], a[0], a[1]
51b0: 2c 20 61 72 67 63 3e 34 20 3f 20 61 72 67 76 5b  , argc>4 ? argv[
51c0: 34 5d 20 3a 20 4e 55 4c 4c 29 3b 0a 20 20 54 63  4] : NULL);.  Tc
51d0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
51e0: 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a 20 20  nterp, z, 0);.  
51f0: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 29 3b  sqlite3_free(z);
5200: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
5210: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
5220: 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  :  sqlite3_mprin
5230: 74 66 5f 64 6f 75 62 6c 65 20 46 4f 52 4d 41 54  tf_double FORMAT
5240: 20 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45 52   INTEGER INTEGER
5250: 20 44 4f 55 42 4c 45 0a 2a 2a 0a 2a 2a 20 43 61   DOUBLE.**.** Ca
5260: 6c 6c 20 6d 70 72 69 6e 74 66 20 77 69 74 68 20  ll mprintf with 
5270: 74 77 6f 20 69 6e 74 65 67 65 72 20 61 72 67 75  two integer argu
5280: 6d 65 6e 74 73 20 61 6e 64 20 6f 6e 65 20 64 6f  ments and one do
5290: 75 62 6c 65 20 61 72 67 75 6d 65 6e 74 0a 2a 2f  uble argument.*/
52a0: 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69  .static int sqli
52b0: 74 65 33 5f 6d 70 72 69 6e 74 66 5f 64 6f 75 62  te3_mprintf_doub
52c0: 6c 65 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55  le(.  void *NotU
52d0: 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  sed,.  Tcl_Inter
52e0: 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
52f0: 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
5300: 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
5310: 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
5320: 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20  /.  int argc,   
5330: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
5340: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
5350: 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72  s */.  char **ar
5360: 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  gv            /*
5370: 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72   Text of each ar
5380: 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69  gument */.){.  i
5390: 6e 74 20 61 5b 33 5d 2c 20 69 3b 0a 20 20 64 6f  nt a[3], i;.  do
53a0: 75 62 6c 65 20 72 3b 0a 20 20 63 68 61 72 20 2a  uble r;.  char *
53b0: 7a 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 35  z;.  if( argc!=5
53c0: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
53d0: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
53e0: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
53f0: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61  should be \"", a
5400: 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22  rgv[0],.       "
5410: 20 46 4f 52 4d 41 54 20 49 4e 54 20 49 4e 54 20   FORMAT INT INT 
5420: 44 4f 55 42 4c 45 5c 22 22 2c 20 30 29 3b 0a 20  DOUBLE\"", 0);. 
5430: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
5440: 52 4f 52 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69  ROR;.  }.  for(i
5450: 3d 32 3b 20 69 3c 34 3b 20 69 2b 2b 29 7b 0a 20  =2; i<4; i++){. 
5460: 20 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e     if( Tcl_GetIn
5470: 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 69  t(interp, argv[i
5480: 5d 2c 20 26 61 5b 69 2d 32 5d 29 20 29 20 72 65  ], &a[i-2]) ) re
5490: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
54a0: 20 20 7d 0a 20 20 69 66 28 20 54 63 6c 5f 47 65    }.  if( Tcl_Ge
54b0: 74 44 6f 75 62 6c 65 28 69 6e 74 65 72 70 2c 20  tDouble(interp, 
54c0: 61 72 67 76 5b 34 5d 2c 20 26 72 29 20 29 20 72  argv[4], &r) ) r
54d0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
54e0: 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 6d  .  z = sqlite3_m
54f0: 70 72 69 6e 74 66 28 61 72 67 76 5b 31 5d 2c 20  printf(argv[1], 
5500: 61 5b 30 5d 2c 20 61 5b 31 5d 2c 20 72 29 3b 0a  a[0], a[1], r);.
5510: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
5520: 6c 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29  lt(interp, z, 0)
5530: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65  ;.  sqlite3_free
5540: 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  (z);.  return TC
5550: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
5560: 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d  sage:  sqlite3_m
5570: 70 72 69 6e 74 66 5f 73 63 61 6c 65 64 20 46 4f  printf_scaled FO
5580: 52 4d 41 54 20 44 4f 55 42 4c 45 20 44 4f 55 42  RMAT DOUBLE DOUB
5590: 4c 45 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70  LE.**.** Call mp
55a0: 72 69 6e 74 66 20 77 69 74 68 20 61 20 73 69 6e  rintf with a sin
55b0: 67 6c 65 20 64 6f 75 62 6c 65 20 61 72 67 75 6d  gle double argum
55c0: 65 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65  ent which is the
55d0: 20 70 72 6f 64 75 63 74 20 6f 66 20 74 68 65 0a   product of the.
55e0: 2a 2a 20 74 77 6f 20 61 72 67 75 6d 65 6e 74 73  ** two arguments
55f0: 20 67 69 76 65 6e 20 61 62 6f 76 65 2e 20 20 54   given above.  T
5600: 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20 67  his is used to g
5610: 65 6e 65 72 61 74 65 20 6f 76 65 72 66 6c 6f 77  enerate overflow
5620: 20 61 6e 64 20 75 6e 64 65 72 66 6c 6f 77 0a 2a   and underflow.*
5630: 2a 20 64 6f 75 62 6c 65 73 20 74 6f 20 74 65 73  * doubles to tes
5640: 74 20 74 68 61 74 20 74 68 65 79 20 61 72 65 20  t that they are 
5650: 63 6f 6e 76 65 72 74 65 64 20 70 72 6f 70 65 72  converted proper
5660: 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ly..*/.static in
5670: 74 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  t sqlite3_mprint
5680: 66 5f 73 63 61 6c 65 64 28 0a 20 20 76 6f 69 64  f_scaled(.  void
5690: 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c   *NotUsed,.  Tcl
56a0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
56b0: 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69      /* The TCL i
56c0: 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20  nterpreter that 
56d0: 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d  invoked this com
56e0: 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72  mand */.  int ar
56f0: 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  gc,             
5700: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
5710: 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61  guments */.  cha
5720: 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20  r **argv        
5730: 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65      /* Text of e
5740: 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  ach argument */.
5750: 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 64 6f  ){.  int i;.  do
5760: 75 62 6c 65 20 72 5b 32 5d 3b 0a 20 20 63 68 61  uble r[2];.  cha
5770: 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72 67 63  r *z;.  if( argc
5780: 21 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=4 ){.    Tcl_A
5790: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
57a0: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
57b0: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
57c0: 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20  , argv[0],.     
57d0: 20 20 22 20 46 4f 52 4d 41 54 20 44 4f 55 42 4c    " FORMAT DOUBL
57e0: 45 20 44 4f 55 42 4c 45 5c 22 22 2c 20 30 29 3b  E DOUBLE\"", 0);
57f0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
5800: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 66 6f 72  ERROR;.  }.  for
5810: 28 69 3d 32 3b 20 69 3c 34 3b 20 69 2b 2b 29 7b  (i=2; i<4; i++){
5820: 0a 20 20 20 20 69 66 28 20 54 63 6c 5f 47 65 74  .    if( Tcl_Get
5830: 44 6f 75 62 6c 65 28 69 6e 74 65 72 70 2c 20 61  Double(interp, a
5840: 72 67 76 5b 69 5d 2c 20 26 72 5b 69 2d 32 5d 29  rgv[i], &r[i-2])
5850: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
5860: 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 73  ROR;.  }.  z = s
5870: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 61  qlite3_mprintf(a
5880: 72 67 76 5b 31 5d 2c 20 72 5b 30 5d 2a 72 5b 31  rgv[1], r[0]*r[1
5890: 5d 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64  ]);.  Tcl_Append
58a0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a  Result(interp, z
58b0: 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  , 0);.  sqlite3_
58c0: 66 72 65 65 28 7a 29 3b 0a 20 20 72 65 74 75 72  free(z);.  retur
58d0: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
58e0: 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
58f0: 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72 6f 6e  e3_mprintf_stron
5900: 6c 79 20 46 4f 52 4d 41 54 20 53 54 52 49 4e 47  ly FORMAT STRING
5910: 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69  .**.** Call mpri
5920: 6e 74 66 20 77 69 74 68 20 61 20 73 69 6e 67 6c  ntf with a singl
5930: 65 20 64 6f 75 62 6c 65 20 61 72 67 75 6d 65 6e  e double argumen
5940: 74 20 77 68 69 63 68 20 69 73 20 74 68 65 20 70  t which is the p
5950: 72 6f 64 75 63 74 20 6f 66 20 74 68 65 0a 2a 2a  roduct of the.**
5960: 20 74 77 6f 20 61 72 67 75 6d 65 6e 74 73 20 67   two arguments g
5970: 69 76 65 6e 20 61 62 6f 76 65 2e 20 20 54 68 69  iven above.  Thi
5980: 73 20 69 73 20 75 73 65 64 20 74 6f 20 67 65 6e  s is used to gen
5990: 65 72 61 74 65 20 6f 76 65 72 66 6c 6f 77 20 61  erate overflow a
59a0: 6e 64 20 75 6e 64 65 72 66 6c 6f 77 0a 2a 2a 20  nd underflow.** 
59b0: 64 6f 75 62 6c 65 73 20 74 6f 20 74 65 73 74 20  doubles to test 
59c0: 74 68 61 74 20 74 68 65 79 20 61 72 65 20 63 6f  that they are co
59d0: 6e 76 65 72 74 65 64 20 70 72 6f 70 65 72 6c 79  nverted properly
59e0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
59f0: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
5a00: 73 74 72 6f 6e 6c 79 28 0a 20 20 76 6f 69 64 20  stronly(.  void 
5a10: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f  *NotUsed,.  Tcl_
5a20: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
5a30: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
5a40: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
5a50: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
5a60: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67  and */.  int arg
5a70: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
5a80: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
5a90: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72  uments */.  char
5aa0: 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20   **argv         
5ab0: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61     /* Text of ea
5ac0: 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29  ch argument */.)
5ad0: 7b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69  {.  char *z;.  i
5ae0: 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20  f( argc!=3 ){.  
5af0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
5b00: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
5b10: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
5b20: 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
5b30: 2c 0a 20 20 20 20 20 20 20 22 20 46 4f 52 4d 41  ,.       " FORMA
5b40: 54 20 53 54 52 49 4e 47 5c 22 22 2c 20 30 29 3b  T STRING\"", 0);
5b50: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
5b60: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a 20 3d  ERROR;.  }.  z =
5b70: 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
5b80: 28 61 72 67 76 5b 31 5d 2c 20 61 72 67 76 5b 32  (argv[1], argv[2
5b90: 5d 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64  ]);.  Tcl_Append
5ba0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a  Result(interp, z
5bb0: 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  , 0);.  sqlite3_
5bc0: 66 72 65 65 28 7a 29 3b 0a 20 20 72 65 74 75 72  free(z);.  retur
5bd0: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
5be0: 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
5bf0: 65 33 5f 6d 70 72 69 6e 74 66 5f 68 65 78 64 6f  e3_mprintf_hexdo
5c00: 75 62 6c 65 20 46 4f 52 4d 41 54 20 48 45 58 0a  uble FORMAT HEX.
5c10: 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e  **.** Call mprin
5c20: 74 66 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65  tf with a single
5c30: 20 64 6f 75 62 6c 65 20 61 72 67 75 6d 65 6e 74   double argument
5c40: 20 77 68 69 63 68 20 69 73 20 64 65 72 69 76 65   which is derive
5c50: 64 20 66 72 6f 6d 20 74 68 65 0a 2a 2a 20 68 65  d from the.** he
5c60: 78 61 64 65 63 69 6d 61 6c 20 65 6e 63 6f 64 69  xadecimal encodi
5c70: 6e 67 20 6f 66 20 61 6e 20 49 45 45 45 20 64 6f  ng of an IEEE do
5c80: 75 62 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  uble..*/.static 
5c90: 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  int sqlite3_mpri
5ca0: 6e 74 66 5f 68 65 78 64 6f 75 62 6c 65 28 0a 20  ntf_hexdouble(. 
5cb0: 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a   void *NotUsed,.
5cc0: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
5cd0: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
5ce0: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
5cf0: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
5d00: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
5d10: 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20  nt argc,        
5d20: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
5d30: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
5d40: 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20    char **argv   
5d50: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
5d60: 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e   of each argumen
5d70: 74 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20 2a  t */.){.  char *
5d80: 7a 3b 0a 20 20 64 6f 75 62 6c 65 20 72 3b 0a 20  z;.  double r;. 
5d90: 20 75 6e 73 69 67 6e 65 64 20 20 78 31 2c 20 78   unsigned  x1, x
5da0: 32 3b 0a 20 20 6c 6f 6e 67 20 6c 6f 6e 67 20 75  2;.  long long u
5db0: 6e 73 69 67 6e 65 64 20 64 3b 0a 20 20 69 66 28  nsigned d;.  if(
5dc0: 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20   argc!=3 ){.    
5dd0: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
5de0: 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
5df0: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
5e00: 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a  e \"", argv[0],.
5e10: 20 20 20 20 20 20 20 22 20 46 4f 52 4d 41 54 20         " FORMAT 
5e20: 53 54 52 49 4e 47 5c 22 22 2c 20 30 29 3b 0a 20  STRING\"", 0);. 
5e30: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
5e40: 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73  ROR;.  }.  if( s
5e50: 73 63 61 6e 66 28 61 72 67 76 5b 32 5d 2c 20 22  scanf(argv[2], "
5e60: 25 30 38 78 25 30 38 78 22 2c 20 26 78 32 2c 20  %08x%08x", &x2, 
5e70: 26 78 31 29 21 3d 32 20 29 7b 0a 20 20 20 20 54  &x1)!=2 ){.    T
5e80: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
5e90: 69 6e 74 65 72 70 2c 20 22 32 6e 64 20 61 72 67  interp, "2nd arg
5ea0: 75 6d 65 6e 74 20 73 68 6f 75 6c 64 20 62 65 20  ument should be 
5eb0: 31 36 2d 63 68 61 72 61 63 74 65 72 73 20 6f 66  16-characters of
5ec0: 20 68 65 78 22 2c 20 30 29 3b 0a 20 20 20 20 72   hex", 0);.    r
5ed0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
5ee0: 0a 20 20 7d 0a 20 20 64 20 3d 20 78 32 3b 0a 20  .  }.  d = x2;. 
5ef0: 20 64 20 3d 20 28 64 3c 3c 33 32 29 20 2b 20 78   d = (d<<32) + x
5f00: 31 3b 0a 20 20 6d 65 6d 63 70 79 28 26 72 2c 20  1;.  memcpy(&r, 
5f10: 26 64 2c 20 73 69 7a 65 6f 66 28 72 29 29 3b 0a  &d, sizeof(r));.
5f20: 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70    z = sqlite3_mp
5f30: 72 69 6e 74 66 28 61 72 67 76 5b 31 5d 2c 20 72  rintf(argv[1], r
5f40: 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  );.  Tcl_AppendR
5f50: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 2c  esult(interp, z,
5f60: 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66   0);.  sqlite3_f
5f70: 72 65 65 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e  ree(z);.  return
5f80: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
5f90: 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 5f  * Usage: sqlite_
5fa0: 6d 61 6c 6c 6f 63 5f 66 61 69 6c 20 4e 20 20 3f  malloc_fail N  ?
5fb0: 52 45 50 45 41 54 2d 49 4e 54 45 52 56 41 4c 3f  REPEAT-INTERVAL?
5fc0: 0a 2a 2a 0a 2a 2a 20 52 69 67 20 73 71 6c 69 74  .**.** Rig sqlit
5fd0: 65 4d 61 6c 6c 6f 63 28 29 20 74 6f 20 66 61 69  eMalloc() to fai
5fe0: 6c 20 6f 6e 20 74 68 65 20 4e 2d 74 68 20 63 61  l on the N-th ca
5ff0: 6c 6c 20 61 6e 64 20 65 76 65 72 79 20 52 45 50  ll and every REP
6000: 45 41 54 2d 49 4e 54 45 52 56 41 4c 20 63 61 6c  EAT-INTERVAL cal
6010: 6c 0a 2a 2a 20 61 66 74 65 72 20 74 68 61 74 2e  l.** after that.
6020: 20 20 49 66 20 52 45 50 45 41 54 2d 49 4e 54 45    If REPEAT-INTE
6030: 52 56 41 4c 20 69 73 20 30 20 6f 72 20 69 73 20  RVAL is 0 or is 
6040: 6f 6d 69 74 74 65 64 2c 20 74 68 65 6e 20 6f 6e  omitted, then on
6050: 6c 79 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 6d  ly a single.** m
6060: 61 6c 6c 6f 63 20 77 69 6c 6c 20 66 61 69 6c 2e  alloc will fail.
6070: 20 20 49 66 20 52 45 50 45 41 54 2d 49 4e 54 45    If REPEAT-INTE
6080: 52 56 41 4c 20 69 73 20 31 20 74 68 65 6e 20 61  RVAL is 1 then a
6090: 6c 6c 20 6d 61 6c 6c 6f 63 73 20 61 66 74 65 72  ll mallocs after
60a0: 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 66 61   the.** first fa
60b0: 69 6c 75 72 65 20 77 69 6c 6c 20 63 6f 6e 74 69  ilure will conti
60c0: 6e 75 65 20 74 6f 20 66 61 69 6c 20 6f 6e 20 65  nue to fail on e
60d0: 76 65 72 79 20 63 61 6c 6c 2e 20 20 49 66 20 52  very call.  If R
60e0: 45 50 45 41 54 2d 49 4e 54 45 52 56 41 4c 20 69  EPEAT-INTERVAL i
60f0: 73 0a 2a 2a 20 32 20 74 68 65 6e 20 65 76 65 72  s.** 2 then ever
6100: 79 20 6f 74 68 65 72 20 6d 61 6c 6c 6f 63 20 77  y other malloc w
6110: 69 6c 6c 20 66 61 69 6c 2e 20 20 41 6e 64 20 73  ill fail.  And s
6120: 6f 20 66 6f 72 74 68 2e 0a 2a 2a 0a 2a 2a 20 54  o forth..**.** T
6130: 75 72 6e 20 6f 66 66 20 74 68 69 73 20 6d 65 63  urn off this mec
6140: 68 61 6e 69 73 6d 20 61 6e 64 20 72 65 73 65 74  hanism and reset
6150: 20 74 68 65 20 73 71 6c 69 74 65 33 54 68 72 65   the sqlite3Thre
6160: 61 64 44 61 74 61 28 29 2d 3e 6d 61 6c 6c 6f 63  adData()->malloc
6170: 46 61 69 6c 65 64 20 76 61 72 69 61 62 6c 65 20  Failed variable 
6180: 69 73 20 4e 3d 3d 30 2e 0a 2a 2f 0a 23 69 66 64  is N==0..*/.#ifd
6190: 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ef SQLITE_MEMDEB
61a0: 55 47 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71  UG.static int sq
61b0: 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c  lite_malloc_fail
61c0: 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65  (.  void *NotUse
61d0: 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  d,.  Tcl_Interp 
61e0: 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
61f0: 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
6200: 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
6210: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
6220: 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20    int argc,     
6230: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
6240: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
6250: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  */.  char **argv
6260: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
6270: 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75  ext of each argu
6280: 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  ment */.){.  int
6290: 20 6e 3b 0a 20 20 69 6e 74 20 72 65 70 3b 0a 20   n;.  int rep;. 
62a0: 20 69 66 28 20 61 72 67 63 21 3d 32 20 26 26 20   if( argc!=2 && 
62b0: 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54  argc!=3 ){.    T
62c0: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
62d0: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
62e0: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
62f0: 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 22   \"", argv[0], "
6300: 20 4e 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72   N\"", 0);.    r
6310: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
6320: 0a 20 20 7d 0a 20 20 69 66 28 20 54 63 6c 5f 47  .  }.  if( Tcl_G
6330: 65 74 49 6e 74 28 69 6e 74 65 72 70 2c 20 61 72  etInt(interp, ar
6340: 67 76 5b 31 5d 2c 20 26 6e 29 20 29 20 72 65 74  gv[1], &n) ) ret
6350: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
6360: 20 69 66 28 20 61 72 67 63 3d 3d 33 20 29 7b 0a   if( argc==3 ){.
6370: 20 20 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49      if( Tcl_GetI
6380: 6e 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  nt(interp, argv[
6390: 32 5d 2c 20 26 72 65 70 29 20 29 20 72 65 74 75  2], &rep) ) retu
63a0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
63b0: 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 70 20 3d  }else{.    rep =
63c0: 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65   0;.  }.  sqlite
63d0: 33 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c 20 3d 20  3_iMallocFail = 
63e0: 6e 3b 0a 20 20 73 71 6c 69 74 65 33 5f 69 4d 61  n;.  sqlite3_iMa
63f0: 6c 6c 6f 63 52 65 73 65 74 20 3d 20 72 65 70 3b  llocReset = rep;
6400: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
6410: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ;.}.#endif../*.*
6420: 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 5f  * Usage: sqlite_
6430: 6d 61 6c 6c 6f 63 5f 73 74 61 74 0a 2a 2a 0a 2a  malloc_stat.**.*
6440: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d  * Return the num
6450: 62 65 72 20 6f 66 20 70 72 69 6f 72 20 63 61 6c  ber of prior cal
6460: 6c 73 20 74 6f 20 73 71 6c 69 74 65 4d 61 6c 6c  ls to sqliteMall
6470: 6f 63 28 29 20 61 6e 64 20 73 71 6c 69 74 65 46  oc() and sqliteF
6480: 72 65 65 28 29 2e 0a 2a 2f 0a 23 69 66 64 65 66  ree()..*/.#ifdef
6490: 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
64a0: 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69  .static int sqli
64b0: 74 65 5f 6d 61 6c 6c 6f 63 5f 73 74 61 74 28 0a  te_malloc_stat(.
64c0: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
64d0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
64e0: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
64f0: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
6500: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
6510: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
6520: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
6530: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
6540: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
6550: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
6560: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
6570: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
6580: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20  nt */.){.  char 
6590: 7a 42 75 66 5b 32 30 30 5d 3b 0a 20 20 73 70 72  zBuf[200];.  spr
65a0: 69 6e 74 66 28 7a 42 75 66 2c 20 22 25 64 20 25  intf(zBuf, "%d %
65b0: 64 20 25 64 22 2c 20 73 71 6c 69 74 65 33 5f 6e  d %d", sqlite3_n
65c0: 4d 61 6c 6c 6f 63 2c 73 71 6c 69 74 65 33 5f 6e  Malloc,sqlite3_n
65d0: 46 72 65 65 2c 73 71 6c 69 74 65 33 5f 69 4d 61  Free,sqlite3_iMa
65e0: 6c 6c 6f 63 46 61 69 6c 29 3b 0a 20 20 54 63 6c  llocFail);.  Tcl
65f0: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
6600: 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a  terp, zBuf, 0);.
6610: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
6620: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66  .}../*.** This f
6630: 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  unction implemen
6640: 74 73 20 61 20 54 63 6c 20 63 6f 6d 6d 61 6e 64  ts a Tcl command
6650: 20 74 68 61 74 20 6d 61 79 20 62 65 20 69 6e 76   that may be inv
6660: 6f 6b 65 64 20 75 73 69 6e 67 20 61 6e 79 20 6f  oked using any o
6670: 66 0a 2a 2a 20 74 68 65 20 66 6f 75 72 20 66 6f  f.** the four fo
6680: 72 6d 73 20 65 6e 75 6d 65 72 61 74 65 64 20 62  rms enumerated b
6690: 65 6c 6f 77 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69  elow..**.** sqli
66a0: 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74 61  te_malloc_outsta
66b0: 6e 64 69 6e 67 0a 2a 2a 20 20 20 20 20 52 65 74  nding.**     Ret
66c0: 75 72 6e 20 61 20 73 75 6d 6d 61 72 79 20 6f 66  urn a summary of
66d0: 20 61 6c 6c 20 75 6e 66 72 65 65 64 20 62 6c 6f   all unfreed blo
66e0: 63 6b 73 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c  cks of memory al
66f0: 6c 6f 63 61 74 65 64 20 62 79 20 74 68 65 0a 2a  located by the.*
6700: 2a 20 20 20 20 20 63 75 72 72 65 6e 74 20 74 68  *     current th
6710: 72 65 61 64 2e 20 53 65 65 20 63 6f 6d 6d 65 6e  read. See commen
6720: 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f  ts above functio
6730: 6e 20 73 71 6c 69 74 65 33 4f 75 74 73 74 61 6e  n sqlite3Outstan
6740: 64 69 6e 67 4d 61 6c 6c 6f 63 73 28 29 20 0a 2a  dingMallocs() .*
6750: 2a 20 20 20 20 20 69 6e 20 75 74 69 6c 2e 63 20  *     in util.c 
6760: 66 6f 72 20 61 20 64 65 73 63 72 69 70 74 69 6f  for a descriptio
6770: 6e 20 6f 66 20 74 68 65 20 72 65 74 75 72 6e 65  n of the returne
6780: 64 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 73  d value..**.** s
6790: 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74  qlite_malloc_out
67a0: 73 74 61 6e 64 69 6e 67 20 2d 62 79 74 65 73 0a  standing -bytes.
67b0: 2a 2a 20 20 20 20 20 52 65 74 75 72 6e 20 74 68  **     Return th
67c0: 65 20 74 6f 74 61 6c 20 61 6d 6f 75 6e 74 20 6f  e total amount o
67d0: 66 20 75 6e 66 72 65 65 64 20 6d 65 6d 6f 72 79  f unfreed memory
67e0: 20 28 69 6e 20 62 79 74 65 73 29 20 61 6c 6c 6f   (in bytes) allo
67f0: 63 61 74 65 64 20 62 79 20 0a 2a 2a 20 20 20 20  cated by .**    
6800: 20 74 68 69 73 20 74 68 72 65 61 64 2e 0a 2a 2a   this thread..**
6810: 0a 2a 2a 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f  .** sqlite_mallo
6820: 63 5f 6f 75 74 73 74 61 6e 64 69 6e 67 20 2d 6d  c_outstanding -m
6830: 61 78 62 79 74 65 73 0a 2a 2a 20 20 20 20 20 52  axbytes.**     R
6840: 65 74 75 72 6e 20 74 68 65 20 6d 61 78 69 6d 75  eturn the maximu
6850: 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 64 79 6e 61  m amount of dyna
6860: 6d 69 63 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73  mic memory in us
6870: 65 20 61 74 20 6f 6e 65 20 74 69 6d 65 20 0a 2a  e at one time .*
6880: 2a 20 20 20 20 20 62 79 20 74 68 69 73 20 74 68  *     by this th
6890: 72 65 61 64 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69  read..**.** sqli
68a0: 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74 61  te_malloc_outsta
68b0: 6e 64 69 6e 67 20 2d 63 6c 65 61 72 6d 61 78 62  nding -clearmaxb
68c0: 79 74 65 73 0a 2a 2a 20 20 20 20 20 53 65 74 20  ytes.**     Set 
68d0: 74 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e  the value return
68e0: 65 64 20 62 79 20 5b 73 71 6c 69 74 65 5f 6d 61  ed by [sqlite_ma
68f0: 6c 6c 6f 63 5f 6f 75 74 73 74 61 6e 64 69 6e 67  lloc_outstanding
6900: 20 2d 6d 61 78 62 79 74 65 73 5d 0a 2a 2a 20 20   -maxbytes].**  
6910: 20 20 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e     to the curren
6920: 74 20 76 61 6c 75 65 20 6f 66 20 5b 73 71 6c 69  t value of [sqli
6930: 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74 61  te_malloc_outsta
6940: 6e 64 69 6e 67 20 2d 62 79 74 65 73 5d 2e 20 0a  nding -bytes]. .
6950: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71  */.static int sq
6960: 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73  lite_malloc_outs
6970: 74 61 6e 64 69 6e 67 28 0a 20 20 43 6c 69 65 6e  tanding(.  Clien
6980: 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61  tData clientData
6990: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
69a0: 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
69b0: 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
69c0: 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
69d0: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
69e0: 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20   int objc,      
69f0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
6a00: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
6a10: 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  /.  Tcl_Obj *CON
6a20: 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f  ST objv[]  /* Co
6a30: 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20  mmand arguments 
6a40: 2a 2f 0a 29 7b 0a 20 20 65 78 74 65 72 6e 20 69  */.){.  extern i
6a50: 6e 74 20 73 71 6c 69 74 65 33 4f 75 74 73 74 61  nt sqlite3Outsta
6a60: 6e 64 69 6e 67 4d 61 6c 6c 6f 63 73 28 54 63 6c  ndingMallocs(Tcl
6a70: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 29  _Interp *interp)
6a80: 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
6a90: 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d  _ENABLE_MEMORY_M
6aa0: 41 4e 41 47 45 4d 45 4e 54 0a 20 20 69 66 28 20  ANAGEMENT.  if( 
6ab0: 6f 62 6a 63 3d 3d 32 20 29 7b 0a 20 20 20 20 54  objc==2 ){.    T
6ac0: 68 72 65 61 64 44 61 74 61 20 2a 70 54 64 20 3d  hreadData *pTd =
6ad0: 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 44 61   sqlite3ThreadDa
6ae0: 74 61 28 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20  ta();.    const 
6af0: 63 68 61 72 20 2a 7a 41 72 67 20 3d 20 54 63 6c  char *zArg = Tcl
6b00: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
6b10: 31 5d 29 3b 0a 20 20 20 20 69 66 28 20 30 3d 3d  1]);.    if( 0==
6b20: 73 74 72 63 6d 70 28 7a 41 72 67 2c 20 22 2d 62  strcmp(zArg, "-b
6b30: 79 74 65 73 22 29 20 29 7b 0a 20 20 20 20 20 20  ytes") ){.      
6b40: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
6b50: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
6b60: 49 6e 74 4f 62 6a 28 70 54 64 2d 3e 6e 41 6c 6c  IntObj(pTd->nAll
6b70: 6f 63 29 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  oc));.    }else 
6b80: 69 66 28 20 30 3d 3d 73 74 72 63 6d 70 28 7a 41  if( 0==strcmp(zA
6b90: 72 67 2c 20 22 2d 6d 61 78 62 79 74 65 73 22 29  rg, "-maxbytes")
6ba0: 20 29 7b 0a 20 20 20 20 20 20 54 63 6c 5f 53 65   ){.      Tcl_Se
6bb0: 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
6bc0: 70 2c 20 54 63 6c 5f 4e 65 77 57 69 64 65 49 6e  p, Tcl_NewWideIn
6bd0: 74 4f 62 6a 28 70 54 64 2d 3e 6e 4d 61 78 41 6c  tObj(pTd->nMaxAl
6be0: 6c 6f 63 29 29 3b 0a 20 20 20 20 7d 65 6c 73 65  loc));.    }else
6bf0: 20 69 66 28 20 30 3d 3d 73 74 72 63 6d 70 28 7a   if( 0==strcmp(z
6c00: 41 72 67 2c 20 22 2d 63 6c 65 61 72 6d 61 78 62  Arg, "-clearmaxb
6c10: 79 74 65 73 22 29 20 29 7b 0a 20 20 20 20 20 20  ytes") ){.      
6c20: 70 54 64 2d 3e 6e 4d 61 78 41 6c 6c 6f 63 20 3d  pTd->nMaxAlloc =
6c30: 20 70 54 64 2d 3e 6e 41 6c 6c 6f 63 3b 0a 20 20   pTd->nAlloc;.  
6c40: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 54    }else{.      T
6c50: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
6c60: 69 6e 74 65 72 70 2c 20 22 62 61 64 20 6f 70 74  interp, "bad opt
6c70: 69 6f 6e 20 5c 22 22 2c 20 7a 41 72 67 2c 20 0a  ion \"", zArg, .
6c80: 20 20 20 20 20 20 20 20 22 5c 22 3a 20 6d 75 73          "\": mus
6c90: 74 20 62 65 20 2d 62 79 74 65 73 2c 20 2d 6d 61  t be -bytes, -ma
6ca0: 78 62 79 74 65 73 20 6f 72 20 2d 63 6c 65 61 72  xbytes or -clear
6cb0: 6d 61 78 62 79 74 65 73 22 2c 20 30 0a 20 20 20  maxbytes", 0.   
6cc0: 20 20 20 29 3b 0a 20 20 20 20 20 20 72 65 74 75     );.      retu
6cd0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
6ce0: 20 20 7d 0a 0a 20 20 20 20 72 65 74 75 72 6e 20    }..    return 
6cf0: 54 43 4c 5f 4f 4b 3b 0a 20 20 7d 0a 23 65 6e 64  TCL_OK;.  }.#end
6d00: 69 66 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  if..  if( objc!=
6d10: 31 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f  1 ){.    Tcl_Wro
6d20: 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
6d30: 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 3f 2d 62 79  , 1, objv, "?-by
6d40: 74 65 73 3f 22 29 3b 0a 20 20 20 20 72 65 74 75  tes?");.    retu
6d50: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
6d60: 7d 0a 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69  }..  return sqli
6d70: 74 65 33 4f 75 74 73 74 61 6e 64 69 6e 67 4d 61  te3OutstandingMa
6d80: 6c 6c 6f 63 73 28 69 6e 74 65 72 70 29 3b 0a 7d  llocs(interp);.}
6d90: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 55  .#endif../*.** U
6da0: 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 65 6e  sage: sqlite3_en
6db0: 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68  able_shared_cach
6dc0: 65 20 20 20 20 20 20 42 4f 4f 4c 45 41 4e 0a 2a  e      BOOLEAN.*
6dd0: 2a 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  *.*/.#if !define
6de0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  d(SQLITE_OMIT_SH
6df0: 41 52 45 44 5f 43 41 43 48 45 29 0a 73 74 61 74  ARED_CACHE).stat
6e00: 69 63 20 69 6e 74 20 74 65 73 74 5f 65 6e 61 62  ic int test_enab
6e10: 6c 65 5f 73 68 61 72 65 64 28 0a 20 20 43 6c 69  le_shared(.  Cli
6e20: 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61  entData clientDa
6e30: 74 61 2c 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74  ta, /* Pointer t
6e40: 6f 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65  o sqlite3_enable
6e50: 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  _XXX function */
6e60: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
6e70: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
6e80: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
6e90: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
6ea0: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
6eb0: 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20 20  int objc,       
6ec0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
6ed0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
6ee0: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
6ef0: 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d  T objv[]  /* Com
6f00: 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20 2a  mand arguments *
6f10: 2f 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  /.){.  int rc;. 
6f20: 20 69 6e 74 20 65 6e 61 62 6c 65 3b 0a 20 20 69   int enable;.  i
6f30: 6e 74 20 72 65 74 20 3d 20 30 3b 0a 0a 20 20 69  nt ret = 0;..  i
6f40: 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20  f( objc!=2 ){.  
6f50: 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72    Tcl_WrongNumAr
6f60: 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62  gs(interp, 1, ob
6f70: 6a 76 2c 20 22 42 4f 4f 4c 45 41 4e 22 29 3b 0a  jv, "BOOLEAN");.
6f80: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
6f90: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
6fa0: 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72  Tcl_GetBooleanFr
6fb0: 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
6fc0: 6a 76 5b 31 5d 2c 20 26 65 6e 61 62 6c 65 29 20  jv[1], &enable) 
6fd0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  ){.    return TC
6fe0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72  L_ERROR;.  }.  r
6ff0: 65 74 20 3d 20 73 71 6c 69 74 65 33 54 68 72 65  et = sqlite3Thre
7000: 61 64 44 61 74 61 52 65 61 64 4f 6e 6c 79 28 29  adDataReadOnly()
7010: 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74 61 3b  ->useSharedData;
7020: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
7030: 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61  enable_shared_ca
7040: 63 68 65 28 65 6e 61 62 6c 65 29 3b 0a 20 20 69  che(enable);.  i
7050: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
7060: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 52   ){.    Tcl_SetR
7070: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63  esult(interp, (c
7080: 68 61 72 20 2a 29 73 71 6c 69 74 65 33 45 72 72  har *)sqlite3Err
7090: 53 74 72 28 72 63 29 2c 20 54 43 4c 5f 53 54 41  Str(rc), TCL_STA
70a0: 54 49 43 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  TIC);.    return
70b0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
70c0: 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
70d0: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
70e0: 65 77 42 6f 6f 6c 65 61 6e 4f 62 6a 28 72 65 74  ewBooleanObj(ret
70f0: 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ));.  return TCL
7100: 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  _OK;.}.#endif../
7110: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
7120: 69 74 65 5f 61 62 6f 72 74 0a 2a 2a 0a 2a 2a 20  ite_abort.**.** 
7130: 53 68 75 74 64 6f 77 6e 20 74 68 65 20 70 72 6f  Shutdown the pro
7140: 63 65 73 73 20 69 6d 6d 65 64 69 61 74 65 6c 79  cess immediately
7150: 2e 20 20 54 68 69 73 20 69 73 20 6e 6f 74 20 61  .  This is not a
7160: 20 63 6c 65 61 6e 20 73 68 75 74 64 6f 77 6e 2e   clean shutdown.
7170: 0a 2a 2a 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64  .** This command
7180: 20 69 73 20 75 73 65 64 20 74 6f 20 74 65 73 74   is used to test
7190: 20 74 68 65 20 72 65 63 6f 76 65 72 61 62 69 6c   the recoverabil
71a0: 69 74 79 20 6f 66 20 61 20 64 61 74 61 62 61 73  ity of a databas
71b0: 65 20 69 6e 0a 2a 2a 20 74 68 65 20 65 76 65 6e  e in.** the even
71c0: 74 20 6f 66 20 61 20 70 72 6f 67 72 61 6d 20 63  t of a program c
71d0: 72 61 73 68 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  rash..*/.static 
71e0: 69 6e 74 20 73 71 6c 69 74 65 5f 61 62 6f 72 74  int sqlite_abort
71f0: 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65  (.  void *NotUse
7200: 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  d,.  Tcl_Interp 
7210: 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
7220: 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
7230: 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
7240: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
7250: 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20    int argc,     
7260: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
7270: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
7280: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  */.  char **argv
7290: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
72a0: 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75  ext of each argu
72b0: 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 61 73 73  ment */.){.  ass
72c0: 65 72 74 28 20 69 6e 74 65 72 70 3d 3d 30 20 29  ert( interp==0 )
72d0: 3b 20 20 20 2f 2a 20 54 68 69 73 20 77 69 6c 6c  ;   /* This will
72e0: 20 61 6c 77 61 79 73 20 66 61 69 6c 20 2a 2f 0a   always fail */.
72f0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
7300: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  .}../*.** The fo
7310: 6c 6c 6f 77 69 6e 67 20 72 6f 75 74 69 6e 65 20  llowing routine 
7320: 69 73 20 61 20 75 73 65 72 2d 64 65 66 69 6e 65  is a user-define
7330: 64 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 77  d SQL function w
7340: 68 6f 73 65 20 70 75 72 70 6f 73 65 0a 2a 2a 20  hose purpose.** 
7350: 69 73 20 74 6f 20 74 65 73 74 20 74 68 65 20 73  is to test the s
7360: 71 6c 69 74 65 5f 73 65 74 5f 72 65 73 75 6c 74  qlite_set_result
7370: 28 29 20 41 50 49 2e 0a 2a 2f 0a 73 74 61 74 69  () API..*/.stati
7380: 63 20 76 6f 69 64 20 74 65 73 74 46 75 6e 63 28  c void testFunc(
7390: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
73a0: 2a 63 6f 6e 74 65 78 74 2c 20 69 6e 74 20 61 72  *context, int ar
73b0: 67 63 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  gc, sqlite3_valu
73c0: 65 20 2a 2a 61 72 67 76 29 7b 0a 20 20 77 68 69  e **argv){.  whi
73d0: 6c 65 28 20 61 72 67 63 3e 3d 32 20 29 7b 0a 20  le( argc>=2 ){. 
73e0: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
73f0: 41 72 67 30 20 3d 20 28 63 68 61 72 2a 29 73 71  Arg0 = (char*)sq
7400: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
7410: 28 61 72 67 76 5b 30 5d 29 3b 0a 20 20 20 20 69  (argv[0]);.    i
7420: 66 28 20 7a 41 72 67 30 20 29 7b 0a 20 20 20 20  f( zArg0 ){.    
7430: 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33    if( 0==sqlite3
7440: 53 74 72 49 43 6d 70 28 7a 41 72 67 30 2c 20 22  StrICmp(zArg0, "
7450: 69 6e 74 22 29 20 29 7b 0a 20 20 20 20 20 20 20  int") ){.       
7460: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
7470: 69 6e 74 28 63 6f 6e 74 65 78 74 2c 20 73 71 6c  int(context, sql
7480: 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28 61  ite3_value_int(a
7490: 72 67 76 5b 31 5d 29 29 3b 0a 20 20 20 20 20 20  rgv[1]));.      
74a0: 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65  }else if( sqlite
74b0: 33 53 74 72 49 43 6d 70 28 7a 41 72 67 30 2c 22  3StrICmp(zArg0,"
74c0: 69 6e 74 36 34 22 29 3d 3d 30 20 29 7b 0a 20 20  int64")==0 ){.  
74d0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65        sqlite3_re
74e0: 73 75 6c 74 5f 69 6e 74 36 34 28 63 6f 6e 74 65  sult_int64(conte
74f0: 78 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  xt, sqlite3_valu
7500: 65 5f 69 6e 74 36 34 28 61 72 67 76 5b 31 5d 29  e_int64(argv[1])
7510: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  );.      }else i
7520: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
7530: 70 28 7a 41 72 67 30 2c 22 73 74 72 69 6e 67 22  p(zArg0,"string"
7540: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
7550: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74  sqlite3_result_t
7560: 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 28 63 68  ext(context, (ch
7570: 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75  ar*)sqlite3_valu
7580: 65 5f 74 65 78 74 28 61 72 67 76 5b 31 5d 29 2c  e_text(argv[1]),
7590: 20 2d 31 2c 0a 20 20 20 20 20 20 20 20 20 20 20   -1,.           
75a0: 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
75b0: 54 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  T);.      }else 
75c0: 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43  if( sqlite3StrIC
75d0: 6d 70 28 7a 41 72 67 30 2c 22 64 6f 75 62 6c 65  mp(zArg0,"double
75e0: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ")==0 ){.       
75f0: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
7600: 64 6f 75 62 6c 65 28 63 6f 6e 74 65 78 74 2c 20  double(context, 
7610: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f  sqlite3_value_do
7620: 75 62 6c 65 28 61 72 67 76 5b 31 5d 29 29 3b 0a  uble(argv[1]));.
7630: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
7640: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
7650: 41 72 67 30 2c 22 6e 75 6c 6c 22 29 3d 3d 30 20  Arg0,"null")==0 
7660: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
7670: 65 33 5f 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 63  e3_result_null(c
7680: 6f 6e 74 65 78 74 29 3b 0a 20 20 20 20 20 20 7d  ontext);.      }
7690: 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33  else if( sqlite3
76a0: 53 74 72 49 43 6d 70 28 7a 41 72 67 30 2c 22 76  StrICmp(zArg0,"v
76b0: 61 6c 75 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20  alue")==0 ){.   
76c0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73       sqlite3_res
76d0: 75 6c 74 5f 76 61 6c 75 65 28 63 6f 6e 74 65 78  ult_value(contex
76e0: 74 2c 20 61 72 67 76 5b 73 71 6c 69 74 65 33 5f  t, argv[sqlite3_
76f0: 76 61 6c 75 65 5f 69 6e 74 28 61 72 67 76 5b 31  value_int(argv[1
7700: 5d 29 5d 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ])]);.      }els
7710: 65 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  e{.        goto 
7720: 65 72 72 6f 72 5f 6f 75 74 3b 0a 20 20 20 20 20  error_out;.     
7730: 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
7740: 20 20 20 20 67 6f 74 6f 20 65 72 72 6f 72 5f 6f      goto error_o
7750: 75 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 72  ut;.    }.    ar
7760: 67 63 20 2d 3d 20 32 3b 0a 20 20 20 20 61 72 67  gc -= 2;.    arg
7770: 76 20 2b 3d 20 32 3b 0a 20 20 7d 0a 20 20 72 65  v += 2;.  }.  re
7780: 74 75 72 6e 3b 0a 0a 65 72 72 6f 72 5f 6f 75 74  turn;..error_out
7790: 3a 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75  :.  sqlite3_resu
77a0: 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78 74  lt_error(context
77b0: 2c 22 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  ,"first argument
77c0: 20 73 68 6f 75 6c 64 20 62 65 20 6f 6e 65 20 6f   should be one o
77d0: 66 3a 20 22 0a 20 20 20 20 20 20 22 69 6e 74 20  f: ".      "int 
77e0: 69 6e 74 36 34 20 73 74 72 69 6e 67 20 64 6f 75  int64 string dou
77f0: 62 6c 65 20 6e 75 6c 6c 20 76 61 6c 75 65 22 2c  ble null value",
7800: 20 2d 31 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55   -1);.}../*.** U
7810: 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 5f 72  sage:   sqlite_r
7820: 65 67 69 73 74 65 72 5f 74 65 73 74 5f 66 75 6e  egister_test_fun
7830: 63 74 69 6f 6e 20 20 44 42 20 20 4e 41 4d 45 0a  ction  DB  NAME.
7840: 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 74  **.** Register t
7850: 68 65 20 74 65 73 74 20 53 51 4c 20 66 75 6e 63  he test SQL func
7860: 74 69 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74 61  tion on the data
7870: 62 61 73 65 20 44 42 20 75 6e 64 65 72 20 74 68  base DB under th
7880: 65 20 6e 61 6d 65 20 4e 41 4d 45 2e 0a 2a 2f 0a  e name NAME..*/.
7890: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
78a0: 72 65 67 69 73 74 65 72 5f 66 75 6e 63 28 0a 20  register_func(. 
78b0: 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a   void *NotUsed,.
78c0: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
78d0: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
78e0: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
78f0: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
7900: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
7910: 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20  nt argc,        
7920: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
7930: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
7940: 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20    char **argv   
7950: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
7960: 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e   of each argumen
7970: 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65  t */.){.  sqlite
7980: 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b  3 *db;.  int rc;
7990: 0a 20 20 69 66 28 20 61 72 67 63 21 3d 33 20 29  .  if( argc!=3 )
79a0: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
79b0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
79c0: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
79d0: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
79e0: 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 22 20  v[0], .       " 
79f0: 44 42 20 46 55 4e 43 54 49 4f 4e 2d 4e 41 4d 45  DB FUNCTION-NAME
7a00: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
7a10: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
7a20: 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e  .  if( getDbPoin
7a30: 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76  ter(interp, argv
7a40: 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75  [1], &db) ) retu
7a50: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
7a60: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65  rc = sqlite3_cre
7a70: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c  ate_function(db,
7a80: 20 61 72 67 76 5b 32 5d 2c 20 2d 31 2c 20 53 51   argv[2], -1, SQ
7a90: 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 20 0a 20  LITE_UTF8, 0, . 
7aa0: 20 20 20 20 20 74 65 73 74 46 75 6e 63 2c 20 30       testFunc, 0
7ab0: 2c 20 30 29 3b 0a 20 20 69 66 28 20 72 63 21 3d  , 0);.  if( rc!=
7ac0: 30 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  0 ){.    Tcl_App
7ad0: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
7ae0: 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28  , sqlite3ErrStr(
7af0: 72 63 29 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  rc), 0);.    ret
7b00: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
7b10: 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33   }.  if( sqlite3
7b20: 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65  TestErrCode(inte
7b30: 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65  rp, db, rc) ) re
7b40: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
7b50: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
7b60: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
7b70: 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
7b80: 7a 65 20 20 53 54 4d 54 20 0a 2a 2a 0a 2a 2a 20  ze  STMT .**.** 
7b90: 46 69 6e 61 6c 69 7a 65 20 61 20 73 74 61 74 65  Finalize a state
7ba0: 6d 65 6e 74 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a  ment handle..*/.
7bb0: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
7bc0: 66 69 6e 61 6c 69 7a 65 28 0a 20 20 76 6f 69 64  finalize(.  void
7bd0: 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
7be0: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
7bf0: 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
7c00: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
7c10: 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
7c20: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
7c30: 74 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 73  t;.  int rc;.  s
7c40: 71 6c 69 74 65 33 20 2a 64 62 3b 0a 0a 20 20 69  qlite3 *db;..  i
7c50: 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20  f( objc!=2 ){.  
7c60: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
7c70: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
7c80: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
7c90: 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20   be \"",.       
7ca0: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72   Tcl_GetStringFr
7cb0: 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30  omObj(objv[0], 0
7cc0: 29 2c 20 22 20 3c 53 54 4d 54 3e 22 2c 20 30 29  ), " <STMT>", 0)
7cd0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
7ce0: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69  _ERROR;.  }..  i
7cf0: 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
7d00: 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
7d10: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
7d20: 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
7d30: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20  rn TCL_ERROR;.. 
7d40: 20 69 66 28 20 70 53 74 6d 74 20 29 7b 0a 20 20   if( pStmt ){.  
7d50: 20 20 64 62 20 3d 20 53 74 6d 74 54 6f 44 62 28    db = StmtToDb(
7d60: 70 53 74 6d 74 29 3b 0a 20 20 7d 0a 20 20 72 63  pStmt);.  }.  rc
7d70: 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c   = sqlite3_final
7d80: 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 54 63  ize(pStmt);.  Tc
7d90: 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65  l_SetResult(inte
7da0: 72 70 2c 20 28 63 68 61 72 20 2a 29 65 72 72 6f  rp, (char *)erro
7db0: 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53  rName(rc), TCL_S
7dc0: 54 41 54 49 43 29 3b 0a 20 20 69 66 28 20 64 62  TATIC);.  if( db
7dd0: 20 26 26 20 73 71 6c 69 74 65 33 54 65 73 74 45   && sqlite3TestE
7de0: 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64  rrCode(interp, d
7df0: 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20  b, rc) ) return 
7e00: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74  TCL_ERROR;.  ret
7e10: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
7e20: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
7e30: 69 74 65 33 5f 72 65 73 65 74 20 20 53 54 4d 54  ite3_reset  STMT
7e40: 20 0a 2a 2a 0a 2a 2a 20 52 65 73 65 74 20 61 20   .**.** Reset a 
7e50: 73 74 61 74 65 6d 65 6e 74 20 68 61 6e 64 6c 65  statement handle
7e60: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
7e70: 74 65 73 74 5f 72 65 73 65 74 28 0a 20 20 76 6f  test_reset(.  vo
7e80: 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
7e90: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
7ea0: 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
7eb0: 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
7ec0: 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
7ed0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
7ee0: 74 6d 74 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  tmt;.  int rc;..
7ef0: 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b    if( objc!=2 ){
7f00: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
7f10: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
7f20: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
7f30: 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20  uld be \"",.    
7f40: 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
7f50: 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d  gFromObj(objv[0]
7f60: 2c 20 30 29 2c 20 22 20 3c 53 54 4d 54 3e 22 2c  , 0), " <STMT>",
7f70: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
7f80: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
7f90: 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
7fa0: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
7fb0: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
7fc0: 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72  1]), &pStmt) ) r
7fd0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
7fe0: 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ..  rc = sqlite3
7ff0: 5f 72 65 73 65 74 28 70 53 74 6d 74 29 3b 0a 20  _reset(pStmt);. 
8000: 20 69 66 28 20 70 53 74 6d 74 20 26 26 20 73 71   if( pStmt && sq
8010: 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65  lite3TestErrCode
8020: 28 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f 44  (interp, StmtToD
8030: 62 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29 7b  b(pStmt), rc) ){
8040: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
8050: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 54 63 6c  ERROR;.  }.  Tcl
8060: 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
8070: 70 2c 20 28 63 68 61 72 20 2a 29 65 72 72 6f 72  p, (char *)error
8080: 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54  Name(rc), TCL_ST
8090: 41 54 49 43 29 3b 0a 2f 2a 0a 20 20 69 66 28 20  ATIC);./*.  if( 
80a0: 72 63 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  rc ){.    return
80b0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
80c0: 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  */.  return TCL_
80d0: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
80e0: 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 65 78 70  ge:  sqlite3_exp
80f0: 69 72 65 64 20 53 54 4d 54 20 0a 2a 2a 0a 2a 2a  ired STMT .**.**
8100: 20 52 65 74 75 72 6e 20 54 52 55 45 20 69 66 20   Return TRUE if 
8110: 61 20 72 65 63 6f 6d 70 69 6c 61 74 69 6f 6e 20  a recompilation 
8120: 6f 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  of the statement
8130: 20 69 73 20 72 65 63 6f 6d 6d 65 6e 64 65 64 2e   is recommended.
8140: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
8150: 65 73 74 5f 65 78 70 69 72 65 64 28 0a 20 20 76  est_expired(.  v
8160: 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
8170: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
8180: 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
8190: 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
81a0: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
81b0: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
81c0: 53 74 6d 74 3b 0a 20 20 69 66 28 20 6f 62 6a 63  Stmt;.  if( objc
81d0: 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=2 ){.    Tcl_A
81e0: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
81f0: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
8200: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
8210: 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65  ,.        Tcl_Ge
8220: 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f  tStringFromObj(o
8230: 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 3c 53  bjv[0], 0), " <S
8240: 54 4d 54 3e 22 2c 20 30 29 3b 0a 20 20 20 20 72  TMT>", 0);.    r
8250: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
8260: 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 53 74  .  }.  if( getSt
8270: 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  mtPointer(interp
8280: 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
8290: 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74  objv[1]), &pStmt
82a0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
82b0: 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74 4f  RROR;.  Tcl_SetO
82c0: 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
82d0: 20 54 63 6c 5f 4e 65 77 42 6f 6f 6c 65 61 6e 4f   Tcl_NewBooleanO
82e0: 62 6a 28 73 71 6c 69 74 65 33 5f 65 78 70 69 72  bj(sqlite3_expir
82f0: 65 64 28 70 53 74 6d 74 29 29 29 3b 0a 20 20 72  ed(pStmt)));.  r
8300: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
8310: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
8320: 71 6c 69 74 65 33 5f 74 72 61 6e 73 66 65 72 5f  qlite3_transfer_
8330: 62 69 6e 64 69 6e 67 73 20 46 52 4f 4d 53 54 4d  bindings FROMSTM
8340: 54 20 54 4f 53 54 4d 54 0a 2a 2a 0a 2a 2a 20 54  T TOSTMT.**.** T
8350: 72 61 6e 73 66 65 72 20 61 6c 6c 20 62 69 6e 64  ransfer all bind
8360: 69 6e 67 73 20 66 72 6f 6d 20 46 52 4f 4d 53 54  ings from FROMST
8370: 4d 54 20 6f 76 65 72 20 74 6f 20 54 4f 53 54 4d  MT over to TOSTM
8380: 54 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  T.*/.static int 
8390: 74 65 73 74 5f 74 72 61 6e 73 66 65 72 5f 62 69  test_transfer_bi
83a0: 6e 64 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  nd(.  void * cli
83b0: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
83c0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
83d0: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
83e0: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
83f0: 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  [].){.  sqlite3_
8400: 73 74 6d 74 20 2a 70 53 74 6d 74 31 2c 20 2a 70  stmt *pStmt1, *p
8410: 53 74 6d 74 32 3b 0a 20 20 69 66 28 20 6f 62 6a  Stmt2;.  if( obj
8420: 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
8430: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
8440: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
8450: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
8460: 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47  ",.        Tcl_G
8470: 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28  etStringFromObj(
8480: 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 46  objv[0], 0), " F
8490: 52 4f 4d 2d 53 54 4d 54 20 54 4f 2d 53 54 4d 54  ROM-STMT TO-STMT
84a0: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
84b0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
84c0: 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f  .  if( getStmtPo
84d0: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
84e0: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
84f0: 5b 31 5d 29 2c 20 26 70 53 74 6d 74 31 29 29 20  [1]), &pStmt1)) 
8500: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
8510: 3b 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  ;.  if( getStmtP
8520: 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
8530: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
8540: 76 5b 32 5d 29 2c 20 26 70 53 74 6d 74 32 29 29  v[2]), &pStmt2))
8550: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
8560: 52 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52  R;.  Tcl_SetObjR
8570: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 0a 20  esult(interp, . 
8580: 20 20 20 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62      Tcl_NewIntOb
8590: 6a 28 73 71 6c 69 74 65 33 5f 74 72 61 6e 73 66  j(sqlite3_transf
85a0: 65 72 5f 62 69 6e 64 69 6e 67 73 28 70 53 74 6d  er_bindings(pStm
85b0: 74 31 2c 70 53 74 6d 74 32 29 29 29 3b 0a 20 20  t1,pStmt2)));.  
85c0: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
85d0: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
85e0: 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 20  sqlite3_changes 
85f0: 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  DB.**.** Return 
8600: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 68  the number of ch
8610: 61 6e 67 65 73 20 6d 61 64 65 20 74 6f 20 74 68  anges made to th
8620: 65 20 64 61 74 61 62 61 73 65 20 62 79 20 74 68  e database by th
8630: 65 20 6c 61 73 74 20 53 51 4c 0a 2a 2a 20 65 78  e last SQL.** ex
8640: 65 63 75 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61 74  ecution..*/.stat
8650: 69 63 20 69 6e 74 20 74 65 73 74 5f 63 68 61 6e  ic int test_chan
8660: 67 65 73 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  ges(.  void * cl
8670: 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
8680: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
8690: 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
86a0: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
86b0: 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
86c0: 20 2a 64 62 3b 0a 20 20 69 66 28 20 6f 62 6a 63   *db;.  if( objc
86d0: 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=2 ){.    Tcl_A
86e0: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
86f0: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
8700: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
8710: 2c 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74  ,.       Tcl_Get
8720: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c  String(objv[0]),
8730: 20 22 20 44 42 22 2c 20 30 29 3b 0a 20 20 20 20   " DB", 0);.    
8740: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
8750: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44  ;.  }.  if( getD
8760: 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  bPointer(interp,
8770: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
8780: 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20  bjv[1]), &db) ) 
8790: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
87a0: 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65  ;.  Tcl_SetObjRe
87b0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
87c0: 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74  _NewIntObj(sqlit
87d0: 65 33 5f 63 68 61 6e 67 65 73 28 64 62 29 29 29  e3_changes(db)))
87e0: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
87f0: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  K;.}../*.** This
8800: 20 69 73 20 74 68 65 20 22 73 74 61 74 69 63 5f   is the "static_
8810: 62 69 6e 64 5f 76 61 6c 75 65 22 20 74 68 61 74  bind_value" that
8820: 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 62   variables are b
8830: 6f 75 6e 64 20 74 6f 20 77 68 65 6e 0a 2a 2a 20  ound to when.** 
8840: 74 68 65 20 46 4c 41 47 20 6f 70 74 69 6f 6e 20  the FLAG option 
8850: 6f 66 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 20  of sqlite3_bind 
8860: 69 73 20 22 73 74 61 74 69 63 22 0a 2a 2f 0a 73  is "static".*/.s
8870: 74 61 74 69 63 20 63 68 61 72 20 2a 73 71 6c 69  tatic char *sqli
8880: 74 65 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f 76  te_static_bind_v
8890: 61 6c 75 65 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a  alue = 0;../*.**
88a0: 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33   Usage:  sqlite3
88b0: 5f 62 69 6e 64 20 20 56 4d 20 20 49 44 58 20 20  _bind  VM  IDX  
88c0: 56 41 4c 55 45 20 20 46 4c 41 47 53 0a 2a 2a 0a  VALUE  FLAGS.**.
88d0: 2a 2a 20 53 65 74 73 20 74 68 65 20 76 61 6c 75  ** Sets the valu
88e0: 65 20 6f 66 20 74 68 65 20 49 44 58 2d 74 68 20  e of the IDX-th 
88f0: 6f 63 63 75 72 61 6e 63 65 20 6f 66 20 22 3f 22  occurance of "?"
8900: 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   in the original
8910: 20 53 51 4c 0a 2a 2a 20 73 74 72 69 6e 67 2e 20   SQL.** string. 
8920: 20 56 41 4c 55 45 20 69 73 20 74 68 65 20 6e 65   VALUE is the ne
8930: 77 20 76 61 6c 75 65 2e 20 20 49 66 20 46 4c 41  w value.  If FLA
8940: 47 53 3d 3d 22 6e 75 6c 6c 22 20 74 68 65 6e 20  GS=="null" then 
8950: 56 41 4c 55 45 20 69 73 0a 2a 2a 20 69 67 6e 6f  VALUE is.** igno
8960: 72 65 64 20 61 6e 64 20 74 68 65 20 76 61 6c 75  red and the valu
8970: 65 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c  e is set to NULL
8980: 2e 20 20 49 66 20 46 4c 41 47 53 3d 3d 22 73 74  .  If FLAGS=="st
8990: 61 74 69 63 22 20 74 68 65 6e 0a 2a 2a 20 74 68  atic" then.** th
89a0: 65 20 76 61 6c 75 65 20 69 73 20 73 65 74 20 74  e value is set t
89b0: 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61  o the value of a
89c0: 20 73 74 61 74 69 63 20 76 61 72 69 61 62 6c 65   static variable
89d0: 20 6e 61 6d 65 64 0a 2a 2a 20 22 73 71 6c 69 74   named.** "sqlit
89e0: 65 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f 76 61  e_static_bind_va
89f0: 6c 75 65 22 2e 20 20 49 66 20 46 4c 41 47 53 3d  lue".  If FLAGS=
8a00: 3d 22 6e 6f 72 6d 61 6c 22 20 74 68 65 6e 20 61  ="normal" then a
8a10: 20 63 6f 70 79 0a 2a 2a 20 6f 66 20 74 68 65 20   copy.** of the 
8a20: 56 41 4c 55 45 20 69 73 20 6d 61 64 65 2e 20 20  VALUE is made.  
8a30: 49 66 20 46 4c 41 47 53 3d 3d 22 62 6c 6f 62 31  If FLAGS=="blob1
8a40: 30 22 20 74 68 65 6e 20 61 20 56 41 4c 55 45 20  0" then a VALUE 
8a50: 69 73 20 69 67 6e 6f 72 65 64 0a 2a 2a 20 61 6e  is ignored.** an
8a60: 20 61 20 31 30 2d 62 79 74 65 20 62 6c 6f 62 20   a 10-byte blob 
8a70: 22 61 62 63 5c 30 30 30 78 79 7a 5c 30 30 30 70  "abc\000xyz\000p
8a80: 71 22 20 69 73 20 69 6e 73 65 72 74 65 64 2e 0a  q" is inserted..
8a90: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
8aa0: 73 74 5f 62 69 6e 64 28 0a 20 20 76 6f 69 64 20  st_bind(.  void 
8ab0: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f  *NotUsed,.  Tcl_
8ac0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
8ad0: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
8ae0: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
8af0: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
8b00: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67  and */.  int arg
8b10: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
8b20: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
8b30: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72  uments */.  char
8b40: 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20   **argv         
8b50: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61     /* Text of ea
8b60: 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29  ch argument */.)
8b70: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  {.  sqlite3_stmt
8b80: 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 72   *pStmt;.  int r
8b90: 63 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20  c;.  int idx;.  
8ba0: 69 66 28 20 61 72 67 63 21 3d 35 20 29 7b 0a 20  if( argc!=5 ){. 
8bb0: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
8bc0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
8bd0: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
8be0: 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30  d be \"", argv[0
8bf0: 5d 2c 20 0a 20 20 20 20 20 20 20 22 20 56 4d 20  ], .       " VM 
8c00: 49 44 58 20 56 41 4c 55 45 20 28 6e 75 6c 6c 7c  IDX VALUE (null|
8c10: 73 74 61 74 69 63 7c 6e 6f 72 6d 61 6c 29 5c 22  static|normal)\"
8c20: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
8c30: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
8c40: 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f  .  if( getStmtPo
8c50: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72  inter(interp, ar
8c60: 67 76 5b 31 5d 2c 20 26 70 53 74 6d 74 29 20 29  gv[1], &pStmt) )
8c70: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
8c80: 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  R;.  if( Tcl_Get
8c90: 49 6e 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76  Int(interp, argv
8ca0: 5b 32 5d 2c 20 26 69 64 78 29 20 29 20 72 65 74  [2], &idx) ) ret
8cb0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
8cc0: 20 69 66 28 20 73 74 72 63 6d 70 28 61 72 67 76   if( strcmp(argv
8cd0: 5b 34 5d 2c 22 6e 75 6c 6c 22 29 3d 3d 30 20 29  [4],"null")==0 )
8ce0: 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
8cf0: 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 70 53 74  e3_bind_null(pSt
8d00: 6d 74 2c 20 69 64 78 29 3b 0a 20 20 7d 65 6c 73  mt, idx);.  }els
8d10: 65 20 69 66 28 20 73 74 72 63 6d 70 28 61 72 67  e if( strcmp(arg
8d20: 76 5b 34 5d 2c 22 73 74 61 74 69 63 22 29 3d 3d  v[4],"static")==
8d30: 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  0 ){.    rc = sq
8d40: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28  lite3_bind_text(
8d50: 70 53 74 6d 74 2c 20 69 64 78 2c 20 73 71 6c 69  pStmt, idx, sqli
8d60: 74 65 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f 76  te_static_bind_v
8d70: 61 6c 75 65 2c 20 2d 31 2c 20 30 29 3b 0a 20 20  alue, -1, 0);.  
8d80: 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
8d90: 28 61 72 67 76 5b 34 5d 2c 22 6e 6f 72 6d 61 6c  (argv[4],"normal
8da0: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20  ")==0 ){.    rc 
8db0: 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74  = sqlite3_bind_t
8dc0: 65 78 74 28 70 53 74 6d 74 2c 20 69 64 78 2c 20  ext(pStmt, idx, 
8dd0: 61 72 67 76 5b 33 5d 2c 20 2d 31 2c 20 53 51 4c  argv[3], -1, SQL
8de0: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a  ITE_TRANSIENT);.
8df0: 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
8e00: 6d 70 28 61 72 67 76 5b 34 5d 2c 22 62 6c 6f 62  mp(argv[4],"blob
8e10: 31 30 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72  10")==0 ){.    r
8e20: 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  c = sqlite3_bind
8e30: 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 69 64 78  _text(pStmt, idx
8e40: 2c 20 22 61 62 63 5c 30 30 30 78 79 7a 5c 30 30  , "abc\000xyz\00
8e50: 30 70 71 22 2c 20 31 30 2c 20 53 51 4c 49 54 45  0pq", 10, SQLITE
8e60: 5f 53 54 41 54 49 43 29 3b 0a 20 20 7d 65 6c 73  _STATIC);.  }els
8e70: 65 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  e{.    Tcl_Appen
8e80: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
8e90: 22 34 74 68 20 61 72 67 75 6d 65 6e 74 20 73 68  "4th argument sh
8ea0: 6f 75 6c 64 20 62 65 20 22 0a 20 20 20 20 20 20  ould be ".      
8eb0: 20 20 22 5c 22 6e 75 6c 6c 5c 22 20 6f 72 20 5c    "\"null\" or \
8ec0: 22 73 74 61 74 69 63 5c 22 20 6f 72 20 5c 22 6e  "static\" or \"n
8ed0: 6f 72 6d 61 6c 5c 22 22 2c 20 30 29 3b 0a 20 20  ormal\"", 0);.  
8ee0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
8ef0: 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71  OR;.  }.  if( sq
8f00: 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65  lite3TestErrCode
8f10: 28 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f 44  (interp, StmtToD
8f20: 62 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29 20  b(pStmt), rc) ) 
8f30: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
8f40: 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20  ;.  if( rc ){.  
8f50: 20 20 63 68 61 72 20 7a 42 75 66 5b 35 30 5d 3b    char zBuf[50];
8f60: 0a 20 20 20 20 73 70 72 69 6e 74 66 28 7a 42 75  .    sprintf(zBu
8f70: 66 2c 20 22 28 25 64 29 20 22 2c 20 72 63 29 3b  f, "(%d) ", rc);
8f80: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
8f90: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42  esult(interp, zB
8fa0: 75 66 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74  uf, sqlite3ErrSt
8fb0: 72 28 72 63 29 2c 20 30 29 3b 0a 20 20 20 20 72  r(rc), 0);.    r
8fc0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
8fd0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43  .  }.  return TC
8fe0: 4c 5f 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  L_OK;.}..#ifndef
8ff0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
9000: 31 36 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  16./*.** Usage: 
9010: 61 64 64 5f 74 65 73 74 5f 63 6f 6c 6c 61 74 65  add_test_collate
9020: 20 3c 64 62 20 70 74 72 3e 20 3c 75 74 66 38 3e   <db ptr> <utf8>
9030: 20 3c 75 74 66 31 36 6c 65 3e 20 3c 75 74 66 31   <utf16le> <utf1
9040: 36 62 65 3e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  6be>.**.** This 
9050: 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64  function is used
9060: 20 74 6f 20 74 65 73 74 20 74 68 61 74 20 53 51   to test that SQ
9070: 4c 69 74 65 20 73 65 6c 65 63 74 73 20 74 68 65  Lite selects the
9080: 20 63 6f 72 72 65 63 74 20 63 6f 6c 6c 61 74 69   correct collati
9090: 6f 6e 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 63  on.** sequence c
90a0: 61 6c 6c 62 61 63 6b 20 77 68 65 6e 20 6d 75 6c  allback when mul
90b0: 74 69 70 6c 65 20 76 65 72 73 69 6f 6e 73 20 28  tiple versions (
90c0: 66 6f 72 20 64 69 66 66 65 72 65 6e 74 20 74 65  for different te
90d0: 78 74 20 65 6e 63 6f 64 69 6e 67 73 29 0a 2a 2a  xt encodings).**
90e0: 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 2e 0a   are available..
90f0: 2a 2a 0a 2a 2a 20 43 61 6c 6c 69 6e 67 20 74 68  **.** Calling th
9100: 69 73 20 72 6f 75 74 69 6e 65 20 72 65 67 69 73  is routine regis
9110: 74 65 72 73 20 74 68 65 20 63 6f 6c 6c 61 74 69  ters the collati
9120: 6f 6e 20 73 65 71 75 65 6e 63 65 20 22 74 65 73  on sequence "tes
9130: 74 5f 63 6f 6c 6c 61 74 65 22 0a 2a 2a 20 77 69  t_collate".** wi
9140: 74 68 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  th database hand
9150: 6c 65 20 3c 64 62 3e 2e 20 54 68 65 20 73 65 63  le <db>. The sec
9160: 6f 6e 64 20 61 72 67 75 6d 65 6e 74 20 6d 75 73  ond argument mus
9170: 74 20 62 65 20 61 20 6c 69 73 74 20 6f 66 20 74  t be a list of t
9180: 68 72 65 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20  hree.** boolean 
9190: 76 61 6c 75 65 73 2e 20 49 66 20 74 68 65 20 66  values. If the f
91a0: 69 72 73 74 20 69 73 20 74 72 75 65 2c 20 74 68  irst is true, th
91b0: 65 6e 20 61 20 76 65 72 73 69 6f 6e 20 6f 66 20  en a version of 
91c0: 74 65 73 74 5f 63 6f 6c 6c 61 74 65 20 69 73 0a  test_collate is.
91d0: 2a 2a 20 72 65 67 69 73 74 65 72 65 64 20 66 6f  ** registered fo
91e0: 72 20 55 54 46 2d 38 2c 20 69 66 20 74 68 65 20  r UTF-8, if the 
91f0: 73 65 63 6f 6e 64 20 69 73 20 74 72 75 65 2c 20  second is true, 
9200: 61 20 76 65 72 73 69 6f 6e 20 69 73 20 72 65 67  a version is reg
9210: 69 73 74 65 72 65 64 20 66 6f 72 0a 2a 2a 20 55  istered for.** U
9220: 54 46 2d 31 36 6c 65 2c 20 69 66 20 74 68 65 20  TF-16le, if the 
9230: 74 68 69 72 64 20 69 73 20 74 72 75 65 2c 20 61  third is true, a
9240: 20 55 54 46 2d 31 36 62 65 20 76 65 72 73 69 6f   UTF-16be versio
9250: 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0a  n is available..
9260: 2a 2a 20 50 72 65 76 69 6f 75 73 20 76 65 72 73  ** Previous vers
9270: 69 6f 6e 73 20 6f 66 20 74 65 73 74 5f 63 6f 6c  ions of test_col
9280: 6c 61 74 65 20 61 72 65 20 64 65 6c 65 74 65 64  late are deleted
9290: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 6c  ..**.** The coll
92a0: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 74  ation sequence t
92b0: 65 73 74 5f 63 6f 6c 6c 61 74 65 20 69 73 20 69  est_collate is i
92c0: 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 61  mplemented by ca
92d0: 6c 6c 69 6e 67 20 74 68 65 0a 2a 2a 20 66 6f 6c  lling the.** fol
92e0: 6c 6f 77 69 6e 67 20 54 43 4c 20 73 63 72 69 70  lowing TCL scrip
92f0: 74 3a 0a 2a 2a 0a 2a 2a 20 20 20 22 74 65 73 74  t:.**.**   "test
9300: 5f 63 6f 6c 6c 61 74 65 20 3c 65 6e 63 3e 20 3c  _collate <enc> <
9310: 6c 68 73 3e 20 3c 72 68 73 3e 22 0a 2a 2a 0a 2a  lhs> <rhs>".**.*
9320: 2a 20 54 68 65 20 3c 6c 68 73 3e 20 61 6e 64 20  * The <lhs> and 
9330: 3c 72 68 73 3e 20 61 72 65 20 74 68 65 20 74 77  <rhs> are the tw
9340: 6f 20 76 61 6c 75 65 73 20 62 65 69 6e 67 20 63  o values being c
9350: 6f 6d 70 61 72 65 64 2c 20 65 6e 63 6f 64 65 64  ompared, encoded
9360: 20 69 6e 20 55 54 46 2d 38 2e 0a 2a 2a 20 54 68   in UTF-8..** Th
9370: 65 20 3c 65 6e 63 3e 20 70 61 72 61 6d 65 74 65  e <enc> paramete
9380: 72 20 69 73 20 74 68 65 20 65 6e 63 6f 64 69 6e  r is the encodin
9390: 67 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69  g of the collati
93a0: 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 74 68 61 74  on function that
93b0: 0a 2a 2a 20 53 51 4c 69 74 65 20 73 65 6c 65 63  .** SQLite selec
93c0: 74 65 64 20 74 6f 20 63 61 6c 6c 2e 20 54 68 65  ted to call. The
93d0: 20 54 43 4c 20 74 65 73 74 20 73 63 72 69 70 74   TCL test script
93e0: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 0a   implements the.
93f0: 2a 2a 20 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65  ** "test_collate
9400: 22 20 70 72 6f 63 2e 0a 2a 2a 0a 2a 2a 20 4e 6f  " proc..**.** No
9410: 74 65 20 74 68 61 74 20 74 68 69 73 20 77 69 6c  te that this wil
9420: 6c 20 6f 6e 6c 79 20 77 6f 72 6b 20 77 69 74 68  l only work with
9430: 20 6f 6e 65 20 69 6e 74 65 70 72 65 74 65 72 20   one intepreter 
9440: 61 74 20 61 20 74 69 6d 65 2c 20 61 73 20 74 68  at a time, as th
9450: 65 0a 2a 2a 20 69 6e 74 65 72 70 20 70 6f 69 6e  e.** interp poin
9460: 74 65 72 20 74 6f 20 75 73 65 20 77 68 65 6e 20  ter to use when 
9470: 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 54  evaluating the T
9480: 43 4c 20 73 63 72 69 70 74 20 69 73 20 73 74 6f  CL script is sto
9490: 72 65 64 20 69 6e 0a 2a 2a 20 70 54 65 73 74 43  red in.** pTestC
94a0: 6f 6c 6c 61 74 65 49 6e 74 65 72 70 2e 0a 2a 2f  ollateInterp..*/
94b0: 0a 73 74 61 74 69 63 20 54 63 6c 5f 49 6e 74 65  .static Tcl_Inte
94c0: 72 70 2a 20 70 54 65 73 74 43 6f 6c 6c 61 74 65  rp* pTestCollate
94d0: 49 6e 74 65 72 70 3b 0a 73 74 61 74 69 63 20 69  Interp;.static i
94e0: 6e 74 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f  nt test_collate_
94f0: 66 75 6e 63 28 0a 20 20 76 6f 69 64 20 2a 70 43  func(.  void *pC
9500: 74 78 2c 20 0a 20 20 69 6e 74 20 6e 41 2c 20 63  tx, .  int nA, c
9510: 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 41 2c 0a 20  onst void *zA,. 
9520: 20 69 6e 74 20 6e 42 2c 20 63 6f 6e 73 74 20 76   int nB, const v
9530: 6f 69 64 20 2a 7a 42 0a 29 7b 0a 20 20 54 63 6c  oid *zB.){.  Tcl
9540: 5f 49 6e 74 65 72 70 20 2a 69 20 3d 20 70 54 65  _Interp *i = pTe
9550: 73 74 43 6f 6c 6c 61 74 65 49 6e 74 65 72 70 3b  stCollateInterp;
9560: 0a 20 20 69 6e 74 20 65 6e 63 69 6e 20 3d 20 28  .  int encin = (
9570: 69 6e 74 29 70 43 74 78 3b 0a 20 20 69 6e 74 20  int)pCtx;.  int 
9580: 72 65 73 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20  res;.  int n;.. 
9590: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
95a0: 70 56 61 6c 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20  pVal;.  Tcl_Obj 
95b0: 2a 70 58 3b 0a 0a 20 20 70 58 20 3d 20 54 63 6c  *pX;..  pX = Tcl
95c0: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 74  _NewStringObj("t
95d0: 65 73 74 5f 63 6f 6c 6c 61 74 65 22 2c 20 2d 31  est_collate", -1
95e0: 29 3b 0a 20 20 54 63 6c 5f 49 6e 63 72 52 65 66  );.  Tcl_IncrRef
95f0: 43 6f 75 6e 74 28 70 58 29 3b 0a 0a 20 20 73 77  Count(pX);..  sw
9600: 69 74 63 68 28 20 65 6e 63 69 6e 20 29 7b 0a 20  itch( encin ){. 
9610: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 55     case SQLITE_U
9620: 54 46 38 3a 0a 20 20 20 20 20 20 54 63 6c 5f 4c  TF8:.      Tcl_L
9630: 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d  istObjAppendElem
9640: 65 6e 74 28 69 2c 70 58 2c 54 63 6c 5f 4e 65 77  ent(i,pX,Tcl_New
9650: 53 74 72 69 6e 67 4f 62 6a 28 22 55 54 46 2d 38  StringObj("UTF-8
9660: 22 2c 2d 31 29 29 3b 0a 20 20 20 20 20 20 62 72  ",-1));.      br
9670: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
9680: 4c 49 54 45 5f 55 54 46 31 36 4c 45 3a 0a 20 20  LITE_UTF16LE:.  
9690: 20 20 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41      Tcl_ListObjA
96a0: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 2c 70  ppendElement(i,p
96b0: 58 2c 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  X,Tcl_NewStringO
96c0: 62 6a 28 22 55 54 46 2d 31 36 4c 45 22 2c 2d 31  bj("UTF-16LE",-1
96d0: 29 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  ));.      break;
96e0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
96f0: 5f 55 54 46 31 36 42 45 3a 0a 20 20 20 20 20 20  _UTF16BE:.      
9700: 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e  Tcl_ListObjAppen
9710: 64 45 6c 65 6d 65 6e 74 28 69 2c 70 58 2c 54 63  dElement(i,pX,Tc
9720: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22  l_NewStringObj("
9730: 55 54 46 2d 31 36 42 45 22 2c 2d 31 29 29 3b 0a  UTF-16BE",-1));.
9740: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
9750: 20 64 65 66 61 75 6c 74 3a 0a 20 20 20 20 20 20   default:.      
9760: 61 73 73 65 72 74 28 30 29 3b 0a 20 20 7d 0a 0a  assert(0);.  }..
9770: 20 20 70 56 61 6c 20 3d 20 73 71 6c 69 74 65 33    pVal = sqlite3
9780: 56 61 6c 75 65 4e 65 77 28 29 3b 0a 20 20 73 71  ValueNew();.  sq
9790: 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72  lite3ValueSetStr
97a0: 28 70 56 61 6c 2c 20 6e 41 2c 20 7a 41 2c 20 65  (pVal, nA, zA, e
97b0: 6e 63 69 6e 2c 20 53 51 4c 49 54 45 5f 53 54 41  ncin, SQLITE_STA
97c0: 54 49 43 29 3b 0a 20 20 6e 20 3d 20 73 71 6c 69  TIC);.  n = sqli
97d0: 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 28  te3_value_bytes(
97e0: 70 56 61 6c 29 3b 0a 20 20 54 63 6c 5f 4c 69 73  pVal);.  Tcl_Lis
97f0: 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e  tObjAppendElemen
9800: 74 28 69 2c 70 58 2c 0a 20 20 20 20 20 20 54 63  t(i,pX,.      Tc
9810: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 28  l_NewStringObj((
9820: 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61  char*)sqlite3_va
9830: 6c 75 65 5f 74 65 78 74 28 70 56 61 6c 29 2c 6e  lue_text(pVal),n
9840: 29 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c  ));.  sqlite3Val
9850: 75 65 53 65 74 53 74 72 28 70 56 61 6c 2c 20 6e  ueSetStr(pVal, n
9860: 42 2c 20 7a 42 2c 20 65 6e 63 69 6e 2c 20 53 51  B, zB, encin, SQ
9870: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
9880: 6e 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  n = sqlite3_valu
9890: 65 5f 62 79 74 65 73 28 70 56 61 6c 29 3b 0a 20  e_bytes(pVal);. 
98a0: 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65   Tcl_ListObjAppe
98b0: 6e 64 45 6c 65 6d 65 6e 74 28 69 2c 70 58 2c 0a  ndElement(i,pX,.
98c0: 20 20 20 20 20 20 54 63 6c 5f 4e 65 77 53 74 72        Tcl_NewStr
98d0: 69 6e 67 4f 62 6a 28 28 63 68 61 72 2a 29 73 71  ingObj((char*)sq
98e0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
98f0: 28 70 56 61 6c 29 2c 6e 29 29 3b 0a 20 20 73 71  (pVal),n));.  sq
9900: 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 70  lite3ValueFree(p
9910: 56 61 6c 29 3b 0a 0a 20 20 54 63 6c 5f 45 76 61  Val);..  Tcl_Eva
9920: 6c 4f 62 6a 45 78 28 69 2c 20 70 58 2c 20 30 29  lObjEx(i, pX, 0)
9930: 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52 65 66 43  ;.  Tcl_DecrRefC
9940: 6f 75 6e 74 28 70 58 29 3b 0a 20 20 54 63 6c 5f  ount(pX);.  Tcl_
9950: 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 2c  GetIntFromObj(i,
9960: 20 54 63 6c 5f 47 65 74 4f 62 6a 52 65 73 75 6c   Tcl_GetObjResul
9970: 74 28 69 29 2c 20 26 72 65 73 29 3b 0a 20 20 72  t(i), &res);.  r
9980: 65 74 75 72 6e 20 72 65 73 3b 0a 7d 0a 73 74 61  eturn res;.}.sta
9990: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c  tic int test_col
99a0: 6c 61 74 65 28 0a 20 20 76 6f 69 64 20 2a 20 63  late(.  void * c
99b0: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
99c0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
99d0: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
99e0: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
99f0: 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
9a00: 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 76 61 6c  3 *db;.  int val
9a10: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  ;.  sqlite3_valu
9a20: 65 20 2a 70 56 61 6c 3b 0a 20 20 69 6e 74 20 72  e *pVal;.  int r
9a30: 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  c;..  if( objc!=
9a40: 35 20 29 20 67 6f 74 6f 20 62 61 64 5f 61 72 67  5 ) goto bad_arg
9a50: 73 3b 0a 20 20 70 54 65 73 74 43 6f 6c 6c 61 74  s;.  pTestCollat
9a60: 65 49 6e 74 65 72 70 20 3d 20 69 6e 74 65 72 70  eInterp = interp
9a70: 3b 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  ;.  if( getDbPoi
9a80: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
9a90: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
9aa0: 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74 75  1]), &db) ) retu
9ab0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20  rn TCL_ERROR;.. 
9ac0: 20 69 66 28 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c   if( TCL_OK!=Tcl
9ad0: 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f  _GetBooleanFromO
9ae0: 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
9af0: 32 5d 2c 20 26 76 61 6c 29 20 29 20 72 65 74 75  2], &val) ) retu
9b00: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
9b10: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65  rc = sqlite3_cre
9b20: 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62  ate_collation(db
9b30: 2c 20 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22  , "test_collate"
9b40: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 0a  , SQLITE_UTF8, .
9b50: 20 20 20 20 20 20 20 20 20 20 28 76 6f 69 64 20            (void 
9b60: 2a 29 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 76  *)SQLITE_UTF8, v
9b70: 61 6c 3f 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f  al?test_collate_
9b80: 66 75 6e 63 3a 30 29 3b 0a 20 20 69 66 28 20 72  func:0);.  if( r
9b90: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
9ba0: 20 20 20 20 69 66 28 20 54 43 4c 5f 4f 4b 21 3d      if( TCL_OK!=
9bb0: 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72  Tcl_GetBooleanFr
9bc0: 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
9bd0: 6a 76 5b 33 5d 2c 20 26 76 61 6c 29 20 29 20 72  jv[3], &val) ) r
9be0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
9bf0: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
9c00: 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69  3_create_collati
9c10: 6f 6e 28 64 62 2c 20 22 74 65 73 74 5f 63 6f 6c  on(db, "test_col
9c20: 6c 61 74 65 22 2c 20 53 51 4c 49 54 45 5f 55 54  late", SQLITE_UT
9c30: 46 31 36 4c 45 2c 20 0a 20 20 20 20 20 20 20 20  F16LE, .        
9c40: 20 20 20 20 28 76 6f 69 64 20 2a 29 53 51 4c 49      (void *)SQLI
9c50: 54 45 5f 55 54 46 31 36 4c 45 2c 20 76 61 6c 3f  TE_UTF16LE, val?
9c60: 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 66 75 6e  test_collate_fun
9c70: 63 3a 30 29 3b 0a 20 20 20 20 69 66 28 20 54 43  c:0);.    if( TC
9c80: 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 42 6f 6f  L_OK!=Tcl_GetBoo
9c90: 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74 65  leanFromObj(inte
9ca0: 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 26 76 61  rp, objv[4], &va
9cb0: 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  l) ) return TCL_
9cc0: 45 52 52 4f 52 3b 0a 0a 23 69 66 64 65 66 20 53  ERROR;..#ifdef S
9cd0: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20  QLITE_MEMDEBUG. 
9ce0: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69     if( sqlite3_i
9cf0: 4d 61 6c 6c 6f 63 46 61 69 6c 3e 30 20 29 7b 0a  MallocFail>0 ){.
9d00: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 4d        sqlite3_iM
9d10: 61 6c 6c 6f 63 46 61 69 6c 2b 2b 3b 0a 20 20 20  allocFail++;.   
9d20: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 70 56   }.#endif.    pV
9d30: 61 6c 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75  al = sqlite3Valu
9d40: 65 4e 65 77 28 29 3b 0a 20 20 20 20 73 71 6c 69  eNew();.    sqli
9d50: 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 70  te3ValueSetStr(p
9d60: 56 61 6c 2c 20 2d 31 2c 20 22 74 65 73 74 5f 63  Val, -1, "test_c
9d70: 6f 6c 6c 61 74 65 22 2c 20 53 51 4c 49 54 45 5f  ollate", SQLITE_
9d80: 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41  UTF8, SQLITE_STA
9d90: 54 49 43 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  TIC);.    rc = s
9da0: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f  qlite3_create_co
9db0: 6c 6c 61 74 69 6f 6e 31 36 28 64 62 2c 20 0a 20  llation16(db, . 
9dc0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
9dd0: 56 61 6c 75 65 54 65 78 74 28 70 56 61 6c 2c 20  ValueText(pVal, 
9de0: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
9df0: 56 45 29 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  VE), SQLITE_UTF1
9e00: 36 42 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20  6BE, .          
9e10: 28 76 6f 69 64 20 2a 29 53 51 4c 49 54 45 5f 55  (void *)SQLITE_U
9e20: 54 46 31 36 42 45 2c 20 76 61 6c 3f 74 65 73 74  TF16BE, val?test
9e30: 5f 63 6f 6c 6c 61 74 65 5f 66 75 6e 63 3a 30 29  _collate_func:0)
9e40: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c  ;.    sqlite3Val
9e50: 75 65 46 72 65 65 28 70 56 61 6c 29 3b 0a 20 20  ueFree(pVal);.  
9e60: 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54  }.  if( sqlite3T
9e70: 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72  estErrCode(inter
9e80: 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65 74  p, db, rc) ) ret
9e90: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
9ea0: 20 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49   .  if( rc!=SQLI
9eb0: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c  TE_OK ){.    Tcl
9ec0: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
9ed0: 74 65 72 70 2c 20 73 71 6c 69 74 65 33 54 65 73  terp, sqlite3Tes
9ee0: 74 45 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20  tErrorName(rc), 
9ef0: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
9f00: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
9f10: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 0a  return TCL_OK;..
9f20: 62 61 64 5f 61 72 67 73 3a 0a 20 20 54 63 6c 5f  bad_args:.  Tcl_
9f30: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
9f40: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
9f50: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
9f60: 22 2c 0a 20 20 20 20 20 20 54 63 6c 5f 47 65 74  ",.      Tcl_Get
9f70: 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62  StringFromObj(ob
9f80: 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 3c 44 42  jv[0], 0), " <DB
9f90: 3e 20 3c 75 74 66 38 3e 20 3c 75 74 66 31 36 6c  > <utf8> <utf16l
9fa0: 65 3e 20 3c 75 74 66 31 36 62 65 3e 22 2c 20 30  e> <utf16be>", 0
9fb0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
9fc0: 45 52 52 4f 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  ERROR;.}../*.** 
9fd0: 57 68 65 6e 20 74 68 65 20 63 6f 6c 6c 61 74 69  When the collati
9fe0: 6f 6e 20 6e 65 65 64 65 64 20 63 61 6c 6c 62 61  on needed callba
9ff0: 63 6b 20 69 73 20 69 6e 76 6f 6b 65 64 2c 20 72  ck is invoked, r
a000: 65 63 6f 72 64 20 74 68 65 20 6e 61 6d 65 20 6f  ecord the name o
a010: 66 20 0a 2a 2a 20 74 68 65 20 72 65 71 75 65 73  f .** the reques
a020: 74 65 64 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  ted collating fu
a030: 6e 63 74 69 6f 6e 20 68 65 72 65 2e 20 20 54 68  nction here.  Th
a040: 65 20 72 65 63 6f 72 64 65 64 20 6e 61 6d 65 20  e recorded name 
a050: 69 73 20 6c 69 6e 6b 65 64 0a 2a 2a 20 74 6f 20  is linked.** to 
a060: 61 20 54 43 4c 20 76 61 72 69 61 62 6c 65 20 61  a TCL variable a
a070: 6e 64 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20  nd used to make 
a080: 73 75 72 65 20 74 68 61 74 20 74 68 65 20 72 65  sure that the re
a090: 71 75 65 73 74 65 64 20 63 6f 6c 6c 61 74 69 6f  quested collatio
a0a0: 6e 0a 2a 2a 20 6e 61 6d 65 20 69 73 20 63 6f 72  n.** name is cor
a0b0: 72 65 63 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  rect..*/.static 
a0c0: 63 68 61 72 20 7a 4e 65 65 64 65 64 43 6f 6c 6c  char zNeededColl
a0d0: 61 74 69 6f 6e 5b 32 30 30 5d 3b 0a 73 74 61 74  ation[200];.stat
a0e0: 69 63 20 63 68 61 72 20 2a 70 7a 4e 65 65 64 65  ic char *pzNeede
a0f0: 64 43 6f 6c 6c 61 74 69 6f 6e 20 3d 20 7a 4e 65  dCollation = zNe
a100: 65 64 65 64 43 6f 6c 6c 61 74 69 6f 6e 3b 0a 0a  ededCollation;..
a110: 0a 2f 2a 0a 2a 2a 20 43 61 6c 6c 65 64 20 77 68  ./*.** Called wh
a120: 65 6e 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73  en a collating s
a130: 65 71 75 65 6e 63 65 20 69 73 20 6e 65 65 64 65  equence is neede
a140: 64 2e 20 20 52 65 67 69 73 74 65 72 65 64 20 75  d.  Registered u
a150: 73 69 6e 67 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  sing.** sqlite3_
a160: 63 6f 6c 6c 61 74 69 6f 6e 5f 6e 65 65 64 65 64  collation_needed
a170: 31 36 28 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  16()..*/.static 
a180: 76 6f 69 64 20 74 65 73 74 5f 63 6f 6c 6c 61 74  void test_collat
a190: 65 5f 6e 65 65 64 65 64 5f 63 62 28 0a 20 20 76  e_needed_cb(.  v
a1a0: 6f 69 64 20 2a 70 43 74 78 2c 20 0a 20 20 73 71  oid *pCtx, .  sq
a1b0: 6c 69 74 65 33 20 2a 64 62 2c 0a 20 20 69 6e 74  lite3 *db,.  int
a1c0: 20 65 54 65 78 74 52 65 70 2c 0a 20 20 63 6f 6e   eTextRep,.  con
a1d0: 73 74 20 76 6f 69 64 20 2a 70 4e 61 6d 65 0a 29  st void *pName.)
a1e0: 7b 0a 20 20 69 6e 74 20 65 6e 63 20 3d 20 45 4e  {.  int enc = EN
a1f0: 43 28 64 62 29 3b 0a 20 20 69 6e 74 20 69 3b 0a  C(db);.  int i;.
a200: 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 66 6f 72    char *z;.  for
a210: 28 7a 20 3d 20 28 63 68 61 72 2a 29 70 4e 61 6d  (z = (char*)pNam
a220: 65 2c 20 69 3d 30 3b 20 2a 7a 20 7c 7c 20 7a 5b  e, i=0; *z || z[
a230: 31 5d 3b 20 7a 2b 2b 29 7b 0a 20 20 20 20 69 66  1]; z++){.    if
a240: 28 20 2a 7a 20 29 20 7a 4e 65 65 64 65 64 43 6f  ( *z ) zNeededCo
a250: 6c 6c 61 74 69 6f 6e 5b 69 2b 2b 5d 20 3d 20 2a  llation[i++] = *
a260: 7a 3b 0a 20 20 7d 0a 20 20 7a 4e 65 65 64 65 64  z;.  }.  zNeeded
a270: 43 6f 6c 6c 61 74 69 6f 6e 5b 69 5d 20 3d 20 30  Collation[i] = 0
a280: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61  ;.  sqlite3_crea
a290: 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 0a 20 20  te_collation(.  
a2a0: 20 20 20 20 64 62 2c 20 22 74 65 73 74 5f 63 6f      db, "test_co
a2b0: 6c 6c 61 74 65 22 2c 20 45 4e 43 28 64 62 29 2c  llate", ENC(db),
a2c0: 20 28 76 6f 69 64 20 2a 29 65 6e 63 2c 20 74 65   (void *)enc, te
a2d0: 73 74 5f 63 6f 6c 6c 61 74 65 5f 66 75 6e 63 29  st_collate_func)
a2e0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
a2f0: 3a 20 61 64 64 5f 74 65 73 74 5f 63 6f 6c 6c 61  : add_test_colla
a300: 74 65 5f 6e 65 65 64 65 64 20 44 42 0a 2a 2f 0a  te_needed DB.*/.
a310: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
a320: 63 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64 28 0a  collate_needed(.
a330: 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
a340: 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
a350: 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
a360: 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
a370: 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
a380: 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
a390: 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66  .  int rc;..  if
a3a0: 28 20 6f 62 6a 63 21 3d 32 20 29 20 67 6f 74 6f  ( objc!=2 ) goto
a3b0: 20 62 61 64 5f 61 72 67 73 3b 0a 20 20 69 66 28   bad_args;.  if(
a3c0: 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e   getDbPointer(in
a3d0: 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
a3e0: 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64  ing(objv[1]), &d
a3f0: 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
a400: 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71  ERROR;.  rc = sq
a410: 6c 69 74 65 33 5f 63 6f 6c 6c 61 74 69 6f 6e 5f  lite3_collation_
a420: 6e 65 65 64 65 64 31 36 28 64 62 2c 20 30 2c 20  needed16(db, 0, 
a430: 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65  test_collate_nee
a440: 64 65 64 5f 63 62 29 3b 0a 20 20 7a 4e 65 65 64  ded_cb);.  zNeed
a450: 65 64 43 6f 6c 6c 61 74 69 6f 6e 5b 30 5d 20 3d  edCollation[0] =
a460: 20 30 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65   0;.  if( sqlite
a470: 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74  3TestErrCode(int
a480: 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72  erp, db, rc) ) r
a490: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
a4a0: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
a4b0: 3b 0a 0a 62 61 64 5f 61 72 67 73 3a 0a 20 20 54  ;..bad_args:.  T
a4c0: 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28  cl_WrongNumArgs(
a4d0: 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c  interp, 1, objv,
a4e0: 20 22 44 42 22 29 3b 0a 20 20 72 65 74 75 72 6e   "DB");.  return
a4f0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 7d 0a 23 65   TCL_ERROR;.}.#e
a500: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
a510: 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 2f 2a  MIT_UTF16 */../*
a520: 0a 2a 2a 20 55 73 61 67 65 3a 20 61 64 64 5f 74  .** Usage: add_t
a530: 65 73 74 5f 66 75 6e 63 74 69 6f 6e 20 3c 64 62  est_function <db
a540: 20 70 74 72 3e 20 3c 75 74 66 38 3e 20 3c 75 74   ptr> <utf8> <ut
a550: 66 31 36 6c 65 3e 20 3c 75 74 66 31 36 62 65 3e  f16le> <utf16be>
a560: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63  .**.** This func
a570: 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20  tion is used to 
a580: 74 65 73 74 20 74 68 61 74 20 53 51 4c 69 74 65  test that SQLite
a590: 20 73 65 6c 65 63 74 73 20 74 68 65 20 63 6f 72   selects the cor
a5a0: 72 65 63 74 20 75 73 65 72 0a 2a 2a 20 66 75 6e  rect user.** fun
a5b0: 63 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 77  ction callback w
a5c0: 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 76 65 72  hen multiple ver
a5d0: 73 69 6f 6e 73 20 28 66 6f 72 20 64 69 66 66 65  sions (for diffe
a5e0: 72 65 6e 74 20 74 65 78 74 20 65 6e 63 6f 64 69  rent text encodi
a5f0: 6e 67 73 29 0a 2a 2a 20 61 72 65 20 61 76 61 69  ngs).** are avai
a600: 6c 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 43 61 6c  lable..**.** Cal
a610: 6c 69 6e 67 20 74 68 69 73 20 72 6f 75 74 69 6e  ling this routin
a620: 65 20 72 65 67 69 73 74 65 72 73 20 75 70 20 74  e registers up t
a630: 6f 20 74 68 72 65 65 20 76 65 72 73 69 6f 6e 73  o three versions
a640: 20 6f 66 20 74 68 65 20 75 73 65 72 20 66 75 6e   of the user fun
a650: 63 74 69 6f 6e 0a 2a 2a 20 22 74 65 73 74 5f 66  ction.** "test_f
a660: 75 6e 63 74 69 6f 6e 22 20 77 69 74 68 20 64 61  unction" with da
a670: 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 3c 64  tabase handle <d
a680: 62 3e 2e 20 20 49 66 20 74 68 65 20 73 65 63 6f  b>.  If the seco
a690: 6e 64 20 61 72 67 75 6d 65 6e 74 20 69 73 0a 2a  nd argument is.*
a6a0: 2a 20 74 72 75 65 2c 20 74 68 65 6e 20 61 20 76  * true, then a v
a6b0: 65 72 73 69 6f 6e 20 6f 66 20 74 65 73 74 5f 66  ersion of test_f
a6c0: 75 6e 63 74 69 6f 6e 20 69 73 20 72 65 67 69 73  unction is regis
a6d0: 74 65 72 65 64 20 66 6f 72 20 55 54 46 2d 38 2c  tered for UTF-8,
a6e0: 20 69 66 20 74 68 65 0a 2a 2a 20 74 68 69 72 64   if the.** third
a6f0: 20 69 73 20 74 72 75 65 2c 20 61 20 76 65 72 73   is true, a vers
a700: 69 6f 6e 20 69 73 20 72 65 67 69 73 74 65 72 65  ion is registere
a710: 64 20 66 6f 72 20 55 54 46 2d 31 36 6c 65 2c 20  d for UTF-16le, 
a720: 69 66 20 74 68 65 20 66 6f 75 72 74 68 20 69 73  if the fourth is
a730: 0a 2a 2a 20 74 72 75 65 2c 20 61 20 55 54 46 2d  .** true, a UTF-
a740: 31 36 62 65 20 76 65 72 73 69 6f 6e 20 69 73 20  16be version is 
a750: 61 76 61 69 6c 61 62 6c 65 2e 20 20 50 72 65 76  available.  Prev
a760: 69 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f 66  ious versions of
a770: 0a 2a 2a 20 74 65 73 74 5f 66 75 6e 63 74 69 6f  .** test_functio
a780: 6e 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 2a  n are deleted..*
a790: 2a 0a 2a 2a 20 54 68 65 20 75 73 65 72 20 66 75  *.** The user fu
a7a0: 6e 63 74 69 6f 6e 20 69 73 20 69 6d 70 6c 65 6d  nction is implem
a7b0: 65 6e 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67  ented by calling
a7c0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 54   the following T
a7d0: 43 4c 20 73 63 72 69 70 74 3a 0a 2a 2a 0a 2a 2a  CL script:.**.**
a7e0: 20 20 20 22 74 65 73 74 5f 66 75 6e 63 74 69 6f     "test_functio
a7f0: 6e 20 3c 65 6e 63 3e 20 3c 61 72 67 3e 22 0a 2a  n <enc> <arg>".*
a800: 2a 0a 2a 2a 20 57 68 65 72 65 20 3c 65 6e 63 3e  *.** Where <enc>
a810: 20 69 73 20 6f 6e 65 20 6f 66 20 55 54 46 2d 38   is one of UTF-8
a820: 2c 20 55 54 46 2d 31 36 4c 45 20 6f 72 20 55 54  , UTF-16LE or UT
a830: 46 31 36 42 45 2c 20 61 6e 64 20 3c 61 72 67 3e  F16BE, and <arg>
a840: 20 69 73 20 74 68 65 0a 2a 2a 20 73 69 6e 67 6c   is the.** singl
a850: 65 20 61 72 67 75 6d 65 6e 74 20 70 61 73 73 65  e argument passe
a860: 64 20 74 6f 20 74 68 65 20 53 51 4c 20 66 75 6e  d to the SQL fun
a870: 63 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65  ction. The value
a880: 20 72 65 74 75 72 6e 65 64 20 62 79 0a 2a 2a 20   returned by.** 
a890: 74 68 65 20 54 43 4c 20 73 63 72 69 70 74 20 69  the TCL script i
a8a0: 73 20 75 73 65 64 20 61 73 20 74 68 65 20 72 65  s used as the re
a8b0: 74 75 72 6e 20 76 61 6c 75 65 20 6f 66 20 74 68  turn value of th
a8c0: 65 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2e 20  e SQL function. 
a8d0: 49 74 0a 2a 2a 20 69 73 20 70 61 73 73 65 64 20  It.** is passed 
a8e0: 74 6f 20 53 51 4c 69 74 65 20 75 73 69 6e 67 20  to SQLite using 
a8f0: 55 54 46 2d 31 36 42 45 20 66 6f 72 20 61 20 55  UTF-16BE for a U
a900: 54 46 2d 38 20 74 65 73 74 5f 66 75 6e 63 74 69  TF-8 test_functi
a910: 6f 6e 28 29 2c 20 55 54 46 2d 38 0a 2a 2a 20 66  on(), UTF-8.** f
a920: 6f 72 20 61 20 55 54 46 2d 31 36 4c 45 20 74 65  or a UTF-16LE te
a930: 73 74 5f 66 75 6e 63 74 69 6f 6e 28 29 2c 20 61  st_function(), a
a940: 6e 64 20 55 54 46 2d 31 36 4c 45 20 66 6f 72 20  nd UTF-16LE for 
a950: 61 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  an implementatio
a960: 6e 20 74 68 61 74 0a 2a 2a 20 70 72 65 66 65 72  n that.** prefer
a970: 73 20 55 54 46 2d 31 36 42 45 2e 0a 2a 2f 0a 23  s UTF-16BE..*/.#
a980: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
a990: 49 54 5f 55 54 46 31 36 0a 73 74 61 74 69 63 20  IT_UTF16.static 
a9a0: 76 6f 69 64 20 74 65 73 74 5f 66 75 6e 63 74 69  void test_functi
a9b0: 6f 6e 5f 75 74 66 38 28 0a 20 20 73 71 6c 69 74  on_utf8(.  sqlit
a9c0: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78  e3_context *pCtx
a9d0: 2c 20 0a 20 20 69 6e 74 20 6e 41 72 67 2c 0a 20  , .  int nArg,. 
a9e0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
a9f0: 2a 61 72 67 76 0a 29 7b 0a 20 20 54 63 6c 5f 49  *argv.){.  Tcl_I
aa00: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 3b 0a 20  nterp *interp;. 
aa10: 20 54 63 6c 5f 4f 62 6a 20 2a 70 58 3b 0a 20 20   Tcl_Obj *pX;.  
aa20: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
aa30: 56 61 6c 3b 0a 20 20 69 6e 74 65 72 70 20 3d 20  Val;.  interp = 
aa40: 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 29 73 71  (Tcl_Interp *)sq
aa50: 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28  lite3_user_data(
aa60: 70 43 74 78 29 3b 0a 20 20 70 58 20 3d 20 54 63  pCtx);.  pX = Tc
aa70: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22  l_NewStringObj("
aa80: 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20  test_function", 
aa90: 2d 31 29 3b 0a 20 20 54 63 6c 5f 49 6e 63 72 52  -1);.  Tcl_IncrR
aaa0: 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a 20 20 54  efCount(pX);.  T
aab0: 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64  cl_ListObjAppend
aac0: 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20  Element(interp, 
aad0: 70 58 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  pX, Tcl_NewStrin
aae0: 67 4f 62 6a 28 22 55 54 46 2d 38 22 2c 20 2d 31  gObj("UTF-8", -1
aaf0: 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62  ));.  Tcl_ListOb
ab00: 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  jAppendElement(i
ab10: 6e 74 65 72 70 2c 20 70 58 2c 20 0a 20 20 20 20  nterp, pX, .    
ab20: 20 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f    Tcl_NewStringO
ab30: 62 6a 28 28 63 68 61 72 2a 29 73 71 6c 69 74 65  bj((char*)sqlite
ab40: 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67  3_value_text(arg
ab50: 76 5b 30 5d 29 2c 20 2d 31 29 29 3b 0a 20 20 54  v[0]), -1));.  T
ab60: 63 6c 5f 45 76 61 6c 4f 62 6a 45 78 28 69 6e 74  cl_EvalObjEx(int
ab70: 65 72 70 2c 20 70 58 2c 20 30 29 3b 0a 20 20 54  erp, pX, 0);.  T
ab80: 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28  cl_DecrRefCount(
ab90: 70 58 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72  pX);.  sqlite3_r
aba0: 65 73 75 6c 74 5f 74 65 78 74 28 70 43 74 78 2c  esult_text(pCtx,
abb0: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 52 65   Tcl_GetStringRe
abc0: 73 75 6c 74 28 69 6e 74 65 72 70 29 2c 20 2d 31  sult(interp), -1
abd0: 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  , SQLITE_TRANSIE
abe0: 4e 54 29 3b 0a 20 20 70 56 61 6c 20 3d 20 73 71  NT);.  pVal = sq
abf0: 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 29 3b  lite3ValueNew();
ac00: 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53  .  sqlite3ValueS
ac10: 65 74 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c 20  etStr(pVal, -1, 
ac20: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 52 65 73  Tcl_GetStringRes
ac30: 75 6c 74 28 69 6e 74 65 72 70 29 2c 20 0a 20 20  ult(interp), .  
ac40: 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38 2c      SQLITE_UTF8,
ac50: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
ac60: 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  .  sqlite3_resul
ac70: 74 5f 74 65 78 74 31 36 62 65 28 70 43 74 78 2c  t_text16be(pCtx,
ac80: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
ac90: 65 78 74 31 36 62 65 28 70 56 61 6c 29 2c 0a 20  ext16be(pVal),. 
aca0: 20 20 20 20 20 2d 31 2c 20 53 51 4c 49 54 45 5f       -1, SQLITE_
acb0: 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 73 71  TRANSIENT);.  sq
acc0: 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 70  lite3ValueFree(p
acd0: 56 61 6c 29 3b 0a 7d 0a 73 74 61 74 69 63 20 76  Val);.}.static v
ace0: 6f 69 64 20 74 65 73 74 5f 66 75 6e 63 74 69 6f  oid test_functio
acf0: 6e 5f 75 74 66 31 36 6c 65 28 0a 20 20 73 71 6c  n_utf16le(.  sql
ad00: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43  ite3_context *pC
ad10: 74 78 2c 20 0a 20 20 69 6e 74 20 6e 41 72 67 2c  tx, .  int nArg,
ad20: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
ad30: 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 54 63 6c   **argv.){.  Tcl
ad40: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 3b  _Interp *interp;
ad50: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 58 3b 0a  .  Tcl_Obj *pX;.
ad60: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
ad70: 2a 70 56 61 6c 3b 0a 20 20 69 6e 74 65 72 70 20  *pVal;.  interp 
ad80: 3d 20 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 29  = (Tcl_Interp *)
ad90: 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74  sqlite3_user_dat
ada0: 61 28 70 43 74 78 29 3b 0a 20 20 70 58 20 3d 20  a(pCtx);.  pX = 
adb0: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
adc0: 28 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22  ("test_function"
add0: 2c 20 2d 31 29 3b 0a 20 20 54 63 6c 5f 49 6e 63  , -1);.  Tcl_Inc
ade0: 72 52 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a 20  rRefCount(pX);. 
adf0: 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65   Tcl_ListObjAppe
ae00: 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70  ndElement(interp
ae10: 2c 20 70 58 2c 20 54 63 6c 5f 4e 65 77 53 74 72  , pX, Tcl_NewStr
ae20: 69 6e 67 4f 62 6a 28 22 55 54 46 2d 31 36 4c 45  ingObj("UTF-16LE
ae30: 22 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 4c  ", -1));.  Tcl_L
ae40: 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d  istObjAppendElem
ae50: 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 58 2c 20  ent(interp, pX, 
ae60: 0a 20 20 20 20 20 20 54 63 6c 5f 4e 65 77 53 74  .      Tcl_NewSt
ae70: 72 69 6e 67 4f 62 6a 28 28 63 68 61 72 2a 29 73  ringObj((char*)s
ae80: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
ae90: 74 28 61 72 67 76 5b 30 5d 29 2c 20 2d 31 29 29  t(argv[0]), -1))
aea0: 3b 0a 20 20 54 63 6c 5f 45 76 61 6c 4f 62 6a 45  ;.  Tcl_EvalObjE
aeb0: 78 28 69 6e 74 65 72 70 2c 20 70 58 2c 20 30 29  x(interp, pX, 0)
aec0: 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52 65 66 43  ;.  Tcl_DecrRefC
aed0: 6f 75 6e 74 28 70 58 29 3b 0a 20 20 70 56 61 6c  ount(pX);.  pVal
aee0: 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65 4e   = sqlite3ValueN
aef0: 65 77 28 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  ew();.  sqlite3V
af00: 61 6c 75 65 53 65 74 53 74 72 28 70 56 61 6c 2c  alueSetStr(pVal,
af10: 20 2d 31 2c 20 54 63 6c 5f 47 65 74 53 74 72 69   -1, Tcl_GetStri
af20: 6e 67 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29  ngResult(interp)
af30: 2c 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  , .      SQLITE_
af40: 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41  UTF8, SQLITE_STA
af50: 54 49 43 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  TIC);.  sqlite3_
af60: 72 65 73 75 6c 74 5f 74 65 78 74 28 70 43 74 78  result_text(pCtx
af70: 2c 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f  ,(char*)sqlite3_
af80: 76 61 6c 75 65 5f 74 65 78 74 28 70 56 61 6c 29  value_text(pVal)
af90: 2c 2d 31 2c 53 51 4c 49 54 45 5f 54 52 41 4e 53  ,-1,SQLITE_TRANS
afa0: 49 45 4e 54 29 3b 0a 20 20 73 71 6c 69 74 65 33  IENT);.  sqlite3
afb0: 56 61 6c 75 65 46 72 65 65 28 70 56 61 6c 29 3b  ValueFree(pVal);
afc0: 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74  .}.static void t
afd0: 65 73 74 5f 66 75 6e 63 74 69 6f 6e 5f 75 74 66  est_function_utf
afe0: 31 36 62 65 28 0a 20 20 73 71 6c 69 74 65 33 5f  16be(.  sqlite3_
aff0: 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 0a  context *pCtx, .
b000: 20 20 69 6e 74 20 6e 41 72 67 2c 0a 20 20 73 71    int nArg,.  sq
b010: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72  lite3_value **ar
b020: 67 76 0a 29 7b 0a 20 20 54 63 6c 5f 49 6e 74 65  gv.){.  Tcl_Inte
b030: 72 70 20 2a 69 6e 74 65 72 70 3b 0a 20 20 54 63  rp *interp;.  Tc
b040: 6c 5f 4f 62 6a 20 2a 70 58 3b 0a 20 20 73 71 6c  l_Obj *pX;.  sql
b050: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c  ite3_value *pVal
b060: 3b 0a 20 20 69 6e 74 65 72 70 20 3d 20 28 54 63  ;.  interp = (Tc
b070: 6c 5f 49 6e 74 65 72 70 20 2a 29 73 71 6c 69 74  l_Interp *)sqlit
b080: 65 33 5f 75 73 65 72 5f 64 61 74 61 28 70 43 74  e3_user_data(pCt
b090: 78 29 3b 0a 20 20 70 58 20 3d 20 54 63 6c 5f 4e  x);.  pX = Tcl_N
b0a0: 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 74 65 73  ewStringObj("tes
b0b0: 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 2d 31 29  t_function", -1)
b0c0: 3b 0a 20 20 54 63 6c 5f 49 6e 63 72 52 65 66 43  ;.  Tcl_IncrRefC
b0d0: 6f 75 6e 74 28 70 58 29 3b 0a 20 20 54 63 6c 5f  ount(pX);.  Tcl_
b0e0: 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65  ListObjAppendEle
b0f0: 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 58 2c  ment(interp, pX,
b100: 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
b110: 6a 28 22 55 54 46 2d 31 36 42 45 22 2c 20 2d 31  j("UTF-16BE", -1
b120: 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62  ));.  Tcl_ListOb
b130: 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  jAppendElement(i
b140: 6e 74 65 72 70 2c 20 70 58 2c 20 0a 20 20 20 20  nterp, pX, .    
b150: 20 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f    Tcl_NewStringO
b160: 62 6a 28 28 63 68 61 72 2a 29 73 71 6c 69 74 65  bj((char*)sqlite
b170: 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67  3_value_text(arg
b180: 76 5b 30 5d 29 2c 20 2d 31 29 29 3b 0a 20 20 54  v[0]), -1));.  T
b190: 63 6c 5f 45 76 61 6c 4f 62 6a 45 78 28 69 6e 74  cl_EvalObjEx(int
b1a0: 65 72 70 2c 20 70 58 2c 20 30 29 3b 0a 20 20 54  erp, pX, 0);.  T
b1b0: 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28  cl_DecrRefCount(
b1c0: 70 58 29 3b 0a 20 20 70 56 61 6c 20 3d 20 73 71  pX);.  pVal = sq
b1d0: 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 29 3b  lite3ValueNew();
b1e0: 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53  .  sqlite3ValueS
b1f0: 65 74 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c 20  etStr(pVal, -1, 
b200: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 52 65 73  Tcl_GetStringRes
b210: 75 6c 74 28 69 6e 74 65 72 70 29 2c 20 0a 20 20  ult(interp), .  
b220: 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38 2c      SQLITE_UTF8,
b230: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
b240: 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  .  sqlite3_resul
b250: 74 5f 74 65 78 74 31 36 6c 65 28 70 43 74 78 2c  t_text16le(pCtx,
b260: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
b270: 65 78 74 31 36 6c 65 28 70 56 61 6c 29 2c 0a 20  ext16le(pVal),. 
b280: 20 20 20 20 20 2d 31 2c 20 53 51 4c 49 54 45 5f       -1, SQLITE_
b290: 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 73 71  TRANSIENT);.  sq
b2a0: 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 70  lite3ValueFree(p
b2b0: 56 61 6c 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  Val);.}.#endif /
b2c0: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  * SQLITE_OMIT_UT
b2d0: 46 31 36 20 2a 2f 0a 73 74 61 74 69 63 20 69 6e  F16 */.static in
b2e0: 74 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 28  t test_function(
b2f0: 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
b300: 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
b310: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
b320: 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
b330: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
b340: 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ){.#ifndef SQLIT
b350: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 73  E_OMIT_UTF16.  s
b360: 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e  qlite3 *db;.  in
b370: 74 20 76 61 6c 3b 0a 0a 20 20 69 66 28 20 6f 62  t val;..  if( ob
b380: 6a 63 21 3d 35 20 29 20 67 6f 74 6f 20 62 61 64  jc!=5 ) goto bad
b390: 5f 61 72 67 73 3b 0a 20 20 69 66 28 20 67 65 74  _args;.  if( get
b3a0: 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  DbPointer(interp
b3b0: 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
b3c0: 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29  objv[1]), &db) )
b3d0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
b3e0: 52 3b 0a 0a 20 20 69 66 28 20 54 43 4c 5f 4f 4b  R;..  if( TCL_OK
b3f0: 21 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e  !=Tcl_GetBoolean
b400: 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
b410: 6f 62 6a 76 5b 32 5d 2c 20 26 76 61 6c 29 20 29  objv[2], &val) )
b420: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
b430: 52 3b 0a 20 20 69 66 28 20 76 61 6c 20 29 7b 0a  R;.  if( val ){.
b440: 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61      sqlite3_crea
b450: 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20  te_function(db, 
b460: 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c  "test_function",
b470: 20 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c   1, SQLITE_UTF8,
b480: 20 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 70   .        interp
b490: 2c 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 5f  , test_function_
b4a0: 75 74 66 38 2c 20 30 2c 20 30 29 3b 0a 20 20 7d  utf8, 0, 0);.  }
b4b0: 0a 20 20 69 66 28 20 54 43 4c 5f 4f 4b 21 3d 54  .  if( TCL_OK!=T
b4c0: 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f  cl_GetBooleanFro
b4d0: 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
b4e0: 76 5b 33 5d 2c 20 26 76 61 6c 29 20 29 20 72 65  v[3], &val) ) re
b4f0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
b500: 20 20 69 66 28 20 76 61 6c 20 29 7b 0a 20 20 20    if( val ){.   
b510: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
b520: 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22 74 65  function(db, "te
b530: 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 31 2c  st_function", 1,
b540: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 2c   SQLITE_UTF16LE,
b550: 20 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 70   .        interp
b560: 2c 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 5f  , test_function_
b570: 75 74 66 31 36 6c 65 2c 20 30 2c 20 30 29 3b 0a  utf16le, 0, 0);.
b580: 20 20 7d 0a 20 20 69 66 28 20 54 43 4c 5f 4f 4b    }.  if( TCL_OK
b590: 21 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e  !=Tcl_GetBoolean
b5a0: 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
b5b0: 6f 62 6a 76 5b 34 5d 2c 20 26 76 61 6c 29 20 29  objv[4], &val) )
b5c0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
b5d0: 52 3b 0a 20 20 69 66 28 20 76 61 6c 20 29 7b 0a  R;.  if( val ){.
b5e0: 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61      sqlite3_crea
b5f0: 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20  te_function(db, 
b600: 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c  "test_function",
b610: 20 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36   1, SQLITE_UTF16
b620: 42 45 2c 20 0a 20 20 20 20 20 20 20 20 69 6e 74  BE, .        int
b630: 65 72 70 2c 20 74 65 73 74 5f 66 75 6e 63 74 69  erp, test_functi
b640: 6f 6e 5f 75 74 66 31 36 62 65 2c 20 30 2c 20 30  on_utf16be, 0, 0
b650: 29 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e  );.  }..  return
b660: 20 54 43 4c 5f 4f 4b 3b 0a 62 61 64 5f 61 72 67   TCL_OK;.bad_arg
b670: 73 3a 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  s:.  Tcl_AppendR
b680: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
b690: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
b6a0: 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20  uld be \"",.    
b6b0: 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46    Tcl_GetStringF
b6c0: 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20  romObj(objv[0], 
b6d0: 30 29 2c 20 22 20 3c 44 42 3e 20 3c 75 74 66 38  0), " <DB> <utf8
b6e0: 3e 20 3c 75 74 66 31 36 6c 65 3e 20 3c 75 74 66  > <utf16le> <utf
b6f0: 31 36 62 65 3e 22 2c 20 30 29 3b 0a 23 65 6e 64  16be>", 0);.#end
b700: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
b710: 54 5f 55 54 46 31 36 20 2a 2f 0a 20 20 72 65 74  T_UTF16 */.  ret
b720: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 7d  urn TCL_ERROR;.}
b730: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
b740: 20 20 20 20 20 20 20 74 65 73 74 5f 65 72 72 73         test_errs
b750: 74 72 20 3c 65 72 72 20 63 6f 64 65 3e 0a 2a 2a  tr <err code>.**
b760: 0a 2a 2a 20 54 65 73 74 20 74 68 61 74 20 74 68  .** Test that th
b770: 65 20 65 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61  e english langua
b780: 67 65 20 73 74 72 69 6e 67 20 65 71 75 69 76 61  ge string equiva
b790: 6c 65 6e 74 73 20 66 6f 72 20 73 71 6c 69 74 65  lents for sqlite
b7a0: 20 65 72 72 6f 72 20 63 6f 64 65 73 0a 2a 2a 20   error codes.** 
b7b0: 61 72 65 20 73 61 6e 65 2e 20 54 68 65 20 70 61  are sane. The pa
b7c0: 72 61 6d 65 74 65 72 20 69 73 20 61 6e 20 69 6e  rameter is an in
b7d0: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 69  teger representi
b7e0: 6e 67 20 61 6e 20 73 71 6c 69 74 65 20 65 72 72  ng an sqlite err
b7f0: 6f 72 20 63 6f 64 65 2e 0a 2a 2a 20 54 68 65 20  or code..** The 
b800: 72 65 73 75 6c 74 20 69 73 20 61 20 6c 69 73 74  result is a list
b810: 20 6f 66 20 74 77 6f 20 65 6c 65 6d 65 6e 74 73   of two elements
b820: 2c 20 74 68 65 20 73 74 72 69 6e 67 20 72 65 70  , the string rep
b830: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
b840: 68 65 0a 2a 2a 20 65 72 72 6f 72 20 63 6f 64 65  he.** error code
b850: 20 61 6e 64 20 74 68 65 20 65 6e 67 6c 69 73 68   and the english
b860: 20 6c 61 6e 67 75 61 67 65 20 65 78 70 6c 61 6e   language explan
b870: 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63  ation..*/.static
b880: 20 69 6e 74 20 74 65 73 74 5f 65 72 72 73 74 72   int test_errstr
b890: 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
b8a0: 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
b8b0: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
b8c0: 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
b8d0: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
b8e0: 0a 29 7b 0a 20 20 63 68 61 72 20 2a 7a 43 6f 64  .){.  char *zCod
b8f0: 65 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 66  e;.  int i;.  if
b900: 28 20 6f 62 6a 63 21 3d 31 20 29 7b 0a 20 20 20  ( objc!=1 ){.   
b910: 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67   Tcl_WrongNumArg
b920: 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a  s(interp, 1, obj
b930: 76 2c 20 22 3c 65 72 72 6f 72 20 63 6f 64 65 3e  v, "<error code>
b940: 22 29 3b 0a 20 20 7d 0a 0a 20 20 7a 43 6f 64 65  ");.  }..  zCode
b950: 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67   = Tcl_GetString
b960: 28 6f 62 6a 76 5b 31 5d 29 3b 0a 20 20 66 6f 72  (objv[1]);.  for
b970: 28 69 3d 30 3b 20 69 3c 32 30 30 3b 20 69 2b 2b  (i=0; i<200; i++
b980: 29 7b 0a 20 20 20 20 69 66 28 20 30 3d 3d 73 74  ){.    if( 0==st
b990: 72 63 6d 70 28 65 72 72 6f 72 4e 61 6d 65 28 69  rcmp(errorName(i
b9a0: 29 2c 20 7a 43 6f 64 65 29 20 29 20 62 72 65 61  ), zCode) ) brea
b9b0: 6b 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 53 65 74  k;.  }.  Tcl_Set
b9c0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28  Result(interp, (
b9d0: 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 45 72  char *)sqlite3Er
b9e0: 72 53 74 72 28 69 29 2c 20 30 29 3b 0a 20 20 72  rStr(i), 0);.  r
b9f0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
ba00: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20  ./*.** Usage:   
ba10: 20 62 72 65 61 6b 70 6f 69 6e 74 0a 2a 2a 0a 2a   breakpoint.**.*
ba20: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 65  * This routine e
ba30: 78 69 73 74 73 20 66 6f 72 20 6f 6e 65 20 70 75  xists for one pu
ba40: 72 70 6f 73 65 20 2d 20 74 6f 20 70 72 6f 76 69  rpose - to provi
ba50: 64 65 20 61 20 70 6c 61 63 65 20 74 6f 20 70 75  de a place to pu
ba60: 74 20 61 0a 2a 2a 20 62 72 65 61 6b 70 6f 69 6e  t a.** breakpoin
ba70: 74 20 77 69 74 68 20 47 44 42 20 74 68 61 74 20  t with GDB that 
ba80: 63 61 6e 20 62 65 20 74 72 69 67 67 65 72 65 64  can be triggered
ba90: 20 75 73 69 6e 67 20 54 43 4c 20 63 6f 64 65 2e   using TCL code.
baa0: 20 20 54 68 65 20 75 73 65 0a 2a 2a 20 66 6f 72    The use.** for
bab0: 20 74 68 69 73 20 69 73 20 77 68 65 6e 20 61 20   this is when a 
bac0: 70 61 72 74 69 63 75 6c 61 72 20 74 65 73 74 20  particular test 
bad0: 66 61 69 6c 73 20 6f 6e 20 28 73 61 79 29 20 74  fails on (say) t
bae0: 68 65 20 31 34 38 35 74 68 20 69 74 65 72 61 74  he 1485th iterat
baf0: 69 6f 6e 2e 0a 2a 2a 20 49 6e 20 74 68 65 20 54  ion..** In the T
bb00: 43 4c 20 74 65 73 74 20 73 63 72 69 70 74 2c 20  CL test script, 
bb10: 77 65 20 63 61 6e 20 61 64 64 20 63 6f 64 65 20  we can add code 
bb20: 6c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a  like this:.**.**
bb30: 20 20 20 20 20 69 66 20 7b 24 69 3d 3d 31 34 38       if {$i==148
bb40: 35 7d 20 62 72 65 61 6b 70 6f 69 6e 74 0a 2a 2a  5} breakpoint.**
bb50: 0a 2a 2a 20 54 68 65 6e 20 72 75 6e 20 74 65 73  .** Then run tes
bb60: 74 66 69 78 74 75 72 65 20 69 6e 20 74 68 65 20  tfixture in the 
bb70: 64 65 62 75 67 67 65 72 20 61 6e 64 20 77 61 69  debugger and wai
bb80: 74 20 66 6f 72 20 74 68 65 20 62 72 65 61 6b 70  t for the breakp
bb90: 6f 69 6e 74 20 74 6f 0a 2a 2a 20 66 69 72 65 2e  oint to.** fire.
bba0: 20 20 54 68 65 6e 20 61 64 64 69 74 69 6f 6e 61    Then additiona
bbb0: 6c 20 62 72 65 61 6b 70 6f 69 6e 74 73 20 63 61  l breakpoints ca
bbc0: 6e 20 62 65 20 73 65 74 20 74 6f 20 74 72 61 63  n be set to trac
bbd0: 65 20 64 6f 77 6e 20 74 68 65 20 62 75 67 2e 0a  e down the bug..
bbe0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
bbf0: 73 74 5f 62 72 65 61 6b 70 6f 69 6e 74 28 0a 20  st_breakpoint(. 
bc00: 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a   void *NotUsed,.
bc10: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
bc20: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
bc30: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
bc40: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
bc50: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
bc60: 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20  nt argc,        
bc70: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
bc80: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
bc90: 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20    char **argv   
bca0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
bcb0: 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e   of each argumen
bcc0: 74 20 2a 2f 0a 29 7b 0a 20 20 72 65 74 75 72 6e  t */.){.  return
bcd0: 20 54 43 4c 5f 4f 4b 3b 20 20 20 20 20 20 20 20   TCL_OK;        
bce0: 20 2f 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 20 2a   /* Do nothing *
bcf0: 2f 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  /.}../*.** Usage
bd00: 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  :   sqlite3_bind
bd10: 5f 69 6e 74 20 20 53 54 4d 54 20 4e 20 56 41 4c  _int  STMT N VAL
bd20: 55 45 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68  UE.**.** Test th
bd30: 65 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  e sqlite3_bind_i
bd40: 6e 74 20 69 6e 74 65 72 66 61 63 65 2e 20 20 53  nt interface.  S
bd50: 54 4d 54 20 69 73 20 61 20 70 72 65 70 61 72 65  TMT is a prepare
bd60: 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20  d statement..** 
bd70: 4e 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  N is the index o
bd80: 66 20 61 20 77 69 6c 64 63 61 72 64 20 69 6e 20  f a wildcard in 
bd90: 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
bda0: 74 65 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 6f  tement.  This co
bdb0: 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64 73 20 61  mmand.** binds a
bdc0: 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20   32-bit integer 
bdd0: 56 41 4c 55 45 20 74 6f 20 74 68 61 74 20 77 69  VALUE to that wi
bde0: 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73 74 61 74 69  ldcard..*/.stati
bdf0: 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f  c int test_bind_
be00: 69 6e 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  int(.  void * cl
be10: 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
be20: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
be30: 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
be40: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
be50: 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
be60: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20  _stmt *pStmt;.  
be70: 69 6e 74 20 69 64 78 3b 0a 20 20 69 6e 74 20 76  int idx;.  int v
be80: 61 6c 75 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a  alue;.  int rc;.
be90: 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 34 20 29  .  if( objc!=4 )
bea0: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
beb0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
bec0: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
bed0: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20  ould be \"",.   
bee0: 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
bef0: 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30  ngFromObj(objv[0
bf00: 5d 2c 20 30 29 2c 20 22 20 53 54 4d 54 20 4e 20  ], 0), " STMT N 
bf10: 56 41 4c 55 45 22 2c 20 30 29 3b 0a 20 20 20 20  VALUE", 0);.    
bf20: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
bf30: 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
bf40: 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
bf50: 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
bf60: 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
bf70: 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
bf80: 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63  _ERROR;.  if( Tc
bf90: 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
bfa0: 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c  interp, objv[2],
bfb0: 20 26 69 64 78 29 20 29 20 72 65 74 75 72 6e 20   &idx) ) return 
bfc0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  TCL_ERROR;.  if(
bfd0: 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f   Tcl_GetIntFromO
bfe0: 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
bff0: 33 5d 2c 20 26 76 61 6c 75 65 29 20 29 20 72 65  3], &value) ) re
c000: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
c010: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
c020: 62 69 6e 64 5f 69 6e 74 28 70 53 74 6d 74 2c 20  bind_int(pStmt, 
c030: 69 64 78 2c 20 76 61 6c 75 65 29 3b 0a 20 20 69  idx, value);.  i
c040: 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72  f( sqlite3TestEr
c050: 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 53 74  rCode(interp, St
c060: 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 2c 20 72  mtToDb(pStmt), r
c070: 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  c) ) return TCL_
c080: 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 63 21  ERROR;.  if( rc!
c090: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
c0a0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
c0b0: 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72  OR;.  }..  retur
c0c0: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a  n TCL_OK;.}.../*
c0d0: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c  .** Usage:   sql
c0e0: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 20  ite3_bind_int64 
c0f0: 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 0a 2a 2a   STMT N VALUE.**
c100: 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 73 71 6c  .** Test the sql
c110: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 20  ite3_bind_int64 
c120: 69 6e 74 65 72 66 61 63 65 2e 20 20 53 54 4d 54  interface.  STMT
c130: 20 69 73 20 61 20 70 72 65 70 61 72 65 64 20 73   is a prepared s
c140: 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69  tatement..** N i
c150: 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61  s the index of a
c160: 20 77 69 6c 64 63 61 72 64 20 69 6e 20 74 68 65   wildcard in the
c170: 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
c180: 65 6e 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d 61  ent.  This comma
c190: 6e 64 0a 2a 2a 20 62 69 6e 64 73 20 61 20 36 34  nd.** binds a 64
c1a0: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 56 41 4c  -bit integer VAL
c1b0: 55 45 20 74 6f 20 74 68 61 74 20 77 69 6c 64 63  UE to that wildc
c1c0: 61 72 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ard..*/.static i
c1d0: 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f 69 6e 74  nt test_bind_int
c1e0: 36 34 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  64(.  void * cli
c1f0: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
c200: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
c210: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
c220: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
c230: 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  [].){.  sqlite3_
c240: 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69  stmt *pStmt;.  i
c250: 6e 74 20 69 64 78 3b 0a 20 20 69 36 34 20 76 61  nt idx;.  i64 va
c260: 6c 75 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  lue;.  int rc;..
c270: 20 20 69 66 28 20 6f 62 6a 63 21 3d 34 20 29 7b    if( objc!=4 ){
c280: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
c290: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
c2a0: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
c2b0: 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20  uld be \"",.    
c2c0: 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
c2d0: 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d  gFromObj(objv[0]
c2e0: 2c 20 30 29 2c 20 22 20 53 54 4d 54 20 4e 20 56  , 0), " STMT N V
c2f0: 41 4c 55 45 22 2c 20 30 29 3b 0a 20 20 20 20 72  ALUE", 0);.    r
c300: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
c310: 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53  .  }..  if( getS
c320: 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tmtPointer(inter
c330: 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
c340: 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d  (objv[1]), &pStm
c350: 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  t) ) return TCL_
c360: 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c  ERROR;.  if( Tcl
c370: 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
c380: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20  nterp, objv[2], 
c390: 26 69 64 78 29 20 29 20 72 65 74 75 72 6e 20 54  &idx) ) return T
c3a0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
c3b0: 54 63 6c 5f 47 65 74 57 69 64 65 49 6e 74 46 72  Tcl_GetWideIntFr
c3c0: 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
c3d0: 6a 76 5b 33 5d 2c 20 26 76 61 6c 75 65 29 20 29  jv[3], &value) )
c3e0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
c3f0: 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  R;..  rc = sqlit
c400: 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 70 53  e3_bind_int64(pS
c410: 74 6d 74 2c 20 69 64 78 2c 20 76 61 6c 75 65 29  tmt, idx, value)
c420: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54  ;.  if( sqlite3T
c430: 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72  estErrCode(inter
c440: 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74 6d  p, StmtToDb(pStm
c450: 74 29 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e  t), rc) ) return
c460: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
c470: 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
c480: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  ){.    return TC
c490: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
c4a0: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
c4b0: 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  .../*.** Usage: 
c4c0: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64    sqlite3_bind_d
c4d0: 6f 75 62 6c 65 20 20 53 54 4d 54 20 4e 20 56 41  ouble  STMT N VA
c4e0: 4c 55 45 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74  LUE.**.** Test t
c4f0: 68 65 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  he sqlite3_bind_
c500: 64 6f 75 62 6c 65 20 69 6e 74 65 72 66 61 63 65  double interface
c510: 2e 20 20 53 54 4d 54 20 69 73 20 61 20 70 72 65  .  STMT is a pre
c520: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e  pared statement.
c530: 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20 69 6e 64  .** N is the ind
c540: 65 78 20 6f 66 20 61 20 77 69 6c 64 63 61 72 64  ex of a wildcard
c550: 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
c560: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 69   statement.  Thi
c570: 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e  s command.** bin
c580: 64 73 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65  ds a 64-bit inte
c590: 67 65 72 20 56 41 4c 55 45 20 74 6f 20 74 68 61  ger VALUE to tha
c5a0: 74 20 77 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73  t wildcard..*/.s
c5b0: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62  tatic int test_b
c5c0: 69 6e 64 5f 64 6f 75 62 6c 65 28 0a 20 20 76 6f  ind_double(.  vo
c5d0: 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
c5e0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
c5f0: 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
c600: 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
c610: 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
c620: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
c630: 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a  tmt;.  int idx;.
c640: 20 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 3b 0a    double value;.
c650: 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28    int rc;..  if(
c660: 20 6f 62 6a 63 21 3d 34 20 29 7b 0a 20 20 20 20   objc!=4 ){.    
c670: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
c680: 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
c690: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
c6a0: 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54  e \"",.        T
c6b0: 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d  cl_GetStringFrom
c6c0: 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c  Obj(objv[0], 0),
c6d0: 20 22 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 22   " STMT N VALUE"
c6e0: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
c6f0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
c700: 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f  .  if( getStmtPo
c710: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
c720: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
c730: 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20  [1]), &pStmt) ) 
c740: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
c750: 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49  ;.  if( Tcl_GetI
c760: 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  ntFromObj(interp
c770: 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 69 64 78 29  , objv[2], &idx)
c780: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
c790: 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47  ROR;.  if( Tcl_G
c7a0: 65 74 44 6f 75 62 6c 65 46 72 6f 6d 4f 62 6a 28  etDoubleFromObj(
c7b0: 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c  interp, objv[3],
c7c0: 20 26 76 61 6c 75 65 29 20 29 20 72 65 74 75 72   &value) ) retur
c7d0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
c7e0: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e  rc = sqlite3_bin
c7f0: 64 5f 64 6f 75 62 6c 65 28 70 53 74 6d 74 2c 20  d_double(pStmt, 
c800: 69 64 78 2c 20 76 61 6c 75 65 29 3b 0a 20 20 69  idx, value);.  i
c810: 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72  f( sqlite3TestEr
c820: 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 53 74  rCode(interp, St
c830: 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 2c 20 72  mtToDb(pStmt), r
c840: 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  c) ) return TCL_
c850: 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 63 21  ERROR;.  if( rc!
c860: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
c870: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
c880: 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72  OR;.  }..  retur
c890: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
c8a0: 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69  ** Usage:   sqli
c8b0: 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 20 20 53  te3_bind_null  S
c8c0: 54 4d 54 20 4e 0a 2a 2a 0a 2a 2a 20 54 65 73 74  TMT N.**.** Test
c8d0: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 62 69 6e   the sqlite3_bin
c8e0: 64 5f 6e 75 6c 6c 20 69 6e 74 65 72 66 61 63 65  d_null interface
c8f0: 2e 20 20 53 54 4d 54 20 69 73 20 61 20 70 72 65  .  STMT is a pre
c900: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e  pared statement.
c910: 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20 69 6e 64  .** N is the ind
c920: 65 78 20 6f 66 20 61 20 77 69 6c 64 63 61 72 64  ex of a wildcard
c930: 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
c940: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 69   statement.  Thi
c950: 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e  s command.** bin
c960: 64 73 20 61 20 4e 55 4c 4c 20 74 6f 20 74 68 65  ds a NULL to the
c970: 20 77 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73 74   wildcard..*/.st
c980: 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69  atic int test_bi
c990: 6e 64 5f 6e 75 6c 6c 28 0a 20 20 76 6f 69 64 20  nd_null(.  void 
c9a0: 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
c9b0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
c9c0: 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
c9d0: 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
c9e0: 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
c9f0: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
ca00: 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 69  ;.  int idx;.  i
ca10: 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62  nt rc;..  if( ob
ca20: 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=3 ){.    Tcl
ca30: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
ca40: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
ca50: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
ca60: 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f  "",.        Tcl_
ca70: 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a  GetStringFromObj
ca80: 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20  (objv[0], 0), " 
ca90: 53 54 4d 54 20 4e 22 2c 20 30 29 3b 0a 20 20 20  STMT N", 0);.   
caa0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
cab0: 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65  R;.  }..  if( ge
cac0: 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74  tStmtPointer(int
cad0: 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
cae0: 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53  ng(objv[1]), &pS
caf0: 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43  tmt) ) return TC
cb00: 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54  L_ERROR;.  if( T
cb10: 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a  cl_GetIntFromObj
cb20: 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d  (interp, objv[2]
cb30: 2c 20 26 69 64 78 29 20 29 20 72 65 74 75 72 6e  , &idx) ) return
cb40: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72   TCL_ERROR;..  r
cb50: 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  c = sqlite3_bind
cb60: 5f 6e 75 6c 6c 28 70 53 74 6d 74 2c 20 69 64 78  _null(pStmt, idx
cb70: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
cb80: 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65  TestErrCode(inte
cb90: 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74  rp, StmtToDb(pSt
cba0: 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74 75 72  mt), rc) ) retur
cbb0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
cbc0: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
cbd0: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54   ){.    return T
cbe0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
cbf0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
cc00: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
cc10: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74    sqlite3_bind_t
cc20: 65 78 74 20 20 53 54 4d 54 20 4e 20 53 54 52 49  ext  STMT N STRI
cc30: 4e 47 20 42 59 54 45 53 0a 2a 2a 0a 2a 2a 20 54  NG BYTES.**.** T
cc40: 65 73 74 20 74 68 65 20 73 71 6c 69 74 65 33 5f  est the sqlite3_
cc50: 62 69 6e 64 5f 74 65 78 74 20 69 6e 74 65 72 66  bind_text interf
cc60: 61 63 65 2e 20 20 53 54 4d 54 20 69 73 20 61 20  ace.  STMT is a 
cc70: 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
cc80: 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20  nt..** N is the 
cc90: 69 6e 64 65 78 20 6f 66 20 61 20 77 69 6c 64 63  index of a wildc
cca0: 61 72 64 20 69 6e 20 74 68 65 20 70 72 65 70 61  ard in the prepa
ccb0: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  red statement.  
ccc0: 54 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20  This command.** 
ccd0: 62 69 6e 64 73 20 61 20 55 54 46 2d 38 20 73 74  binds a UTF-8 st
cce0: 72 69 6e 67 20 53 54 52 49 4e 47 20 74 6f 20 74  ring STRING to t
ccf0: 68 65 20 77 69 6c 64 63 61 72 64 2e 20 20 54 68  he wildcard.  Th
cd00: 65 20 73 74 72 69 6e 67 20 69 73 20 42 59 54 45  e string is BYTE
cd10: 53 20 62 79 74 65 73 0a 2a 2a 20 6c 6f 6e 67 2e  S bytes.** long.
cd20: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
cd30: 65 73 74 5f 62 69 6e 64 5f 74 65 78 74 28 0a 20  est_bind_text(. 
cd40: 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
cd50: 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
cd60: 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
cd70: 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
cd80: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
cd90: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
cda0: 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64  *pStmt;.  int id
cdb0: 78 3b 0a 20 20 69 6e 74 20 62 79 74 65 73 3b 0a  x;.  int bytes;.
cdc0: 20 20 63 68 61 72 20 2a 76 61 6c 75 65 3b 0a 20    char *value;. 
cdd0: 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20   int rc;..  if( 
cde0: 6f 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20 54  objc!=5 ){.    T
cdf0: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
ce00: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
ce10: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
ce20: 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63   \"",.        Tc
ce30: 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f  l_GetStringFromO
ce40: 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20  bj(objv[0], 0), 
ce50: 22 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 20 42  " STMT N VALUE B
ce60: 59 54 45 53 22 2c 20 30 29 3b 0a 20 20 20 20 72  YTES", 0);.    r
ce70: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
ce80: 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53  .  }..  if( getS
ce90: 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tmtPointer(inter
cea0: 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
ceb0: 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d  (objv[1]), &pStm
cec0: 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  t) ) return TCL_
ced0: 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c  ERROR;.  if( Tcl
cee0: 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
cef0: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20  nterp, objv[2], 
cf00: 26 69 64 78 29 20 29 20 72 65 74 75 72 6e 20 54  &idx) ) return T
cf10: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 76 61 6c 75  CL_ERROR;.  valu
cf20: 65 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  e = Tcl_GetStrin
cf30: 67 28 6f 62 6a 76 5b 33 5d 29 3b 0a 20 20 69 66  g(objv[3]);.  if
cf40: 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d  ( Tcl_GetIntFrom
cf50: 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
cf60: 5b 34 5d 2c 20 26 62 79 74 65 73 29 20 29 20 72  [4], &bytes) ) r
cf70: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
cf80: 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ..  rc = sqlite3
cf90: 5f 62 69 6e 64 5f 74 65 78 74 28 70 53 74 6d 74  _bind_text(pStmt
cfa0: 2c 20 69 64 78 2c 20 76 61 6c 75 65 2c 20 62 79  , idx, value, by
cfb0: 74 65 73 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e  tes, SQLITE_TRAN
cfc0: 53 49 45 4e 54 29 3b 0a 20 20 69 66 28 20 73 71  SIENT);.  if( sq
cfd0: 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65  lite3TestErrCode
cfe0: 28 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f 44  (interp, StmtToD
cff0: 62 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29 20  b(pStmt), rc) ) 
d000: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
d010: 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ;.  if( rc!=SQLI
d020: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c  TE_OK ){.    Tcl
d030: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
d040: 74 65 72 70 2c 20 73 71 6c 69 74 65 33 54 65 73  terp, sqlite3Tes
d050: 74 45 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20  tErrorName(rc), 
d060: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
d070: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
d080: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
d090: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
d0a0: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74    sqlite3_bind_t
d0b0: 65 78 74 31 36 20 20 53 54 4d 54 20 4e 20 53 54  ext16  STMT N ST
d0c0: 52 49 4e 47 20 42 59 54 45 53 0a 2a 2a 0a 2a 2a  RING BYTES.**.**
d0d0: 20 54 65 73 74 20 74 68 65 20 73 71 6c 69 74 65   Test the sqlite
d0e0: 33 5f 62 69 6e 64 5f 74 65 78 74 31 36 20 69 6e  3_bind_text16 in
d0f0: 74 65 72 66 61 63 65 2e 20 20 53 54 4d 54 20 69  terface.  STMT i
d100: 73 20 61 20 70 72 65 70 61 72 65 64 20 73 74 61  s a prepared sta
d110: 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20  tement..** N is 
d120: 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20 77  the index of a w
d130: 69 6c 64 63 61 72 64 20 69 6e 20 74 68 65 20 70  ildcard in the p
d140: 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
d150: 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64  t.  This command
d160: 0a 2a 2a 20 62 69 6e 64 73 20 61 20 55 54 46 2d  .** binds a UTF-
d170: 31 36 20 73 74 72 69 6e 67 20 53 54 52 49 4e 47  16 string STRING
d180: 20 74 6f 20 74 68 65 20 77 69 6c 64 63 61 72 64   to the wildcard
d190: 2e 20 20 54 68 65 20 73 74 72 69 6e 67 20 69 73  .  The string is
d1a0: 20 42 59 54 45 53 20 62 79 74 65 73 0a 2a 2a 20   BYTES bytes.** 
d1b0: 6c 6f 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  long..*/.static 
d1c0: 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f 74 65  int test_bind_te
d1d0: 78 74 31 36 28 0a 20 20 76 6f 69 64 20 2a 20 63  xt16(.  void * c
d1e0: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
d1f0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
d200: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
d210: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
d220: 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20  jv[].){.#ifndef 
d230: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
d240: 36 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  6.  sqlite3_stmt
d250: 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69   *pStmt;.  int i
d260: 64 78 3b 0a 20 20 69 6e 74 20 62 79 74 65 73 3b  dx;.  int bytes;
d270: 0a 20 20 63 68 61 72 20 2a 76 61 6c 75 65 3b 0a  .  char *value;.
d280: 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28    int rc;..  if(
d290: 20 6f 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20   objc!=5 ){.    
d2a0: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
d2b0: 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
d2c0: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
d2d0: 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54  e \"",.        T
d2e0: 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d  cl_GetStringFrom
d2f0: 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c  Obj(objv[0], 0),
d300: 20 22 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 20   " STMT N VALUE 
d310: 42 59 54 45 53 22 2c 20 30 29 3b 0a 20 20 20 20  BYTES", 0);.    
d320: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
d330: 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
d340: 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
d350: 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
d360: 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
d370: 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
d380: 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63  _ERROR;.  if( Tc
d390: 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
d3a0: 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c  interp, objv[2],
d3b0: 20 26 69 64 78 29 20 29 20 72 65 74 75 72 6e 20   &idx) ) return 
d3c0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 76 61 6c  TCL_ERROR;.  val
d3d0: 75 65 20 3d 20 28 63 68 61 72 2a 29 54 63 6c 5f  ue = (char*)Tcl_
d3e0: 47 65 74 42 79 74 65 41 72 72 61 79 46 72 6f 6d  GetByteArrayFrom
d3f0: 4f 62 6a 28 6f 62 6a 76 5b 33 5d 2c 20 30 29 3b  Obj(objv[3], 0);
d400: 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e  .  if( Tcl_GetIn
d410: 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
d420: 20 6f 62 6a 76 5b 34 5d 2c 20 26 62 79 74 65 73   objv[4], &bytes
d430: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
d440: 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71  RROR;..  rc = sq
d450: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 31  lite3_bind_text1
d460: 36 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 28 76  6(pStmt, idx, (v
d470: 6f 69 64 20 2a 29 76 61 6c 75 65 2c 20 62 79 74  oid *)value, byt
d480: 65 73 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  es, SQLITE_TRANS
d490: 49 45 4e 54 29 3b 0a 20 20 69 66 28 20 73 71 6c  IENT);.  if( sql
d4a0: 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28  ite3TestErrCode(
d4b0: 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62  interp, StmtToDb
d4c0: 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29 20 72  (pStmt), rc) ) r
d4d0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
d4e0: 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
d4f0: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74 75  E_OK ){.    retu
d500: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
d510: 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  }..#endif /* SQL
d520: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a  ITE_OMIT_UTF16 *
d530: 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  /.  return TCL_O
d540: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
d550: 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e  e:   sqlite3_bin
d560: 64 5f 62 6c 6f 62 20 20 53 54 4d 54 20 4e 20 44  d_blob  STMT N D
d570: 41 54 41 20 42 59 54 45 53 0a 2a 2a 0a 2a 2a 20  ATA BYTES.**.** 
d580: 54 65 73 74 20 74 68 65 20 73 71 6c 69 74 65 33  Test the sqlite3
d590: 5f 62 69 6e 64 5f 62 6c 6f 62 20 69 6e 74 65 72  _bind_blob inter
d5a0: 66 61 63 65 2e 20 20 53 54 4d 54 20 69 73 20 61  face.  STMT is a
d5b0: 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
d5c0: 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20 74 68 65  ent..** N is the
d5d0: 20 69 6e 64 65 78 20 6f 66 20 61 20 77 69 6c 64   index of a wild
d5e0: 63 61 72 64 20 69 6e 20 74 68 65 20 70 72 65 70  card in the prep
d5f0: 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 20  ared statement. 
d600: 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a   This command.**
d610: 20 62 69 6e 64 73 20 61 20 42 4c 4f 42 20 74 6f   binds a BLOB to
d620: 20 74 68 65 20 77 69 6c 64 63 61 72 64 2e 20 20   the wildcard.  
d630: 54 68 65 20 42 4c 4f 42 20 69 73 20 42 59 54 45  The BLOB is BYTE
d640: 53 20 62 79 74 65 73 20 69 6e 20 73 69 7a 65 2e  S bytes in size.
d650: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
d660: 65 73 74 5f 62 69 6e 64 5f 62 6c 6f 62 28 0a 20  est_bind_blob(. 
d670: 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
d680: 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
d690: 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
d6a0: 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
d6b0: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
d6c0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
d6d0: 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64  *pStmt;.  int id
d6e0: 78 3b 0a 20 20 69 6e 74 20 62 79 74 65 73 3b 0a  x;.  int bytes;.
d6f0: 20 20 63 68 61 72 20 2a 76 61 6c 75 65 3b 0a 20    char *value;. 
d700: 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20   int rc;..  if( 
d710: 6f 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20 54  objc!=5 ){.    T
d720: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
d730: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
d740: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
d750: 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63   \"",.        Tc
d760: 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f  l_GetStringFromO
d770: 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20  bj(objv[0], 0), 
d780: 22 20 53 54 4d 54 20 4e 20 44 41 54 41 20 42 59  " STMT N DATA BY
d790: 54 45 53 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  TES", 0);.    re
d7a0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
d7b0: 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74    }..  if( getSt
d7c0: 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  mtPointer(interp
d7d0: 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
d7e0: 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74  objv[1]), &pStmt
d7f0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
d800: 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f  RROR;.  if( Tcl_
d810: 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e  GetIntFromObj(in
d820: 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26  terp, objv[2], &
d830: 69 64 78 29 20 29 20 72 65 74 75 72 6e 20 54 43  idx) ) return TC
d840: 4c 5f 45 52 52 4f 52 3b 0a 20 20 76 61 6c 75 65  L_ERROR;.  value
d850: 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67   = Tcl_GetString
d860: 28 6f 62 6a 76 5b 33 5d 29 3b 0a 20 20 69 66 28  (objv[3]);.  if(
d870: 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f   Tcl_GetIntFromO
d880: 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
d890: 34 5d 2c 20 26 62 79 74 65 73 29 20 29 20 72 65  4], &bytes) ) re
d8a0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
d8b0: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
d8c0: 62 69 6e 64 5f 62 6c 6f 62 28 70 53 74 6d 74 2c  bind_blob(pStmt,
d8d0: 20 69 64 78 2c 20 76 61 6c 75 65 2c 20 62 79 74   idx, value, byt
d8e0: 65 73 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  es, SQLITE_TRANS
d8f0: 49 45 4e 54 29 3b 0a 20 20 69 66 28 20 73 71 6c  IENT);.  if( sql
d900: 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28  ite3TestErrCode(
d910: 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62  interp, StmtToDb
d920: 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29 20 72  (pStmt), rc) ) r
d930: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
d940: 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
d950: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74 75  E_OK ){.    retu
d960: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
d970: 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  }..  return TCL_
d980: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
d990: 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69  ge:   sqlite3_bi
d9a0: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f 75  nd_parameter_cou
d9b0: 6e 74 20 20 53 54 4d 54 0a 2a 2a 0a 2a 2a 20 52  nt  STMT.**.** R
d9c0: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
d9d0: 20 6f 66 20 77 69 6c 64 63 61 72 64 73 20 69 6e   of wildcards in
d9e0: 20 74 68 65 20 67 69 76 65 6e 20 73 74 61 74 65   the given state
d9f0: 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ment..*/.static 
da00: 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f 70 61  int test_bind_pa
da10: 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 28 0a 20  rameter_count(. 
da20: 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
da30: 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
da40: 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
da50: 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
da60: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
da70: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
da80: 2a 70 53 74 6d 74 3b 0a 0a 20 20 69 66 28 20 6f  *pStmt;..  if( o
da90: 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  bjc!=2 ){.    Tc
daa0: 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69  l_WrongNumArgs(i
dab0: 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20  nterp, 1, objv, 
dac0: 22 53 54 4d 54 22 29 3b 0a 20 20 20 20 72 65 74  "STMT");.    ret
dad0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
dae0: 20 7d 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74   }.  if( getStmt
daf0: 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
db00: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
db10: 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20  jv[1]), &pStmt) 
db20: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
db30: 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a  OR;.  Tcl_SetObj
db40: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
db50: 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c  cl_NewIntObj(sql
db60: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
db70: 74 65 72 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29  ter_count(pStmt)
db80: 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ));.  return TCL
db90: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
dba0: 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 62  age:   sqlite3_b
dbb0: 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61  ind_parameter_na
dbc0: 6d 65 20 20 53 54 4d 54 20 20 4e 0a 2a 2a 0a 2a  me  STMT  N.**.*
dbd0: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61 6d  * Return the nam
dbe0: 65 20 6f 66 20 74 68 65 20 4e 74 68 20 77 69 6c  e of the Nth wil
dbf0: 64 63 61 72 64 2e 20 20 54 68 65 20 66 69 72 73  dcard.  The firs
dc00: 74 20 77 69 6c 64 63 61 72 64 20 69 73 20 31 2e  t wildcard is 1.
dc10: 0a 2a 2a 20 41 6e 20 65 6d 70 74 79 20 73 74 72  .** An empty str
dc20: 69 6e 67 20 69 73 20 72 65 74 75 72 6e 65 64 20  ing is returned 
dc30: 69 66 20 4e 20 69 73 20 6f 75 74 20 6f 66 20 72  if N is out of r
dc40: 61 6e 67 65 20 6f 72 20 69 66 20 74 68 65 20 77  ange or if the w
dc50: 69 6c 64 63 61 72 64 0a 2a 2a 20 69 73 20 6e 61  ildcard.** is na
dc60: 6d 65 6c 65 73 73 2e 0a 2a 2f 0a 73 74 61 74 69  meless..*/.stati
dc70: 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f  c int test_bind_
dc80: 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 0a  parameter_name(.
dc90: 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
dca0: 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
dcb0: 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
dcc0: 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
dcd0: 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
dce0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  {.  sqlite3_stmt
dcf0: 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69   *pStmt;.  int i
dd00: 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33  ;..  if( objc!=3
dd10: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e   ){.    Tcl_Wron
dd20: 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c  gNumArgs(interp,
dd30: 20 31 2c 20 6f 62 6a 76 2c 20 22 53 54 4d 54 20   1, objv, "STMT 
dd40: 4e 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  N");.    return 
dd50: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
dd60: 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
dd70: 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
dd80: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
dd90: 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
dda0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
ddb0: 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
ddc0: 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
ddd0: 6f 62 6a 76 5b 32 5d 2c 20 26 69 29 20 29 20 72  objv[2], &i) ) r
dde0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
ddf0: 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  .  Tcl_SetObjRes
de00: 75 6c 74 28 69 6e 74 65 72 70 2c 20 0a 20 20 20  ult(interp, .   
de10: 20 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f    Tcl_NewStringO
de20: 62 6a 28 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  bj(sqlite3_bind_
de30: 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 70  parameter_name(p
de40: 53 74 6d 74 2c 69 29 2c 2d 31 29 0a 20 20 29 3b  Stmt,i),-1).  );
de50: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
de60: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
de70: 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  :   sqlite3_bind
de80: 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78  _parameter_index
de90: 20 20 53 54 4d 54 20 20 4e 41 4d 45 0a 2a 2a 0a    STMT  NAME.**.
dea0: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 69 6e  ** Return the in
deb0: 64 65 78 20 6f 66 20 74 68 65 20 77 69 6c 64 63  dex of the wildc
dec0: 61 72 64 20 63 61 6c 6c 65 64 20 4e 41 4d 45 2e  ard called NAME.
ded0: 20 20 52 65 74 75 72 6e 20 30 20 69 66 20 74 68    Return 0 if th
dee0: 65 72 65 20 69 73 0a 2a 2a 20 6e 6f 20 73 75 63  ere is.** no suc
def0: 68 20 77 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73  h wildcard..*/.s
df00: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62  tatic int test_b
df10: 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e  ind_parameter_in
df20: 64 65 78 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  dex(.  void * cl
df30: 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
df40: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
df50: 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
df60: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
df70: 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
df80: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 0a 20  _stmt *pStmt;.. 
df90: 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a   if( objc!=3 ){.
dfa0: 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d      Tcl_WrongNum
dfb0: 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20  Args(interp, 1, 
dfc0: 6f 62 6a 76 2c 20 22 53 54 4d 54 20 4e 41 4d 45  objv, "STMT NAME
dfd0: 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  ");.    return T
dfe0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
dff0: 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  if( getStmtPoint
e000: 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
e010: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
e020: 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74  ), &pStmt) ) ret
e030: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
e040: 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c   Tcl_SetObjResul
e050: 74 28 69 6e 74 65 72 70 2c 20 0a 20 20 20 20 20  t(interp, .     
e060: 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 0a 20  Tcl_NewIntObj(. 
e070: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69        sqlite3_bi
e080: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64  nd_parameter_ind
e090: 65 78 28 70 53 74 6d 74 2c 54 63 6c 5f 47 65 74  ex(pStmt,Tcl_Get
e0a0: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 29  String(objv[2]))
e0b0: 0a 20 20 20 20 20 29 0a 20 20 29 3b 0a 20 20 72  .     ).  );.  r
e0c0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
e0d0: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20  ./*.** Usage:   
e0e0: 73 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f 62 69  sqlite3_clear_bi
e0f0: 6e 64 69 6e 67 73 20 53 54 4d 54 0a 2a 2a 0a 2a  ndings STMT.**.*
e100: 2f 0a 23 69 66 20 30 0a 73 74 61 74 69 63 20 69  /.#if 0.static i
e110: 6e 74 20 74 65 73 74 5f 63 6c 65 61 72 5f 62 69  nt test_clear_bi
e120: 6e 64 69 6e 67 73 28 0a 20 20 76 6f 69 64 20 2a  ndings(.  void *
e130: 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
e140: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
e150: 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
e160: 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
e170: 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
e180: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
e190: 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20  ..  if( objc!=2 
e1a0: 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67  ){.    Tcl_Wrong
e1b0: 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20  NumArgs(interp, 
e1c0: 31 2c 20 6f 62 6a 76 2c 20 22 53 54 4d 54 22 29  1, objv, "STMT")
e1d0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
e1e0: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
e1f0: 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
e200: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
e210: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
e220: 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
e230: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54  n TCL_ERROR;.  T
e240: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
e250: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49  interp, Tcl_NewI
e260: 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33 5f 63 6c  ntObj(sqlite3_cl
e270: 65 61 72 5f 62 69 6e 64 69 6e 67 73 28 70 53 74  ear_bindings(pSt
e280: 6d 74 29 29 29 3b 0a 20 20 72 65 74 75 72 6e 20  mt)));.  return 
e290: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66  TCL_OK;.}.#endif
e2a0: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
e2b0: 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20 44  qlite3_errcode D
e2c0: 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  B.**.** Return t
e2d0: 68 65 20 73 74 72 69 6e 67 20 72 65 70 72 65 73  he string repres
e2e0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
e2f0: 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 71 6c 69  most recent sqli
e300: 74 65 33 5f 2a 20 41 50 49 0a 2a 2a 20 65 72 72  te3_* API.** err
e310: 6f 72 20 63 6f 64 65 2e 20 65 2e 67 2e 20 22 53  or code. e.g. "S
e320: 51 4c 49 54 45 5f 45 52 52 4f 52 22 2e 0a 2a 2f  QLITE_ERROR"..*/
e330: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
e340: 5f 65 72 72 63 6f 64 65 28 0a 20 20 76 6f 69 64  _errcode(.  void
e350: 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
e360: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
e370: 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
e380: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
e390: 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
e3a0: 6c 69 74 65 33 20 2a 64 62 3b 0a 0a 20 20 69 66  lite3 *db;..  if
e3b0: 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
e3c0: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
e3d0: 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
e3e0: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
e3f0: 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20  be \"", .       
e400: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
e410: 6a 76 5b 30 5d 29 2c 20 22 20 44 42 22 2c 20 30  jv[0]), " DB", 0
e420: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
e430: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
e440: 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
e450: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
e460: 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
e470: 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
e480: 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53  L_ERROR;.  Tcl_S
e490: 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
e4a0: 20 28 63 68 61 72 20 2a 29 65 72 72 6f 72 4e 61   (char *)errorNa
e4b0: 6d 65 28 73 71 6c 69 74 65 33 5f 65 72 72 63 6f  me(sqlite3_errco
e4c0: 64 65 28 64 62 29 29 2c 20 30 29 3b 0a 20 20 72  de(db)), 0);.  r
e4d0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
e4e0: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20  ./*.** Usage:   
e4f0: 74 65 73 74 5f 65 72 72 6d 73 67 20 44 42 0a 2a  test_errmsg DB.*
e500: 2a 0a 2a 2a 20 52 65 74 75 72 6e 73 20 74 68 65  *.** Returns the
e510: 20 55 54 46 2d 38 20 72 65 70 72 65 73 65 6e 74   UTF-8 represent
e520: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 65 72 72  ation of the err
e530: 6f 72 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e  or message strin
e540: 67 20 66 6f 72 20 74 68 65 0a 2a 2a 20 6d 6f 73  g for the.** mos
e550: 74 20 72 65 63 65 6e 74 20 73 71 6c 69 74 65 33  t recent sqlite3
e560: 5f 2a 20 41 50 49 20 63 61 6c 6c 2e 0a 2a 2f 0a  _* API call..*/.
e570: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
e580: 65 72 72 6d 73 67 28 0a 20 20 76 6f 69 64 20 2a  errmsg(.  void *
e590: 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
e5a0: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
e5b0: 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
e5c0: 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
e5d0: 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
e5e0: 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74  te3 *db;.  const
e5f0: 20 63 68 61 72 20 2a 7a 45 72 72 3b 0a 0a 20 20   char *zErr;..  
e600: 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20  if( objc!=2 ){. 
e610: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
e620: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
e630: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
e640: 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20  d be \"", .     
e650: 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28    Tcl_GetString(
e660: 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44 42 22 2c  objv[0]), " DB",
e670: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
e680: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
e690: 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
e6a0: 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
e6b0: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
e6c0: 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
e6d0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 7a 45  TCL_ERROR;..  zE
e6e0: 72 72 20 3d 20 73 71 6c 69 74 65 33 5f 65 72 72  rr = sqlite3_err
e6f0: 6d 73 67 28 64 62 29 3b 0a 20 20 54 63 6c 5f 53  msg(db);.  Tcl_S
e700: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
e710: 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  rp, Tcl_NewStrin
e720: 67 4f 62 6a 28 7a 45 72 72 2c 20 2d 31 29 29 3b  gObj(zErr, -1));
e730: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
e740: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
e750: 3a 20 20 20 74 65 73 74 5f 65 72 72 6d 73 67 31  :   test_errmsg1
e760: 36 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72  6 DB.**.** Retur
e770: 6e 73 20 74 68 65 20 55 54 46 2d 31 36 20 72 65  ns the UTF-16 re
e780: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
e790: 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  the error messag
e7a0: 65 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65  e string for the
e7b0: 0a 2a 2a 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  .** most recent 
e7c0: 73 71 6c 69 74 65 33 5f 2a 20 41 50 49 20 63 61  sqlite3_* API ca
e7d0: 6c 6c 2e 20 54 68 69 73 20 69 73 20 61 20 62 79  ll. This is a by
e7e0: 74 65 20 61 72 72 61 79 20 6f 62 6a 65 63 74 20  te array object 
e7f0: 61 74 20 74 68 65 20 54 43 4c 20 0a 2a 2a 20 6c  at the TCL .** l
e800: 65 76 65 6c 2c 20 61 6e 64 20 69 74 20 69 6e 63  evel, and it inc
e810: 6c 75 64 65 73 20 74 68 65 20 30 78 30 30 20 30  ludes the 0x00 0
e820: 78 30 30 20 74 65 72 6d 69 6e 61 74 6f 72 20 62  x00 terminator b
e830: 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64 20  ytes at the end 
e840: 6f 66 20 74 68 65 0a 2a 2a 20 55 54 46 2d 31 36  of the.** UTF-16
e850: 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 73 74 61 74   string..*/.stat
e860: 69 63 20 69 6e 74 20 74 65 73 74 5f 65 72 72 6d  ic int test_errm
e870: 73 67 31 36 28 0a 20 20 76 6f 69 64 20 2a 20 63  sg16(.  void * c
e880: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
e890: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
e8a0: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
e8b0: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
e8c0: 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20  jv[].){.#ifndef 
e8d0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
e8e0: 36 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  6.  sqlite3 *db;
e8f0: 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a  .  const void *z
e900: 45 72 72 3b 0a 20 20 69 6e 74 20 62 79 74 65 73  Err;.  int bytes
e910: 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32  ;..  if( objc!=2
e920: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
e930: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
e940: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
e950: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a  should be \"", .
e960: 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
e970: 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22  ring(objv[0]), "
e980: 20 44 42 22 2c 20 30 29 3b 0a 20 20 20 20 72 65   DB", 0);.    re
e990: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
e9a0: 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
e9b0: 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
e9c0: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
e9d0: 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65  v[1]), &db) ) re
e9e0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
e9f0: 0a 20 20 7a 45 72 72 20 3d 20 73 71 6c 69 74 65  .  zErr = sqlite
ea00: 33 5f 65 72 72 6d 73 67 31 36 28 64 62 29 3b 0a  3_errmsg16(db);.
ea10: 20 20 62 79 74 65 73 20 3d 20 73 71 6c 69 74 65    bytes = sqlite
ea20: 33 75 74 66 31 36 42 79 74 65 4c 65 6e 28 7a 45  3utf16ByteLen(zE
ea30: 72 72 2c 20 2d 31 29 3b 0a 20 20 54 63 6c 5f 53  rr, -1);.  Tcl_S
ea40: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
ea50: 72 70 2c 20 54 63 6c 5f 4e 65 77 42 79 74 65 41  rp, Tcl_NewByteA
ea60: 72 72 61 79 4f 62 6a 28 7a 45 72 72 2c 20 62 79  rrayObj(zErr, by
ea70: 74 65 73 29 29 3b 0a 23 65 6e 64 69 66 20 2f 2a  tes));.#endif /*
ea80: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
ea90: 31 36 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54  16 */.  return T
eaa0: 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
eab0: 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 70  Usage: sqlite3_p
eac0: 72 65 70 61 72 65 20 44 42 20 73 71 6c 20 62 79  repare DB sql by
ead0: 74 65 73 20 74 61 69 6c 76 61 72 0a 2a 2a 0a 2a  tes tailvar.**.*
eae0: 2a 20 43 6f 6d 70 69 6c 65 20 75 70 20 74 6f 20  * Compile up to 
eaf0: 3c 62 79 74 65 73 3e 20 62 79 74 65 73 20 6f 66  <bytes> bytes of
eb00: 20 74 68 65 20 73 75 70 70 6c 69 65 64 20 53 51   the supplied SQ
eb10: 4c 20 73 74 72 69 6e 67 20 3c 73 71 6c 3e 20 75  L string <sql> u
eb20: 73 69 6e 67 0a 2a 2a 20 64 61 74 61 62 61 73 65  sing.** database
eb30: 20 68 61 6e 64 6c 65 20 3c 44 42 3e 2e 20 54 68   handle <DB>. Th
eb40: 65 20 70 61 72 61 6d 65 74 65 72 20 3c 74 61 69  e parameter <tai
eb50: 6c 76 61 6c 3e 20 69 73 20 74 68 65 20 6e 61 6d  lval> is the nam
eb60: 65 20 6f 66 20 61 20 67 6c 6f 62 61 6c 0a 2a 2a  e of a global.**
eb70: 20 76 61 72 69 61 62 6c 65 20 74 68 61 74 20 69   variable that i
eb80: 73 20 73 65 74 20 74 6f 20 74 68 65 20 75 6e 75  s set to the unu
eb90: 73 65 64 20 70 6f 72 74 69 6f 6e 20 6f 66 20 3c  sed portion of <
eba0: 73 71 6c 3e 20 28 69 66 20 61 6e 79 29 2e 20 41  sql> (if any). A
ebb0: 0a 2a 2a 20 53 54 4d 54 20 68 61 6e 64 6c 65 20  .** STMT handle 
ebc0: 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a  is returned..*/.
ebd0: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
ebe0: 70 72 65 70 61 72 65 28 0a 20 20 76 6f 69 64 20  prepare(.  void 
ebf0: 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
ec00: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
ec10: 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
ec20: 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
ec30: 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
ec40: 69 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73  ite3 *db;.  cons
ec50: 74 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20  t char *zSql;.  
ec60: 69 6e 74 20 62 79 74 65 73 3b 0a 20 20 63 6f 6e  int bytes;.  con
ec70: 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 20 3d  st char *zTail =
ec80: 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74   0;.  sqlite3_st
ec90: 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30 3b 0a 20  mt *pStmt = 0;. 
eca0: 20 63 68 61 72 20 7a 42 75 66 5b 35 30 5d 3b 0a   char zBuf[50];.
ecb0: 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28    int rc;..  if(
ecc0: 20 6f 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20   objc!=5 ){.    
ecd0: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
ece0: 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
ecf0: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
ed00: 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54  e \"", .       T
ed10: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
ed20: 76 5b 30 5d 29 2c 20 22 20 44 42 20 73 71 6c 20  v[0]), " DB sql 
ed30: 62 79 74 65 73 20 74 61 69 6c 76 61 72 22 2c 20  bytes tailvar", 
ed40: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
ed50: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
ed60: 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72  if( getDbPointer
ed70: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
ed80: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
ed90: 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
eda0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 53 71 6c  CL_ERROR;.  zSql
edb0: 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67   = Tcl_GetString
edc0: 28 6f 62 6a 76 5b 32 5d 29 3b 0a 20 20 69 66 28  (objv[2]);.  if(
edd0: 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f   Tcl_GetIntFromO
ede0: 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
edf0: 33 5d 2c 20 26 62 79 74 65 73 29 20 29 20 72 65  3], &bytes) ) re
ee00: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
ee10: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
ee20: 70 72 65 70 61 72 65 28 64 62 2c 20 7a 53 71 6c  prepare(db, zSql
ee30: 2c 20 62 79 74 65 73 2c 20 26 70 53 74 6d 74 2c  , bytes, &pStmt,
ee40: 20 26 7a 54 61 69 6c 29 3b 0a 20 20 69 66 28 20   &zTail);.  if( 
ee50: 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f  sqlite3TestErrCo
ee60: 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72  de(interp, db, r
ee70: 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  c) ) return TCL_
ee80: 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 7a 54 61  ERROR;.  if( zTa
ee90: 69 6c 20 29 7b 0a 20 20 20 20 69 66 28 20 62 79  il ){.    if( by
eea0: 74 65 73 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20  tes>=0 ){.      
eeb0: 62 79 74 65 73 20 3d 20 62 79 74 65 73 20 2d 20  bytes = bytes - 
eec0: 28 7a 54 61 69 6c 2d 7a 53 71 6c 29 3b 0a 20 20  (zTail-zSql);.  
eed0: 20 20 7d 0a 20 20 20 20 54 63 6c 5f 4f 62 6a 53    }.    Tcl_ObjS
eee0: 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 6f  etVar2(interp, o
eef0: 62 6a 76 5b 34 5d 2c 20 30 2c 20 54 63 6c 5f 4e  bjv[4], 0, Tcl_N
ef00: 65 77 53 74 72 69 6e 67 4f 62 6a 28 7a 54 61 69  ewStringObj(zTai
ef10: 6c 2c 20 62 79 74 65 73 29 2c 20 30 29 3b 0a 20  l, bytes), 0);. 
ef20: 20 7d 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c   }.  if( rc!=SQL
ef30: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 61 73  ITE_OK ){.    as
ef40: 73 65 72 74 28 20 70 53 74 6d 74 3d 3d 30 20 29  sert( pStmt==0 )
ef50: 3b 0a 20 20 20 20 73 70 72 69 6e 74 66 28 7a 42  ;.    sprintf(zB
ef60: 75 66 2c 20 22 28 25 64 29 20 22 2c 20 72 63 29  uf, "(%d) ", rc)
ef70: 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  ;.    Tcl_Append
ef80: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a  Result(interp, z
ef90: 42 75 66 2c 20 73 71 6c 69 74 65 33 5f 65 72 72  Buf, sqlite3_err
efa0: 6d 73 67 28 64 62 29 2c 20 30 29 3b 0a 20 20 20  msg(db), 0);.   
efb0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
efc0: 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 53  R;.  }..  if( pS
efd0: 74 6d 74 20 29 7b 0a 20 20 20 20 69 66 28 20 73  tmt ){.    if( s
efe0: 71 6c 69 74 65 33 54 65 73 74 4d 61 6b 65 50 6f  qlite3TestMakePo
eff0: 69 6e 74 65 72 53 74 72 28 69 6e 74 65 72 70 2c  interStr(interp,
f000: 20 7a 42 75 66 2c 20 70 53 74 6d 74 29 20 29 20   zBuf, pStmt) ) 
f010: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
f020: 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  ;.    Tcl_Append
f030: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a  Result(interp, z
f040: 42 75 66 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 72  Buf, 0);.  }.  r
f050: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
f060: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  ./*.** Usage: sq
f070: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 44 42  lite3_prepare DB
f080: 20 73 71 6c 20 62 79 74 65 73 20 74 61 69 6c 76   sql bytes tailv
f090: 61 72 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 69 6c 65  ar.**.** Compile
f0a0: 20 75 70 20 74 6f 20 3c 62 79 74 65 73 3e 20 62   up to <bytes> b
f0b0: 79 74 65 73 20 6f 66 20 74 68 65 20 73 75 70 70  ytes of the supp
f0c0: 6c 69 65 64 20 53 51 4c 20 73 74 72 69 6e 67 20  lied SQL string 
f0d0: 3c 73 71 6c 3e 20 75 73 69 6e 67 0a 2a 2a 20 64  <sql> using.** d
f0e0: 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 3c  atabase handle <
f0f0: 44 42 3e 2e 20 54 68 65 20 70 61 72 61 6d 65 74  DB>. The paramet
f100: 65 72 20 3c 74 61 69 6c 76 61 6c 3e 20 69 73 20  er <tailval> is 
f110: 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 67 6c  the name of a gl
f120: 6f 62 61 6c 0a 2a 2a 20 76 61 72 69 61 62 6c 65  obal.** variable
f130: 20 74 68 61 74 20 69 73 20 73 65 74 20 74 6f 20   that is set to 
f140: 74 68 65 20 75 6e 75 73 65 64 20 70 6f 72 74 69  the unused porti
f150: 6f 6e 20 6f 66 20 3c 73 71 6c 3e 20 28 69 66 20  on of <sql> (if 
f160: 61 6e 79 29 2e 20 41 0a 2a 2a 20 53 54 4d 54 20  any). A.** STMT 
f170: 68 61 6e 64 6c 65 20 69 73 20 72 65 74 75 72 6e  handle is return
f180: 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ed..*/.static in
f190: 74 20 74 65 73 74 5f 70 72 65 70 61 72 65 31 36  t test_prepare16
f1a0: 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
f1b0: 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
f1c0: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
f1d0: 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
f1e0: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
f1f0: 0a 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .){.#ifndef SQLI
f200: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20  TE_OMIT_UTF16.  
f210: 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 63  sqlite3 *db;.  c
f220: 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 53 71 6c 3b  onst void *zSql;
f230: 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a  .  const void *z
f240: 54 61 69 6c 20 3d 20 30 3b 0a 20 20 54 63 6c 5f  Tail = 0;.  Tcl_
f250: 4f 62 6a 20 2a 70 54 61 69 6c 20 3d 20 30 3b 0a  Obj *pTail = 0;.
f260: 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
f270: 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20 63 68 61  pStmt = 0;.  cha
f280: 72 20 7a 42 75 66 5b 35 30 5d 3b 20 0a 20 20 69  r zBuf[50]; .  i
f290: 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20 62 79 74  nt rc;.  int byt
f2a0: 65 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  es;             
f2b0: 20 20 20 2f 2a 20 54 68 65 20 69 6e 74 65 67 65     /* The intege
f2c0: 72 20 73 70 65 63 69 66 69 65 64 20 61 73 20 61  r specified as a
f2d0: 72 67 20 33 20 2a 2f 0a 20 20 69 6e 74 20 6f 62  rg 3 */.  int ob
f2e0: 6a 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20  jlen;           
f2f0: 20 20 20 20 2f 2a 20 54 68 65 20 62 79 74 65 2d      /* The byte-
f300: 61 72 72 61 79 20 6c 65 6e 67 74 68 20 6f 66 20  array length of 
f310: 61 72 67 20 32 20 2a 2f 0a 0a 20 20 69 66 28 20  arg 2 */..  if( 
f320: 6f 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20 54  objc!=5 ){.    T
f330: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
f340: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
f350: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
f360: 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63   \"", .       Tc
f370: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
f380: 5b 30 5d 29 2c 20 22 20 44 42 20 73 71 6c 20 62  [0]), " DB sql b
f390: 79 74 65 73 20 74 61 69 6c 76 61 72 22 2c 20 30  ytes tailvar", 0
f3a0: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
f3b0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
f3c0: 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
f3d0: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
f3e0: 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
f3f0: 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
f400: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 53 71 6c 20  L_ERROR;.  zSql 
f410: 3d 20 54 63 6c 5f 47 65 74 42 79 74 65 41 72 72  = Tcl_GetByteArr
f420: 61 79 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 32  ayFromObj(objv[2
f430: 5d 2c 20 26 6f 62 6a 6c 65 6e 29 3b 0a 20 20 69  ], &objlen);.  i
f440: 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f  f( Tcl_GetIntFro
f450: 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
f460: 76 5b 33 5d 2c 20 26 62 79 74 65 73 29 20 29 20  v[3], &bytes) ) 
f470: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
f480: 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  ;..  rc = sqlite
f490: 33 5f 70 72 65 70 61 72 65 31 36 28 64 62 2c 20  3_prepare16(db, 
f4a0: 7a 53 71 6c 2c 20 62 79 74 65 73 2c 20 26 70 53  zSql, bytes, &pS
f4b0: 74 6d 74 2c 20 26 7a 54 61 69 6c 29 3b 0a 20 20  tmt, &zTail);.  
f4c0: 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45  if( sqlite3TestE
f4d0: 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64  rrCode(interp, d
f4e0: 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20  b, rc) ) return 
f4f0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  TCL_ERROR;.  if(
f500: 20 72 63 20 29 7b 0a 20 20 20 20 72 65 74 75 72   rc ){.    retur
f510: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
f520: 0a 0a 20 20 69 66 28 20 7a 54 61 69 6c 20 29 7b  ..  if( zTail ){
f530: 0a 20 20 20 20 6f 62 6a 6c 65 6e 20 3d 20 6f 62  .    objlen = ob
f540: 6a 6c 65 6e 20 2d 20 28 28 75 38 20 2a 29 7a 54  jlen - ((u8 *)zT
f550: 61 69 6c 2d 28 75 38 20 2a 29 7a 53 71 6c 29 3b  ail-(u8 *)zSql);
f560: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6f 62  .  }else{.    ob
f570: 6a 6c 65 6e 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  jlen = 0;.  }.  
f580: 70 54 61 69 6c 20 3d 20 54 63 6c 5f 4e 65 77 42  pTail = Tcl_NewB
f590: 79 74 65 41 72 72 61 79 4f 62 6a 28 28 75 38 20  yteArrayObj((u8 
f5a0: 2a 29 7a 54 61 69 6c 2c 20 6f 62 6a 6c 65 6e 29  *)zTail, objlen)
f5b0: 3b 0a 20 20 54 63 6c 5f 49 6e 63 72 52 65 66 43  ;.  Tcl_IncrRefC
f5c0: 6f 75 6e 74 28 70 54 61 69 6c 29 3b 0a 20 20 54  ount(pTail);.  T
f5d0: 63 6c 5f 4f 62 6a 53 65 74 56 61 72 32 28 69 6e  cl_ObjSetVar2(in
f5e0: 74 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 30  terp, objv[4], 0
f5f0: 2c 20 70 54 61 69 6c 2c 20 30 29 3b 0a 20 20 54  , pTail, 0);.  T
f600: 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28  cl_DecrRefCount(
f610: 70 54 61 69 6c 29 3b 0a 0a 20 20 69 66 28 20 70  pTail);..  if( p
f620: 53 74 6d 74 20 29 7b 0a 20 20 20 20 69 66 28 20  Stmt ){.    if( 
f630: 73 71 6c 69 74 65 33 54 65 73 74 4d 61 6b 65 50  sqlite3TestMakeP
f640: 6f 69 6e 74 65 72 53 74 72 28 69 6e 74 65 72 70  ointerStr(interp
f650: 2c 20 7a 42 75 66 2c 20 70 53 74 6d 74 29 20 29  , zBuf, pStmt) )
f660: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
f670: 52 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 41 70 70  R;.  }.  Tcl_App
f680: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
f690: 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 23 65 6e 64  , zBuf, 0);.#end
f6a0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
f6b0: 54 5f 55 54 46 31 36 20 2a 2f 0a 20 20 72 65 74  T_UTF16 */.  ret
f6c0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
f6d0: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69  *.** Usage: sqli
f6e0: 74 65 33 5f 6f 70 65 6e 20 66 69 6c 65 6e 61 6d  te3_open filenam
f6f0: 65 20 3f 6f 70 74 69 6f 6e 73 2d 6c 69 73 74 3f  e ?options-list?
f700: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
f710: 65 73 74 5f 6f 70 65 6e 28 0a 20 20 76 6f 69 64  est_open(.  void
f720: 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
f730: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
f740: 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
f750: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
f760: 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 63 6f  T objv[].){.  co
f770: 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e  nst char *zFilen
f780: 61 6d 65 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a  ame;.  sqlite3 *
f790: 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  db;.  int rc;.  
f7a0: 63 68 61 72 20 7a 42 75 66 5b 31 30 30 5d 3b 0a  char zBuf[100];.
f7b0: 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 26  .  if( objc!=3 &
f7c0: 26 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  & objc!=2 ){.   
f7d0: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
f7e0: 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
f7f0: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
f800: 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20  be \"", .       
f810: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
f820: 6a 76 5b 30 5d 29 2c 20 22 20 66 69 6c 65 6e 61  jv[0]), " filena
f830: 6d 65 20 6f 70 74 69 6f 6e 73 2d 6c 69 73 74 22  me options-list"
f840: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
f850: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
f860: 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 54  .  zFilename = T
f870: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
f880: 76 5b 31 5d 29 3b 0a 20 20 72 63 20 3d 20 73 71  v[1]);.  rc = sq
f890: 6c 69 74 65 33 5f 6f 70 65 6e 28 7a 46 69 6c 65  lite3_open(zFile
f8a0: 6e 61 6d 65 2c 20 26 64 62 29 3b 0a 20 20 0a 20  name, &db);.  . 
f8b0: 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74   if( sqlite3Test
f8c0: 4d 61 6b 65 50 6f 69 6e 74 65 72 53 74 72 28 69  MakePointerStr(i
f8d0: 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 64 62 29  nterp, zBuf, db)
f8e0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
f8f0: 52 4f 52 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e  ROR;.  Tcl_Appen
f900: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
f910: 7a 42 75 66 2c 20 30 29 3b 0a 20 20 72 65 74 75  zBuf, 0);.  retu
f920: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
f930: 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
f940: 65 33 5f 6f 70 65 6e 31 36 20 66 69 6c 65 6e 61  e3_open16 filena
f950: 6d 65 20 6f 70 74 69 6f 6e 73 0a 2a 2f 0a 73 74  me options.*/.st
f960: 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 6f 70  atic int test_op
f970: 65 6e 31 36 28 0a 20 20 76 6f 69 64 20 2a 20 63  en16(.  void * c
f980: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
f990: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
f9a0: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
f9b0: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
f9c0: 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20  jv[].){.#ifndef 
f9d0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
f9e0: 36 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  6.  const void *
f9f0: 7a 46 69 6c 65 6e 61 6d 65 3b 0a 20 20 73 71 6c  zFilename;.  sql
fa00: 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20  ite3 *db;.  int 
fa10: 72 63 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b  rc;.  char zBuf[
fa20: 31 30 30 5d 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  100];..  if( obj
fa30: 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
fa40: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
fa50: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
fa60: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
fa70: 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
fa80: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
fa90: 29 2c 20 22 20 66 69 6c 65 6e 61 6d 65 20 6f 70  ), " filename op
faa0: 74 69 6f 6e 73 2d 6c 69 73 74 22 2c 20 30 29 3b  tions-list", 0);
fab0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
fac0: 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 7a 46  ERROR;.  }..  zF
fad0: 69 6c 65 6e 61 6d 65 20 3d 20 54 63 6c 5f 47 65  ilename = Tcl_Ge
fae0: 74 42 79 74 65 41 72 72 61 79 46 72 6f 6d 4f 62  tByteArrayFromOb
faf0: 6a 28 6f 62 6a 76 5b 31 5d 2c 20 30 29 3b 0a 20  j(objv[1], 0);. 
fb00: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 6f 70   rc = sqlite3_op
fb10: 65 6e 31 36 28 7a 46 69 6c 65 6e 61 6d 65 2c 20  en16(zFilename, 
fb20: 26 64 62 29 3b 0a 20 20 0a 20 20 69 66 28 20 73  &db);.  .  if( s
fb30: 71 6c 69 74 65 33 54 65 73 74 4d 61 6b 65 50 6f  qlite3TestMakePo
fb40: 69 6e 74 65 72 53 74 72 28 69 6e 74 65 72 70 2c  interStr(interp,
fb50: 20 7a 42 75 66 2c 20 64 62 29 20 29 20 72 65 74   zBuf, db) ) ret
fb60: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
fb70: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
fb80: 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20  t(interp, zBuf, 
fb90: 30 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  0);.#endif /* SQ
fba0: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
fbb0: 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  */.  return TCL_
fbc0: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
fbd0: 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70  ge: sqlite3_comp
fbe0: 6c 65 74 65 31 36 20 3c 55 54 46 2d 31 36 20 73  lete16 <UTF-16 s
fbf0: 74 72 69 6e 67 3e 0a 2a 2a 0a 2a 2a 20 52 65 74  tring>.**.** Ret
fc00: 75 72 6e 20 31 20 69 66 20 74 68 65 20 73 75 70  urn 1 if the sup
fc10: 70 6c 69 65 64 20 61 72 67 75 6d 65 6e 74 20 69  plied argument i
fc20: 73 20 61 20 63 6f 6d 70 6c 65 74 65 20 53 51 4c  s a complete SQL
fc30: 20 73 74 61 74 65 6d 65 6e 74 2c 20 6f 72 20 7a   statement, or z
fc40: 65 72 6f 0a 2a 2a 20 6f 74 68 65 72 77 69 73 65  ero.** otherwise
fc50: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
fc60: 74 65 73 74 5f 63 6f 6d 70 6c 65 74 65 31 36 28  test_complete16(
fc70: 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
fc80: 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
fc90: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
fca0: 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
fcb0: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
fcc0: 29 7b 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  ){.#if !defined(
fcd0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50  SQLITE_OMIT_COMP
fce0: 4c 45 54 45 29 20 26 26 20 21 64 65 66 69 6e 65  LETE) && !define
fcf0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  d(SQLITE_OMIT_UT
fd00: 46 31 36 29 0a 20 20 63 68 61 72 20 2a 7a 42 75  F16).  char *zBu
fd10: 66 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  f;..  if( objc!=
fd20: 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f  2 ){.    Tcl_Wro
fd30: 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
fd40: 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 3c 75 74 66  , 1, objv, "<utf
fd50: 2d 31 36 20 73 71 6c 3e 22 29 3b 0a 20 20 20 20  -16 sql>");.    
fd60: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
fd70: 3b 0a 20 20 7d 0a 0a 20 20 7a 42 75 66 20 3d 20  ;.  }..  zBuf = 
fd80: 28 63 68 61 72 2a 29 54 63 6c 5f 47 65 74 42 79  (char*)Tcl_GetBy
fd90: 74 65 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28 6f  teArrayFromObj(o
fda0: 62 6a 76 5b 31 5d 2c 20 30 29 3b 0a 20 20 54 63  bjv[1], 0);.  Tc
fdb0: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
fdc0: 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e  nterp, Tcl_NewIn
fdd0: 74 4f 62 6a 28 73 71 6c 69 74 65 33 5f 63 6f 6d  tObj(sqlite3_com
fde0: 70 6c 65 74 65 31 36 28 7a 42 75 66 29 29 29 3b  plete16(zBuf)));
fdf0: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
fe00: 45 5f 4f 4d 49 54 5f 43 4f 4d 50 4c 45 54 45 20  E_OMIT_COMPLETE 
fe10: 26 26 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  && SQLITE_OMIT_U
fe20: 54 46 31 36 20 2a 2f 0a 20 20 72 65 74 75 72 6e  TF16 */.  return
fe30: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
fe40: 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33  * Usage: sqlite3
fe50: 5f 73 74 65 70 20 53 54 4d 54 0a 2a 2a 0a 2a 2a  _step STMT.**.**
fe60: 20 41 64 76 61 6e 63 65 20 74 68 65 20 73 74 61   Advance the sta
fe70: 74 65 6d 65 6e 74 20 74 6f 20 74 68 65 20 6e 65  tement to the ne
fe80: 78 74 20 72 6f 77 2e 0a 2a 2f 0a 73 74 61 74 69  xt row..*/.stati
fe90: 63 20 69 6e 74 20 74 65 73 74 5f 73 74 65 70 28  c int test_step(
fea0: 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
feb0: 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
fec0: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
fed0: 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
fee0: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
fef0: 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
ff00: 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20  t *pStmt;.  int 
ff10: 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  rc;..  if( objc!
ff20: 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =2 ){.    Tcl_Ap
ff30: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
ff40: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
ff50: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
ff60: 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74   .       Tcl_Get
ff70: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c  String(objv[0]),
ff80: 20 22 20 53 54 4d 54 22 2c 20 30 29 3b 0a 20 20   " STMT", 0);.  
ff90: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
ffa0: 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67  OR;.  }..  if( g
ffb0: 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e  etStmtPointer(in
ffc0: 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
ffd0: 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70  ing(objv[1]), &p
ffe0: 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
fff0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d  CL_ERROR;.  rc =
10000 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53   sqlite3_step(pS
10010 74 6d 74 29 3b 0a 0a 20 20 2f 2a 20 69 66 28 20  tmt);..  /* if( 
10020 72 63 21 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20  rc!=SQLITE_DONE 
10030 26 26 20 72 63 21 3d 53 51 4c 49 54 45 5f 52 4f  && rc!=SQLITE_RO
10040 57 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  W ) return TCL_E
10050 52 52 4f 52 3b 20 2a 2f 0a 20 20 54 63 6c 5f 53  RROR; */.  Tcl_S
10060 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
10070 20 28 63 68 61 72 20 2a 29 65 72 72 6f 72 4e 61   (char *)errorNa
10080 6d 65 28 72 63 29 2c 20 30 29 3b 0a 20 20 72 65  me(rc), 0);.  re
10090 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
100a0 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  /*.** Usage: sql
100b0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e  ite3_column_coun
100c0 74 20 53 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 52 65  t STMT .**.** Re
100d0 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  turn the number 
100e0 6f 66 20 63 6f 6c 75 6d 6e 73 20 72 65 74 75 72  of columns retur
100f0 6e 65 64 20 62 79 20 74 68 65 20 73 71 6c 20 73  ned by the sql s
10100 74 61 74 65 6d 65 6e 74 20 53 54 4d 54 2e 0a 2a  tatement STMT..*
10110 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
10120 74 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 0a  t_column_count(.
10130 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
10140 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
10150 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
10160 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
10170 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
10180 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  {.  sqlite3_stmt
10190 20 2a 70 53 74 6d 74 3b 0a 0a 20 20 69 66 28 20   *pStmt;..  if( 
101a0 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  objc!=2 ){.    T
101b0 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
101c0 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
101d0 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
101e0 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63   \"", .       Tc
101f0 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
10200 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c  [0]), " STMT col
10210 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  umn", 0);.    re
10220 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
10230 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74    }..  if( getSt
10240 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  mtPointer(interp
10250 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
10260 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74  objv[1]), &pStmt
10270 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
10280 52 52 4f 52 3b 0a 0a 20 20 54 63 6c 5f 53 65 74  RROR;..  Tcl_Set
10290 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
102a0 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28  , Tcl_NewIntObj(
102b0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63  sqlite3_column_c
102c0 6f 75 6e 74 28 70 53 74 6d 74 29 29 29 3b 0a 20  ount(pStmt)));. 
102d0 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
102e0 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
102f0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
10300 79 70 65 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a  ype STMT column.
10310 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  **.** Return the
10320 20 74 79 70 65 20 6f 66 20 74 68 65 20 64 61 74   type of the dat
10330 61 20 69 6e 20 63 6f 6c 75 6d 6e 20 27 63 6f 6c  a in column 'col
10340 75 6d 6e 27 20 6f 66 20 74 68 65 20 63 75 72 72  umn' of the curr
10350 65 6e 74 20 72 6f 77 2e 0a 2a 2f 0a 73 74 61 74  ent row..*/.stat
10360 69 63 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c 75  ic int test_colu
10370 6d 6e 5f 74 79 70 65 28 0a 20 20 76 6f 69 64 20  mn_type(.  void 
10380 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
10390 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
103a0 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
103b0 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
103c0 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
103d0 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
103e0 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a 20 20 69  ;.  int col;.  i
103f0 6e 74 20 74 70 3b 0a 0a 20 20 69 66 28 20 6f 62  nt tp;..  if( ob
10400 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=3 ){.    Tcl
10410 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
10420 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
10430 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
10440 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f  "", .       Tcl_
10450 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30  GetString(objv[0
10460 5d 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d  ]), " STMT colum
10470 6e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  n", 0);.    retu
10480 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
10490 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74  }..  if( getStmt
104a0 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
104b0 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
104c0 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20  jv[1]), &pStmt) 
104d0 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
104e0 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65  OR;.  if( Tcl_Ge
104f0 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65  tIntFromObj(inte
10500 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f  rp, objv[2], &co
10510 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  l) ) return TCL_
10520 45 52 52 4f 52 3b 0a 0a 20 20 74 70 20 3d 20 73  ERROR;..  tp = s
10530 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79  qlite3_column_ty
10540 70 65 28 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a  pe(pStmt, col);.
10550 20 20 73 77 69 74 63 68 28 20 74 70 20 29 7b 0a    switch( tp ){.
10560 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
10570 49 4e 54 45 47 45 52 3a 20 0a 20 20 20 20 20 20  INTEGER: .      
10580 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
10590 74 65 72 70 2c 20 22 49 4e 54 45 47 45 52 22 2c  terp, "INTEGER",
105a0 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 20 0a 20   TCL_STATIC); . 
105b0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
105c0 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  case SQLITE_NULL
105d0 3a 0a 20 20 20 20 20 20 54 63 6c 5f 53 65 74 52  :.      Tcl_SetR
105e0 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 4e  esult(interp, "N
105f0 55 4c 4c 22 2c 20 54 43 4c 5f 53 54 41 54 49 43  ULL", TCL_STATIC
10600 29 3b 20 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  ); .      break;
10610 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
10620 5f 46 4c 4f 41 54 3a 0a 20 20 20 20 20 20 54 63  _FLOAT:.      Tc
10630 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65  l_SetResult(inte
10640 72 70 2c 20 22 46 4c 4f 41 54 22 2c 20 54 43 4c  rp, "FLOAT", TCL
10650 5f 53 54 41 54 49 43 29 3b 20 0a 20 20 20 20 20  _STATIC); .     
10660 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
10670 20 53 51 4c 49 54 45 5f 54 45 58 54 3a 0a 20 20   SQLITE_TEXT:.  
10680 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c      Tcl_SetResul
10690 74 28 69 6e 74 65 72 70 2c 20 22 54 45 58 54 22  t(interp, "TEXT"
106a0 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 20 0a  , TCL_STATIC); .
106b0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
106c0 20 63 61 73 65 20 53 51 4c 49 54 45 5f 42 4c 4f   case SQLITE_BLO
106d0 42 3a 0a 20 20 20 20 20 20 54 63 6c 5f 53 65 74  B:.      Tcl_Set
106e0 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
106f0 42 4c 4f 42 22 2c 20 54 43 4c 5f 53 54 41 54 49  BLOB", TCL_STATI
10700 43 29 3b 20 0a 20 20 20 20 20 20 62 72 65 61 6b  C); .      break
10710 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 0a 20  ;.    default:. 
10720 20 20 20 20 20 61 73 73 65 72 74 28 30 29 3b 0a       assert(0);.
10730 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54 43    }..  return TC
10740 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
10750 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f  sage: sqlite3_co
10760 6c 75 6d 6e 5f 69 6e 74 36 34 20 53 54 4d 54 20  lumn_int64 STMT 
10770 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 52 65 74  column.**.** Ret
10780 75 72 6e 20 74 68 65 20 64 61 74 61 20 69 6e 20  urn the data in 
10790 63 6f 6c 75 6d 6e 20 27 63 6f 6c 75 6d 6e 27 20  column 'column' 
107a0 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  of the current r
107b0 6f 77 20 63 61 73 74 20 61 73 20 61 6e 0a 2a 2a  ow cast as an.**
107c0 20 77 69 64 65 20 28 36 34 2d 62 69 74 29 20 69   wide (64-bit) i
107d0 6e 74 65 67 65 72 2e 0a 2a 2f 0a 73 74 61 74 69  nteger..*/.stati
107e0 63 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c 75 6d  c int test_colum
107f0 6e 5f 69 6e 74 36 34 28 0a 20 20 76 6f 69 64 20  n_int64(.  void 
10800 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
10810 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
10820 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
10830 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
10840 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
10850 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
10860 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a 20 20 69  ;.  int col;.  i
10870 36 34 20 69 56 61 6c 3b 0a 0a 20 20 69 66 28 20  64 iVal;..  if( 
10880 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54  objc!=3 ){.    T
10890 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
108a0 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
108b0 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
108c0 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63   \"", .       Tc
108d0 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
108e0 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c  [0]), " STMT col
108f0 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  umn", 0);.    re
10900 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
10910 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74    }..  if( getSt
10920 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  mtPointer(interp
10930 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
10940 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74  objv[1]), &pStmt
10950 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
10960 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f  RROR;.  if( Tcl_
10970 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e  GetIntFromObj(in
10980 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26  terp, objv[2], &
10990 63 6f 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43  col) ) return TC
109a0 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 69 56 61 6c  L_ERROR;..  iVal
109b0 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d   = sqlite3_colum
109c0 6e 5f 69 6e 74 36 34 28 70 53 74 6d 74 2c 20 63  n_int64(pStmt, c
109d0 6f 6c 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62  ol);.  Tcl_SetOb
109e0 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
109f0 54 63 6c 5f 4e 65 77 57 69 64 65 49 6e 74 4f 62  Tcl_NewWideIntOb
10a00 6a 28 69 56 61 6c 29 29 3b 0a 20 20 72 65 74 75  j(iVal));.  retu
10a10 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
10a20 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
10a30 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 20 53  e3_column_blob S
10a40 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2f 0a 73 74  TMT column.*/.st
10a50 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63 6f  atic int test_co
10a60 6c 75 6d 6e 5f 62 6c 6f 62 28 0a 20 20 76 6f 69  lumn_blob(.  voi
10a70 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
10a80 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
10a90 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
10aa0 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
10ab0 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73  ST objv[].){.  s
10ac0 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
10ad0 6d 74 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a 0a  mt;.  int col;..
10ae0 20 20 69 6e 74 20 6c 65 6e 3b 0a 20 20 63 6f 6e    int len;.  con
10af0 73 74 20 76 6f 69 64 20 2a 70 42 6c 6f 62 3b 0a  st void *pBlob;.
10b00 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29  .  if( objc!=3 )
10b10 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
10b20 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
10b30 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
10b40 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20  ould be \"", .  
10b50 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
10b60 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53  ng(objv[0]), " S
10b70 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b  TMT column", 0);
10b80 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
10b90 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66  ERROR;.  }..  if
10ba0 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
10bb0 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
10bc0 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
10bd0 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
10be0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
10bf0 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f  f( Tcl_GetIntFro
10c00 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
10c10 76 5b 32 5d 2c 20 26 63 6f 6c 29 20 29 20 72 65  v[2], &col) ) re
10c20 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
10c30 0a 20 20 70 42 6c 6f 62 20 3d 20 73 71 6c 69 74  .  pBlob = sqlit
10c40 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 70  e3_column_blob(p
10c50 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20 6c 65  Stmt, col);.  le
10c60 6e 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  n = sqlite3_colu
10c70 6d 6e 5f 62 79 74 65 73 28 70 53 74 6d 74 2c 20  mn_bytes(pStmt, 
10c80 63 6f 6c 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f  col);.  Tcl_SetO
10c90 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
10ca0 20 54 63 6c 5f 4e 65 77 42 79 74 65 41 72 72 61   Tcl_NewByteArra
10cb0 79 4f 62 6a 28 70 42 6c 6f 62 2c 20 6c 65 6e 29  yObj(pBlob, len)
10cc0 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
10cd0 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
10ce0 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ge: sqlite3_colu
10cf0 6d 6e 5f 64 6f 75 62 6c 65 20 53 54 4d 54 20 63  mn_double STMT c
10d00 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 52 65 74 75  olumn.**.** Retu
10d10 72 6e 20 74 68 65 20 64 61 74 61 20 69 6e 20 63  rn the data in c
10d20 6f 6c 75 6d 6e 20 27 63 6f 6c 75 6d 6e 27 20 6f  olumn 'column' o
10d30 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f  f the current ro
10d40 77 20 63 61 73 74 20 61 73 20 61 20 64 6f 75 62  w cast as a doub
10d50 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  le..*/.static in
10d60 74 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 64 6f  t test_column_do
10d70 75 62 6c 65 28 0a 20 20 76 6f 69 64 20 2a 20 63  uble(.  void * c
10d80 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
10d90 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
10da0 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
10db0 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
10dc0 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
10dd0 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
10de0 20 69 6e 74 20 63 6f 6c 3b 0a 20 20 64 6f 75 62   int col;.  doub
10df0 6c 65 20 72 56 61 6c 3b 0a 0a 20 20 69 66 28 20  le rVal;..  if( 
10e00 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54  objc!=3 ){.    T
10e10 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
10e20 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
10e30 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
10e40 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63   \"", .       Tc
10e50 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
10e60 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c  [0]), " STMT col
10e70 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  umn", 0);.    re
10e80 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
10e90 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74    }..  if( getSt
10ea0 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  mtPointer(interp
10eb0 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
10ec0 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74  objv[1]), &pStmt
10ed0 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
10ee0 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f  RROR;.  if( Tcl_
10ef0 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e  GetIntFromObj(in
10f00 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26  terp, objv[2], &
10f10 63 6f 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43  col) ) return TC
10f20 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 56 61 6c  L_ERROR;..  rVal
10f30 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d   = sqlite3_colum
10f40 6e 5f 64 6f 75 62 6c 65 28 70 53 74 6d 74 2c 20  n_double(pStmt, 
10f50 63 6f 6c 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f  col);.  Tcl_SetO
10f60 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
10f70 20 54 63 6c 5f 4e 65 77 44 6f 75 62 6c 65 4f 62   Tcl_NewDoubleOb
10f80 6a 28 72 56 61 6c 29 29 3b 0a 20 20 72 65 74 75  j(rVal));.  retu
10f90 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
10fa0 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
10fb0 65 33 5f 64 61 74 61 5f 63 6f 75 6e 74 20 53 54  e3_data_count ST
10fc0 4d 54 20 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e  MT .**.** Return
10fd0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
10fe0 6f 6c 75 6d 6e 73 20 72 65 74 75 72 6e 65 64 20  olumns returned 
10ff0 62 79 20 74 68 65 20 73 71 6c 20 73 74 61 74 65  by the sql state
11000 6d 65 6e 74 20 53 54 4d 54 2e 0a 2a 2f 0a 73 74  ment STMT..*/.st
11010 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 64 61  atic int test_da
11020 74 61 5f 63 6f 75 6e 74 28 0a 20 20 76 6f 69 64  ta_count(.  void
11030 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
11040 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
11050 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
11060 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
11070 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
11080 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
11090 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  t;..  if( objc!=
110a0 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  2 ){.    Tcl_App
110b0 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
110c0 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
110d0 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
110e0 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  .       Tcl_GetS
110f0 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20  tring(objv[0]), 
11100 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20  " STMT column", 
11110 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
11120 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
11130 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
11140 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
11150 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
11160 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
11170 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
11180 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  .  Tcl_SetObjRes
11190 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
111a0 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65  NewIntObj(sqlite
111b0 33 5f 64 61 74 61 5f 63 6f 75 6e 74 28 70 53 74  3_data_count(pSt
111c0 6d 74 29 29 29 3b 0a 20 20 72 65 74 75 72 6e 20  mt)));.  return 
111d0 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
111e0 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
111f0 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 53 54 4d 54  column_text STMT
11200 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73   column.**.** Us
11210 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c  age: sqlite3_col
11220 75 6d 6e 5f 64 65 63 6c 74 79 70 65 20 53 54 4d  umn_decltype STM
11230 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55  T column.**.** U
11240 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f  sage: sqlite3_co
11250 6c 75 6d 6e 5f 6e 61 6d 65 20 53 54 4d 54 20 63  lumn_name STMT c
11260 6f 6c 75 6d 6e 0a 2a 2f 0a 73 74 61 74 69 63 20  olumn.*/.static 
11270 69 6e 74 20 74 65 73 74 5f 73 74 6d 74 5f 75 74  int test_stmt_ut
11280 66 38 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  f8(.  void * cli
11290 65 6e 74 44 61 74 61 2c 20 20 20 20 20 20 20 20  entData,        
112a0 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 53 51  /* Pointer to SQ
112b0 4c 69 74 65 20 41 50 49 20 66 75 6e 63 74 69 6f  Lite API functio
112c0 6e 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 20 2a  n to be invoke *
112d0 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  /.  Tcl_Interp *
112e0 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
112f0 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
11300 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
11310 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
11320 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b  Stmt;.  int col;
11330 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 28  .  const char *(
11340 2a 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f  *xFunc)(sqlite3_
11350 73 74 6d 74 2a 2c 20 69 6e 74 29 20 3d 20 63 6c  stmt*, int) = cl
11360 69 65 6e 74 44 61 74 61 3b 0a 20 20 63 6f 6e 73  ientData;.  cons
11370 74 20 63 68 61 72 20 2a 7a 52 65 74 3b 0a 0a 20  t char *zRet;.. 
11380 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a   if( objc!=3 ){.
11390 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
113a0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
113b0 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
113c0 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20  ld be \"", .    
113d0 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
113e0 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d  (objv[0]), " STM
113f0 54 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20  T column", 0);. 
11400 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
11410 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  ROR;.  }..  if( 
11420 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69  getStmtPointer(i
11430 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
11440 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
11450 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20  pStmt) ) return 
11460 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  TCL_ERROR;.  if(
11470 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f   Tcl_GetIntFromO
11480 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
11490 32 5d 2c 20 26 63 6f 6c 29 20 29 20 72 65 74 75  2], &col) ) retu
114a0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
114b0 7a 52 65 74 20 3d 20 78 46 75 6e 63 28 70 53 74  zRet = xFunc(pSt
114c0 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20 69 66 28 20  mt, col);.  if( 
114d0 7a 52 65 74 20 29 7b 0a 20 20 20 20 54 63 6c 5f  zRet ){.    Tcl_
114e0 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70  SetResult(interp
114f0 2c 20 28 63 68 61 72 20 2a 29 7a 52 65 74 2c 20  , (char *)zRet, 
11500 30 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  0);.  }.  return
11510 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 73 74 61 74   TCL_OK;.}..stat
11520 69 63 20 69 6e 74 20 74 65 73 74 5f 67 6c 6f 62  ic int test_glob
11530 61 6c 5f 72 65 63 6f 76 65 72 28 0a 20 20 76 6f  al_recover(.  vo
11540 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
11550 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
11560 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
11570 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
11580 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69  NST objv[].){.#i
11590 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
115a0 54 5f 47 4c 4f 42 41 4c 52 45 43 4f 56 45 52 0a  T_GLOBALRECOVER.
115b0 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 66 28 20    int rc;.  if( 
115c0 6f 62 6a 63 21 3d 31 20 29 7b 0a 20 20 20 20 54  objc!=1 ){.    T
115d0 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28  cl_WrongNumArgs(
115e0 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c  interp, 1, objv,
115f0 20 22 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e   "");.    return
11600 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
11610 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 67    rc = sqlite3_g
11620 6c 6f 62 61 6c 5f 72 65 63 6f 76 65 72 28 29 3b  lobal_recover();
11630 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74  .  Tcl_SetResult
11640 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a  (interp, (char *
11650 29 65 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20  )errorName(rc), 
11660 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 23 65 6e  TCL_STATIC);.#en
11670 64 69 66 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  dif.  return TCL
11680 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
11690 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c  age: sqlite3_col
116a0 75 6d 6e 5f 74 65 78 74 20 53 54 4d 54 20 63 6f  umn_text STMT co
116b0 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65  lumn.**.** Usage
116c0 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  : sqlite3_column
116d0 5f 64 65 63 6c 74 79 70 65 20 53 54 4d 54 20 63  _decltype STMT c
116e0 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67  olumn.**.** Usag
116f0 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  e: sqlite3_colum
11700 6e 5f 6e 61 6d 65 20 53 54 4d 54 20 63 6f 6c 75  n_name STMT colu
11710 6d 6e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  mn.*/.static int
11720 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66 31 36   test_stmt_utf16
11730 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
11740 74 44 61 74 61 2c 20 20 20 20 20 2f 2a 20 50 6f  tData,     /* Po
11750 69 6e 74 65 72 20 74 6f 20 53 51 4c 69 74 65 20  inter to SQLite 
11760 41 50 49 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  API function to 
11770 62 65 20 69 6e 76 6f 6b 65 64 20 2a 2f 0a 20 20  be invoked */.  
11780 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
11790 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
117a0 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
117b0 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64   objv[].){.#ifnd
117c0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
117d0 54 46 31 36 0a 20 20 73 71 6c 69 74 65 33 5f 73  TF16.  sqlite3_s
117e0 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e  tmt *pStmt;.  in
117f0 74 20 63 6f 6c 3b 0a 20 20 54 63 6c 5f 4f 62 6a  t col;.  Tcl_Obj
11800 20 2a 70 52 65 74 3b 0a 20 20 63 6f 6e 73 74 20   *pRet;.  const 
11810 76 6f 69 64 20 2a 7a 4e 61 6d 65 31 36 3b 0a 20  void *zName16;. 
11820 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 28 2a 78   const void *(*x
11830 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 73 74  Func)(sqlite3_st
11840 6d 74 2a 2c 20 69 6e 74 29 20 3d 20 63 6c 69 65  mt*, int) = clie
11850 6e 74 44 61 74 61 3b 0a 0a 20 20 69 66 28 20 6f  ntData;..  if( o
11860 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63  bjc!=3 ){.    Tc
11870 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
11880 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
11890 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
118a0 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c  \"", .       Tcl
118b0 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
118c0 30 5d 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75  0]), " STMT colu
118d0 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  mn", 0);.    ret
118e0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
118f0 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d   }..  if( getStm
11900 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  tPointer(interp,
11910 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
11920 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29  bjv[1]), &pStmt)
11930 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
11940 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47  ROR;.  if( Tcl_G
11950 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
11960 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 63  erp, objv[2], &c
11970 6f 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  ol) ) return TCL
11980 5f 45 52 52 4f 52 3b 0a 0a 20 20 7a 4e 61 6d 65  _ERROR;..  zName
11990 31 36 20 3d 20 78 46 75 6e 63 28 70 53 74 6d 74  16 = xFunc(pStmt
119a0 2c 20 63 6f 6c 29 3b 0a 20 20 69 66 28 20 7a 4e  , col);.  if( zN
119b0 61 6d 65 31 36 20 29 7b 0a 20 20 20 20 70 52 65  ame16 ){.    pRe
119c0 74 20 3d 20 54 63 6c 5f 4e 65 77 42 79 74 65 41  t = Tcl_NewByteA
119d0 72 72 61 79 4f 62 6a 28 7a 4e 61 6d 65 31 36 2c  rrayObj(zName16,
119e0 20 73 71 6c 69 74 65 33 75 74 66 31 36 42 79 74   sqlite3utf16Byt
119f0 65 4c 65 6e 28 7a 4e 61 6d 65 31 36 2c 20 2d 31  eLen(zName16, -1
11a00 29 2b 32 29 3b 0a 20 20 20 20 54 63 6c 5f 53 65  )+2);.    Tcl_Se
11a10 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
11a20 70 2c 20 70 52 65 74 29 3b 0a 20 20 7d 0a 23 65  p, pRet);.  }.#e
11a30 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
11a40 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 20 20  MIT_UTF16 */..  
11a50 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
11a60 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
11a70 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
11a80 74 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a  t STMT column.**
11a90 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
11aa0 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 20  e3_column_bytes 
11ab0 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a  STMT column.**.*
11ac0 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33  * Usage: sqlite3
11ad0 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 31 36 20  _column_bytes16 
11ae0 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a  STMT column.**.*
11af0 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
11b00 74 5f 73 74 6d 74 5f 69 6e 74 28 0a 20 20 76 6f  t_stmt_int(.  vo
11b10 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
11b20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
11b30 6f 20 53 51 4c 69 74 65 20 41 50 49 20 66 75 6e  o SQLite API fun
11b40 63 74 69 6f 6e 20 74 6f 20 62 65 20 69 6e 76 6f  ction to be invo
11b50 6b 65 64 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74  ked */.  Tcl_Int
11b60 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
11b70 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
11b80 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
11b90 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  .){.  sqlite3_st
11ba0 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74  mt *pStmt;.  int
11bb0 20 63 6f 6c 3b 0a 20 20 69 6e 74 20 28 2a 78 46   col;.  int (*xF
11bc0 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 73 74 6d  unc)(sqlite3_stm
11bd0 74 2a 2c 20 69 6e 74 29 20 3d 20 63 6c 69 65 6e  t*, int) = clien
11be0 74 44 61 74 61 3b 0a 0a 20 20 69 66 28 20 6f 62  tData;..  if( ob
11bf0 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=3 ){.    Tcl
11c00 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
11c10 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
11c20 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
11c30 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f  "", .       Tcl_
11c40 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30  GetString(objv[0
11c50 5d 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d  ]), " STMT colum
11c60 6e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  n", 0);.    retu
11c70 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
11c80 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74  }..  if( getStmt
11c90 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
11ca0 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
11cb0 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20  jv[1]), &pStmt) 
11cc0 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
11cd0 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65  OR;.  if( Tcl_Ge
11ce0 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65  tIntFromObj(inte
11cf0 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f  rp, objv[2], &co
11d00 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  l) ) return TCL_
11d10 45 52 52 4f 52 3b 0a 0a 20 20 54 63 6c 5f 53 65  ERROR;..  Tcl_Se
11d20 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
11d30 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a  p, Tcl_NewIntObj
11d40 28 78 46 75 6e 63 28 70 53 74 6d 74 2c 20 63 6f  (xFunc(pStmt, co
11d50 6c 29 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  l)));.  return T
11d60 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  CL_OK;.}..#ifnde
11d70 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 49  f SQLITE_OMIT_DI
11d80 53 4b 49 4f 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  SKIO./*.** Usage
11d90 3a 20 20 73 71 6c 69 74 65 33 4f 73 4f 70 65 6e  :  sqlite3OsOpen
11da0 52 65 61 64 57 72 69 74 65 20 3c 66 69 6c 65 6e  ReadWrite <filen
11db0 61 6d 65 3e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ame>.*/.static i
11dc0 6e 74 20 74 65 73 74 5f 73 71 6c 69 74 65 33 4f  nt test_sqlite3O
11dd0 73 4f 70 65 6e 52 65 61 64 57 72 69 74 65 28 0a  sOpenReadWrite(.
11de0 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
11df0 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
11e00 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
11e10 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
11e20 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
11e30 7b 0a 20 20 4f 73 46 69 6c 65 20 2a 70 46 69 6c  {.  OsFile *pFil
11e40 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69  e;.  int rc;.  i
11e50 6e 74 20 64 75 6d 6d 79 3b 0a 20 20 63 68 61 72  nt dummy;.  char
11e60 20 7a 42 75 66 5b 31 30 30 5d 3b 0a 0a 20 20 69   zBuf[100];..  i
11e70 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20  f( objc!=2 ){.  
11e80 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
11e90 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
11ea0 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
11eb0 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20   be \"", .      
11ec0 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
11ed0 62 6a 76 5b 30 5d 29 2c 20 22 20 66 69 6c 65 6e  bjv[0]), " filen
11ee0 61 6d 65 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  ame", 0);.    re
11ef0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
11f00 20 20 7d 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69    }..  rc = sqli
11f10 74 65 33 4f 73 4f 70 65 6e 52 65 61 64 57 72 69  te3OsOpenReadWri
11f20 74 65 28 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  te(Tcl_GetString
11f30 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 46 69 6c  (objv[1]), &pFil
11f40 65 2c 20 26 64 75 6d 6d 79 29 3b 0a 20 20 69 66  e, &dummy);.  if
11f50 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
11f60 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 52 65  ){.    Tcl_SetRe
11f70 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68  sult(interp, (ch
11f80 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72  ar *)errorName(r
11f90 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b  c), TCL_STATIC);
11fa0 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
11fb0 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 73 71 6c  ERROR;.  }.  sql
11fc0 69 74 65 33 54 65 73 74 4d 61 6b 65 50 6f 69 6e  ite3TestMakePoin
11fd0 74 65 72 53 74 72 28 69 6e 74 65 72 70 2c 20 7a  terStr(interp, z
11fe0 42 75 66 2c 20 70 46 69 6c 65 29 3b 0a 20 20 54  Buf, pFile);.  T
11ff0 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74  cl_SetResult(int
12000 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 20  erp, zBuf, 0);. 
12010 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
12020 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  R;.}../*.** Usag
12030 65 3a 20 20 73 71 6c 69 74 65 33 4f 73 43 6c 6f  e:  sqlite3OsClo
12040 73 65 20 3c 66 69 6c 65 20 68 61 6e 64 6c 65 3e  se <file handle>
12050 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
12060 65 73 74 5f 73 71 6c 69 74 65 33 4f 73 43 6c 6f  est_sqlite3OsClo
12070 73 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  se(.  void * cli
12080 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
12090 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
120a0 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
120b0 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
120c0 5b 5d 0a 29 7b 0a 20 20 4f 73 46 69 6c 65 20 2a  [].){.  OsFile *
120d0 70 46 69 6c 65 3b 0a 20 20 69 6e 74 20 72 63 3b  pFile;.  int rc;
120e0 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20  ..  if( objc!=2 
120f0 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
12100 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
12110 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
12120 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20  hould be \"", . 
12130 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
12140 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20  ing(objv[0]), " 
12150 66 69 6c 65 68 61 6e 64 6c 65 22 2c 20 30 29 3b  filehandle", 0);
12160 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
12170 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66  ERROR;.  }..  if
12180 28 20 67 65 74 46 69 6c 65 50 6f 69 6e 74 65 72  ( getFilePointer
12190 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
121a0 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
121b0 20 26 70 46 69 6c 65 29 20 29 7b 0a 20 20 20 20   &pFile) ){.    
121c0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
121d0 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
121e0 69 74 65 33 4f 73 43 6c 6f 73 65 28 26 70 46 69  ite3OsClose(&pFi
121f0 6c 65 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53  le);.  if( rc!=S
12200 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
12210 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
12220 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 65 72  terp, (char *)er
12230 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c  rorName(rc), TCL
12240 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 72 65  _STATIC);.    re
12250 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
12260 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c    }.  return TCL
12270 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
12280 61 67 65 3a 20 20 73 71 6c 69 74 65 33 4f 73 4c  age:  sqlite3OsL
12290 6f 63 6b 20 3c 66 69 6c 65 20 68 61 6e 64 6c 65  ock <file handle
122a0 3e 20 3c 6c 6f 63 6b 74 79 70 65 3e 0a 2a 2f 0a  > <locktype>.*/.
122b0 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
122c0 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b 28 0a 20  sqlite3OsLock(. 
122d0 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
122e0 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
122f0 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
12300 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
12310 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
12320 0a 20 20 4f 73 46 69 6c 65 20 2a 20 70 46 69 6c  .  OsFile * pFil
12330 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20  e;.  int rc;..  
12340 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20  if( objc!=3 ){. 
12350 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
12360 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
12370 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
12380 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20  d be \"", .     
12390 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
123a0 28 6f 62 6a 76 5b 30 5d 29 2c 20 0a 20 20 20 20  (objv[0]), .    
123b0 20 20 20 20 22 20 66 69 6c 65 68 61 6e 64 6c 65      " filehandle
123c0 20 28 53 48 41 52 45 44 7c 52 45 53 45 52 56 45   (SHARED|RESERVE
123d0 44 7c 50 45 4e 44 49 4e 47 7c 45 58 43 4c 55 53  D|PENDING|EXCLUS
123e0 49 56 45 29 22 2c 20 30 29 3b 0a 20 20 20 20 72  IVE)", 0);.    r
123f0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
12400 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 46  .  }..  if( getF
12410 69 6c 65 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  ilePointer(inter
12420 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
12430 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 46 69 6c  (objv[1]), &pFil
12440 65 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  e) ){.    return
12450 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
12460 0a 20 20 69 66 28 20 30 3d 3d 73 74 72 63 6d 70  .  if( 0==strcmp
12470 28 22 53 48 41 52 45 44 22 2c 20 54 63 6c 5f 47  ("SHARED", Tcl_G
12480 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d  etString(objv[2]
12490 29 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  )) ){.    rc = s
124a0 71 6c 69 74 65 33 4f 73 4c 6f 63 6b 28 70 46 69  qlite3OsLock(pFi
124b0 6c 65 2c 20 53 48 41 52 45 44 5f 4c 4f 43 4b 29  le, SHARED_LOCK)
124c0 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66 28  ;.  }.  else if(
124d0 20 30 3d 3d 73 74 72 63 6d 70 28 22 52 45 53 45   0==strcmp("RESE
124e0 52 56 45 44 22 2c 20 54 63 6c 5f 47 65 74 53 74  RVED", Tcl_GetSt
124f0 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 29 20 29  ring(objv[2])) )
12500 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
12510 65 33 4f 73 4c 6f 63 6b 28 70 46 69 6c 65 2c 20  e3OsLock(pFile, 
12520 52 45 53 45 52 56 45 44 5f 4c 4f 43 4b 29 3b 0a  RESERVED_LOCK);.
12530 20 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20 30    }.  else if( 0
12540 3d 3d 73 74 72 63 6d 70 28 22 50 45 4e 44 49 4e  ==strcmp("PENDIN
12550 47 22 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  G", Tcl_GetStrin
12560 67 28 6f 62 6a 76 5b 32 5d 29 29 20 29 7b 0a 20  g(objv[2])) ){. 
12570 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f     rc = sqlite3O
12580 73 4c 6f 63 6b 28 70 46 69 6c 65 2c 20 50 45 4e  sLock(pFile, PEN
12590 44 49 4e 47 5f 4c 4f 43 4b 29 3b 0a 20 20 7d 0a  DING_LOCK);.  }.
125a0 20 20 65 6c 73 65 20 69 66 28 20 30 3d 3d 73 74    else if( 0==st
125b0 72 63 6d 70 28 22 45 58 43 4c 55 53 49 56 45 22  rcmp("EXCLUSIVE"
125c0 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
125d0 6f 62 6a 76 5b 32 5d 29 29 20 29 7b 0a 20 20 20  objv[2])) ){.   
125e0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 4c   rc = sqlite3OsL
125f0 6f 63 6b 28 70 46 69 6c 65 2c 20 45 58 43 4c 55  ock(pFile, EXCLU
12600 53 49 56 45 5f 4c 4f 43 4b 29 3b 0a 20 20 7d 65  SIVE_LOCK);.  }e
12610 6c 73 65 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  lse{.    Tcl_App
12620 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
12630 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
12640 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
12650 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74  .        Tcl_Get
12660 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c  String(objv[0]),
12670 20 0a 20 20 20 20 20 20 20 20 22 20 66 69 6c 65   .        " file
12680 68 61 6e 64 6c 65 20 28 53 48 41 52 45 44 7c 52  handle (SHARED|R
12690 45 53 45 52 56 45 44 7c 50 45 4e 44 49 4e 47 7c  ESERVED|PENDING|
126a0 45 58 43 4c 55 53 49 56 45 29 22 2c 20 30 29 3b  EXCLUSIVE)", 0);
126b0 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
126c0 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66  ERROR;.  }..  if
126d0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
126e0 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 52 65  ){.    Tcl_SetRe
126f0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68  sult(interp, (ch
12700 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72  ar *)errorName(r
12710 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b  c), TCL_STATIC);
12720 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
12730 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 65 74  ERROR;.  }.  ret
12740 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
12750 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
12760 69 74 65 33 4f 73 55 6e 6c 6f 63 6b 20 3c 66 69  ite3OsUnlock <fi
12770 6c 65 20 68 61 6e 64 6c 65 3e 0a 2a 2f 0a 73 74  le handle>.*/.st
12780 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 73 71  atic int test_sq
12790 6c 69 74 65 33 4f 73 55 6e 6c 6f 63 6b 28 0a 20  lite3OsUnlock(. 
127a0 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
127b0 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
127c0 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
127d0 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
127e0 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
127f0 0a 20 20 4f 73 46 69 6c 65 20 2a 20 70 46 69 6c  .  OsFile * pFil
12800 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20  e;.  int rc;..  
12810 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20  if( objc!=2 ){. 
12820 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
12830 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
12840 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
12850 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20  d be \"", .     
12860 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28    Tcl_GetString(
12870 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 66 69 6c 65  objv[0]), " file
12880 68 61 6e 64 6c 65 22 2c 20 30 29 3b 0a 20 20 20  handle", 0);.   
12890 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
128a0 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65  R;.  }..  if( ge
128b0 74 46 69 6c 65 50 6f 69 6e 74 65 72 28 69 6e 74  tFilePointer(int
128c0 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
128d0 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 46  ng(objv[1]), &pF
128e0 69 6c 65 29 20 29 7b 0a 20 20 20 20 72 65 74 75  ile) ){.    retu
128f0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
12900 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
12910 4f 73 55 6e 6c 6f 63 6b 28 70 46 69 6c 65 2c 20  OsUnlock(pFile, 
12920 4e 4f 5f 4c 4f 43 4b 29 3b 0a 20 20 69 66 28 20  NO_LOCK);.  if( 
12930 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
12940 0a 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75  .    Tcl_SetResu
12950 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72  lt(interp, (char
12960 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72 63 29   *)errorName(rc)
12970 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20  , TCL_STATIC);. 
12980 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
12990 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  ROR;.  }.  retur
129a0 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
129b0 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
129c0 65 33 4f 73 54 65 6d 70 46 69 6c 65 4e 61 6d 65  e3OsTempFileName
129d0 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
129e0 65 73 74 5f 73 71 6c 69 74 65 33 4f 73 54 65 6d  est_sqlite3OsTem
129f0 70 46 69 6c 65 4e 61 6d 65 28 0a 20 20 76 6f 69  pFileName(.  voi
12a00 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
12a10 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
12a20 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
12a30 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
12a40 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 63  ST objv[].){.  c
12a50 68 61 72 20 7a 46 69 6c 65 5b 53 51 4c 49 54 45  har zFile[SQLITE
12a60 5f 54 45 4d 50 4e 41 4d 45 5f 53 49 5a 45 5d 3b  _TEMPNAME_SIZE];
12a70 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 72 63  .  int rc;..  rc
12a80 20 3d 20 73 71 6c 69 74 65 33 4f 73 54 65 6d 70   = sqlite3OsTemp
12a90 46 69 6c 65 4e 61 6d 65 28 7a 46 69 6c 65 29 3b  FileName(zFile);
12aa0 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
12ab0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f  E_OK ){.    Tcl_
12ac0 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70  SetResult(interp
12ad0 2c 20 28 63 68 61 72 20 2a 29 65 72 72 6f 72 4e  , (char *)errorN
12ae0 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54 41  ame(rc), TCL_STA
12af0 54 49 43 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  TIC);.    return
12b00 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
12b10 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
12b20 6c 74 28 69 6e 74 65 72 70 2c 20 7a 46 69 6c 65  lt(interp, zFile
12b30 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  , 0);.  return T
12b40 43 4c 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  CL_OK;.}.#endif.
12b50 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
12b60 71 6c 69 74 65 5f 73 65 74 5f 6d 61 67 69 63 20  qlite_set_magic 
12b70 20 44 42 20 20 4d 41 47 49 43 2d 4e 55 4d 42 45   DB  MAGIC-NUMBE
12b80 52 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  R.**.** Set the 
12b90 64 62 2d 3e 6d 61 67 69 63 20 76 61 6c 75 65 2e  db->magic value.
12ba0 20 20 54 68 69 73 20 69 73 20 75 73 65 64 20 74    This is used t
12bb0 6f 20 74 65 73 74 20 65 72 72 6f 72 20 72 65 63  o test error rec
12bc0 6f 76 65 72 79 20 6c 6f 67 69 63 2e 0a 2a 2f 0a  overy logic..*/.
12bd0 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74  static int sqlit
12be0 65 5f 73 65 74 5f 6d 61 67 69 63 28 0a 20 20 76  e_set_magic(.  v
12bf0 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
12c00 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
12c10 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 61 72  interp,.  int ar
12c20 67 63 2c 0a 20 20 63 68 61 72 20 2a 2a 61 72 67  gc,.  char **arg
12c30 76 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  v.){.  sqlite3 *
12c40 64 62 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d  db;.  if( argc!=
12c50 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  3 ){.    Tcl_App
12c60 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
12c70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
12c80 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
12c90 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20  argv[0],.       
12ca0 20 20 22 20 44 42 20 4d 41 47 49 43 22 2c 20 30    " DB MAGIC", 0
12cb0 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
12cc0 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
12cd0 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
12ce0 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c  interp, argv[1],
12cf0 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
12d00 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
12d10 73 74 72 63 6d 70 28 61 72 67 76 5b 32 5d 2c 20  strcmp(argv[2], 
12d20 22 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50  "SQLITE_MAGIC_OP
12d30 45 4e 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 64  EN")==0 ){.    d
12d40 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54  b->magic = SQLIT
12d50 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 3b 0a 20 20  E_MAGIC_OPEN;.  
12d60 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
12d70 28 61 72 67 76 5b 32 5d 2c 20 22 53 51 4c 49 54  (argv[2], "SQLIT
12d80 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 22 29  E_MAGIC_CLOSED")
12d90 3d 3d 30 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d  ==0 ){.    db->m
12da0 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41  agic = SQLITE_MA
12db0 47 49 43 5f 43 4c 4f 53 45 44 3b 0a 20 20 7d 65  GIC_CLOSED;.  }e
12dc0 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 61  lse if( strcmp(a
12dd0 72 67 76 5b 32 5d 2c 20 22 53 51 4c 49 54 45 5f  rgv[2], "SQLITE_
12de0 4d 41 47 49 43 5f 42 55 53 59 22 29 3d 3d 30 20  MAGIC_BUSY")==0 
12df0 29 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63  ){.    db->magic
12e00 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f   = SQLITE_MAGIC_
12e10 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 20 69 66  BUSY;.  }else if
12e20 28 20 73 74 72 63 6d 70 28 61 72 67 76 5b 32 5d  ( strcmp(argv[2]
12e30 2c 20 22 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  , "SQLITE_MAGIC_
12e40 45 52 52 4f 52 22 29 3d 3d 30 20 29 7b 0a 20 20  ERROR")==0 ){.  
12e50 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51    db->magic = SQ
12e60 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52  LITE_MAGIC_ERROR
12e70 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 54 63  ;.  }else if( Tc
12e80 6c 5f 47 65 74 49 6e 74 28 69 6e 74 65 72 70 2c  l_GetInt(interp,
12e90 20 61 72 67 76 5b 32 5d 2c 20 26 64 62 2d 3e 6d   argv[2], &db->m
12ea0 61 67 69 63 29 20 29 7b 0a 20 20 20 20 72 65 74  agic) ){.    ret
12eb0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
12ec0 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f   }.  return TCL_
12ed0 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
12ee0 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74  ge:  sqlite3_int
12ef0 65 72 72 75 70 74 20 20 44 42 20 0a 2a 2a 0a 2a  errupt  DB .**.*
12f00 2a 20 54 72 69 67 67 65 72 20 61 6e 20 69 6e 74  * Trigger an int
12f10 65 72 72 75 70 74 20 6f 6e 20 44 42 0a 2a 2f 0a  errupt on DB.*/.
12f20 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
12f30 69 6e 74 65 72 72 75 70 74 28 0a 20 20 76 6f 69  interrupt(.  voi
12f40 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
12f50 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
12f60 74 65 72 70 2c 0a 20 20 69 6e 74 20 61 72 67 63  terp,.  int argc
12f70 2c 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 0a  ,.  char **argv.
12f80 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
12f90 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 32 20  ;.  if( argc!=2 
12fa0 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
12fb0 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
12fc0 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
12fd0 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72  hould be \"", ar
12fe0 67 76 5b 30 5d 2c 20 22 20 44 42 22 2c 20 30 29  gv[0], " DB", 0)
12ff0 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
13000 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
13010 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69  ( getDbPointer(i
13020 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20  nterp, argv[1], 
13030 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
13040 4c 5f 45 52 52 4f 52 3b 0a 20 20 73 71 6c 69 74  L_ERROR;.  sqlit
13050 65 33 5f 69 6e 74 65 72 72 75 70 74 28 64 62 29  e3_interrupt(db)
13060 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
13070 4b 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 75 38 20  K;.}..static u8 
13080 2a 73 71 6c 69 74 65 33 5f 73 74 61 63 6b 5f 62  *sqlite3_stack_b
13090 61 73 65 6c 69 6e 65 20 3d 20 30 3b 0a 0a 2f 2a  aseline = 0;../*
130a0 0a 2a 2a 20 46 69 6c 6c 20 74 68 65 20 73 74 61  .** Fill the sta
130b0 63 6b 20 77 69 74 68 20 61 20 6b 6e 6f 77 6e 20  ck with a known 
130c0 62 69 74 70 61 74 74 65 72 6e 2e 0a 2a 2f 0a 73  bitpattern..*/.s
130d0 74 61 74 69 63 20 76 6f 69 64 20 70 72 65 70 53  tatic void prepS
130e0 74 61 63 6b 28 76 6f 69 64 29 7b 0a 20 20 69 6e  tack(void){.  in
130f0 74 20 69 3b 0a 20 20 75 33 32 20 62 69 67 42 75  t i;.  u32 bigBu
13100 66 5b 36 35 35 33 36 5d 3b 0a 20 20 66 6f 72 28  f[65536];.  for(
13110 69 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28 62 69  i=0; i<sizeof(bi
13120 67 42 75 66 29 3b 20 69 2b 2b 29 20 62 69 67 42  gBuf); i++) bigB
13130 75 66 5b 69 5d 20 3d 20 30 78 64 65 61 64 62 65  uf[i] = 0xdeadbe
13140 65 66 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  ef;.  sqlite3_st
13150 61 63 6b 5f 62 61 73 65 6c 69 6e 65 20 3d 20 28  ack_baseline = (
13160 75 38 2a 29 26 62 69 67 42 75 66 5b 36 35 35 33  u8*)&bigBuf[6553
13170 36 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47 65 74  6];.}../*.** Get
13180 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 74 61   the current sta
13190 63 6b 20 64 65 70 74 68 2e 20 20 55 73 65 64 20  ck depth.  Used 
131a0 66 6f 72 20 64 65 62 75 67 67 69 6e 67 20 6f 6e  for debugging on
131b0 6c 79 2e 0a 2a 2f 0a 75 36 34 20 73 71 6c 69 74  ly..*/.u64 sqlit
131c0 65 33 53 74 61 63 6b 44 65 70 74 68 28 76 6f 69  e3StackDepth(voi
131d0 64 29 7b 0a 20 20 75 38 20 78 3b 0a 20 20 72 65  d){.  u8 x;.  re
131e0 74 75 72 6e 20 28 75 36 34 29 28 73 71 6c 69 74  turn (u64)(sqlit
131f0 65 33 5f 73 74 61 63 6b 5f 62 61 73 65 6c 69 6e  e3_stack_baselin
13200 65 20 2d 20 26 78 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  e - &x);.}../*.*
13210 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
13220 33 5f 73 74 61 63 6b 5f 75 73 65 64 20 44 42 20  3_stack_used DB 
13230 53 51 4c 0a 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f  SQL.**.** Try to
13240 20 6d 65 61 73 75 72 65 20 74 68 65 20 61 6d 6f   measure the amo
13250 75 6e 74 20 6f 66 20 73 74 61 63 6b 20 73 70 61  unt of stack spa
13260 63 65 20 75 73 65 64 20 62 79 20 61 20 63 61 6c  ce used by a cal
13270 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f 65 78 65  l to sqlite3_exe
13280 63 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  c.*/.static int 
13290 74 65 73 74 5f 73 74 61 63 6b 5f 75 73 65 64 28  test_stack_used(
132a0 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
132b0 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
132c0 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
132d0 74 20 61 72 67 63 2c 0a 20 20 63 68 61 72 20 2a  t argc,.  char *
132e0 2a 61 72 67 76 0a 29 7b 0a 20 20 73 71 6c 69 74  *argv.){.  sqlit
132f0 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 69 3b  e3 *db;.  int i;
13300 0a 20 20 69 66 28 20 61 72 67 63 21 3d 33 20 29  .  if( argc!=3 )
13310 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
13320 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
13330 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
13340 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
13350 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 20 22  v[0], .        "
13360 20 44 42 20 53 51 4c 22 2c 20 30 29 3b 0a 20 20   DB SQL", 0);.  
13370 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
13380 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
13390 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tDbPointer(inter
133a0 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29  p, argv[1], &db)
133b0 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
133c0 52 4f 52 3b 0a 20 20 70 72 65 70 53 74 61 63 6b  ROR;.  prepStack
133d0 28 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 65 78  ();.  sqlite3_ex
133e0 65 63 28 64 62 2c 20 61 72 67 76 5b 32 5d 2c 20  ec(db, argv[2], 
133f0 30 2c 20 30 2c 20 30 29 3b 0a 20 20 66 6f 72 28  0, 0, 0);.  for(
13400 69 3d 36 35 35 33 35 3b 20 69 3e 3d 30 20 26 26  i=65535; i>=0 &&
13410 20 28 28 75 33 32 2a 29 73 71 6c 69 74 65 33 5f   ((u32*)sqlite3_
13420 73 74 61 63 6b 5f 62 61 73 65 6c 69 6e 65 29 5b  stack_baseline)[
13430 2d 69 5d 3d 3d 30 78 64 65 61 64 62 65 65 66 3b  -i]==0xdeadbeef;
13440 20 69 2d 2d 29 7b 7d 0a 20 20 54 63 6c 5f 53 65   i--){}.  Tcl_Se
13450 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
13460 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a  p, Tcl_NewIntObj
13470 28 69 2a 34 29 29 3b 0a 20 20 72 65 74 75 72 6e  (i*4));.  return
13480 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
13490 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 5f  * Usage: sqlite_
134a0 64 65 6c 65 74 65 5f 66 75 6e 63 74 69 6f 6e 20  delete_function 
134b0 44 42 20 66 75 6e 63 74 69 6f 6e 2d 6e 61 6d 65  DB function-name
134c0 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68  .**.** Delete th
134d0 65 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  e user function 
134e0 27 66 75 6e 63 74 69 6f 6e 2d 6e 61 6d 65 27 20  'function-name' 
134f0 66 72 6f 6d 20 64 61 74 61 62 61 73 65 20 68 61  from database ha
13500 6e 64 6c 65 20 44 42 2e 20 49 74 0a 2a 2a 20 69  ndle DB. It.** i
13510 73 20 61 73 73 75 6d 65 64 20 74 68 61 74 20 74  s assumed that t
13520 68 65 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e  he user function
13530 20 77 61 73 20 63 72 65 61 74 65 64 20 61 73 20   was created as 
13540 55 54 46 38 2c 20 61 6e 79 20 6e 75 6d 62 65 72  UTF8, any number
13550 20 6f 66 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 73   of.** arguments
13560 20 28 74 68 65 20 77 61 79 20 74 68 65 20 54 43   (the way the TC
13570 4c 20 69 6e 74 65 72 66 61 63 65 20 64 6f 65 73  L interface does
13580 20 69 74 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20   it)..*/.static 
13590 69 6e 74 20 64 65 6c 65 74 65 5f 66 75 6e 63 74  int delete_funct
135a0 69 6f 6e 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  ion(.  void * cl
135b0 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
135c0 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
135d0 20 20 69 6e 74 20 61 72 67 63 2c 0a 20 20 63 68    int argc,.  ch
135e0 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 69  ar **argv.){.  i
135f0 6e 74 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33  nt rc;.  sqlite3
13600 20 2a 64 62 3b 0a 20 20 69 66 28 20 61 72 67 63   *db;.  if( argc
13610 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=3 ){.    Tcl_A
13620 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
13630 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
13640 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
13650 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20  , argv[0], .    
13660 20 20 20 20 22 20 44 42 20 66 75 6e 63 74 69 6f      " DB functio
13670 6e 2d 6e 61 6d 65 22 2c 20 30 29 3b 0a 20 20 20  n-name", 0);.   
13680 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
13690 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74  R;.  }.  if( get
136a0 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  DbPointer(interp
136b0 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20  , argv[1], &db) 
136c0 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
136d0 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  OR;.  rc = sqlit
136e0 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
136f0 6f 6e 28 64 62 2c 20 61 72 67 76 5b 32 5d 2c 20  on(db, argv[2], 
13700 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  -1, SQLITE_UTF8,
13710 20 30 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20   0, 0, 0, 0);.  
13720 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
13730 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 65 72  terp, (char *)er
13740 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c  rorName(rc), TCL
13750 5f 53 54 41 54 49 43 29 3b 0a 20 20 72 65 74 75  _STATIC);.  retu
13760 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
13770 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
13780 65 5f 64 65 6c 65 74 65 5f 63 6f 6c 6c 61 74 69  e_delete_collati
13790 6f 6e 20 44 42 20 63 6f 6c 6c 61 74 69 6f 6e 2d  on DB collation-
137a0 6e 61 6d 65 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74  name.**.** Delet
137b0 65 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20  e the collation 
137c0 73 65 71 75 65 6e 63 65 20 27 63 6f 6c 6c 61 74  sequence 'collat
137d0 69 6f 6e 2d 6e 61 6d 65 27 20 66 72 6f 6d 20 64  ion-name' from d
137e0 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 0a  atabase handle .
137f0 2a 2a 20 44 42 2e 20 49 74 20 69 73 20 61 73 73  ** DB. It is ass
13800 75 6d 65 64 20 74 68 61 74 20 74 68 65 20 63 6f  umed that the co
13810 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
13820 20 77 61 73 20 63 72 65 61 74 65 64 20 61 73 20   was created as 
13830 55 54 46 38 20 28 74 68 65 20 0a 2a 2a 20 77 61  UTF8 (the .** wa
13840 79 20 74 68 65 20 54 43 4c 20 69 6e 74 65 72 66  y the TCL interf
13850 61 63 65 20 64 6f 65 73 20 69 74 29 2e 0a 2a 2f  ace does it)..*/
13860 0a 73 74 61 74 69 63 20 69 6e 74 20 64 65 6c 65  .static int dele
13870 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 0a 20 20  te_collation(.  
13880 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
13890 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
138a0 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 61  *interp,.  int a
138b0 72 67 63 2c 0a 20 20 63 68 61 72 20 2a 2a 61 72  rgc,.  char **ar
138c0 67 76 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a  gv.){.  int rc;.
138d0 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
138e0 20 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a   if( argc!=3 ){.
138f0 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
13900 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
13910 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
13920 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
13930 30 5d 2c 20 0a 20 20 20 20 20 20 20 20 22 20 44  0], .        " D
13940 42 20 66 75 6e 63 74 69 6f 6e 2d 6e 61 6d 65 22  B function-name"
13950 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
13960 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
13970 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74    if( getDbPoint
13980 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  er(interp, argv[
13990 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72  1], &db) ) retur
139a0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72  n TCL_ERROR;.  r
139b0 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61  c = sqlite3_crea
139c0 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c  te_collation(db,
139d0 20 61 72 67 76 5b 32 5d 2c 20 53 51 4c 49 54 45   argv[2], SQLITE
139e0 5f 55 54 46 38 2c 20 30 2c 20 30 29 3b 0a 20 20  _UTF8, 0, 0);.  
139f0 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
13a00 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 65 72  terp, (char *)er
13a10 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c  rorName(rc), TCL
13a20 5f 53 54 41 54 49 43 29 3b 0a 20 20 72 65 74 75  _STATIC);.  retu
13a30 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
13a40 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
13a50 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69  e3_get_autocommi
13a60 74 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72  t DB.**.** Retur
13a70 6e 20 74 72 75 65 20 69 66 20 74 68 65 20 64 61  n true if the da
13a80 74 61 62 61 73 65 20 44 42 20 69 73 20 63 75 72  tabase DB is cur
13a90 72 65 6e 74 6c 79 20 69 6e 20 61 75 74 6f 2d 63  rently in auto-c
13aa0 6f 6d 6d 69 74 20 6d 6f 64 65 2e 0a 2a 2a 20 52  ommit mode..** R
13ab0 65 74 75 72 6e 20 66 61 6c 73 65 20 69 66 20 6e  eturn false if n
13ac0 6f 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ot..*/.static in
13ad0 74 20 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74  t get_autocommit
13ae0 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
13af0 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
13b00 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
13b10 6e 74 20 61 72 67 63 2c 0a 20 20 63 68 61 72 20  nt argc,.  char 
13b20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 63 68 61 72  **argv.){.  char
13b30 20 7a 42 75 66 5b 33 30 5d 3b 0a 20 20 73 71 6c   zBuf[30];.  sql
13b40 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 66 28 20  ite3 *db;.  if( 
13b50 61 72 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  argc!=2 ){.    T
13b60 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
13b70 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
13b80 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
13b90 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a   \"", argv[0], .
13ba0 20 20 20 20 20 20 20 20 22 20 44 42 22 2c 20 30          " DB", 0
13bb0 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
13bc0 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
13bd0 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
13be0 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c  interp, argv[1],
13bf0 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
13c00 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 73 70 72 69  CL_ERROR;.  spri
13c10 6e 74 66 28 7a 42 75 66 2c 20 22 25 64 22 2c 20  ntf(zBuf, "%d", 
13c20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f  sqlite3_get_auto
13c30 63 6f 6d 6d 69 74 28 64 62 29 29 3b 0a 20 20 54  commit(db));.  T
13c40 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
13c50 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29  interp, zBuf, 0)
13c60 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
13c70 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
13c80 65 3a 20 20 74 63 6c 5f 76 61 72 69 61 62 6c 65  e:  tcl_variable
13c90 5f 74 79 70 65 20 56 41 52 49 41 42 4c 45 4e 41  _type VARIABLENA
13ca0 4d 45 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  ME.**.** Return 
13cb0 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
13cc0 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65  internal represe
13cd0 6e 74 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 0a  ntation for the.
13ce0 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ** value of the 
13cf0 67 69 76 65 6e 20 76 61 72 69 61 62 6c 65 2e 0a  given variable..
13d00 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 63  */.static int tc
13d10 6c 5f 76 61 72 69 61 62 6c 65 5f 74 79 70 65 28  l_variable_type(
13d20 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
13d30 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
13d40 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
13d50 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
13d60 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
13d70 29 7b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 56  ){.  Tcl_Obj *pV
13d80 61 72 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  ar;.  if( objc!=
13d90 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f  2 ){.    Tcl_Wro
13da0 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
13db0 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 56 41 52 49  , 1, objv, "VARI
13dc0 41 42 4c 45 22 29 3b 0a 20 20 20 20 72 65 74 75  ABLE");.    retu
13dd0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
13de0 7d 0a 20 20 70 56 61 72 20 3d 20 54 63 6c 5f 47  }.  pVar = Tcl_G
13df0 65 74 56 61 72 32 45 78 28 69 6e 74 65 72 70 2c  etVar2Ex(interp,
13e00 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
13e10 62 6a 76 5b 31 5d 29 2c 20 30 2c 20 54 43 4c 5f  bjv[1]), 0, TCL_
13e20 4c 45 41 56 45 5f 45 52 52 5f 4d 53 47 29 3b 0a  LEAVE_ERR_MSG);.
13e30 20 20 69 66 28 20 70 56 61 72 3d 3d 30 20 29 20    if( pVar==0 ) 
13e40 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
13e50 3b 0a 20 20 69 66 28 20 70 56 61 72 2d 3e 74 79  ;.  if( pVar->ty
13e60 70 65 50 74 72 20 29 7b 0a 20 20 20 20 54 63 6c  pePtr ){.    Tcl
13e70 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
13e80 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72  terp, Tcl_NewStr
13e90 69 6e 67 4f 62 6a 28 70 56 61 72 2d 3e 74 79 70  ingObj(pVar->typ
13ea0 65 50 74 72 2d 3e 6e 61 6d 65 2c 20 2d 31 29 29  ePtr->name, -1))
13eb0 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54  ;.  }.  return T
13ec0 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
13ed0 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f  Usage:  sqlite3_
13ee0 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 20 3f  release_memory ?
13ef0 4e 3f 0a 2a 2a 0a 2a 2a 20 41 74 74 65 6d 70 74  N?.**.** Attempt
13f00 20 74 6f 20 72 65 6c 65 61 73 65 20 6d 65 6d 6f   to release memo
13f10 72 79 20 63 75 72 72 65 6e 74 6c 79 20 68 65 6c  ry currently hel
13f20 64 20 62 75 74 20 6e 6f 74 20 61 63 74 75 61 6c  d but not actual
13f30 6c 79 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a 20  ly required..** 
13f40 54 68 65 20 69 6e 74 65 67 65 72 20 4e 20 69 73  The integer N is
13f50 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   the number of b
13f60 79 74 65 73 20 77 65 20 61 72 65 20 74 72 79 69  ytes we are tryi
13f70 6e 67 20 74 6f 20 72 65 6c 65 61 73 65 2e 20 20  ng to release.  
13f80 54 68 65 20 0a 2a 2a 20 72 65 74 75 72 6e 20 76  The .** return v
13f90 61 6c 75 65 20 69 73 20 74 68 65 20 61 6d 6f 75  alue is the amou
13fa0 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 20 61 63 74  nt of memory act
13fb0 75 61 6c 6c 79 20 72 65 6c 65 61 73 65 64 2e 0a  ually released..
13fc0 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
13fd0 73 74 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72  st_release_memor
13fe0 79 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  y(.  void * clie
13ff0 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
14000 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
14010 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
14020 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
14030 5d 0a 29 7b 0a 23 69 66 20 64 65 66 69 6e 65 64  ].){.#if defined
14040 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d  (SQLITE_ENABLE_M
14050 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54  EMORY_MANAGEMENT
14060 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
14070 4c 49 54 45 5f 4f 4d 49 54 5f 44 49 53 4b 49 4f  LITE_OMIT_DISKIO
14080 29 0a 20 20 69 6e 74 20 4e 3b 0a 20 20 69 6e 74  ).  int N;.  int
14090 20 61 6d 74 3b 0a 20 20 69 66 28 20 6f 62 6a 63   amt;.  if( objc
140a0 21 3d 31 20 26 26 20 6f 62 6a 63 21 3d 32 20 29  !=1 && objc!=2 )
140b0 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e  {.    Tcl_WrongN
140c0 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31  umArgs(interp, 1
140d0 2c 20 6f 62 6a 76 2c 20 22 3f 4e 3f 22 29 3b 0a  , objv, "?N?");.
140e0 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
140f0 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
14100 6f 62 6a 63 3d 3d 32 20 29 7b 0a 20 20 20 20 69  objc==2 ){.    i
14110 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f  f( Tcl_GetIntFro
14120 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
14130 76 5b 31 5d 2c 20 26 4e 29 20 29 20 72 65 74 75  v[1], &N) ) retu
14140 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
14150 7d 65 6c 73 65 7b 0a 20 20 20 20 4e 20 3d 20 2d  }else{.    N = -
14160 31 3b 0a 20 20 7d 0a 20 20 61 6d 74 20 3d 20 73  1;.  }.  amt = s
14170 71 6c 69 74 65 33 5f 72 65 6c 65 61 73 65 5f 6d  qlite3_release_m
14180 65 6d 6f 72 79 28 4e 29 3b 0a 20 20 54 63 6c 5f  emory(N);.  Tcl_
14190 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
141a0 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f  erp, Tcl_NewIntO
141b0 62 6a 28 61 6d 74 29 29 3b 0a 23 65 6e 64 69 66  bj(amt));.#endif
141c0 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
141d0 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
141e0 3a 20 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f  :  sqlite3_soft_
141f0 68 65 61 70 5f 6c 69 6d 69 74 20 3f 4e 3f 0a 2a  heap_limit ?N?.*
14200 2a 0a 2a 2a 20 51 75 65 72 79 20 6f 72 20 73 65  *.** Query or se
14210 74 20 74 68 65 20 73 6f 66 74 20 68 65 61 70 20  t the soft heap 
14220 6c 69 6d 69 74 20 66 6f 72 20 74 68 65 20 63 75  limit for the cu
14230 72 72 65 6e 74 20 74 68 72 65 61 64 2e 20 20 54  rrent thread.  T
14240 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 69 73 20 6f  he.** limit is o
14250 6e 6c 79 20 63 68 61 6e 67 65 64 20 69 66 20 74  nly changed if t
14260 68 65 20 4e 20 69 73 20 70 72 65 73 65 6e 74 2e  he N is present.
14270 20 20 54 68 65 20 70 72 65 76 69 6f 75 73 20 6c    The previous l
14280 69 6d 69 74 0a 2a 2a 20 69 73 20 72 65 74 75 72  imit.** is retur
14290 6e 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ned..*/.static i
142a0 6e 74 20 74 65 73 74 5f 73 6f 66 74 5f 68 65 61  nt test_soft_hea
142b0 70 5f 6c 69 6d 69 74 28 0a 20 20 76 6f 69 64 20  p_limit(.  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 6f 62 6a 63 2c 0a  rp,.  int objc,.
142f0 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
14300 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 20 64   objv[].){.#if d
14310 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
14320 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41  ABLE_MEMORY_MANA
14330 47 45 4d 45 4e 54 29 20 26 26 20 21 64 65 66 69  GEMENT) && !defi
14340 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
14350 44 49 53 4b 49 4f 29 0a 20 20 69 6e 74 20 61 6d  DISKIO).  int am
14360 74 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 31  t;.  if( objc!=1
14370 20 26 26 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20   && objc!=2 ){. 
14380 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41     Tcl_WrongNumA
14390 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f  rgs(interp, 1, o
143a0 62 6a 76 2c 20 22 3f 4e 3f 22 29 3b 0a 20 20 20  bjv, "?N?");.   
143b0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
143c0 52 3b 0a 20 20 7d 0a 20 20 61 6d 74 20 3d 20 73  R;.  }.  amt = s
143d0 71 6c 69 74 65 33 54 68 72 65 61 64 44 61 74 61  qlite3ThreadData
143e0 52 65 61 64 4f 6e 6c 79 28 29 2d 3e 6e 53 6f 66  ReadOnly()->nSof
143f0 74 48 65 61 70 4c 69 6d 69 74 3b 0a 20 20 69 66  tHeapLimit;.  if
14400 28 20 6f 62 6a 63 3d 3d 32 20 29 7b 0a 20 20 20  ( objc==2 ){.   
14410 20 69 6e 74 20 4e 3b 0a 20 20 20 20 69 66 28 20   int N;.    if( 
14420 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62  Tcl_GetIntFromOb
14430 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 31  j(interp, objv[1
14440 5d 2c 20 26 4e 29 20 29 20 72 65 74 75 72 6e 20  ], &N) ) return 
14450 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73  TCL_ERROR;.    s
14460 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61 70  qlite3_soft_heap
14470 5f 6c 69 6d 69 74 28 4e 29 3b 0a 20 20 7d 0a 20  _limit(N);.  }. 
14480 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c   Tcl_SetObjResul
14490 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
144a0 77 49 6e 74 4f 62 6a 28 61 6d 74 29 29 3b 0a 23  wIntObj(amt));.#
144b0 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e 20 54  endif.  return T
144c0 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
144d0 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33  Usage:   sqlite3
144e0 5f 63 6c 65 61 72 5f 74 73 64 5f 6d 65 6d 64 65  _clear_tsd_memde
144f0 62 75 67 0a 2a 2a 0a 2a 2a 20 43 6c 65 61 72 20  bug.**.** Clear 
14500 61 6c 6c 20 6f 66 20 74 68 65 20 4d 45 4d 44 45  all of the MEMDE
14510 42 55 47 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  BUG information 
14520 6f 75 74 20 6f 66 20 74 68 72 65 61 64 2d 73 70  out of thread-sp
14530 65 63 69 66 69 63 20 64 61 74 61 2e 0a 2a 2a 20  ecific data..** 
14540 54 68 69 73 20 77 69 6c 6c 20 61 6c 6c 6f 77 20  This will allow 
14550 69 74 20 74 6f 20 62 65 20 64 65 61 6c 6c 6f 63  it to be dealloc
14560 61 74 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ated..*/.static 
14570 69 6e 74 20 74 65 73 74 5f 63 6c 65 61 72 5f 74  int test_clear_t
14580 73 64 5f 6d 65 6d 64 65 62 75 67 28 0a 20 20 76  sd_memdebug(.  v
14590 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
145a0 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
145b0 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
145c0 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
145d0 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23  ONST objv[].){.#
145e0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
145f0 45 5f 4d 45 4d 44 45 42 55 47 29 0a 20 20 54 68  E_MEMDEBUG).  Th
14600 72 65 61 64 44 61 74 61 20 2a 70 54 64 20 3d 20  readData *pTd = 
14610 73 71 6c 69 74 65 33 54 68 72 65 61 64 44 61 74  sqlite3ThreadDat
14620 61 28 29 3b 0a 20 20 70 54 64 2d 3e 6e 4d 61 78  a();.  pTd->nMax
14630 41 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 70 54 64  Alloc = 0;.  pTd
14640 2d 3e 7a 46 69 6c 65 20 3d 20 30 3b 0a 20 20 70  ->zFile = 0;.  p
14650 54 64 2d 3e 69 4c 69 6e 65 20 3d 20 30 3b 0a 23  Td->iLine = 0;.#
14660 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e 20 54  endif.  return T
14670 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
14680 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33  Usage:   sqlite3
14690 5f 74 73 64 5f 72 65 6c 65 61 73 65 0a 2a 2a 0a  _tsd_release.**.
146a0 2a 2a 20 43 61 6c 6c 20 73 71 6c 69 74 65 33 52  ** Call sqlite3R
146b0 65 6c 65 61 73 65 54 68 72 65 61 64 44 61 74 61  eleaseThreadData
146c0 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
146d0 74 65 73 74 5f 74 73 64 5f 72 65 6c 65 61 73 65  test_tsd_release
146e0 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
146f0 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
14700 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
14710 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
14720 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
14730 0a 29 7b 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .){.#if defined(
14740 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29  SQLITE_MEMDEBUG)
14750 0a 20 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73  .  sqlite3Releas
14760 65 54 68 72 65 61 64 44 61 74 61 28 29 3b 0a 23  eThreadData();.#
14770 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e 20 54  endif.  return T
14780 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
14790 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33  Usage:   sqlite3
147a0 5f 74 68 72 65 61 64 5f 63 6c 65 61 6e 75 70 0a  _thread_cleanup.
147b0 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 74 68 65 20 73  **.** Call the s
147c0 71 6c 69 74 65 33 5f 74 68 72 65 61 64 5f 63 6c  qlite3_thread_cl
147d0 65 61 6e 75 70 20 41 50 49 2e 0a 2a 2f 0a 73 74  eanup API..*/.st
147e0 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 74 68  atic int test_th
147f0 72 65 61 64 5f 63 6c 65 61 6e 75 70 28 0a 20 20  read_cleanup(.  
14800 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
14810 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
14820 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
14830 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
14840 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
14850 20 20 73 71 6c 69 74 65 33 5f 74 68 72 65 61 64    sqlite3_thread
14860 5f 63 6c 65 61 6e 75 70 28 29 3b 0a 20 20 72 65  _cleanup();.  re
14870 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
14880 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  ./*.** This rout
14890 69 6e 65 20 73 65 74 73 20 65 6e 74 72 69 65 73  ine sets entries
148a0 20 69 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 3a   in the global :
148b0 3a 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 28  :sqlite_options(
148c0 29 20 61 72 72 61 79 20 76 61 72 69 61 62 6c 65  ) array variable
148d0 0a 2a 2a 20 61 63 63 6f 72 64 69 6e 67 20 74 6f  .** according to
148e0 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d   the compile-tim
148f0 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  e configuration 
14900 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  of the database.
14910 20 20 54 65 73 74 0a 2a 2a 20 70 72 6f 63 65 64    Test.** proced
14920 75 72 65 73 20 75 73 65 20 74 68 69 73 20 74 6f  ures use this to
14930 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 6e 20   determine when 
14940 74 65 73 74 73 20 73 68 6f 75 6c 64 20 62 65 20  tests should be 
14950 6f 6d 69 74 74 65 64 2e 0a 2a 2f 0a 73 74 61 74  omitted..*/.stat
14960 69 63 20 76 6f 69 64 20 73 65 74 5f 6f 70 74 69  ic void set_opti
14970 6f 6e 73 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ons(Tcl_Interp *
14980 69 6e 74 65 72 70 29 7b 0a 23 69 66 64 65 66 20  interp){.#ifdef 
14990 53 51 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f 57  SQLITE_32BIT_ROW
149a0 49 44 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  ID.  Tcl_SetVar2
149b0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
149c0 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 72 6f 77 69  _options", "rowi
149d0 64 33 32 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47  d32", "1", TCL_G
149e0 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
149f0 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
14a00 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
14a10 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 72 6f 77 69  _options", "rowi
14a20 64 33 32 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  d32", "0", TCL_G
14a30 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
14a40 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
14a50 54 45 5f 43 41 53 45 5f 53 45 4e 53 49 54 49 56  TE_CASE_SENSITIV
14a60 45 5f 4c 49 4b 45 0a 20 20 54 63 6c 5f 53 65 74  E_LIKE.  Tcl_Set
14a70 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
14a80 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 22 63  lite_options","c
14a90 61 73 65 73 65 6e 73 69 74 69 76 65 6c 69 6b 65  asesensitivelike
14aa0 22 2c 22 31 22 2c 54 43 4c 5f 47 4c 4f 42 41 4c  ","1",TCL_GLOBAL
14ab0 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
14ac0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
14ad0 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
14ae0 6f 6e 73 22 2c 22 63 61 73 65 73 65 6e 73 69 74  ons","casesensit
14af0 69 76 65 6c 69 6b 65 22 2c 22 30 22 2c 54 43 4c  ivelike","0",TCL
14b00 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
14b10 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
14b20 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 44 49 52  LITE_DISABLE_DIR
14b30 53 59 4e 43 0a 20 20 54 63 6c 5f 53 65 74 56 61  SYNC.  Tcl_SetVa
14b40 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
14b50 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 64 69  te_options", "di
14b60 72 73 79 6e 63 22 2c 20 22 30 22 2c 20 54 43 4c  rsync", "0", TCL
14b70 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
14b80 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
14b90 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
14ba0 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 64 69  te_options", "di
14bb0 72 73 79 6e 63 22 2c 20 22 31 22 2c 20 54 43 4c  rsync", "1", TCL
14bc0 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
14bd0 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
14be0 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53  LITE_DISABLE_LFS
14bf0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
14c00 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
14c10 70 74 69 6f 6e 73 22 2c 20 22 6c 66 73 22 2c 20  ptions", "lfs", 
14c20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
14c30 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
14c40 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
14c50 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
14c60 6e 73 22 2c 20 22 6c 66 73 22 2c 20 22 31 22 2c  ns", "lfs", "1",
14c70 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
14c80 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
14c90 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c  f SQLITE_OMIT_AL
14ca0 54 45 52 54 41 42 4c 45 0a 20 20 54 63 6c 5f 53  TERTABLE.  Tcl_S
14cb0 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
14cc0 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
14cd0 20 22 61 6c 74 65 72 74 61 62 6c 65 22 2c 20 22   "altertable", "
14ce0 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
14cf0 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
14d00 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
14d10 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
14d20 73 22 2c 20 22 61 6c 74 65 72 74 61 62 6c 65 22  s", "altertable"
14d30 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
14d40 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
14d50 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
14d60 4d 49 54 5f 41 4e 41 4c 59 5a 45 0a 20 20 54 63  MIT_ANALYZE.  Tc
14d70 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
14d80 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
14d90 73 22 2c 20 22 61 6e 61 6c 79 7a 65 22 2c 20 22  s", "analyze", "
14da0 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
14db0 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
14dc0 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
14dd0 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
14de0 73 22 2c 20 22 61 6e 61 6c 79 7a 65 22 2c 20 22  s", "analyze", "
14df0 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
14e00 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
14e10 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
14e20 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20  _AUTHORIZATION. 
14e30 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
14e40 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
14e50 69 6f 6e 73 22 2c 20 22 61 75 74 68 22 2c 20 22  ions", "auth", "
14e60 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
14e70 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
14e80 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
14e90 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
14ea0 73 22 2c 20 22 61 75 74 68 22 2c 20 22 31 22 2c  s", "auth", "1",
14eb0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
14ec0 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
14ed0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
14ee0 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 54 63  TOINCREMENT.  Tc
14ef0 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
14f00 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
14f10 73 22 2c 20 22 61 75 74 6f 69 6e 63 22 2c 20 22  s", "autoinc", "
14f20 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
14f30 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
14f40 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
14f50 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
14f60 73 22 2c 20 22 61 75 74 6f 69 6e 63 22 2c 20 22  s", "autoinc", "
14f70 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
14f80 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
14f90 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
14fa0 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 54 63  _AUTOVACUUM.  Tc
14fb0 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
14fc0 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
14fd0 73 22 2c 20 22 61 75 74 6f 76 61 63 75 75 6d 22  s", "autovacuum"
14fe0 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
14ff0 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
15000 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
15010 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
15020 69 6f 6e 73 22 2c 20 22 61 75 74 6f 76 61 63 75  ions", "autovacu
15030 75 6d 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  um", "1", TCL_GL
15040 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
15050 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
15060 54 5f 41 55 54 4f 56 41 43 55 55 4d 20 2a 2f 0a  T_AUTOVACUUM */.
15070 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
15080 49 54 45 5f 44 45 46 41 55 4c 54 5f 41 55 54 4f  ITE_DEFAULT_AUTO
15090 56 41 43 55 55 4d 29 20 7c 7c 20 53 51 4c 49 54  VACUUM) || SQLIT
150a0 45 5f 44 45 46 41 55 4c 54 5f 41 55 54 4f 56 41  E_DEFAULT_AUTOVA
150b0 43 55 55 4d 3d 3d 30 0a 20 20 54 63 6c 5f 53 65  CUUM==0.  Tcl_Se
150c0 74 56 61 72 32 28 69 6e 74 65 72 70 2c 22 73 71  tVar2(interp,"sq
150d0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 22 64  lite_options","d
150e0 65 66 61 75 6c 74 5f 61 75 74 6f 76 61 63 75 75  efault_autovacuu
150f0 6d 22 2c 22 30 22 2c 54 43 4c 5f 47 4c 4f 42 41  m","0",TCL_GLOBA
15100 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
15110 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
15120 65 72 70 2c 22 73 71 6c 69 74 65 5f 6f 70 74 69  erp,"sqlite_opti
15130 6f 6e 73 22 2c 22 64 65 66 61 75 6c 74 5f 61 75  ons","default_au
15140 74 6f 76 61 63 75 75 6d 22 2c 22 31 22 2c 54 43  tovacuum","1",TC
15150 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
15160 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
15170 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 45 54 57 45  QLITE_OMIT_BETWE
15180 45 4e 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 0a  EN_OPTIMIZATION.
15190 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
151a0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
151b0 74 69 6f 6e 73 22 2c 20 22 62 65 74 77 65 65 6e  tions", "between
151c0 5f 6f 70 74 22 2c 20 22 30 22 2c 20 54 43 4c 5f  _opt", "0", TCL_
151d0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
151e0 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
151f0 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
15200 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 62 65 74  e_options", "bet
15210 77 65 65 6e 5f 6f 70 74 22 2c 20 22 31 22 2c 20  ween_opt", "1", 
15220 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
15230 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
15240 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 4c 4f   SQLITE_OMIT_BLO
15250 42 5f 4c 49 54 45 52 41 4c 0a 20 20 54 63 6c 5f  B_LITERAL.  Tcl_
15260 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
15270 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
15280 2c 20 22 62 6c 6f 62 6c 69 74 22 2c 20 22 30 22  , "bloblit", "0"
15290 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
152a0 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
152b0 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
152c0 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
152d0 2c 20 22 62 6c 6f 62 6c 69 74 22 2c 20 22 31 22  , "bloblit", "1"
152e0 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
152f0 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  Y);.#endif..#ifd
15300 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
15310 41 53 54 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  AST.  Tcl_SetVar
15320 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
15330 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63 61 73  e_options", "cas
15340 74 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  t", "0", TCL_GLO
15350 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
15360 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
15370 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
15380 70 74 69 6f 6e 73 22 2c 20 22 63 61 73 74 22 2c  ptions", "cast",
15390 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
153a0 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
153b0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
153c0 49 54 5f 43 48 45 43 4b 0a 20 20 54 63 6c 5f 53  IT_CHECK.  Tcl_S
153d0 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
153e0 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
153f0 20 22 63 68 65 63 6b 22 2c 20 22 30 22 2c 20 54   "check", "0", T
15400 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
15410 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
15420 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
15430 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
15440 63 68 65 63 6b 22 2c 20 22 31 22 2c 20 54 43 4c  check", "1", TCL
15450 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
15460 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
15470 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 4c 45  LITE_OMIT_COMPLE
15480 54 45 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  TE.  Tcl_SetVar2
15490 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
154a0 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63 6f 6d 70  _options", "comp
154b0 6c 65 74 65 22 2c 20 22 30 22 2c 20 54 43 4c 5f  lete", "0", TCL_
154c0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
154d0 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
154e0 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
154f0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63 6f 6d  e_options", "com
15500 70 6c 65 74 65 22 2c 20 22 31 22 2c 20 54 43 4c  plete", "1", TCL
15510 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
15520 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
15530 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 4f 55  LITE_OMIT_COMPOU
15540 4e 44 5f 53 45 4c 45 43 54 0a 20 20 54 63 6c 5f  ND_SELECT.  Tcl_
15550 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
15560 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
15570 2c 20 22 63 6f 6d 70 6f 75 6e 64 22 2c 20 22 30  , "compound", "0
15580 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
15590 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
155a0 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
155b0 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
155c0 22 2c 20 22 63 6f 6d 70 6f 75 6e 64 22 2c 20 22  ", "compound", "
155d0 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
155e0 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
155f0 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
15600 5f 43 4f 4e 46 4c 49 43 54 5f 43 4c 41 55 53 45  _CONFLICT_CLAUSE
15610 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
15620 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
15630 70 74 69 6f 6e 73 22 2c 20 22 63 6f 6e 66 6c 69  ptions", "confli
15640 63 74 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  ct", "0", TCL_GL
15650 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
15660 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
15670 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
15680 6f 70 74 69 6f 6e 73 22 2c 20 22 63 6f 6e 66 6c  options", "confl
15690 69 63 74 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47  ict", "1", TCL_G
156a0 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
156b0 64 69 66 0a 0a 23 69 66 20 4f 53 5f 55 4e 49 58  dif..#if OS_UNIX
156c0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
156d0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
156e0 70 74 69 6f 6e 73 22 2c 20 22 63 72 61 73 68 74  ptions", "crasht
156f0 65 73 74 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47  est", "1", TCL_G
15700 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
15710 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
15720 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
15730 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63 72 61 73  _options", "cras
15740 68 74 65 73 74 22 2c 20 22 30 22 2c 20 54 43 4c  htest", "0", TCL
15750 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
15760 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
15770 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54 45 54 49  LITE_OMIT_DATETI
15780 4d 45 5f 46 55 4e 43 53 0a 20 20 54 63 6c 5f 53  ME_FUNCS.  Tcl_S
15790 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
157a0 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
157b0 20 22 64 61 74 65 74 69 6d 65 22 2c 20 22 30 22   "datetime", "0"
157c0 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
157d0 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
157e0 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
157f0 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
15800 2c 20 22 64 61 74 65 74 69 6d 65 22 2c 20 22 31  , "datetime", "1
15810 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
15820 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
15830 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
15840 44 49 53 4b 49 4f 0a 20 20 54 63 6c 5f 53 65 74  DISKIO.  Tcl_Set
15850 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
15860 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
15870 64 69 73 6b 69 6f 22 2c 20 22 30 22 2c 20 54 43  diskio", "0", TC
15880 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
15890 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
158a0 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
158b0 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 64  ite_options", "d
158c0 69 73 6b 69 6f 22 2c 20 22 31 22 2c 20 54 43 4c  iskio", "1", TCL
158d0 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
158e0 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
158f0 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49  LITE_OMIT_EXPLAI
15900 4e 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  N.  Tcl_SetVar2(
15910 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
15920 6f 70 74 69 6f 6e 73 22 2c 20 22 65 78 70 6c 61  options", "expla
15930 69 6e 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  in", "0", TCL_GL
15940 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
15950 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
15960 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
15970 6f 70 74 69 6f 6e 73 22 2c 20 22 65 78 70 6c 61  options", "expla
15980 69 6e 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  in", "1", TCL_GL
15990 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
159a0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
159b0 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
159c0 50 4f 49 4e 54 0a 20 20 54 63 6c 5f 53 65 74 56  POINT.  Tcl_SetV
159d0 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
159e0 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 66  ite_options", "f
159f0 6c 6f 61 74 69 6e 67 70 6f 69 6e 74 22 2c 20 22  loatingpoint", "
15a00 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
15a10 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
15a20 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
15a30 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
15a40 73 22 2c 20 22 66 6c 6f 61 74 69 6e 67 70 6f 69  s", "floatingpoi
15a50 6e 74 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  nt", "1", TCL_GL
15a60 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
15a70 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
15a80 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
15a90 45 59 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  EY.  Tcl_SetVar2
15aa0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
15ab0 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 66 6f 72 65  _options", "fore
15ac0 69 67 6e 6b 65 79 22 2c 20 22 30 22 2c 20 54 43  ignkey", "0", TC
15ad0 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
15ae0 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
15af0 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
15b00 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 66  ite_options", "f
15b10 6f 72 65 69 67 6e 6b 65 79 22 2c 20 22 31 22 2c  oreignkey", "1",
15b20 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
15b30 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
15b40 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 47 4c  f SQLITE_OMIT_GL
15b50 4f 42 41 4c 52 45 43 4f 56 45 52 0a 20 20 54 63  OBALRECOVER.  Tc
15b60 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
15b70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
15b80 73 22 2c 20 22 67 6c 6f 62 61 6c 72 65 63 6f 76  s", "globalrecov
15b90 65 72 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  er", "0", TCL_GL
15ba0 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
15bb0 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
15bc0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
15bd0 6f 70 74 69 6f 6e 73 22 2c 20 22 67 6c 6f 62 61  options", "globa
15be0 6c 72 65 63 6f 76 65 72 22 2c 20 22 31 22 2c 20  lrecover", "1", 
15bf0 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
15c00 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
15c10 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54   SQLITE_OMIT_INT
15c20 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 20 20 54  EGRITY_CHECK.  T
15c30 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
15c40 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
15c50 6e 73 22 2c 20 22 69 6e 74 65 67 72 69 74 79 63  ns", "integrityc
15c60 6b 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  k", "0", TCL_GLO
15c70 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
15c80 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
15c90 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
15ca0 70 74 69 6f 6e 73 22 2c 20 22 69 6e 74 65 67 72  ptions", "integr
15cb0 69 74 79 63 6b 22 2c 20 22 31 22 2c 20 54 43 4c  ityck", "1", TCL
15cc0 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
15cd0 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
15ce0 4c 49 54 45 5f 4f 4d 49 54 5f 4c 49 4b 45 5f 4f  LITE_OMIT_LIKE_O
15cf0 50 54 49 4d 49 5a 41 54 49 4f 4e 0a 20 20 54 63  PTIMIZATION.  Tc
15d00 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
15d10 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
15d20 73 22 2c 20 22 6c 69 6b 65 5f 6f 70 74 22 2c 20  s", "like_opt", 
15d30 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
15d40 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
15d50 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
15d60 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
15d70 6e 73 22 2c 20 22 6c 69 6b 65 5f 6f 70 74 22 2c  ns", "like_opt",
15d80 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
15d90 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
15da0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
15db0 49 54 5f 4d 45 4d 4f 52 59 44 42 0a 20 20 54 63  IT_MEMORYDB.  Tc
15dc0 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
15dd0 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
15de0 73 22 2c 20 22 6d 65 6d 6f 72 79 64 62 22 2c 20  s", "memorydb", 
15df0 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
15e00 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
15e10 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
15e20 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
15e30 6e 73 22 2c 20 22 6d 65 6d 6f 72 79 64 62 22 2c  ns", "memorydb",
15e40 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
15e50 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
15e60 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
15e70 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41  ABLE_MEMORY_MANA
15e80 47 45 4d 45 4e 54 0a 20 20 54 63 6c 5f 53 65 74  GEMENT.  Tcl_Set
15e90 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
15ea0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
15eb0 6d 65 6d 6f 72 79 6d 61 6e 61 67 65 22 2c 20 22  memorymanage", "
15ec0 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
15ed0 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
15ee0 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
15ef0 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
15f00 73 22 2c 20 22 6d 65 6d 6f 72 79 6d 61 6e 61 67  s", "memorymanag
15f10 65 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  e", "0", TCL_GLO
15f20 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
15f30 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
15f40 5f 4f 4d 49 54 5f 4f 52 5f 4f 50 54 49 4d 49 5a  _OMIT_OR_OPTIMIZ
15f50 41 54 49 4f 4e 0a 20 20 54 63 6c 5f 53 65 74 56  ATION.  Tcl_SetV
15f60 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
15f70 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 6f  ite_options", "o
15f80 72 5f 6f 70 74 22 2c 20 22 30 22 2c 20 54 43 4c  r_opt", "0", TCL
15f90 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
15fa0 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
15fb0 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
15fc0 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 6f 72  te_options", "or
15fd0 5f 6f 70 74 22 2c 20 22 31 22 2c 20 54 43 4c 5f  _opt", "1", TCL_
15fe0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
15ff0 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
16000 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
16010 52 41 47 4d 41 53 0a 20 20 54 63 6c 5f 53 65 74  RAGMAS.  Tcl_Set
16020 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
16030 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
16040 70 61 67 65 72 5f 70 72 61 67 6d 61 73 22 2c 20  pager_pragmas", 
16050 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
16060 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
16070 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
16080 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
16090 6e 73 22 2c 20 22 70 61 67 65 72 5f 70 72 61 67  ns", "pager_prag
160a0 6d 61 73 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47  mas", "1", TCL_G
160b0 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
160c0 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
160d0 54 45 5f 4f 4d 49 54 5f 50 41 52 53 45 52 0a 20  TE_OMIT_PARSER. 
160e0 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
160f0 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
16100 69 6f 6e 73 22 2c 20 22 70 61 72 73 65 72 22 2c  ions", "parser",
16110 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
16120 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
16130 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
16140 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
16150 6f 6e 73 22 2c 20 22 70 61 72 73 65 72 22 2c 20  ons", "parser", 
16160 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
16170 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
16180 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
16190 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 29 20 7c  E_OMIT_PRAGMA) |
161a0 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
161b0 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
161c0 41 53 29 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  AS).  Tcl_SetVar
161d0 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
161e0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 70 72 61  e_options", "pra
161f0 67 6d 61 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  gma", "0", TCL_G
16200 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 20 20 54  LOBAL_ONLY);.  T
16210 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
16220 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
16230 6e 73 22 2c 20 22 69 6e 74 65 67 72 69 74 79 63  ns", "integrityc
16240 6b 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  k", "0", TCL_GLO
16250 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
16260 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
16270 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
16280 70 74 69 6f 6e 73 22 2c 20 22 70 72 61 67 6d 61  ptions", "pragma
16290 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
162a0 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
162b0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
162c0 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41  OMIT_PROGRESS_CA
162d0 4c 4c 42 41 43 4b 0a 20 20 54 63 6c 5f 53 65 74  LLBACK.  Tcl_Set
162e0 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
162f0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
16300 70 72 6f 67 72 65 73 73 22 2c 20 22 30 22 2c 20  progress", "0", 
16310 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
16320 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
16330 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
16340 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
16350 22 70 72 6f 67 72 65 73 73 22 2c 20 22 31 22 2c  "progress", "1",
16360 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
16370 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
16380 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
16390 52 45 44 45 46 5f 49 4f 0a 20 20 54 63 6c 5f 53  REDEF_IO.  Tcl_S
163a0 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
163b0 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
163c0 20 22 72 65 64 65 66 69 6f 22 2c 20 22 31 22 2c   "redefio", "1",
163d0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
163e0 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
163f0 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
16400 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
16410 20 22 72 65 64 65 66 69 6f 22 2c 20 22 30 22 2c   "redefio", "0",
16420 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
16430 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
16440 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 52 45  f SQLITE_OMIT_RE
16450 49 4e 44 45 58 0a 20 20 54 63 6c 5f 53 65 74 56  INDEX.  Tcl_SetV
16460 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
16470 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 72  ite_options", "r
16480 65 69 6e 64 65 78 22 2c 20 22 30 22 2c 20 54 43  eindex", "0", TC
16490 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
164a0 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
164b0 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
164c0 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 72  ite_options", "r
164d0 65 69 6e 64 65 78 22 2c 20 22 31 22 2c 20 54 43  eindex", "1", TC
164e0 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
164f0 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
16500 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d  QLITE_OMIT_SCHEM
16510 41 5f 50 52 41 47 4d 41 53 0a 20 20 54 63 6c 5f  A_PRAGMAS.  Tcl_
16520 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
16530 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
16540 2c 20 22 73 63 68 65 6d 61 5f 70 72 61 67 6d 61  , "schema_pragma
16550 73 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  s", "0", TCL_GLO
16560 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
16570 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
16580 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
16590 70 74 69 6f 6e 73 22 2c 20 22 73 63 68 65 6d 61  ptions", "schema
165a0 5f 70 72 61 67 6d 61 73 22 2c 20 22 31 22 2c 20  _pragmas", "1", 
165b0 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
165c0 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
165d0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48   SQLITE_OMIT_SCH
165e0 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47  EMA_VERSION_PRAG
165f0 4d 41 53 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  MAS.  Tcl_SetVar
16600 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
16610 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 73 63 68  e_options", "sch
16620 65 6d 61 5f 76 65 72 73 69 6f 6e 22 2c 20 22 30  ema_version", "0
16630 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
16640 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
16650 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
16660 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
16670 22 2c 20 22 73 63 68 65 6d 61 5f 76 65 72 73 69  ", "schema_versi
16680 6f 6e 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  on", "1", TCL_GL
16690 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
166a0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
166b0 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
166c0 43 48 45 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  CHE.  Tcl_SetVar
166d0 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
166e0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 73 68 61  e_options", "sha
166f0 72 65 64 5f 63 61 63 68 65 22 2c 20 22 30 22 2c  red_cache", "0",
16700 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
16710 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
16720 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
16730 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
16740 20 22 73 68 61 72 65 64 5f 63 61 63 68 65 22 2c   "shared_cache",
16750 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
16760 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
16770 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
16780 49 54 5f 53 55 42 51 55 45 52 59 0a 20 20 54 63  IT_SUBQUERY.  Tc
16790 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
167a0 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
167b0 73 22 2c 20 22 73 75 62 71 75 65 72 79 22 2c 20  s", "subquery", 
167c0 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
167d0 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
167e0 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
167f0 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
16800 6e 73 22 2c 20 22 73 75 62 71 75 65 72 79 22 2c  ns", "subquery",
16810 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
16820 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
16830 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
16840 49 54 5f 54 43 4c 5f 56 41 52 49 41 42 4c 45 0a  IT_TCL_VARIABLE.
16850 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
16860 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
16870 74 69 6f 6e 73 22 2c 20 22 74 63 6c 76 61 72 22  tions", "tclvar"
16880 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
16890 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
168a0 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
168b0 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
168c0 69 6f 6e 73 22 2c 20 22 74 63 6c 76 61 72 22 2c  ions", "tclvar",
168d0 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
168e0 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
168f0 23 69 66 20 64 65 66 69 6e 65 64 28 54 48 52 45  #if defined(THRE
16900 41 44 53 41 46 45 29 20 26 26 20 54 48 52 45 41  ADSAFE) && THREA
16910 44 53 41 46 45 0a 20 20 54 63 6c 5f 53 65 74 56  DSAFE.  Tcl_SetV
16920 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
16930 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 74  ite_options", "t
16940 68 72 65 61 64 73 61 66 65 22 2c 20 22 31 22 2c  hreadsafe", "1",
16950 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
16960 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
16970 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
16980 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
16990 20 22 74 68 72 65 61 64 73 61 66 65 22 2c 20 22   "threadsafe", "
169a0 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
169b0 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
169c0 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
169d0 5f 54 52 41 43 45 0a 20 20 54 63 6c 5f 53 65 74  _TRACE.  Tcl_Set
169e0 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
169f0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
16a00 74 72 61 63 65 22 2c 20 22 30 22 2c 20 54 43 4c  trace", "0", TCL
16a10 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
16a20 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
16a30 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
16a40 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 74 72  te_options", "tr
16a50 61 63 65 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47  ace", "1", TCL_G
16a60 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
16a70 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
16a80 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a  TE_OMIT_TRIGGER.
16a90 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
16aa0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
16ab0 74 69 6f 6e 73 22 2c 20 22 74 72 69 67 67 65 72  tions", "trigger
16ac0 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
16ad0 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
16ae0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
16af0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
16b00 74 69 6f 6e 73 22 2c 20 22 74 72 69 67 67 65 72  tions", "trigger
16b10 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
16b20 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
16b30 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
16b40 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 20 20 54 63  OMIT_TEMPDB.  Tc
16b50 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
16b60 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
16b70 73 22 2c 20 22 74 65 6d 70 64 62 22 2c 20 22 30  s", "tempdb", "0
16b80 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
16b90 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
16ba0 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
16bb0 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
16bc0 22 2c 20 22 74 65 6d 70 64 62 22 2c 20 22 31 22  ", "tempdb", "1"
16bd0 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
16be0 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  Y);.#endif..#ifd
16bf0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
16c00 54 46 31 36 0a 20 20 54 63 6c 5f 53 65 74 56 61  TF16.  Tcl_SetVa
16c10 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
16c20 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 75 74  te_options", "ut
16c30 66 31 36 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  f16", "0", TCL_G
16c40 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
16c50 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
16c60 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
16c70 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 75 74 66 31  _options", "utf1
16c80 36 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  6", "1", TCL_GLO
16c90 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
16ca0 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
16cb0 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 0a 20 20 54  _OMIT_VACUUM.  T
16cc0 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
16cd0 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
16ce0 6e 73 22 2c 20 22 76 61 63 75 75 6d 22 2c 20 22  ns", "vacuum", "
16cf0 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
16d00 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
16d10 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
16d20 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
16d30 73 22 2c 20 22 76 61 63 75 75 6d 22 2c 20 22 31  s", "vacuum", "1
16d40 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
16d50 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
16d60 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
16d70 56 49 45 57 0a 20 20 54 63 6c 5f 53 65 74 56 61  VIEW.  Tcl_SetVa
16d80 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
16d90 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 76 69  te_options", "vi
16da0 65 77 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  ew", "0", TCL_GL
16db0 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
16dc0 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
16dd0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
16de0 6f 70 74 69 6f 6e 73 22 2c 20 22 76 69 65 77 22  options", "view"
16df0 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
16e00 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
16e10 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65  }../*.** Registe
16e20 72 20 63 6f 6d 6d 61 6e 64 73 20 77 69 74 68 20  r commands with 
16e30 74 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  the TCL interpre
16e40 74 65 72 2e 0a 2a 2f 0a 69 6e 74 20 53 71 6c 69  ter..*/.int Sqli
16e50 74 65 74 65 73 74 31 5f 49 6e 69 74 28 54 63 6c  tetest1_Init(Tcl
16e60 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 29  _Interp *interp)
16e70 7b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  {.  extern int s
16e80 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f  qlite3_search_co
16e90 75 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e  unt;.  extern in
16ea0 74 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  t sqlite3_interr
16eb0 75 70 74 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74  upt_count;.  ext
16ec0 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ern int sqlite3_
16ed0 6f 70 65 6e 5f 66 69 6c 65 5f 63 6f 75 6e 74 3b  open_file_count;
16ee0 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
16ef0 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74  lite3_sort_count
16f00 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  ;.  extern int s
16f10 71 6c 69 74 65 33 5f 63 75 72 72 65 6e 74 5f 74  qlite3_current_t
16f20 69 6d 65 3b 0a 20 20 73 74 61 74 69 63 20 73 74  ime;.  static st
16f30 72 75 63 74 20 7b 0a 20 20 20 20 20 63 68 61 72  ruct {.     char
16f40 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20 20 54 63   *zName;.     Tc
16f50 6c 5f 43 6d 64 50 72 6f 63 20 2a 78 50 72 6f 63  l_CmdProc *xProc
16f60 3b 0a 20 20 7d 20 61 43 6d 64 5b 5d 20 3d 20 7b  ;.  } aCmd[] = {
16f70 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
16f80 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 22 2c 20 20  _mprintf_int",  
16f90 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d           (Tcl_Cm
16fa0 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33 5f 6d  dProc*)sqlite3_m
16fb0 70 72 69 6e 74 66 5f 69 6e 74 20 20 20 20 7d 2c  printf_int    },
16fc0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
16fd0 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 36 34 22 2c  _mprintf_int64",
16fe0 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d           (Tcl_Cm
16ff0 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33 5f 6d  dProc*)sqlite3_m
17000 70 72 69 6e 74 66 5f 69 6e 74 36 34 20 20 7d 2c  printf_int64  },
17010 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
17020 5f 6d 70 72 69 6e 74 66 5f 73 74 72 22 2c 20 20  _mprintf_str",  
17030 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d           (Tcl_Cm
17040 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33 5f 6d  dProc*)sqlite3_m
17050 70 72 69 6e 74 66 5f 73 74 72 20 20 20 20 7d 2c  printf_str    },
17060 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
17070 5f 6d 70 72 69 6e 74 66 5f 73 74 72 6f 6e 6c 79  _mprintf_stronly
17080 22 2c 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d  ",       (Tcl_Cm
17090 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33 5f 6d  dProc*)sqlite3_m
170a0 70 72 69 6e 74 66 5f 73 74 72 6f 6e 6c 79 7d 2c  printf_stronly},
170b0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
170c0 5f 6d 70 72 69 6e 74 66 5f 64 6f 75 62 6c 65 22  _mprintf_double"
170d0 2c 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d  ,        (Tcl_Cm
170e0 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33 5f 6d  dProc*)sqlite3_m
170f0 70 72 69 6e 74 66 5f 64 6f 75 62 6c 65 20 7d 2c  printf_double },
17100 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
17110 5f 6d 70 72 69 6e 74 66 5f 73 63 61 6c 65 64 22  _mprintf_scaled"
17120 2c 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d  ,        (Tcl_Cm
17130 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33 5f 6d  dProc*)sqlite3_m
17140 70 72 69 6e 74 66 5f 73 63 61 6c 65 64 20 7d 2c  printf_scaled },
17150 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
17160 5f 6d 70 72 69 6e 74 66 5f 68 65 78 64 6f 75 62  _mprintf_hexdoub
17170 6c 65 22 2c 20 20 20 28 54 63 6c 5f 43 6d 64 50  le",   (Tcl_CmdP
17180 72 6f 63 2a 29 73 71 6c 69 74 65 33 5f 6d 70 72  roc*)sqlite3_mpr
17190 69 6e 74 66 5f 68 65 78 64 6f 75 62 6c 65 7d 2c  intf_hexdouble},
171a0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
171b0 5f 6d 70 72 69 6e 74 66 5f 7a 5f 74 65 73 74 22  _mprintf_z_test"
171c0 2c 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d  ,        (Tcl_Cm
171d0 64 50 72 6f 63 2a 29 74 65 73 74 5f 6d 70 72 69  dProc*)test_mpri
171e0 6e 74 66 5f 7a 20 20 20 20 20 20 20 20 7d 2c 0a  ntf_z        },.
171f0 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
17200 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
17210 64 22 2c 20 20 20 20 20 28 54 63 6c 5f 43 6d 64  d",     (Tcl_Cmd
17220 50 72 6f 63 2a 29 74 65 73 74 5f 6c 61 73 74 5f  Proc*)test_last_
17230 72 6f 77 69 64 20 20 20 20 20 20 20 7d 2c 0a 20  rowid       },. 
17240 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 65      { "sqlite3_e
17250 78 65 63 5f 70 72 69 6e 74 66 22 2c 20 20 20 20  xec_printf",    
17260 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
17270 72 6f 63 2a 29 74 65 73 74 5f 65 78 65 63 5f 70  roc*)test_exec_p
17280 72 69 6e 74 66 20 20 20 20 20 20 7d 2c 0a 20 20  rintf      },.  
17290 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 67 65     { "sqlite3_ge
172a0 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74 66 22 2c  t_table_printf",
172b0 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72        (Tcl_CmdPr
172c0 6f 63 2a 29 74 65 73 74 5f 67 65 74 5f 74 61 62  oc*)test_get_tab
172d0 6c 65 5f 70 72 69 6e 74 66 20 7d 2c 0a 20 20 20  le_printf },.   
172e0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6c 6f    { "sqlite3_clo
172f0 73 65 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  se",            
17300 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f       (Tcl_CmdPro
17310 63 2a 29 73 71 6c 69 74 65 5f 74 65 73 74 5f 63  c*)sqlite_test_c
17320 6c 6f 73 65 20 20 20 20 20 7d 2c 0a 20 20 20 20  lose     },.    
17330 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 72 65 61   { "sqlite3_crea
17340 74 65 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 20 20  te_function",   
17350 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63      (Tcl_CmdProc
17360 2a 29 74 65 73 74 5f 63 72 65 61 74 65 5f 66 75  *)test_create_fu
17370 6e 63 74 69 6f 6e 20 20 7d 2c 0a 20 20 20 20 20  nction  },.     
17380 7b 20 22 73 71 6c 69 74 65 33 5f 63 72 65 61 74  { "sqlite3_creat
17390 65 5f 61 67 67 72 65 67 61 74 65 22 2c 20 20 20  e_aggregate",   
173a0 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
173b0 29 74 65 73 74 5f 63 72 65 61 74 65 5f 61 67 67  )test_create_agg
173c0 72 65 67 61 74 65 20 7d 2c 0a 20 20 20 20 20 7b  regate },.     {
173d0 20 22 73 71 6c 69 74 65 5f 72 65 67 69 73 74 65   "sqlite_registe
173e0 72 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22  r_test_function"
173f0 2c 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29  , (Tcl_CmdProc*)
17400 74 65 73 74 5f 72 65 67 69 73 74 65 72 5f 66 75  test_register_fu
17410 6e 63 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20  nc    },.     { 
17420 22 73 71 6c 69 74 65 5f 61 62 6f 72 74 22 2c 20  "sqlite_abort", 
17430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17440 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73   (Tcl_CmdProc*)s
17450 71 6c 69 74 65 5f 61 62 6f 72 74 20 20 20 20 20  qlite_abort     
17460 20 20 20 20 20 7d 2c 0a 23 69 66 64 65 66 20 53       },.#ifdef S
17470 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20  QLITE_MEMDEBUG. 
17480 20 20 20 20 7b 20 22 73 71 6c 69 74 65 5f 6d 61      { "sqlite_ma
17490 6c 6c 6f 63 5f 66 61 69 6c 22 2c 20 20 20 20 20  lloc_fail",     
174a0 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
174b0 72 6f 63 2a 29 73 71 6c 69 74 65 5f 6d 61 6c 6c  roc*)sqlite_mall
174c0 6f 63 5f 66 61 69 6c 20 20 20 20 7d 2c 0a 20 20  oc_fail    },.  
174d0 20 20 20 7b 20 22 73 71 6c 69 74 65 5f 6d 61 6c     { "sqlite_mal
174e0 6c 6f 63 5f 73 74 61 74 22 2c 20 20 20 20 20 20  loc_stat",      
174f0 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72        (Tcl_CmdPr
17500 6f 63 2a 29 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f  oc*)sqlite_mallo
17510 63 5f 73 74 61 74 20 20 20 20 7d 2c 0a 23 65 6e  c_stat    },.#en
17520 64 69 66 0a 20 20 20 20 20 7b 20 22 73 71 6c 69  dif.     { "sqli
17530 74 65 5f 62 69 6e 64 22 2c 20 20 20 20 20 20 20  te_bind",       
17540 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c              (Tcl
17550 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 62  _CmdProc*)test_b
17560 69 6e 64 20 20 20 20 20 20 20 20 20 20 20 20 20  ind             
17570 7d 2c 0a 20 20 20 20 20 7b 20 22 62 72 65 61 6b  },.     { "break
17580 70 6f 69 6e 74 22 2c 20 20 20 20 20 20 20 20 20  point",         
17590 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f             (Tcl_
175a0 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 62 72  CmdProc*)test_br
175b0 65 61 6b 70 6f 69 6e 74 20 20 20 20 20 20 20 7d  eakpoint       }
175c0 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
175d0 33 5f 6b 65 79 22 2c 20 20 20 20 20 20 20 20 20  3_key",         
175e0 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43            (Tcl_C
175f0 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 6b 65 79  mdProc*)test_key
17600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c                },
17610 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
17620 5f 72 65 6b 65 79 22 2c 20 20 20 20 20 20 20 20  _rekey",        
17630 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d           (Tcl_Cm
17640 64 50 72 6f 63 2a 29 74 65 73 74 5f 72 65 6b 65  dProc*)test_reke
17650 79 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a  y            },.
17660 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 5f 73       { "sqlite_s
17670 65 74 5f 6d 61 67 69 63 22 2c 20 20 20 20 20 20  et_magic",      
17680 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64          (Tcl_Cmd
17690 50 72 6f 63 2a 29 73 71 6c 69 74 65 5f 73 65 74  Proc*)sqlite_set
176a0 5f 6d 61 67 69 63 20 20 20 20 20 20 7d 2c 0a 20  _magic      },. 
176b0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 69      { "sqlite3_i
176c0 6e 74 65 72 72 75 70 74 22 2c 20 20 20 20 20 20  nterrupt",      
176d0 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
176e0 72 6f 63 2a 29 74 65 73 74 5f 69 6e 74 65 72 72  roc*)test_interr
176f0 75 70 74 20 20 20 20 20 20 20 20 7d 2c 0a 23 69  upt        },.#i
17700 66 20 30 0a 20 20 20 20 20 7b 20 22 73 71 6c 69  f 0.     { "sqli
17710 74 65 33 5f 73 6c 65 65 70 22 2c 20 20 20 20 20  te3_sleep",     
17720 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c              (Tcl
17730 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 73  _CmdProc*)test_s
17740 6c 65 65 70 20 20 20 20 20 20 20 20 20 20 20 20  leep            
17750 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 7b  },.#endif.     {
17760 20 22 73 71 6c 69 74 65 5f 64 65 6c 65 74 65 5f   "sqlite_delete_
17770 66 75 6e 63 74 69 6f 6e 22 2c 20 20 20 20 20 20  function",      
17780 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29    (Tcl_CmdProc*)
17790 64 65 6c 65 74 65 5f 66 75 6e 63 74 69 6f 6e 20  delete_function 
177a0 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20        },.     { 
177b0 22 73 71 6c 69 74 65 5f 64 65 6c 65 74 65 5f 63  "sqlite_delete_c
177c0 6f 6c 6c 61 74 69 6f 6e 22 2c 20 20 20 20 20 20  ollation",      
177d0 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 64   (Tcl_CmdProc*)d
177e0 65 6c 65 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 20  elete_collation 
177f0 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22       },.     { "
17800 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f  sqlite3_get_auto
17810 63 6f 6d 6d 69 74 22 2c 20 20 20 20 20 20 20 20  commit",        
17820 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 67 65  (Tcl_CmdProc*)ge
17830 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 20 20 20  t_autocommit    
17840 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73      },.     { "s
17850 71 6c 69 74 65 33 5f 73 74 61 63 6b 5f 75 73 65  qlite3_stack_use
17860 64 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 28  d",            (
17870 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73  Tcl_CmdProc*)tes
17880 74 5f 73 74 61 63 6b 5f 75 73 65 64 20 20 20 20  t_stack_used    
17890 20 20 20 7d 2c 0a 20 20 7d 3b 0a 20 20 73 74 61     },.  };.  sta
178a0 74 69 63 20 73 74 72 75 63 74 20 7b 0a 20 20 20  tic struct {.   
178b0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20    char *zName;. 
178c0 20 20 20 20 54 63 6c 5f 4f 62 6a 43 6d 64 50 72      Tcl_ObjCmdPr
178d0 6f 63 20 2a 78 50 72 6f 63 3b 0a 20 20 20 20 20  oc *xProc;.     
178e0 76 6f 69 64 20 2a 63 6c 69 65 6e 74 44 61 74 61  void *clientData
178f0 3b 0a 20 20 7d 20 61 4f 62 6a 43 6d 64 5b 5d 20  ;.  } aObjCmd[] 
17900 3d 20 7b 0a 20 20 20 20 20 7b 20 22 73 71 6c 69  = {.     { "sqli
17910 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70  te3_connection_p
17920 6f 69 6e 74 65 72 22 2c 20 20 20 20 67 65 74 5f  ointer",    get_
17930 73 71 6c 69 74 65 5f 70 6f 69 6e 74 65 72 2c 20  sqlite_pointer, 
17940 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
17950 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 22 2c 20  ite3_bind_int", 
17960 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73               tes
17970 74 5f 62 69 6e 64 5f 69 6e 74 2c 20 20 20 20 20  t_bind_int,     
17980 20 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71   0 },.     { "sq
17990 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34  lite3_bind_int64
179a0 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 74 65  ",            te
179b0 73 74 5f 62 69 6e 64 5f 69 6e 74 36 34 2c 20 20  st_bind_int64,  
179c0 20 20 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73    0 },.     { "s
179d0 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62  qlite3_bind_doub
179e0 6c 65 22 2c 20 20 20 20 20 20 20 20 20 20 20 74  le",           t
179f0 65 73 74 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 2c  est_bind_double,
17a00 20 20 20 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22     0 },.     { "
17a10 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c  sqlite3_bind_nul
17a20 6c 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  l",             
17a30 74 65 73 74 5f 62 69 6e 64 5f 6e 75 6c 6c 20 20  test_bind_null  
17a40 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20     ,0 },.     { 
17a50 22 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65  "sqlite3_bind_te
17a60 78 74 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  xt",            
17a70 20 74 65 73 74 5f 62 69 6e 64 5f 74 65 78 74 20   test_bind_text 
17a80 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b      ,0 },.     {
17a90 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74   "sqlite3_bind_t
17aa0 65 78 74 31 36 22 2c 20 20 20 20 20 20 20 20 20  ext16",         
17ab0 20 20 74 65 73 74 5f 62 69 6e 64 5f 74 65 78 74    test_bind_text
17ac0 31 36 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20  16   ,0 },.     
17ad0 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  { "sqlite3_bind_
17ae0 62 6c 6f 62 22 2c 20 20 20 20 20 20 20 20 20 20  blob",          
17af0 20 20 20 74 65 73 74 5f 62 69 6e 64 5f 62 6c 6f     test_bind_blo
17b00 62 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20  b     ,0 },.    
17b10 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64   { "sqlite3_bind
17b20 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74  _parameter_count
17b30 22 2c 20 20 74 65 73 74 5f 62 69 6e 64 5f 70 61  ",  test_bind_pa
17b40 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 2c 20 30  rameter_count, 0
17b50 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
17b60 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
17b70 72 5f 6e 61 6d 65 22 2c 20 20 20 74 65 73 74 5f  r_name",   test_
17b80 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e  bind_parameter_n
17b90 61 6d 65 2c 20 20 30 7d 2c 0a 20 20 20 20 20 7b  ame,  0},.     {
17ba0 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70   "sqlite3_bind_p
17bb0 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 22 2c  arameter_index",
17bc0 20 20 74 65 73 74 5f 62 69 6e 64 5f 70 61 72 61    test_bind_para
17bd0 6d 65 74 65 72 5f 69 6e 64 65 78 2c 20 30 7d 2c  meter_index, 0},
17be0 0a 23 69 66 20 30 0a 20 20 20 20 20 7b 20 22 73  .#if 0.     { "s
17bf0 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e  qlite3_clear_bin
17c00 64 69 6e 67 73 22 2c 20 20 20 20 20 20 20 20 74  dings",        t
17c10 65 73 74 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e  est_clear_bindin
17c20 67 73 2c 20 30 7d 2c 0a 23 65 6e 64 69 66 0a 20  gs, 0},.#endif. 
17c30 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 65      { "sqlite3_e
17c40 72 72 63 6f 64 65 22 2c 20 20 20 20 20 20 20 20  rrcode",        
17c50 20 20 20 20 20 20 20 74 65 73 74 5f 65 72 72 63         test_errc
17c60 6f 64 65 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a  ode       ,0 },.
17c70 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
17c80 65 72 72 6d 73 67 22 2c 20 20 20 20 20 20 20 20  errmsg",        
17c90 20 20 20 20 20 20 20 20 74 65 73 74 5f 65 72 72          test_err
17ca0 6d 73 67 20 20 20 20 20 20 20 20 2c 30 20 7d 2c  msg        ,0 },
17cb0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
17cc0 5f 65 72 72 6d 73 67 31 36 22 2c 20 20 20 20 20  _errmsg16",     
17cd0 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 65 72           test_er
17ce0 72 6d 73 67 31 36 20 20 20 20 20 20 2c 30 20 7d  rmsg16      ,0 }
17cf0 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
17d00 33 5f 6f 70 65 6e 22 2c 20 20 20 20 20 20 20 20  3_open",        
17d10 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 6f            test_o
17d20 70 65 6e 20 20 20 20 20 20 20 20 20 20 2c 30 20  pen          ,0 
17d30 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
17d40 65 33 5f 6f 70 65 6e 31 36 22 2c 20 20 20 20 20  e3_open16",     
17d50 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f             test_
17d60 6f 70 65 6e 31 36 20 20 20 20 20 20 20 20 2c 30  open16        ,0
17d70 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
17d80 74 65 33 5f 63 6f 6d 70 6c 65 74 65 31 36 22 2c  te3_complete16",
17d90 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
17da0 5f 63 6f 6d 70 6c 65 74 65 31 36 20 20 20 20 2c  _complete16    ,
17db0 30 20 7d 2c 0a 0a 20 20 20 20 20 7b 20 22 73 71  0 },..     { "sq
17dc0 6c 69 74 65 33 5f 70 72 65 70 61 72 65 22 2c 20  lite3_prepare", 
17dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65                te
17de0 73 74 5f 70 72 65 70 61 72 65 20 20 20 20 20 20  st_prepare      
17df0 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73   ,0 },.     { "s
17e00 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31 36  qlite3_prepare16
17e10 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 74  ",             t
17e20 65 73 74 5f 70 72 65 70 61 72 65 31 36 20 20 20  est_prepare16   
17e30 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22    ,0 },.     { "
17e40 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
17e50 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ",              
17e60 74 65 73 74 5f 66 69 6e 61 6c 69 7a 65 20 20 20  test_finalize   
17e70 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20     ,0 },.     { 
17e80 22 73 71 6c 69 74 65 33 5f 72 65 73 65 74 22 2c  "sqlite3_reset",
17e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ea0 20 74 65 73 74 5f 72 65 73 65 74 20 20 20 20 20   test_reset     
17eb0 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b      ,0 },.     {
17ec0 20 22 73 71 6c 69 74 65 33 5f 65 78 70 69 72 65   "sqlite3_expire
17ed0 64 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  d",             
17ee0 20 20 74 65 73 74 5f 65 78 70 69 72 65 64 20 20    test_expired  
17ef0 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20       ,0 },.     
17f00 7b 20 22 73 71 6c 69 74 65 33 5f 74 72 61 6e 73  { "sqlite3_trans
17f10 66 65 72 5f 62 69 6e 64 69 6e 67 73 22 2c 20 20  fer_bindings",  
17f20 20 20 20 74 65 73 74 5f 74 72 61 6e 73 66 65 72     test_transfer
17f30 5f 62 69 6e 64 20 2c 30 20 7d 2c 0a 20 20 20 20  _bind ,0 },.    
17f40 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 68 61 6e   { "sqlite3_chan
17f50 67 65 73 22 2c 20 20 20 20 20 20 20 20 20 20 20  ges",           
17f60 20 20 20 20 74 65 73 74 5f 63 68 61 6e 67 65 73      test_changes
17f70 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20         ,0 },.   
17f80 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 73 74 65    { "sqlite3_ste
17f90 70 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  p",             
17fa0 20 20 20 20 20 74 65 73 74 5f 73 74 65 70 20 20       test_step  
17fb0 20 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 0a 20          ,0 },.. 
17fc0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 72      { "sqlite3_r
17fd0 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 22 2c 20  elease_memory", 
17fe0 20 20 20 20 20 20 20 74 65 73 74 5f 72 65 6c 65         test_rele
17ff0 61 73 65 5f 6d 65 6d 6f 72 79 2c 20 20 20 20 20  ase_memory,     
18000 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69  0},.     { "sqli
18010 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69  te3_soft_heap_li
18020 6d 69 74 22 2c 20 20 20 20 20 20 20 74 65 73 74  mit",       test
18030 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74  _soft_heap_limit
18040 2c 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 7b 20  ,    0},.     { 
18050 22 73 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f 74  "sqlite3_clear_t
18060 73 64 5f 6d 65 6d 64 65 62 75 67 22 2c 20 20 20  sd_memdebug",   
18070 20 74 65 73 74 5f 63 6c 65 61 72 5f 74 73 64 5f   test_clear_tsd_
18080 6d 65 6d 64 65 62 75 67 2c 20 30 7d 2c 0a 20 20  memdebug, 0},.  
18090 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 74 73     { "sqlite3_ts
180a0 64 5f 72 65 6c 65 61 73 65 22 2c 20 20 20 20 20  d_release",     
180b0 20 20 20 20 20 20 74 65 73 74 5f 74 73 64 5f 72        test_tsd_r
180c0 65 6c 65 61 73 65 2c 20 20 20 20 20 20 20 20 30  elease,        0
180d0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
180e0 65 33 5f 74 68 72 65 61 64 5f 63 6c 65 61 6e 75  e3_thread_cleanu
180f0 70 22 2c 20 20 20 20 20 20 20 20 74 65 73 74 5f  p",        test_
18100 74 68 72 65 61 64 5f 63 6c 65 61 6e 75 70 2c 20  thread_cleanup, 
18110 20 20 20 20 30 7d 2c 0a 0a 20 20 20 20 20 2f 2a      0},..     /*
18120 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
18130 2a 28 29 20 41 50 49 20 2a 2f 0a 20 20 20 20 20  *() API */.     
18140 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  { "sqlite3_colum
18150 6e 5f 63 6f 75 6e 74 22 2c 20 20 20 20 20 20 20  n_count",       
18160 20 20 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 63     test_column_c
18170 6f 75 6e 74 20 20 2c 30 20 7d 2c 0a 20 20 20 20  ount  ,0 },.    
18180 20 7b 20 22 73 71 6c 69 74 65 33 5f 64 61 74 61   { "sqlite3_data
18190 5f 63 6f 75 6e 74 22 2c 20 20 20 20 20 20 20 20  _count",        
181a0 20 20 20 20 74 65 73 74 5f 64 61 74 61 5f 63 6f      test_data_co
181b0 75 6e 74 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20  unt    ,0 },.   
181c0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c    { "sqlite3_col
181d0 75 6d 6e 5f 74 79 70 65 22 2c 20 20 20 20 20 20  umn_type",      
181e0 20 20 20 20 20 74 65 73 74 5f 63 6f 6c 75 6d 6e       test_column
181f0 5f 74 79 70 65 20 20 20 2c 30 20 7d 2c 0a 20 20  _type   ,0 },.  
18200 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f     { "sqlite3_co
18210 6c 75 6d 6e 5f 62 6c 6f 62 22 2c 20 20 20 20 20  lumn_blob",     
18220 20 20 20 20 20 20 74 65 73 74 5f 63 6f 6c 75 6d        test_colum
18230 6e 5f 62 6c 6f 62 20 20 20 2c 30 20 7d 2c 0a 20  n_blob   ,0 },. 
18240 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63      { "sqlite3_c
18250 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 22 2c 20 20  olumn_double",  
18260 20 20 20 20 20 20 20 74 65 73 74 5f 63 6f 6c 75         test_colu
18270 6d 6e 5f 64 6f 75 62 6c 65 20 2c 30 20 7d 2c 0a  mn_double ,0 },.
18280 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
18290 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 22 2c 20 20  column_int64",  
182a0 20 20 20 20 20 20 20 20 74 65 73 74 5f 63 6f 6c          test_col
182b0 75 6d 6e 5f 69 6e 74 36 34 20 20 2c 30 20 7d 2c  umn_int64  ,0 },
182c0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
182d0 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 22 2c 20 20  _column_text",  
182e0 20 20 20 20 20 74 65 73 74 5f 73 74 6d 74 5f 75       test_stmt_u
182f0 74 66 38 2c 20 20 73 71 6c 69 74 65 33 5f 63 6f  tf8,  sqlite3_co
18300 6c 75 6d 6e 5f 74 65 78 74 20 20 20 20 20 20 7d  lumn_text      }
18310 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
18320 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70  3_column_decltyp
18330 65 22 2c 20 20 20 74 65 73 74 5f 73 74 6d 74 5f  e",   test_stmt_
18340 75 74 66 38 2c 20 20 73 71 6c 69 74 65 33 5f 63  utf8,  sqlite3_c
18350 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 20 20  olumn_decltype  
18360 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
18370 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 22 2c  e3_column_name",
18380 20 20 20 20 20 20 20 74 65 73 74 5f 73 74 6d 74         test_stmt
18390 5f 75 74 66 38 2c 20 20 73 71 6c 69 74 65 33 5f  _utf8,  sqlite3_
183a0 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 20 20 20 20 20  column_name     
183b0 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
183c0 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 22 2c  te3_column_int",
183d0 20 20 20 20 20 20 20 20 74 65 73 74 5f 73 74 6d          test_stm
183e0 74 5f 69 6e 74 2c 20 20 20 73 71 6c 69 74 65 33  t_int,   sqlite3
183f0 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 20 20 20 20  _column_int     
18400 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c    },.     { "sql
18410 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65  ite3_column_byte
18420 73 22 2c 20 20 20 20 20 20 74 65 73 74 5f 73 74  s",      test_st
18430 6d 74 5f 69 6e 74 2c 20 20 20 73 71 6c 69 74 65  mt_int,   sqlite
18440 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 20 20  3_column_bytes  
18450 20 20 20 7d 2c 0a 23 69 66 6e 64 65 66 20 53 51     },.#ifndef SQ
18460 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
18470 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
18480 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 31 36 22 2c  column_bytes16",
18490 20 20 20 20 74 65 73 74 5f 73 74 6d 74 5f 69 6e      test_stmt_in
184a0 74 2c 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c  t,   sqlite3_col
184b0 75 6d 6e 5f 62 79 74 65 73 31 36 20 20 20 7d 2c  umn_bytes16   },
184c0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
184d0 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 22 2c  _column_text16",
184e0 20 20 20 20 20 74 65 73 74 5f 73 74 6d 74 5f 75       test_stmt_u
184f0 74 66 31 36 2c 20 73 71 6c 69 74 65 33 5f 63 6f  tf16, sqlite3_co
18500 6c 75 6d 6e 5f 74 65 78 74 31 36 20 20 20 20 7d  lumn_text16    }
18510 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
18520 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70  3_column_decltyp
18530 65 31 36 22 2c 20 74 65 73 74 5f 73 74 6d 74 5f  e16", test_stmt_
18540 75 74 66 31 36 2c 20 73 71 6c 69 74 65 33 5f 63  utf16, sqlite3_c
18550 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 31 36  olumn_decltype16
18560 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
18570 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36  e3_column_name16
18580 22 2c 20 20 20 20 20 74 65 73 74 5f 73 74 6d 74  ",     test_stmt
18590 5f 75 74 66 31 36 2c 20 73 71 6c 69 74 65 33 5f  _utf16, sqlite3_
185a0 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36 20 20 20  column_name16   
185b0 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 20 20 20   },.#endif.     
185c0 7b 20 22 73 71 6c 69 74 65 33 5f 67 6c 6f 62 61  { "sqlite3_globa
185d0 6c 5f 72 65 63 6f 76 65 72 22 2c 20 20 20 20 74  l_recover",    t
185e0 65 73 74 5f 67 6c 6f 62 61 6c 5f 72 65 63 6f 76  est_global_recov
185f0 65 72 2c 20 30 20 20 20 7d 2c 0a 0a 20 20 20 20  er, 0   },..    
18600 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 73 20 66 72   /* Functions fr
18610 6f 6d 20 6f 73 2e 68 20 2a 2f 0a 23 69 66 6e 64  om os.h */.#ifnd
18620 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44  ef SQLITE_OMIT_D
18630 49 53 4b 49 4f 0a 20 20 20 20 20 7b 20 22 73 71  ISKIO.     { "sq
18640 6c 69 74 65 33 4f 73 4f 70 65 6e 52 65 61 64 57  lite3OsOpenReadW
18650 72 69 74 65 22 2c 74 65 73 74 5f 73 71 6c 69 74  rite",test_sqlit
18660 65 33 4f 73 4f 70 65 6e 52 65 61 64 57 72 69 74  e3OsOpenReadWrit
18670 65 2c 20 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22  e, 0 },.     { "
18680 73 71 6c 69 74 65 33 4f 73 43 6c 6f 73 65 22 2c  sqlite3OsClose",
18690 20 20 20 20 20 20 20 20 74 65 73 74 5f 73 71 6c          test_sql
186a0 69 74 65 33 4f 73 43 6c 6f 73 65 2c 20 30 20 7d  ite3OsClose, 0 }
186b0 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
186c0 33 4f 73 4c 6f 63 6b 22 2c 20 20 20 20 20 20 20  3OsLock",       
186d0 20 20 74 65 73 74 5f 73 71 6c 69 74 65 33 4f 73    test_sqlite3Os
186e0 4c 6f 63 6b 2c 20 30 20 7d 2c 0a 20 20 20 20 20  Lock, 0 },.     
186f0 7b 20 22 73 71 6c 69 74 65 33 4f 73 54 65 6d 70  { "sqlite3OsTemp
18700 46 69 6c 65 4e 61 6d 65 22 2c 20 74 65 73 74 5f  FileName", test_
18710 73 71 6c 69 74 65 33 4f 73 54 65 6d 70 46 69 6c  sqlite3OsTempFil
18720 65 4e 61 6d 65 2c 20 30 20 7d 2c 0a 20 20 20 0a  eName, 0 },.   .
18730 20 20 20 20 20 2f 2a 20 43 75 73 74 6f 6d 20 74       /* Custom t
18740 65 73 74 20 69 6e 74 65 72 66 61 63 65 73 20 2a  est interfaces *
18750 2f 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  /.     { "sqlite
18760 33 4f 73 55 6e 6c 6f 63 6b 22 2c 20 20 20 20 20  3OsUnlock",     
18770 20 20 20 20 74 65 73 74 5f 73 71 6c 69 74 65 33      test_sqlite3
18780 4f 73 55 6e 6c 6f 63 6b 2c 20 30 20 20 20 20 7d  OsUnlock, 0    }
18790 2c 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  ,.#endif.#ifndef
187a0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
187b0 31 36 0a 20 20 20 20 20 7b 20 22 61 64 64 5f 74  16.     { "add_t
187c0 65 73 74 5f 63 6f 6c 6c 61 74 65 22 2c 20 20 20  est_collate",   
187d0 20 20 20 20 20 74 65 73 74 5f 63 6f 6c 6c 61 74       test_collat
187e0 65 2c 20 30 20 20 20 20 20 20 20 20 20 20 20 20  e, 0            
187f0 7d 2c 0a 20 20 20 20 20 7b 20 22 61 64 64 5f 74  },.     { "add_t
18800 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65 64  est_collate_need
18810 65 64 22 2c 20 74 65 73 74 5f 63 6f 6c 6c 61 74  ed", test_collat
18820 65 5f 6e 65 65 64 65 64 2c 20 30 20 20 20 20 20  e_needed, 0     
18830 7d 2c 0a 20 20 20 20 20 7b 20 22 61 64 64 5f 74  },.     { "add_t
18840 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 20  est_function",  
18850 20 20 20 20 20 74 65 73 74 5f 66 75 6e 63 74 69       test_functi
18860 6f 6e 2c 20 30 20 20 20 20 20 20 20 20 20 20 20  on, 0           
18870 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  },.#endif.#ifdef
18880 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
18890 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 5f  .     { "sqlite_
188a0 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74 61 6e 64 69  malloc_outstandi
188b0 6e 67 22 2c 20 73 71 6c 69 74 65 5f 6d 61 6c 6c  ng", sqlite_mall
188c0 6f 63 5f 6f 75 74 73 74 61 6e 64 69 6e 67 2c 20  oc_outstanding, 
188d0 30 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 20 20 20  0},.#endif.     
188e0 7b 20 22 73 71 6c 69 74 65 33 5f 74 65 73 74 5f  { "sqlite3_test_
188f0 65 72 72 73 74 72 22 2c 20 20 20 20 20 74 65 73  errstr",     tes
18900 74 5f 65 72 72 73 74 72 2c 20 30 20 20 20 20 20  t_errstr, 0     
18910 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20          },.     
18920 7b 20 22 74 63 6c 5f 76 61 72 69 61 62 6c 65 5f  { "tcl_variable_
18930 74 79 70 65 22 2c 20 20 20 20 20 20 20 74 63 6c  type",       tcl
18940 5f 76 61 72 69 61 62 6c 65 5f 74 79 70 65 2c 20  _variable_type, 
18950 30 20 20 20 20 20 20 20 7d 2c 0a 23 69 66 6e 64  0       },.#ifnd
18960 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
18970 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 20 20  HARED_CACHE.    
18980 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 6e 61 62   { "sqlite3_enab
18990 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68 65 22  le_shared_cache"
189a0 2c 20 74 65 73 74 5f 65 6e 61 62 6c 65 5f 73 68  , test_enable_sh
189b0 61 72 65 64 2c 20 30 20 20 7d 2c 0a 23 65 6e 64  ared, 0  },.#end
189c0 69 66 0a 20 20 7d 3b 0a 20 20 73 74 61 74 69 63  if.  };.  static
189d0 20 69 6e 74 20 62 69 74 6d 61 73 6b 5f 73 69 7a   int bitmask_siz
189e0 65 20 3d 20 73 69 7a 65 6f 66 28 42 69 74 6d 61  e = sizeof(Bitma
189f0 73 6b 29 2a 38 3b 0a 20 20 69 6e 74 20 69 3b 0a  sk)*8;.  int i;.
18a00 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c    extern int sql
18a10 69 74 65 33 5f 6f 73 5f 74 72 61 63 65 3b 0a 20  ite3_os_trace;. 
18a20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69   extern int sqli
18a30 74 65 33 5f 77 68 65 72 65 5f 74 72 61 63 65 3b  te3_where_trace;
18a40 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
18a50 6c 69 74 65 33 5f 73 79 6e 63 5f 63 6f 75 6e 74  lite3_sync_count
18a60 2c 20 73 71 6c 69 74 65 33 5f 66 75 6c 6c 73 79  , sqlite3_fullsy
18a70 6e 63 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65  nc_count;.  exte
18a80 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6f  rn int sqlite3_o
18a90 70 65 6e 74 65 6d 70 5f 63 6f 75 6e 74 3b 0a 20  pentemp_count;. 
18aa0 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69   extern int sqli
18ab0 74 65 33 5f 6d 65 6d 55 73 65 64 3b 0a 20 20 65  te3_memUsed;.  e
18ac0 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
18ad0 33 5f 6d 61 6c 6c 6f 63 5f 69 64 3b 0a 20 20 65  3_malloc_id;.  e
18ae0 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
18af0 33 5f 6d 65 6d 4d 61 78 3b 0a 20 20 65 78 74 65  3_memMax;.  exte
18b00 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6c  rn int sqlite3_l
18b10 69 6b 65 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74  ike_count;.  ext
18b20 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ern int sqlite3_
18b30 74 73 64 5f 63 6f 75 6e 74 3b 0a 23 69 66 20 4f  tsd_count;.#if O
18b40 53 5f 55 4e 49 58 20 26 26 20 64 65 66 69 6e 65  S_UNIX && define
18b50 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 26  d(SQLITE_TEST) &
18b60 26 20 64 65 66 69 6e 65 64 28 54 48 52 45 41 44  & defined(THREAD
18b70 53 41 46 45 29 20 26 26 20 54 48 52 45 41 44 53  SAFE) && THREADS
18b80 41 46 45 0a 20 20 65 78 74 65 72 6e 20 69 6e 74  AFE.  extern int
18b90 20 74 68 72 65 61 64 73 4f 76 65 72 72 69 64 65   threadsOverride
18ba0 45 61 63 68 4f 74 68 65 72 73 4c 6f 63 6b 73 3b  EachOthersLocks;
18bb0 0a 23 65 6e 64 69 66 0a 23 69 66 20 4f 53 5f 57  .#endif.#if OS_W
18bc0 49 4e 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20  IN.  extern int 
18bd0 73 71 6c 69 74 65 33 5f 6f 73 5f 74 79 70 65 3b  sqlite3_os_type;
18be0 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
18bf0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 65 78  QLITE_DEBUG.  ex
18c00 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
18c10 5f 76 64 62 65 5f 61 64 64 6f 70 5f 74 72 61 63  _vdbe_addop_trac
18c20 65 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  e;.#endif.#ifdef
18c30 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 65   SQLITE_TEST.  e
18c40 78 74 65 72 6e 20 63 68 61 72 20 73 71 6c 69 74  xtern char sqlit
18c50 65 33 5f 71 75 65 72 79 5f 70 6c 61 6e 5b 5d 3b  e3_query_plan[];
18c60 0a 20 20 73 74 61 74 69 63 20 63 68 61 72 20 2a  .  static char *
18c70 71 75 65 72 79 5f 70 6c 61 6e 20 3d 20 73 71 6c  query_plan = sql
18c80 69 74 65 33 5f 71 75 65 72 79 5f 70 6c 61 6e 3b  ite3_query_plan;
18c90 0a 23 65 6e 64 69 66 0a 0a 20 20 66 6f 72 28 69  .#endif..  for(i
18ca0 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28 61 43 6d  =0; i<sizeof(aCm
18cb0 64 29 2f 73 69 7a 65 6f 66 28 61 43 6d 64 5b 30  d)/sizeof(aCmd[0
18cc0 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 54 63  ]); i++){.    Tc
18cd0 6c 5f 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28  l_CreateCommand(
18ce0 69 6e 74 65 72 70 2c 20 61 43 6d 64 5b 69 5d 2e  interp, aCmd[i].
18cf0 7a 4e 61 6d 65 2c 20 61 43 6d 64 5b 69 5d 2e 78  zName, aCmd[i].x
18d00 50 72 6f 63 2c 20 30 2c 20 30 29 3b 0a 20 20 7d  Proc, 0, 0);.  }
18d10 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 73 69  .  for(i=0; i<si
18d20 7a 65 6f 66 28 61 4f 62 6a 43 6d 64 29 2f 73 69  zeof(aObjCmd)/si
18d30 7a 65 6f 66 28 61 4f 62 6a 43 6d 64 5b 30 5d 29  zeof(aObjCmd[0])
18d40 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 54 63 6c 5f  ; i++){.    Tcl_
18d50 43 72 65 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64  CreateObjCommand
18d60 28 69 6e 74 65 72 70 2c 20 61 4f 62 6a 43 6d 64  (interp, aObjCmd
18d70 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 0a 20 20 20 20  [i].zName, .    
18d80 20 20 20 20 61 4f 62 6a 43 6d 64 5b 69 5d 2e 78      aObjCmd[i].x
18d90 50 72 6f 63 2c 20 61 4f 62 6a 43 6d 64 5b 69 5d  Proc, aObjCmd[i]
18da0 2e 63 6c 69 65 6e 74 44 61 74 61 2c 20 30 29 3b  .clientData, 0);
18db0 0a 20 20 7d 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56  .  }.  Tcl_LinkV
18dc0 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  ar(interp, "sqli
18dd0 74 65 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 22  te_search_count"
18de0 2c 20 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29  , .      (char*)
18df0 26 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f  &sqlite3_search_
18e00 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f  count, TCL_LINK_
18e10 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b  INT);.  Tcl_Link
18e20 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  Var(interp, "sql
18e30 69 74 65 5f 73 6f 72 74 5f 63 6f 75 6e 74 22 2c  ite_sort_count",
18e40 20 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26   .      (char*)&
18e50 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75  sqlite3_sort_cou
18e60 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54  nt, TCL_LINK_INT
18e70 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72  );.  Tcl_LinkVar
18e80 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
18e90 5f 6c 69 6b 65 5f 63 6f 75 6e 74 22 2c 20 0a 20  _like_count", . 
18ea0 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c       (char*)&sql
18eb0 69 74 65 33 5f 6c 69 6b 65 5f 63 6f 75 6e 74 2c  ite3_like_count,
18ec0 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a   TCL_LINK_INT);.
18ed0 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e    Tcl_LinkVar(in
18ee0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 69 6e  terp, "sqlite_in
18ef0 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 22 2c 20  terrupt_count", 
18f00 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73  .      (char*)&s
18f10 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
18f20 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b  _count, TCL_LINK
18f30 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e  _INT);.  Tcl_Lin
18f40 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71  kVar(interp, "sq
18f50 6c 69 74 65 5f 6f 70 65 6e 5f 66 69 6c 65 5f 63  lite_open_file_c
18f60 6f 75 6e 74 22 2c 20 0a 20 20 20 20 20 20 28 63  ount", .      (c
18f70 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6f 70  har*)&sqlite3_op
18f80 65 6e 5f 66 69 6c 65 5f 63 6f 75 6e 74 2c 20 54  en_file_count, T
18f90 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20  CL_LINK_INT);.  
18fa0 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
18fb0 72 70 2c 20 22 73 71 6c 69 74 65 5f 63 75 72 72  rp, "sqlite_curr
18fc0 65 6e 74 5f 74 69 6d 65 22 2c 20 0a 20 20 20 20  ent_time", .    
18fd0 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65    (char*)&sqlite
18fe0 33 5f 63 75 72 72 65 6e 74 5f 74 69 6d 65 2c 20  3_current_time, 
18ff0 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20  TCL_LINK_INT);. 
19000 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
19010 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 73 5f  erp, "sqlite_os_
19020 74 72 61 63 65 22 2c 0a 20 20 20 20 20 20 28 63  trace",.      (c
19030 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6f 73  har*)&sqlite3_os
19040 5f 74 72 61 63 65 2c 20 54 43 4c 5f 4c 49 4e 4b  _trace, TCL_LINK
19050 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e  _INT);.  Tcl_Lin
19060 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71  kVar(interp, "sq
19070 6c 69 74 65 33 5f 74 73 64 5f 63 6f 75 6e 74 22  lite3_tsd_count"
19080 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26  ,.      (char*)&
19090 73 71 6c 69 74 65 33 5f 74 73 64 5f 63 6f 75 6e  sqlite3_tsd_coun
190a0 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29  t, TCL_LINK_INT)
190b0 3b 0a 23 69 66 20 4f 53 5f 55 4e 49 58 20 26 26  ;.#if OS_UNIX &&
190c0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
190d0 54 45 53 54 29 20 26 26 20 64 65 66 69 6e 65 64  TEST) && defined
190e0 28 54 48 52 45 41 44 53 41 46 45 29 20 26 26 20  (THREADSAFE) && 
190f0 54 48 52 45 41 44 53 41 46 45 0a 20 20 54 63 6c  THREADSAFE.  Tcl
19100 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c  _LinkVar(interp,
19110 20 22 74 68 72 65 61 64 73 4f 76 65 72 72 69 64   "threadsOverrid
19120 65 45 61 63 68 4f 74 68 65 72 73 4c 6f 63 6b 73  eEachOthersLocks
19130 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29  ",.      (char*)
19140 26 74 68 72 65 61 64 73 4f 76 65 72 72 69 64 65  &threadsOverride
19150 45 61 63 68 4f 74 68 65 72 73 4c 6f 63 6b 73 2c  EachOthersLocks,
19160 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a   TCL_LINK_INT);.
19170 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
19180 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
19190 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
191a0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6c  nterp, "sqlite_l
191b0 61 73 74 5f 6e 65 65 64 65 64 5f 63 6f 6c 6c 61  ast_needed_colla
191c0 74 69 6f 6e 22 2c 0a 20 20 20 20 20 20 28 63 68  tion",.      (ch
191d0 61 72 2a 29 26 70 7a 4e 65 65 64 65 64 43 6f 6c  ar*)&pzNeededCol
191e0 6c 61 74 69 6f 6e 2c 20 54 43 4c 5f 4c 49 4e 4b  lation, TCL_LINK
191f0 5f 53 54 52 49 4e 47 7c 54 43 4c 5f 4c 49 4e 4b  _STRING|TCL_LINK
19200 5f 52 45 41 44 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  _READ_ONLY);.#en
19210 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
19220 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 54 63 6c  E_MEMDEBUG.  Tcl
19230 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c  _LinkVar(interp,
19240 20 22 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f   "sqlite_malloc_
19250 69 64 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72  id",.      (char
19260 2a 29 26 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  *)&sqlite3_mallo
19270 63 5f 69 64 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 53  c_id, TCL_LINK_S
19280 54 52 49 4e 47 29 3b 0a 23 65 6e 64 69 66 0a 23  TRING);.#endif.#
19290 69 66 20 4f 53 5f 57 49 4e 0a 20 20 54 63 6c 5f  if OS_WIN.  Tcl_
192a0 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20  LinkVar(interp, 
192b0 22 73 71 6c 69 74 65 5f 6f 73 5f 74 79 70 65 22  "sqlite_os_type"
192c0 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26  ,.      (char*)&
192d0 73 71 6c 69 74 65 33 5f 6f 73 5f 74 79 70 65 2c  sqlite3_os_type,
192e0 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a   TCL_LINK_INT);.
192f0 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
19300 4c 49 54 45 5f 54 45 53 54 0a 20 20 54 63 6c 5f  LITE_TEST.  Tcl_
19310 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20  LinkVar(interp, 
19320 22 73 71 6c 69 74 65 5f 71 75 65 72 79 5f 70 6c  "sqlite_query_pl
19330 61 6e 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72  an",.      (char
19340 2a 29 26 71 75 65 72 79 5f 70 6c 61 6e 2c 20 54  *)&query_plan, T
19350 43 4c 5f 4c 49 4e 4b 5f 53 54 52 49 4e 47 7c 54  CL_LINK_STRING|T
19360 43 4c 5f 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e 4c  CL_LINK_READ_ONL
19370 59 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  Y);.#endif.#ifde
19380 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
19390 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
193a0 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 61 64 64  erp, "sqlite_add
193b0 6f 70 5f 74 72 61 63 65 22 2c 0a 20 20 20 20 20  op_trace",.     
193c0 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33   (char*)&sqlite3
193d0 5f 76 64 62 65 5f 61 64 64 6f 70 5f 74 72 61 63  _vdbe_addop_trac
193e0 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29  e, TCL_LINK_INT)
193f0 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  ;.  Tcl_LinkVar(
19400 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
19410 77 68 65 72 65 5f 74 72 61 63 65 22 2c 0a 20 20  where_trace",.  
19420 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69      (char*)&sqli
19430 74 65 33 5f 77 68 65 72 65 5f 74 72 61 63 65 2c  te3_where_trace,
19440 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a   TCL_LINK_INT);.
19450 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
19460 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20  LITE_MEMDEBUG.  
19470 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
19480 72 70 2c 20 22 73 71 6c 69 74 65 5f 6d 65 6d 75  rp, "sqlite_memu
19490 73 65 64 22 2c 0a 20 20 20 20 20 20 28 63 68 61  sed",.      (cha
194a0 72 2a 29 26 73 71 6c 69 74 65 33 5f 6d 65 6d 55  r*)&sqlite3_memU
194b0 73 65 64 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e  sed, TCL_LINK_IN
194c0 54 20 7c 20 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41  T | TCL_LINK_REA
194d0 44 5f 4f 4e 4c 59 29 3b 0a 20 20 54 63 6c 5f 4c  D_ONLY);.  Tcl_L
194e0 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22  inkVar(interp, "
194f0 73 71 6c 69 74 65 5f 6d 65 6d 6d 61 78 22 2c 0a  sqlite_memmax",.
19500 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71        (char*)&sq
19510 6c 69 74 65 33 5f 6d 65 6d 4d 61 78 2c 20 54 43  lite3_memMax, TC
19520 4c 5f 4c 49 4e 4b 5f 49 4e 54 20 7c 20 54 43 4c  L_LINK_INT | TCL
19530 5f 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59 29  _LINK_READ_ONLY)
19540 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  ;.#endif.#ifndef
19550 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 49 53   SQLITE_OMIT_DIS
19560 4b 49 4f 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61  KIO.  Tcl_LinkVa
19570 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  r(interp, "sqlit
19580 65 5f 6f 70 65 6e 74 65 6d 70 5f 63 6f 75 6e 74  e_opentemp_count
19590 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29  ",.      (char*)
195a0 26 73 71 6c 69 74 65 33 5f 6f 70 65 6e 74 65 6d  &sqlite3_opentem
195b0 70 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e  p_count, TCL_LIN
195c0 4b 5f 49 4e 54 29 3b 0a 23 65 6e 64 69 66 0a 20  K_INT);.#endif. 
195d0 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
195e0 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 73 74 61  erp, "sqlite_sta
195f0 74 69 63 5f 62 69 6e 64 5f 76 61 6c 75 65 22 2c  tic_bind_value",
19600 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73  .      (char*)&s
19610 71 6c 69 74 65 5f 73 74 61 74 69 63 5f 62 69 6e  qlite_static_bin
19620 64 5f 76 61 6c 75 65 2c 20 54 43 4c 5f 4c 49 4e  d_value, TCL_LIN
19630 4b 5f 53 54 52 49 4e 47 29 3b 0a 20 20 54 63 6c  K_STRING);.  Tcl
19640 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c  _LinkVar(interp,
19650 20 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 64 69   "sqlite_temp_di
19660 72 65 63 74 6f 72 79 22 2c 0a 20 20 20 20 20 20  rectory",.      
19670 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f  (char*)&sqlite3_
19680 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 2c 20  temp_directory, 
19690 54 43 4c 5f 4c 49 4e 4b 5f 53 54 52 49 4e 47 29  TCL_LINK_STRING)
196a0 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  ;.  Tcl_LinkVar(
196b0 69 6e 74 65 72 70 2c 20 22 62 69 74 6d 61 73 6b  interp, "bitmask
196c0 5f 73 69 7a 65 22 2c 0a 20 20 20 20 20 20 28 63  _size",.      (c
196d0 68 61 72 2a 29 26 62 69 74 6d 61 73 6b 5f 73 69  har*)&bitmask_si
196e0 7a 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54  ze, TCL_LINK_INT
196f0 7c 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41 44 5f 4f  |TCL_LINK_READ_O
19700 4e 4c 59 29 3b 0a 23 69 66 20 4f 53 5f 55 4e 49  NLY);.#if OS_UNI
19710 58 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  X.  Tcl_LinkVar(
19720 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
19730 73 79 6e 63 5f 63 6f 75 6e 74 22 2c 0a 20 20 20  sync_count",.   
19740 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74     (char*)&sqlit
19750 65 33 5f 73 79 6e 63 5f 63 6f 75 6e 74 2c 20 54  e3_sync_count, T
19760 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20  CL_LINK_INT);.  
19770 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
19780 72 70 2c 20 22 73 71 6c 69 74 65 5f 66 75 6c 6c  rp, "sqlite_full
19790 73 79 6e 63 5f 63 6f 75 6e 74 22 2c 0a 20 20 20  sync_count",.   
197a0 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74     (char*)&sqlit
197b0 65 33 5f 66 75 6c 6c 73 79 6e 63 5f 63 6f 75 6e  e3_fullsync_coun
197c0 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29  t, TCL_LINK_INT)
197d0 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 4f 53 5f 55  ;.#endif /* OS_U
197e0 4e 49 58 20 2a 2f 0a 20 20 73 65 74 5f 6f 70 74  NIX */.  set_opt
197f0 69 6f 6e 73 28 69 6e 74 65 72 70 29 3b 0a 0a 20  ions(interp);.. 
19800 20 7b 0a 20 20 20 20 65 78 74 65 72 6e 20 69 6e   {.    extern in
19810 74 20 73 71 6c 69 74 65 33 5f 73 68 61 72 65 64  t sqlite3_shared
19820 5f 63 61 63 68 65 5f 72 65 70 6f 72 74 28 76 6f  _cache_report(vo
19830 69 64 20 2a 2c 20 54 63 6c 5f 49 6e 74 65 72 70  id *, Tcl_Interp
19840 20 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   *,.            
19850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19860 20 20 20 20 20 20 20 20 69 6e 74 2c 20 54 63 6c          int, Tcl
19870 5f 4f 62 6a 20 2a 43 4f 4e 53 54 5b 5d 29 3b 0a  _Obj *CONST[]);.
19880 20 20 20 20 54 63 6c 5f 43 72 65 61 74 65 4f 62      Tcl_CreateOb
19890 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c  jCommand(interp,
198a0 20 22 73 71 6c 69 74 65 5f 73 68 61 72 65 64 5f   "sqlite_shared_
198b0 63 61 63 68 65 5f 72 65 70 6f 72 74 22 2c 20 0a  cache_report", .
198c0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
198d0 73 68 61 72 65 64 5f 63 61 63 68 65 5f 72 65 70  shared_cache_rep
198e0 6f 72 74 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a  ort, 0, 0);.  }.
198f0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
19900 0a 7d 0a                                         .}.