/ Hex Artifact Content
Login

Artifact 25e687fcc3c962958c5aa5114a74592cc5b7e6ba:


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 38 34 20 32 30 30 36 2f 30 31  ,v 1.184 2006/01
0240: 2f 30 39 20 30 36 3a 32 39 3a 34 39 20 64 61 6e  /09 06:29:49 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 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
1660: 6d 61 6b 65 50 6f 69 6e 74 65 72 53 74 72 28 54  makePointerStr(T
1670: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
1680: 70 2c 20 63 68 61 72 20 2a 7a 50 74 72 2c 20 76  p, char *zPtr, v
1690: 6f 69 64 20 2a 70 29 7b 0a 20 20 73 71 6c 69 74  oid *p){.  sqlit
16a0: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
16b0: 20 7a 50 74 72 2c 20 22 25 70 22 2c 20 70 29 3b   zPtr, "%p", p);
16c0: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
16d0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63  ;.}../*.** The c
16e0: 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69 6e 65 20  allback routine 
16f0: 66 6f 72 20 73 71 6c 69 74 65 33 5f 65 78 65 63  for sqlite3_exec
1700: 5f 70 72 69 6e 74 66 28 29 2e 0a 2a 2f 0a 73 74  _printf()..*/.st
1710: 61 74 69 63 20 69 6e 74 20 65 78 65 63 5f 70 72  atic int exec_pr
1720: 69 6e 74 66 5f 63 62 28 76 6f 69 64 20 2a 70 41  intf_cb(void *pA
1730: 72 67 2c 20 69 6e 74 20 61 72 67 63 2c 20 63 68  rg, int argc, ch
1740: 61 72 20 2a 2a 61 72 67 76 2c 20 63 68 61 72 20  ar **argv, char 
1750: 2a 2a 6e 61 6d 65 29 7b 0a 20 20 54 63 6c 5f 44  **name){.  Tcl_D
1760: 53 74 72 69 6e 67 20 2a 73 74 72 20 3d 20 28 54  String *str = (T
1770: 63 6c 5f 44 53 74 72 69 6e 67 2a 29 70 41 72 67  cl_DString*)pArg
1780: 3b 0a 20 20 69 6e 74 20 69 3b 0a 0a 20 20 69 66  ;.  int i;..  if
1790: 28 20 54 63 6c 5f 44 53 74 72 69 6e 67 4c 65 6e  ( Tcl_DStringLen
17a0: 67 74 68 28 73 74 72 29 3d 3d 30 20 29 7b 0a 20  gth(str)==0 ){. 
17b0: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 61 72     for(i=0; i<ar
17c0: 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  gc; i++){.      
17d0: 54 63 6c 5f 44 53 74 72 69 6e 67 41 70 70 65 6e  Tcl_DStringAppen
17e0: 64 45 6c 65 6d 65 6e 74 28 73 74 72 2c 20 6e 61  dElement(str, na
17f0: 6d 65 5b 69 5d 20 3f 20 6e 61 6d 65 5b 69 5d 20  me[i] ? name[i] 
1800: 3a 20 22 4e 55 4c 4c 22 29 3b 0a 20 20 20 20 7d  : "NULL");.    }
1810: 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 3b 20  .  }.  for(i=0; 
1820: 69 3c 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20  i<argc; i++){.  
1830: 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 41 70 70    Tcl_DStringApp
1840: 65 6e 64 45 6c 65 6d 65 6e 74 28 73 74 72 2c 20  endElement(str, 
1850: 61 72 67 76 5b 69 5d 20 3f 20 61 72 67 76 5b 69  argv[i] ? argv[i
1860: 5d 20 3a 20 22 4e 55 4c 4c 22 29 3b 0a 20 20 7d  ] : "NULL");.  }
1870: 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a  .  return 0;.}..
1880: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
1890: 6c 69 74 65 33 5f 65 78 65 63 5f 70 72 69 6e 74  lite3_exec_print
18a0: 66 20 20 44 42 20 20 46 4f 52 4d 41 54 20 20 53  f  DB  FORMAT  S
18b0: 54 52 49 4e 47 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f  TRING.**.** Invo
18c0: 6b 65 20 74 68 65 20 73 71 6c 69 74 65 33 5f 65  ke the sqlite3_e
18d0: 78 65 63 5f 70 72 69 6e 74 66 28 29 20 69 6e 74  xec_printf() int
18e0: 65 72 66 61 63 65 20 75 73 69 6e 67 20 74 68 65  erface using the
18f0: 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 0a 2a   open database.*
1900: 2a 20 44 42 2e 20 20 54 68 65 20 53 51 4c 20 69  * DB.  The SQL i
1910: 73 20 74 68 65 20 73 74 72 69 6e 67 20 46 4f 52  s the string FOR
1920: 4d 41 54 2e 20 20 54 68 65 20 66 6f 72 6d 61 74  MAT.  The format
1930: 20 73 74 72 69 6e 67 20 73 68 6f 75 6c 64 20 63   string should c
1940: 6f 6e 74 61 69 6e 0a 2a 2a 20 6f 6e 65 20 25 73  ontain.** one %s
1950: 20 6f 72 20 25 71 2e 20 20 53 54 52 49 4e 47 20   or %q.  STRING 
1960: 69 73 20 74 68 65 20 76 61 6c 75 65 20 69 6e 73  is the value ins
1970: 65 72 74 65 64 20 69 6e 74 6f 20 25 73 20 6f 72  erted into %s or
1980: 20 25 71 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69   %q..*/.static i
1990: 6e 74 20 74 65 73 74 5f 65 78 65 63 5f 70 72 69  nt test_exec_pri
19a0: 6e 74 66 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74  ntf(.  void *Not
19b0: 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Used,.  Tcl_Inte
19c0: 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
19d0: 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
19e0: 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
19f0: 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
1a00: 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20  */.  int argc,  
1a10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1a20: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
1a30: 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  ts */.  char **a
1a40: 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f  rgv            /
1a50: 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61  * Text of each a
1a60: 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20  rgument */.){.  
1a70: 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 54  sqlite3 *db;.  T
1a80: 63 6c 5f 44 53 74 72 69 6e 67 20 73 74 72 3b 0a  cl_DString str;.
1a90: 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 68 61 72    int rc;.  char
1aa0: 20 2a 7a 45 72 72 20 3d 20 30 3b 0a 20 20 63 68   *zErr = 0;.  ch
1ab0: 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 63 68 61 72  ar *zSql;.  char
1ac0: 20 7a 42 75 66 5b 33 30 5d 3b 0a 20 20 69 66 28   zBuf[30];.  if(
1ad0: 20 61 72 67 63 21 3d 34 20 29 7b 0a 20 20 20 20   argc!=4 ){.    
1ae0: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
1af0: 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
1b00: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
1b10: 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20  e \"", argv[0], 
1b20: 0a 20 20 20 20 20 20 20 22 20 44 42 20 46 4f 52  .       " DB FOR
1b30: 4d 41 54 20 53 54 52 49 4e 47 22 2c 20 30 29 3b  MAT STRING", 0);
1b40: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
1b50: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
1b60: 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e   getDbPointer(in
1b70: 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26  terp, argv[1], &
1b80: 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  db) ) return TCL
1b90: 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 44 53  _ERROR;.  Tcl_DS
1ba0: 74 72 69 6e 67 49 6e 69 74 28 26 73 74 72 29 3b  tringInit(&str);
1bb0: 0a 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65  .  zSql = sqlite
1bc0: 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b 32  3_mprintf(argv[2
1bd0: 5d 2c 20 61 72 67 76 5b 33 5d 29 3b 0a 20 20 72  ], argv[3]);.  r
1be0: 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63  c = sqlite3_exec
1bf0: 28 64 62 2c 20 7a 53 71 6c 2c 20 65 78 65 63 5f  (db, zSql, exec_
1c00: 70 72 69 6e 74 66 5f 63 62 2c 20 26 73 74 72 2c  printf_cb, &str,
1c10: 20 26 7a 45 72 72 29 3b 0a 20 20 73 71 6c 69 74   &zErr);.  sqlit
1c20: 65 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20  e3_free(zSql);. 
1c30: 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22   sprintf(zBuf, "
1c40: 25 64 22 2c 20 72 63 29 3b 0a 20 20 54 63 6c 5f  %d", rc);.  Tcl_
1c50: 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e  AppendElement(in
1c60: 74 65 72 70 2c 20 7a 42 75 66 29 3b 0a 20 20 54  terp, zBuf);.  T
1c70: 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  cl_AppendElement
1c80: 28 69 6e 74 65 72 70 2c 20 72 63 3d 3d 53 51 4c  (interp, rc==SQL
1c90: 49 54 45 5f 4f 4b 20 3f 20 54 63 6c 5f 44 53 74  ITE_OK ? Tcl_DSt
1ca0: 72 69 6e 67 56 61 6c 75 65 28 26 73 74 72 29 20  ringValue(&str) 
1cb0: 3a 20 7a 45 72 72 29 3b 0a 20 20 54 63 6c 5f 44  : zErr);.  Tcl_D
1cc0: 53 74 72 69 6e 67 46 72 65 65 28 26 73 74 72 29  StringFree(&str)
1cd0: 3b 0a 20 20 69 66 28 20 7a 45 72 72 20 29 20 66  ;.  if( zErr ) f
1ce0: 72 65 65 28 7a 45 72 72 29 3b 0a 20 20 69 66 28  ree(zErr);.  if(
1cf0: 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43   sqlite3TestErrC
1d00: 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20  ode(interp, db, 
1d10: 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  rc) ) return TCL
1d20: 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74 75 72 6e  _ERROR;.  return
1d30: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
1d40: 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
1d50: 33 5f 6d 70 72 69 6e 74 66 5f 7a 5f 74 65 73 74  3_mprintf_z_test
1d60: 20 20 53 45 50 41 52 41 54 4f 52 20 20 41 52 47    SEPARATOR  ARG
1d70: 30 20 20 41 52 47 31 20 2e 2e 2e 0a 2a 2a 0a 2a  0  ARG1 ....**.*
1d80: 2a 20 54 65 73 74 20 74 68 65 20 25 7a 20 66 6f  * Test the %z fo
1d90: 72 6d 61 74 20 6f 66 20 6d 70 72 69 6e 74 66 28  rmat of mprintf(
1da0: 29 2e 20 20 55 73 65 20 6d 75 6c 74 69 70 6c 65  ).  Use multiple
1db0: 20 6d 70 72 69 6e 74 66 28 29 20 63 61 6c 6c 73   mprintf() calls
1dc0: 20 74 6f 20 0a 2a 2a 20 63 6f 6e 63 61 74 65 6e   to .** concaten
1dd0: 61 74 65 20 61 72 67 30 20 74 68 72 6f 75 67 68  ate arg0 through
1de0: 20 61 72 67 6e 20 75 73 69 6e 67 20 73 65 70 61   argn using sepa
1df0: 72 61 74 6f 72 20 61 73 20 74 68 65 20 73 65 70  rator as the sep
1e00: 61 72 61 74 6f 72 2e 0a 2a 2a 20 52 65 74 75 72  arator..** Retur
1e10: 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 0a 2a 2f  n the result..*/
1e20: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
1e30: 5f 6d 70 72 69 6e 74 66 5f 7a 28 0a 20 20 76 6f  _mprintf_z(.  vo
1e40: 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54  id *NotUsed,.  T
1e50: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
1e60: 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c  p,    /* The TCL
1e70: 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61   interpreter tha
1e80: 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63  t invoked this c
1e90: 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  ommand */.  int 
1ea0: 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20  argc,           
1eb0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1ec0: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63  arguments */.  c
1ed0: 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20  har **argv      
1ee0: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
1ef0: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a   each argument *
1f00: 2f 0a 29 7b 0a 20 20 63 68 61 72 20 2a 7a 52 65  /.){.  char *zRe
1f10: 73 75 6c 74 20 3d 20 30 3b 0a 20 20 69 6e 74 20  sult = 0;.  int 
1f20: 69 3b 0a 0a 20 20 66 6f 72 28 69 3d 32 3b 20 69  i;..  for(i=2; i
1f30: 3c 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20  <argc; i++){.   
1f40: 20 7a 52 65 73 75 6c 74 20 3d 20 73 71 6c 69 74   zResult = sqlit
1f50: 65 33 4d 50 72 69 6e 74 66 28 22 25 7a 25 73 25  e3MPrintf("%z%s%
1f60: 73 22 2c 20 7a 52 65 73 75 6c 74 2c 20 61 72 67  s", zResult, arg
1f70: 76 5b 31 5d 2c 20 61 72 67 76 5b 69 5d 29 3b 0a  v[1], argv[i]);.
1f80: 20 20 7d 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64    }.  Tcl_Append
1f90: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a  Result(interp, z
1fa0: 52 65 73 75 6c 74 2c 20 30 29 3b 0a 20 20 73 71  Result, 0);.  sq
1fb0: 6c 69 74 65 46 72 65 65 28 7a 52 65 73 75 6c 74  liteFree(zResult
1fc0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
1fd0: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
1fe0: 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 67 65 74  ge:  sqlite3_get
1ff0: 5f 74 61 62 6c 65 5f 70 72 69 6e 74 66 20 20 44  _table_printf  D
2000: 42 20 20 46 4f 52 4d 41 54 20 20 53 54 52 49 4e  B  FORMAT  STRIN
2010: 47 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  G.**.** Invoke t
2020: 68 65 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 74  he sqlite3_get_t
2030: 61 62 6c 65 5f 70 72 69 6e 74 66 28 29 20 69 6e  able_printf() in
2040: 74 65 72 66 61 63 65 20 75 73 69 6e 67 20 74 68  terface using th
2050: 65 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 0a  e open database.
2060: 2a 2a 20 44 42 2e 20 20 54 68 65 20 53 51 4c 20  ** DB.  The SQL 
2070: 69 73 20 74 68 65 20 73 74 72 69 6e 67 20 46 4f  is the string FO
2080: 52 4d 41 54 2e 20 20 54 68 65 20 66 6f 72 6d 61  RMAT.  The forma
2090: 74 20 73 74 72 69 6e 67 20 73 68 6f 75 6c 64 20  t string should 
20a0: 63 6f 6e 74 61 69 6e 0a 2a 2a 20 6f 6e 65 20 25  contain.** one %
20b0: 73 20 6f 72 20 25 71 2e 20 20 53 54 52 49 4e 47  s or %q.  STRING
20c0: 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 69 6e   is the value in
20d0: 73 65 72 74 65 64 20 69 6e 74 6f 20 25 73 20 6f  serted into %s o
20e0: 72 20 25 71 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  r %q..*/.static 
20f0: 69 6e 74 20 74 65 73 74 5f 67 65 74 5f 74 61 62  int test_get_tab
2100: 6c 65 5f 70 72 69 6e 74 66 28 0a 20 20 76 6f 69  le_printf(.  voi
2110: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63  d *NotUsed,.  Tc
2120: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
2130: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
2140: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
2150: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
2160: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61  mmand */.  int a
2170: 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  rgc,            
2180: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
2190: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68  rguments */.  ch
21a0: 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20  ar **argv       
21b0: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
21c0: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f  each argument */
21d0: 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  .){.  sqlite3 *d
21e0: 62 3b 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e 67  b;.  Tcl_DString
21f0: 20 73 74 72 3b 0a 20 20 69 6e 74 20 72 63 3b 0a   str;.  int rc;.
2200: 20 20 63 68 61 72 20 2a 7a 45 72 72 20 3d 20 30    char *zErr = 0
2210: 3b 0a 20 20 69 6e 74 20 6e 52 6f 77 2c 20 6e 43  ;.  int nRow, nC
2220: 6f 6c 3b 0a 20 20 63 68 61 72 20 2a 2a 61 52 65  ol;.  char **aRe
2230: 73 75 6c 74 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  sult;.  int i;. 
2240: 20 63 68 61 72 20 7a 42 75 66 5b 33 30 5d 3b 0a   char zBuf[30];.
2250: 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20    char *zSql;.  
2260: 69 66 28 20 61 72 67 63 21 3d 34 20 29 7b 0a 20  if( argc!=4 ){. 
2270: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
2280: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
2290: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
22a0: 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30  d be \"", argv[0
22b0: 5d 2c 20 0a 20 20 20 20 20 20 20 22 20 44 42 20  ], .       " DB 
22c0: 46 4f 52 4d 41 54 20 53 54 52 49 4e 47 22 2c 20  FORMAT STRING", 
22d0: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
22e0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
22f0: 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72  if( getDbPointer
2300: 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d  (interp, argv[1]
2310: 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
2320: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c  TCL_ERROR;.  Tcl
2330: 5f 44 53 74 72 69 6e 67 49 6e 69 74 28 26 73 74  _DStringInit(&st
2340: 72 29 3b 0a 20 20 7a 53 71 6c 20 3d 20 73 71 6c  r);.  zSql = sql
2350: 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 61 72 67  ite3_mprintf(arg
2360: 76 5b 32 5d 2c 61 72 67 76 5b 33 5d 29 3b 0a 20  v[2],argv[3]);. 
2370: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 67 65   rc = sqlite3_ge
2380: 74 5f 74 61 62 6c 65 28 64 62 2c 20 7a 53 71 6c  t_table(db, zSql
2390: 2c 20 26 61 52 65 73 75 6c 74 2c 20 26 6e 52 6f  , &aResult, &nRo
23a0: 77 2c 20 26 6e 43 6f 6c 2c 20 26 7a 45 72 72 29  w, &nCol, &zErr)
23b0: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65  ;.  sqlite3_free
23c0: 28 7a 53 71 6c 29 3b 0a 20 20 73 70 72 69 6e 74  (zSql);.  sprint
23d0: 66 28 7a 42 75 66 2c 20 22 25 64 22 2c 20 72 63  f(zBuf, "%d", rc
23e0: 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 45  );.  Tcl_AppendE
23f0: 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 7a  lement(interp, z
2400: 42 75 66 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  Buf);.  if( rc==
2410: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
2420: 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22   sprintf(zBuf, "
2430: 25 64 22 2c 20 6e 52 6f 77 29 3b 0a 20 20 20 20  %d", nRow);.    
2440: 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e  Tcl_AppendElemen
2450: 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 29 3b  t(interp, zBuf);
2460: 0a 20 20 20 20 73 70 72 69 6e 74 66 28 7a 42 75  .    sprintf(zBu
2470: 66 2c 20 22 25 64 22 2c 20 6e 43 6f 6c 29 3b 0a  f, "%d", nCol);.
2480: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c      Tcl_AppendEl
2490: 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 7a 42  ement(interp, zB
24a0: 75 66 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  uf);.    for(i=0
24b0: 3b 20 69 3c 28 6e 52 6f 77 2b 31 29 2a 6e 43 6f  ; i<(nRow+1)*nCo
24c0: 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 54  l; i++){.      T
24d0: 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  cl_AppendElement
24e0: 28 69 6e 74 65 72 70 2c 20 61 52 65 73 75 6c 74  (interp, aResult
24f0: 5b 69 5d 20 3f 20 61 52 65 73 75 6c 74 5b 69 5d  [i] ? aResult[i]
2500: 20 3a 20 22 4e 55 4c 4c 22 29 3b 0a 20 20 20 20   : "NULL");.    
2510: 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 54  }.  }else{.    T
2520: 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  cl_AppendElement
2530: 28 69 6e 74 65 72 70 2c 20 7a 45 72 72 29 3b 0a  (interp, zErr);.
2540: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66 72    }.  sqlite3_fr
2550: 65 65 5f 74 61 62 6c 65 28 61 52 65 73 75 6c 74  ee_table(aResult
2560: 29 3b 0a 20 20 69 66 28 20 7a 45 72 72 20 29 20  );.  if( zErr ) 
2570: 66 72 65 65 28 7a 45 72 72 29 3b 0a 20 20 69 66  free(zErr);.  if
2580: 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72  ( sqlite3TestErr
2590: 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c  Code(interp, db,
25a0: 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43   rc) ) return TC
25b0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74 75 72  L_ERROR;.  retur
25c0: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a  n TCL_OK;.}.../*
25d0: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
25e0: 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f  te3_last_insert_
25f0: 72 6f 77 69 64 20 44 42 0a 2a 2a 0a 2a 2a 20 52  rowid DB.**.** R
2600: 65 74 75 72 6e 73 20 74 68 65 20 69 6e 74 65 67  eturns the integ
2610: 65 72 20 52 4f 57 49 44 20 6f 66 20 74 68 65 20  er ROWID of the 
2620: 6d 6f 73 74 20 72 65 63 65 6e 74 20 69 6e 73 65  most recent inse
2630: 72 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  rt..*/.static in
2640: 74 20 74 65 73 74 5f 6c 61 73 74 5f 72 6f 77 69  t test_last_rowi
2650: 64 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73  d(.  void *NotUs
2660: 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ed,.  Tcl_Interp
2670: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
2680: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
2690: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
26a0: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
26b0: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20  .  int argc,    
26c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
26d0: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
26e0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67   */.  char **arg
26f0: 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  v            /* 
2700: 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67  Text of each arg
2710: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71  ument */.){.  sq
2720: 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 63 68 61  lite3 *db;.  cha
2730: 72 20 7a 42 75 66 5b 33 30 5d 3b 0a 0a 20 20 69  r zBuf[30];..  i
2740: 66 28 20 61 72 67 63 21 3d 32 20 29 7b 0a 20 20  f( argc!=2 ){.  
2750: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
2760: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
2770: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
2780: 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
2790: 2c 20 22 20 44 42 5c 22 22 2c 20 30 29 3b 0a 20  , " DB\"", 0);. 
27a0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
27b0: 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67  ROR;.  }.  if( g
27c0: 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65  etDbPointer(inte
27d0: 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62  rp, argv[1], &db
27e0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
27f0: 52 52 4f 52 3b 0a 20 20 73 70 72 69 6e 74 66 28  RROR;.  sprintf(
2800: 7a 42 75 66 2c 20 22 25 6c 6c 64 22 2c 20 73 71  zBuf, "%lld", sq
2810: 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72  lite3_last_inser
2820: 74 5f 72 6f 77 69 64 28 64 62 29 29 3b 0a 20 20  t_rowid(db));.  
2830: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
2840: 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 30  (interp, zBuf, 0
2850: 29 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49  );.  return SQLI
2860: 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  TE_OK;.}../*.** 
2870: 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f  Usage:  sqlite3_
2880: 6b 65 79 20 44 42 20 4b 45 59 0a 2a 2a 0a 2a 2a  key DB KEY.**.**
2890: 20 53 65 74 20 74 68 65 20 63 6f 64 65 63 20 6b   Set the codec k
28a0: 65 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ey..*/.static in
28b0: 74 20 74 65 73 74 5f 6b 65 79 28 0a 20 20 76 6f  t test_key(.  vo
28c0: 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54  id *NotUsed,.  T
28d0: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
28e0: 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c  p,    /* The TCL
28f0: 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61   interpreter tha
2900: 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63  t invoked this c
2910: 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  ommand */.  int 
2920: 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20  argc,           
2930: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
2940: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63  arguments */.  c
2950: 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20  har **argv      
2960: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
2970: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a   each argument *
2980: 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  /.){.  sqlite3 *
2990: 64 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  db;.  const char
29a0: 20 2a 7a 4b 65 79 3b 0a 20 20 69 6e 74 20 6e 4b   *zKey;.  int nK
29b0: 65 79 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d  ey;.  if( argc!=
29c0: 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  3 ){.    Tcl_App
29d0: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
29e0: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
29f0: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
2a00: 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20  argv[0],.       
2a10: 22 20 46 49 4c 45 4e 41 4d 45 5c 22 22 2c 20 30  " FILENAME\"", 0
2a20: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
2a30: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
2a40: 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
2a50: 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c  interp, argv[1],
2a60: 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
2a70: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 4b 65 79  CL_ERROR;.  zKey
2a80: 20 3d 20 61 72 67 76 5b 32 5d 3b 0a 20 20 6e 4b   = argv[2];.  nK
2a90: 65 79 20 3d 20 73 74 72 6c 65 6e 28 7a 4b 65 79  ey = strlen(zKey
2aa0: 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
2ab0: 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20 73 71 6c  _HAS_CODEC.  sql
2ac0: 69 74 65 33 5f 6b 65 79 28 64 62 2c 20 7a 4b 65  ite3_key(db, zKe
2ad0: 79 2c 20 6e 4b 65 79 29 3b 0a 23 65 6e 64 69 66  y, nKey);.#endif
2ae0: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
2af0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
2b00: 3a 20 20 73 71 6c 69 74 65 33 5f 72 65 6b 65 79  :  sqlite3_rekey
2b10: 20 44 42 20 4b 45 59 0a 2a 2a 0a 2a 2a 20 43 68   DB KEY.**.** Ch
2b20: 61 6e 67 65 20 74 68 65 20 63 6f 64 65 63 20 6b  ange the codec k
2b30: 65 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ey..*/.static in
2b40: 74 20 74 65 73 74 5f 72 65 6b 65 79 28 0a 20 20  t test_rekey(.  
2b50: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
2b60: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
2b70: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
2b80: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
2b90: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
2ba0: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
2bb0: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
2bc0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
2bd0: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
2be0: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
2bf0: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
2c00: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
2c10: 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33   */.){.  sqlite3
2c20: 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68   *db;.  const ch
2c30: 61 72 20 2a 7a 4b 65 79 3b 0a 20 20 69 6e 74 20  ar *zKey;.  int 
2c40: 6e 4b 65 79 3b 0a 20 20 69 66 28 20 61 72 67 63  nKey;.  if( argc
2c50: 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=3 ){.    Tcl_A
2c60: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
2c70: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
2c80: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
2c90: 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20  , argv[0],.     
2ca0: 20 20 22 20 46 49 4c 45 4e 41 4d 45 5c 22 22 2c    " FILENAME\"",
2cb0: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
2cc0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
2cd0: 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
2ce0: 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31  r(interp, argv[1
2cf0: 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e  ], &db) ) return
2d00: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 4b   TCL_ERROR;.  zK
2d10: 65 79 20 3d 20 61 72 67 76 5b 32 5d 3b 0a 20 20  ey = argv[2];.  
2d20: 6e 4b 65 79 20 3d 20 73 74 72 6c 65 6e 28 7a 4b  nKey = strlen(zK
2d30: 65 79 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  ey);.#ifdef SQLI
2d40: 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20 73  TE_HAS_CODEC.  s
2d50: 71 6c 69 74 65 33 5f 72 65 6b 65 79 28 64 62 2c  qlite3_rekey(db,
2d60: 20 7a 4b 65 79 2c 20 6e 4b 65 79 29 3b 0a 23 65   zKey, nKey);.#e
2d70: 6e 64 69 66 0a 20 20 72 65 74 75 72 6e 20 54 43  ndif.  return TC
2d80: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
2d90: 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 63  sage:  sqlite3_c
2da0: 6c 6f 73 65 20 44 42 0a 2a 2a 0a 2a 2a 20 43 6c  lose DB.**.** Cl
2db0: 6f 73 65 73 20 74 68 65 20 64 61 74 61 62 61 73  oses the databas
2dc0: 65 20 6f 70 65 6e 65 64 20 62 79 20 73 71 6c 69  e opened by sqli
2dd0: 74 65 33 5f 6f 70 65 6e 2e 0a 2a 2f 0a 73 74 61  te3_open..*/.sta
2de0: 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65 5f 74  tic int sqlite_t
2df0: 65 73 74 5f 63 6c 6f 73 65 28 0a 20 20 76 6f 69  est_close(.  voi
2e00: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63  d *NotUsed,.  Tc
2e10: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
2e20: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
2e30: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
2e40: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
2e50: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61  mmand */.  int a
2e60: 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  rgc,            
2e70: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
2e80: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68  rguments */.  ch
2e90: 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20  ar **argv       
2ea0: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
2eb0: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f  each argument */
2ec0: 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  .){.  sqlite3 *d
2ed0: 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69  b;.  int rc;.  i
2ee0: 66 28 20 61 72 67 63 21 3d 32 20 29 7b 0a 20 20  f( argc!=2 ){.  
2ef0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
2f00: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
2f10: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
2f20: 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
2f30: 2c 0a 20 20 20 20 20 20 20 22 20 46 49 4c 45 4e  ,.       " FILEN
2f40: 41 4d 45 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20  AME\"", 0);.    
2f50: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
2f60: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44  ;.  }.  if( getD
2f70: 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  bPointer(interp,
2f80: 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29   argv[1], &db) )
2f90: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
2fa0: 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  R;.  rc = sqlite
2fb0: 33 5f 63 6c 6f 73 65 28 64 62 29 3b 0a 20 20 54  3_close(db);.  T
2fc0: 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74  cl_SetResult(int
2fd0: 65 72 70 2c 20 28 63 68 61 72 20 2a 29 65 72 72  erp, (char *)err
2fe0: 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f  orName(rc), TCL_
2ff0: 53 54 41 54 49 43 29 3b 0a 20 20 72 65 74 75 72  STATIC);.  retur
3000: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
3010: 2a 2a 20 49 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** Implementatio
3020: 6e 20 6f 66 20 74 68 65 20 78 5f 63 6f 61 6c 65  n of the x_coale
3030: 73 63 65 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a  sce() function..
3040: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 66 69  ** Return the fi
3050: 72 73 74 20 61 72 67 75 6d 65 6e 74 20 6e 6f 6e  rst argument non
3060: 2d 4e 55 4c 4c 20 61 72 67 75 6d 65 6e 74 2e 0a  -NULL argument..
3070: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 69  */.static void i
3080: 66 6e 75 6c 6c 46 75 6e 63 28 73 71 6c 69 74 65  fnullFunc(sqlite
3090: 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65  3_context *conte
30a0: 78 74 2c 20 69 6e 74 20 61 72 67 63 2c 20 73 71  xt, int argc, sq
30b0: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72  lite3_value **ar
30c0: 67 76 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  gv){.  int i;.  
30d0: 66 6f 72 28 69 3d 30 3b 20 69 3c 61 72 67 63 3b  for(i=0; i<argc;
30e0: 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 53   i++){.    if( S
30f0: 51 4c 49 54 45 5f 4e 55 4c 4c 21 3d 73 71 6c 69  QLITE_NULL!=sqli
3100: 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 61  te3_value_type(a
3110: 72 67 76 5b 69 5d 29 20 29 7b 0a 20 20 20 20 20  rgv[i]) ){.     
3120: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
3130: 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 28 63  text(context, (c
3140: 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c  har*)sqlite3_val
3150: 75 65 5f 74 65 78 74 28 61 72 67 76 5b 69 5d 29  ue_text(argv[i])
3160: 2c 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ,.          sqli
3170: 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 28  te3_value_bytes(
3180: 61 72 67 76 5b 69 5d 29 2c 20 53 51 4c 49 54 45  argv[i]), SQLITE
3190: 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20  _TRANSIENT);.   
31a0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
31b0: 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 20 73    }.}../*.** A s
31c0: 74 72 75 63 74 75 72 65 20 69 6e 74 6f 20 77 68  tructure into wh
31d0: 69 63 68 20 74 6f 20 61 63 63 75 6d 75 6c 61 74  ich to accumulat
31e0: 65 20 74 65 78 74 2e 0a 2a 2f 0a 73 74 72 75 63  e text..*/.struc
31f0: 74 20 64 73 74 72 20 7b 0a 20 20 69 6e 74 20 6e  t dstr {.  int n
3200: 41 6c 6c 6f 63 3b 20 20 2f 2a 20 53 70 61 63 65  Alloc;  /* Space
3210: 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20   allocated */.  
3220: 69 6e 74 20 6e 55 73 65 64 3b 20 20 20 2f 2a 20  int nUsed;   /* 
3230: 53 70 61 63 65 20 75 73 65 64 20 2a 2f 0a 20 20  Space used */.  
3240: 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20  char *z;     /* 
3250: 54 68 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a  The space */.};.
3260: 0a 2f 2a 0a 2a 2a 20 41 70 70 65 6e 64 20 74 65  ./*.** Append te
3270: 78 74 20 74 6f 20 61 20 64 73 74 72 0a 2a 2f 0a  xt to a dstr.*/.
3280: 73 74 61 74 69 63 20 76 6f 69 64 20 64 73 74 72  static void dstr
3290: 41 70 70 65 6e 64 28 73 74 72 75 63 74 20 64 73  Append(struct ds
32a0: 74 72 20 2a 70 2c 20 63 6f 6e 73 74 20 63 68 61  tr *p, const cha
32b0: 72 20 2a 7a 2c 20 69 6e 74 20 64 69 76 69 64 65  r *z, int divide
32c0: 72 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 73 74  r){.  int n = st
32d0: 72 6c 65 6e 28 7a 29 3b 0a 20 20 69 66 28 20 70  rlen(z);.  if( p
32e0: 2d 3e 6e 55 73 65 64 20 2b 20 6e 20 2b 20 32 20  ->nUsed + n + 2 
32f0: 3e 20 70 2d 3e 6e 41 6c 6c 6f 63 20 29 7b 0a 20  > p->nAlloc ){. 
3300: 20 20 20 63 68 61 72 20 2a 7a 4e 65 77 3b 0a 20     char *zNew;. 
3310: 20 20 20 70 2d 3e 6e 41 6c 6c 6f 63 20 3d 20 70     p->nAlloc = p
3320: 2d 3e 6e 41 6c 6c 6f 63 2a 32 20 2b 20 6e 20 2b  ->nAlloc*2 + n +
3330: 20 32 30 30 3b 0a 20 20 20 20 7a 4e 65 77 20 3d   200;.    zNew =
3340: 20 73 71 6c 69 74 65 52 65 61 6c 6c 6f 63 28 70   sqliteRealloc(p
3350: 2d 3e 7a 2c 20 70 2d 3e 6e 41 6c 6c 6f 63 29 3b  ->z, p->nAlloc);
3360: 0a 20 20 20 20 69 66 28 20 7a 4e 65 77 3d 3d 30  .    if( zNew==0
3370: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
3380: 46 72 65 65 28 70 2d 3e 7a 29 3b 0a 20 20 20 20  Free(p->z);.    
3390: 20 20 6d 65 6d 73 65 74 28 70 2c 20 30 2c 20 73    memset(p, 0, s
33a0: 69 7a 65 6f 66 28 2a 70 29 29 3b 0a 20 20 20 20  izeof(*p));.    
33b0: 20 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a    return;.    }.
33c0: 20 20 20 20 70 2d 3e 7a 20 3d 20 7a 4e 65 77 3b      p->z = zNew;
33d0: 0a 20 20 7d 0a 20 20 69 66 28 20 64 69 76 69 64  .  }.  if( divid
33e0: 65 72 20 26 26 20 70 2d 3e 6e 55 73 65 64 3e 30  er && p->nUsed>0
33f0: 20 29 7b 0a 20 20 20 20 70 2d 3e 7a 5b 70 2d 3e   ){.    p->z[p->
3400: 6e 55 73 65 64 2b 2b 5d 20 3d 20 64 69 76 69 64  nUsed++] = divid
3410: 65 72 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79  er;.  }.  memcpy
3420: 28 26 70 2d 3e 7a 5b 70 2d 3e 6e 55 73 65 64 5d  (&p->z[p->nUsed]
3430: 2c 20 7a 2c 20 6e 2b 31 29 3b 0a 20 20 70 2d 3e  , z, n+1);.  p->
3440: 6e 55 73 65 64 20 2b 3d 20 6e 3b 0a 7d 0a 0a 2f  nUsed += n;.}../
3450: 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 64 20 66 6f 72  *.** Invoked for
3460: 20 65 61 63 68 20 63 61 6c 6c 62 61 63 6b 20 66   each callback f
3470: 72 6f 6d 20 73 71 6c 69 74 65 33 45 78 65 63 46  rom sqlite3ExecF
3480: 75 6e 63 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  unc.*/.static in
3490: 74 20 65 78 65 63 46 75 6e 63 43 61 6c 6c 62 61  t execFuncCallba
34a0: 63 6b 28 76 6f 69 64 20 2a 70 44 61 74 61 2c 20  ck(void *pData, 
34b0: 69 6e 74 20 61 72 67 63 2c 20 63 68 61 72 20 2a  int argc, char *
34c0: 2a 61 72 67 76 2c 20 63 68 61 72 20 2a 2a 4e 6f  *argv, char **No
34d0: 74 55 73 65 64 29 7b 0a 20 20 73 74 72 75 63 74  tUsed){.  struct
34e0: 20 64 73 74 72 20 2a 70 20 3d 20 28 73 74 72 75   dstr *p = (stru
34f0: 63 74 20 64 73 74 72 2a 29 70 44 61 74 61 3b 0a  ct dstr*)pData;.
3500: 20 20 69 6e 74 20 69 3b 0a 20 20 66 6f 72 28 69    int i;.  for(i
3510: 3d 30 3b 20 69 3c 61 72 67 63 3b 20 69 2b 2b 29  =0; i<argc; i++)
3520: 7b 0a 20 20 20 20 69 66 28 20 61 72 67 76 5b 69  {.    if( argv[i
3530: 5d 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 73  ]==0 ){.      ds
3540: 74 72 41 70 70 65 6e 64 28 70 2c 20 22 4e 55 4c  trAppend(p, "NUL
3550: 4c 22 2c 20 27 20 27 29 3b 0a 20 20 20 20 7d 65  L", ' ');.    }e
3560: 6c 73 65 7b 0a 20 20 20 20 20 20 64 73 74 72 41  lse{.      dstrA
3570: 70 70 65 6e 64 28 70 2c 20 61 72 67 76 5b 69 5d  ppend(p, argv[i]
3580: 2c 20 27 20 27 29 3b 0a 20 20 20 20 7d 0a 20 20  , ' ');.    }.  
3590: 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a  }.  return 0;.}.
35a0: 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c 65 6d 65 6e 74  ./*.** Implement
35b0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 78 5f 73  ation of the x_s
35c0: 71 6c 69 74 65 5f 65 78 65 63 28 29 20 66 75 6e  qlite_exec() fun
35d0: 63 74 69 6f 6e 2e 20 20 54 68 69 73 20 66 75 6e  ction.  This fun
35e0: 63 74 69 6f 6e 20 74 61 6b 65 73 0a 2a 2a 20 61  ction takes.** a
35f0: 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74   single argument
3600: 20 61 6e 64 20 61 74 74 65 6d 70 74 73 20 74 6f   and attempts to
3610: 20 65 78 65 63 75 74 65 20 74 68 61 74 20 61 72   execute that ar
3620: 67 75 6d 65 6e 74 20 61 73 20 53 51 4c 20 63 6f  gument as SQL co
3630: 64 65 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 69  de..** This is i
3640: 6c 6c 65 67 61 6c 20 61 6e 64 20 73 68 6f 75 6c  llegal and shoul
3650: 64 20 73 65 74 20 74 68 65 20 53 51 4c 49 54 45  d set the SQLITE
3660: 5f 4d 49 53 55 53 45 20 66 6c 61 67 20 6f 6e 20  _MISUSE flag on 
3670: 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a 2a 2a  the database..**
3680: 0a 2a 2a 20 32 30 30 34 2d 4a 61 6e 2d 30 37 3a  .** 2004-Jan-07:
3690: 20 20 57 65 20 68 61 76 65 20 63 68 61 6e 67 65    We have change
36a0: 64 20 74 68 69 73 20 74 6f 20 6d 61 6b 65 20 69  d this to make i
36b0: 74 20 6c 65 67 61 6c 20 74 6f 20 63 61 6c 6c 20  t legal to call 
36c0: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 0a 2a  sqlite3_exec().*
36d0: 2a 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20  * from within a 
36e0: 66 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 2e 20 20  function call.  
36f0: 0a 2a 2a 20 0a 2a 2a 20 54 68 69 73 20 72 6f 75  .** .** This rou
3700: 74 69 6e 65 20 73 69 6d 75 6c 61 74 65 73 20 74  tine simulates t
3710: 68 65 20 65 66 66 65 63 74 20 6f 66 20 68 61 76  he effect of hav
3720: 69 6e 67 20 74 77 6f 20 74 68 72 65 61 64 73 20  ing two threads 
3730: 61 74 74 65 6d 70 74 20 74 6f 0a 2a 2a 20 75 73  attempt to.** us
3740: 65 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  e the same datab
3750: 61 73 65 20 61 74 20 74 68 65 20 73 61 6d 65 20  ase at the same 
3760: 74 69 6d 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  time..*/.static 
3770: 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 65 63  void sqlite3Exec
3780: 46 75 6e 63 28 0a 20 20 73 71 6c 69 74 65 33 5f  Func(.  sqlite3_
3790: 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78 74  context *context
37a0: 2c 20 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20  , .  int argc,  
37b0: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
37c0: 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 73 74 72   **argv.){.  str
37d0: 75 63 74 20 64 73 74 72 20 78 3b 0a 20 20 6d 65  uct dstr x;.  me
37e0: 6d 73 65 74 28 26 78 2c 20 30 2c 20 73 69 7a 65  mset(&x, 0, size
37f0: 6f 66 28 78 29 29 3b 0a 20 20 73 71 6c 69 74 65  of(x));.  sqlite
3800: 33 5f 65 78 65 63 28 28 73 71 6c 69 74 65 33 2a  3_exec((sqlite3*
3810: 29 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61  )sqlite3_user_da
3820: 74 61 28 63 6f 6e 74 65 78 74 29 2c 0a 20 20 20  ta(context),.   
3830: 20 20 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65     (char*)sqlite
3840: 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67  3_value_text(arg
3850: 76 5b 30 5d 29 2c 0a 20 20 20 20 20 20 65 78 65  v[0]),.      exe
3860: 63 46 75 6e 63 43 61 6c 6c 62 61 63 6b 2c 20 26  cFuncCallback, &
3870: 78 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33  x, 0);.  sqlite3
3880: 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 63 6f 6e  _result_text(con
3890: 74 65 78 74 2c 20 78 2e 7a 2c 20 78 2e 6e 55 73  text, x.z, x.nUs
38a0: 65 64 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  ed, SQLITE_TRANS
38b0: 49 45 4e 54 29 3b 0a 20 20 73 71 6c 69 74 65 46  IENT);.  sqliteF
38c0: 72 65 65 28 78 2e 7a 29 3b 0a 7d 0a 0a 2f 2a 0a  ree(x.z);.}../*.
38d0: 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
38e0: 65 5f 74 65 73 74 5f 63 72 65 61 74 65 5f 66 75  e_test_create_fu
38f0: 6e 63 74 69 6f 6e 20 44 42 0a 2a 2a 0a 2a 2a 20  nction DB.**.** 
3900: 43 61 6c 6c 20 74 68 65 20 73 71 6c 69 74 65 33  Call the sqlite3
3910: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
3920: 20 41 50 49 20 6f 6e 20 74 68 65 20 67 69 76 65   API on the give
3930: 6e 20 64 61 74 61 62 61 73 65 20 69 6e 20 6f 72  n database in or
3940: 64 65 72 0a 2a 2a 20 74 6f 20 63 72 65 61 74 65  der.** to create
3950: 20 61 20 66 75 6e 63 74 69 6f 6e 20 6e 61 6d 65   a function name
3960: 64 20 22 78 5f 63 6f 61 6c 65 73 63 65 22 2e 20  d "x_coalesce". 
3970: 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 64   This function d
3980: 6f 65 73 20 74 68 65 20 73 61 6d 65 20 74 68 69  oes the same thi
3990: 6e 67 0a 2a 2a 20 61 73 20 74 68 65 20 22 63 6f  ng.** as the "co
39a0: 61 6c 65 73 63 65 22 20 66 75 6e 63 74 69 6f 6e  alesce" function
39b0: 2e 20 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  .  This function
39c0: 20 61 6c 73 6f 20 72 65 67 69 73 74 65 72 73 20   also registers 
39d0: 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 0a  an SQL function.
39e0: 2a 2a 20 6e 61 6d 65 64 20 22 78 5f 73 71 6c 69  ** named "x_sqli
39f0: 74 65 5f 65 78 65 63 22 20 74 68 61 74 20 69 6e  te_exec" that in
3a00: 76 6f 6b 65 73 20 73 71 6c 69 74 65 33 5f 65 78  vokes sqlite3_ex
3a10: 65 63 28 29 2e 20 20 49 6e 76 6f 6b 69 6e 67 20  ec().  Invoking 
3a20: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 0a 2a  sqlite3_exec().*
3a30: 2a 20 69 6e 20 74 68 69 73 20 77 61 79 20 69 73  * in this way is
3a40: 20 69 6c 6c 65 67 61 6c 20 72 65 63 75 72 73 69   illegal recursi
3a50: 6f 6e 20 61 6e 64 20 73 68 6f 75 6c 64 20 72 61  on and should ra
3a60: 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49  ise an SQLITE_MI
3a70: 53 55 53 45 20 65 72 72 6f 72 2e 0a 2a 2a 20 54  SUSE error..** T
3a80: 68 65 20 65 66 66 65 63 74 20 69 73 20 73 69 6d  he effect is sim
3a90: 69 6c 61 72 20 74 6f 20 74 72 79 69 6e 67 20 74  ilar to trying t
3aa0: 6f 20 75 73 65 20 74 68 65 20 73 61 6d 65 20 64  o use the same d
3ab0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
3ac0: 6f 6e 20 66 72 6f 6d 0a 2a 2a 20 74 77 6f 20 74  on from.** two t
3ad0: 68 72 65 61 64 73 20 61 74 20 74 68 65 20 73 61  hreads at the sa
3ae0: 6d 65 20 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 54  me time..**.** T
3af0: 68 65 20 6f 72 69 67 69 6e 61 6c 20 6d 6f 74 69  he original moti
3b00: 76 61 74 69 6f 6e 20 66 6f 72 20 74 68 69 73 20  vation for this 
3b10: 72 6f 75 74 69 6e 65 20 77 61 73 20 74 6f 20 62  routine was to b
3b20: 65 20 61 62 6c 65 20 74 6f 20 63 61 6c 6c 20 74  e able to call t
3b30: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 72  he.** sqlite3_cr
3b40: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 20 66 75  eate_function fu
3b50: 6e 63 74 69 6f 6e 20 77 68 69 6c 65 20 61 20 71  nction while a q
3b60: 75 65 72 79 20 69 73 20 69 6e 20 70 72 6f 67 72  uery is in progr
3b70: 65 73 73 20 69 6e 20 6f 72 64 65 72 0a 2a 2a 20  ess in order.** 
3b80: 74 6f 20 74 65 73 74 20 74 68 65 20 53 51 4c 49  to test the SQLI
3b90: 54 45 5f 4d 49 53 55 53 45 20 64 65 74 65 63 74  TE_MISUSE detect
3ba0: 69 6f 6e 20 6c 6f 67 69 63 2e 0a 2a 2f 0a 73 74  ion logic..*/.st
3bb0: 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63 72  atic int test_cr
3bc0: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 0a 20  eate_function(. 
3bd0: 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a   void *NotUsed,.
3be0: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
3bf0: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
3c00: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
3c10: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
3c20: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
3c30: 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20  nt argc,        
3c40: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
3c50: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
3c60: 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20    char **argv   
3c70: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
3c80: 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e   of each argumen
3c90: 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 72 63  t */.){.  int rc
3ca0: 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  ;.  sqlite3 *db;
3cb0: 0a 20 20 65 78 74 65 72 6e 20 76 6f 69 64 20 4d  .  extern void M
3cc0: 64 35 5f 52 65 67 69 73 74 65 72 28 73 71 6c 69  d5_Register(sqli
3cd0: 74 65 33 2a 29 3b 0a 0a 20 20 69 66 28 20 61 72  te3*);..  if( ar
3ce0: 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=2 ){.    Tcl
3cf0: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
3d00: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
3d10: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
3d20: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20  "", argv[0],.   
3d30: 20 20 20 20 22 20 44 42 5c 22 22 2c 20 30 29 3b      " DB\"", 0);
3d40: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
3d50: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
3d60: 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e   getDbPointer(in
3d70: 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26  terp, argv[1], &
3d80: 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  db) ) return TCL
3d90: 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73  _ERROR;.  rc = s
3da0: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
3db0: 6e 63 74 69 6f 6e 28 64 62 2c 20 22 78 5f 63 6f  nction(db, "x_co
3dc0: 61 6c 65 73 63 65 22 2c 20 2d 31 2c 20 53 51 4c  alesce", -1, SQL
3dd0: 49 54 45 5f 41 4e 59 2c 20 30 2c 20 0a 20 20 20  ITE_ANY, 0, .   
3de0: 20 20 20 20 20 69 66 6e 75 6c 6c 46 75 6e 63 2c       ifnullFunc,
3df0: 20 30 2c 20 30 29 3b 0a 0a 23 69 66 6e 64 65 66   0, 0);..#ifndef
3e00: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
3e10: 31 36 0a 20 20 2f 2a 20 55 73 65 20 74 68 65 20  16.  /* Use the 
3e20: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
3e30: 75 6e 63 74 69 6f 6e 31 36 28 29 20 41 50 49 20  unction16() API 
3e40: 68 65 72 65 2e 20 4d 61 69 6e 6c 79 20 66 6f 72  here. Mainly for
3e50: 20 66 75 6e 2c 20 62 75 74 20 61 6c 73 6f 20 0a   fun, but also .
3e60: 20 20 2a 2a 20 62 65 63 61 75 73 65 20 69 74 20    ** because it 
3e70: 69 73 20 6e 6f 74 20 74 65 73 74 65 64 20 61 6e  is not tested an
3e80: 79 77 68 65 72 65 20 65 6c 73 65 2e 20 2a 2f 0a  ywhere else. */.
3e90: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
3ea0: 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  _OK ){.    sqlit
3eb0: 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 3b 0a  e3_value *pVal;.
3ec0: 20 20 20 20 70 56 61 6c 20 3d 20 73 71 6c 69 74      pVal = sqlit
3ed0: 65 33 56 61 6c 75 65 4e 65 77 28 29 3b 0a 20 20  e3ValueNew();.  
3ee0: 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65    sqlite3ValueSe
3ef0: 74 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c 20 22  tStr(pVal, -1, "
3f00: 78 5f 73 71 6c 69 74 65 5f 65 78 65 63 22 2c 20  x_sqlite_exec", 
3f10: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
3f20: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
3f30: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72   rc = sqlite3_cr
3f40: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 31 36 28  eate_function16(
3f50: 64 62 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  db, .           
3f60: 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 54     sqlite3ValueT
3f70: 65 78 74 28 70 56 61 6c 2c 20 53 51 4c 49 54 45  ext(pVal, SQLITE
3f80: 5f 55 54 46 31 36 4e 41 54 49 56 45 29 2c 0a 20  _UTF16NATIVE),. 
3f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 31 2c 20               1, 
3fa0: 53 51 4c 49 54 45 5f 55 54 46 31 36 2c 20 64 62  SQLITE_UTF16, db
3fb0: 2c 20 73 71 6c 69 74 65 33 45 78 65 63 46 75 6e  , sqlite3ExecFun
3fc0: 63 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 73 71  c, 0, 0);.    sq
3fd0: 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 70  lite3ValueFree(p
3fe0: 56 61 6c 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  Val);.  }.#endif
3ff0: 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54  ..  if( sqlite3T
4000: 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72  estErrCode(inter
4010: 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65 74  p, db, rc) ) ret
4020: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
4030: 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69   Tcl_SetResult(i
4040: 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 65  nterp, (char *)e
4050: 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 30 29  rrorName(rc), 0)
4060: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
4070: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74  K;.}../*.** Rout
4080: 69 6e 65 73 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  ines to implemen
4090: 74 20 74 68 65 20 78 5f 63 6f 75 6e 74 28 29 20  t the x_count() 
40a0: 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
40b0: 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  on..*/.typedef s
40c0: 74 72 75 63 74 20 43 6f 75 6e 74 43 74 78 20 43  truct CountCtx C
40d0: 6f 75 6e 74 43 74 78 3b 0a 73 74 72 75 63 74 20  ountCtx;.struct 
40e0: 43 6f 75 6e 74 43 74 78 20 7b 0a 20 20 69 6e 74  CountCtx {.  int
40f0: 20 6e 3b 0a 7d 3b 0a 73 74 61 74 69 63 20 76 6f   n;.};.static vo
4100: 69 64 20 63 6f 75 6e 74 53 74 65 70 28 73 71 6c  id countStep(sql
4110: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f  ite3_context *co
4120: 6e 74 65 78 74 2c 20 69 6e 74 20 61 72 67 63 2c  ntext, int argc,
4130: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
4140: 2a 61 72 67 76 29 7b 0a 20 20 43 6f 75 6e 74 43  *argv){.  CountC
4150: 74 78 20 2a 70 3b 0a 20 20 70 20 3d 20 73 71 6c  tx *p;.  p = sql
4160: 69 74 65 33 5f 61 67 67 72 65 67 61 74 65 5f 63  ite3_aggregate_c
4170: 6f 6e 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20  ontext(context, 
4180: 73 69 7a 65 6f 66 28 2a 70 29 29 3b 0a 20 20 69  sizeof(*p));.  i
4190: 66 28 20 28 61 72 67 63 3d 3d 30 20 7c 7c 20 53  f( (argc==0 || S
41a0: 51 4c 49 54 45 5f 4e 55 4c 4c 21 3d 73 71 6c 69  QLITE_NULL!=sqli
41b0: 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 61  te3_value_type(a
41c0: 72 67 76 5b 30 5d 29 20 29 20 26 26 20 70 20 29  rgv[0]) ) && p )
41d0: 7b 0a 20 20 20 20 70 2d 3e 6e 2b 2b 3b 0a 20 20  {.    p->n++;.  
41e0: 7d 0a 7d 20 20 20 0a 73 74 61 74 69 63 20 76 6f  }.}   .static vo
41f0: 69 64 20 63 6f 75 6e 74 46 69 6e 61 6c 69 7a 65  id countFinalize
4200: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
4210: 20 2a 63 6f 6e 74 65 78 74 29 7b 0a 20 20 43 6f   *context){.  Co
4220: 75 6e 74 43 74 78 20 2a 70 3b 0a 20 20 70 20 3d  untCtx *p;.  p =
4230: 20 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61   sqlite3_aggrega
4240: 74 65 5f 63 6f 6e 74 65 78 74 28 63 6f 6e 74 65  te_context(conte
4250: 78 74 2c 20 73 69 7a 65 6f 66 28 2a 70 29 29 3b  xt, sizeof(*p));
4260: 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  .  sqlite3_resul
4270: 74 5f 69 6e 74 28 63 6f 6e 74 65 78 74 2c 20 70  t_int(context, p
4280: 20 3f 20 70 2d 3e 6e 20 3a 20 30 29 3b 0a 7d 0a   ? p->n : 0);.}.
4290: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
42a0: 71 6c 69 74 65 5f 74 65 73 74 5f 63 72 65 61 74  qlite_test_creat
42b0: 65 5f 61 67 67 72 65 67 61 74 65 20 44 42 0a 2a  e_aggregate DB.*
42c0: 2a 0a 2a 2a 20 43 61 6c 6c 20 74 68 65 20 73 71  *.** Call the sq
42d0: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
42e0: 63 74 69 6f 6e 20 41 50 49 20 6f 6e 20 74 68 65  ction API on the
42f0: 20 67 69 76 65 6e 20 64 61 74 61 62 61 73 65 20   given database 
4300: 69 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 63  in order.** to c
4310: 72 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e  reate a function
4320: 20 6e 61 6d 65 64 20 22 78 5f 63 6f 75 6e 74 22   named "x_count"
4330: 2e 20 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  .  This function
4340: 20 64 6f 65 73 20 74 68 65 20 73 61 6d 65 20 74   does the same t
4350: 68 69 6e 67 0a 2a 2a 20 61 73 20 74 68 65 20 22  hing.** as the "
4360: 6d 64 35 73 75 6d 22 20 66 75 6e 63 74 69 6f 6e  md5sum" function
4370: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6f 72 69 67  ..**.** The orig
4380: 69 6e 61 6c 20 6d 6f 74 69 76 61 74 69 6f 6e 20  inal motivation 
4390: 66 6f 72 20 74 68 69 73 20 72 6f 75 74 69 6e 65  for this routine
43a0: 20 77 61 73 20 74 6f 20 62 65 20 61 62 6c 65 20   was to be able 
43b0: 74 6f 20 63 61 6c 6c 20 74 68 65 0a 2a 2a 20 73  to call the.** s
43c0: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 61 67  qlite3_create_ag
43d0: 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
43e0: 20 77 68 69 6c 65 20 61 20 71 75 65 72 79 20 69   while a query i
43f0: 73 20 69 6e 20 70 72 6f 67 72 65 73 73 20 69 6e  s in progress in
4400: 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 74 65 73   order.** to tes
4410: 74 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 49 53  t the SQLITE_MIS
4420: 55 53 45 20 64 65 74 65 63 74 69 6f 6e 20 6c 6f  USE detection lo
4430: 67 69 63 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  gic..*/.static i
4440: 6e 74 20 74 65 73 74 5f 63 72 65 61 74 65 5f 61  nt test_create_a
4450: 67 67 72 65 67 61 74 65 28 0a 20 20 76 6f 69 64  ggregate(.  void
4460: 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c   *NotUsed,.  Tcl
4470: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
4480: 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69      /* The TCL i
4490: 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20  nterpreter that 
44a0: 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d  invoked this com
44b0: 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72  mand */.  int ar
44c0: 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  gc,             
44d0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
44e0: 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61  guments */.  cha
44f0: 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20  r **argv        
4500: 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65      /* Text of e
4510: 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  ach argument */.
4520: 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
4530: 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 66  ;.  int rc;.  if
4540: 28 20 61 72 67 63 21 3d 32 20 29 7b 0a 20 20 20  ( argc!=2 ){.   
4550: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
4560: 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
4570: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
4580: 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c  be \"", argv[0],
4590: 0a 20 20 20 20 20 20 20 22 20 46 49 4c 45 4e 41  .       " FILENA
45a0: 4d 45 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72  ME\"", 0);.    r
45b0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
45c0: 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
45d0: 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
45e0: 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20  argv[1], &db) ) 
45f0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
4600: 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
4610: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
4620: 28 64 62 2c 20 22 78 5f 63 6f 75 6e 74 22 2c 20  (db, "x_count", 
4630: 30 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  0, SQLITE_UTF8, 
4640: 30 2c 20 30 2c 0a 20 20 20 20 20 20 63 6f 75 6e  0, 0,.      coun
4650: 74 53 74 65 70 2c 63 6f 75 6e 74 46 69 6e 61 6c  tStep,countFinal
4660: 69 7a 65 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  ize);.  if( rc==
4670: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
4680: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
4690: 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22 78 5f  function(db, "x_
46a0: 63 6f 75 6e 74 22 2c 20 31 2c 20 53 51 4c 49 54  count", 1, SQLIT
46b0: 45 5f 55 54 46 38 2c 20 30 2c 20 30 2c 0a 20 20  E_UTF8, 0, 0,.  
46c0: 20 20 20 20 20 20 63 6f 75 6e 74 53 74 65 70 2c        countStep,
46d0: 63 6f 75 6e 74 46 69 6e 61 6c 69 7a 65 29 3b 0a  countFinalize);.
46e0: 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65    }.  if( sqlite
46f0: 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74  3TestErrCode(int
4700: 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72  erp, db, rc) ) r
4710: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
4720: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
4730: 3b 0a 7d 0a 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  ;.}..../*.** Usa
4740: 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70 72  ge:  sqlite3_mpr
4750: 69 6e 74 66 5f 69 6e 74 20 46 4f 52 4d 41 54 20  intf_int FORMAT 
4760: 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45 52 20  INTEGER INTEGER 
4770: 49 4e 54 45 47 45 52 0a 2a 2a 0a 2a 2a 20 43 61  INTEGER.**.** Ca
4780: 6c 6c 20 6d 70 72 69 6e 74 66 20 77 69 74 68 20  ll mprintf with 
4790: 74 68 72 65 65 20 69 6e 74 65 67 65 72 20 61 72  three integer ar
47a0: 67 75 6d 65 6e 74 73 0a 2a 2f 0a 73 74 61 74 69  guments.*/.stati
47b0: 63 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 70  c int sqlite3_mp
47c0: 72 69 6e 74 66 5f 69 6e 74 28 0a 20 20 76 6f 69  rintf_int(.  voi
47d0: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63  d *NotUsed,.  Tc
47e0: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
47f0: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
4800: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
4810: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
4820: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61  mmand */.  int a
4830: 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  rgc,            
4840: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
4850: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68  rguments */.  ch
4860: 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20  ar **argv       
4870: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
4880: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f  each argument */
4890: 0a 29 7b 0a 20 20 69 6e 74 20 61 5b 33 5d 2c 20  .){.  int a[3], 
48a0: 69 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20  i;.  char *z;.  
48b0: 69 66 28 20 61 72 67 63 21 3d 35 20 29 7b 0a 20  if( argc!=5 ){. 
48c0: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
48d0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
48e0: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
48f0: 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30  d be \"", argv[0
4900: 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 4f 52 4d  ],.       " FORM
4910: 41 54 20 49 4e 54 20 49 4e 54 20 49 4e 54 5c 22  AT INT INT INT\"
4920: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
4930: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
4940: 0a 20 20 66 6f 72 28 69 3d 32 3b 20 69 3c 35 3b  .  for(i=2; i<5;
4950: 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 54   i++){.    if( T
4960: 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74 65 72 70  cl_GetInt(interp
4970: 2c 20 61 72 67 76 5b 69 5d 2c 20 26 61 5b 69 2d  , argv[i], &a[i-
4980: 32 5d 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  2]) ) return TCL
4990: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a 20  _ERROR;.  }.  z 
49a0: 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
49b0: 66 28 61 72 67 76 5b 31 5d 2c 20 61 5b 30 5d 2c  f(argv[1], a[0],
49c0: 20 61 5b 31 5d 2c 20 61 5b 32 5d 29 3b 0a 20 20   a[1], a[2]);.  
49d0: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
49e0: 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a  (interp, z, 0);.
49f0: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
4a00: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
4a10: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 66 20  OK;.}../*.** If 
4a20: 7a 4e 75 6d 20 72 65 70 72 65 73 65 6e 74 73 20  zNum represents 
4a30: 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74 20  an integer that 
4a40: 77 69 6c 6c 20 66 69 74 20 69 6e 20 36 34 2d 62  will fit in 64-b
4a50: 69 74 73 2c 20 74 68 65 6e 20 73 65 74 0a 2a 2a  its, then set.**
4a60: 20 2a 70 56 61 6c 75 65 20 74 6f 20 74 68 61 74   *pValue to that
4a70: 20 69 6e 74 65 67 65 72 20 61 6e 64 20 72 65 74   integer and ret
4a80: 75 72 6e 20 74 72 75 65 2e 20 20 4f 74 68 65 72  urn true.  Other
4a90: 77 69 73 65 20 72 65 74 75 72 6e 20 66 61 6c 73  wise return fals
4aa0: 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  e..*/.static int
4ab0: 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74 36 34   sqlite3GetInt64
4ac0: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 75  (const char *zNu
4ad0: 6d 2c 20 69 36 34 20 2a 70 56 61 6c 75 65 29 7b  m, i64 *pValue){
4ae0: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 46 69  .  if( sqlite3Fi
4af0: 74 73 49 6e 36 34 42 69 74 73 28 7a 4e 75 6d 29  tsIn64Bits(zNum)
4b00: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 61   ){.    sqlite3a
4b10: 74 6f 69 36 34 28 7a 4e 75 6d 2c 20 70 56 61 6c  toi64(zNum, pVal
4b20: 75 65 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  ue);.    return 
4b30: 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  1;.  }.  return 
4b40: 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  0;.}../*.** Usag
4b50: 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  e:  sqlite3_mpri
4b60: 6e 74 66 5f 69 6e 74 36 34 20 46 4f 52 4d 41 54  ntf_int64 FORMAT
4b70: 20 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45 52   INTEGER INTEGER
4b80: 20 49 4e 54 45 47 45 52 0a 2a 2a 0a 2a 2a 20 43   INTEGER.**.** C
4b90: 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77 69 74 68  all mprintf with
4ba0: 20 74 68 72 65 65 20 36 34 2d 62 69 74 20 69 6e   three 64-bit in
4bb0: 74 65 67 65 72 20 61 72 67 75 6d 65 6e 74 73 0a  teger arguments.
4bc0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71  */.static int sq
4bd0: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e  lite3_mprintf_in
4be0: 74 36 34 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74  t64(.  void *Not
4bf0: 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Used,.  Tcl_Inte
4c00: 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
4c10: 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
4c20: 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
4c30: 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
4c40: 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20  */.  int argc,  
4c50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
4c60: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
4c70: 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  ts */.  char **a
4c80: 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f  rgv            /
4c90: 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61  * Text of each a
4ca0: 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20  rgument */.){.  
4cb0: 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 5f  int i;.  sqlite_
4cc0: 69 6e 74 36 34 20 61 5b 33 5d 3b 0a 20 20 63 68  int64 a[3];.  ch
4cd0: 61 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72 67  ar *z;.  if( arg
4ce0: 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=5 ){.    Tcl_
4cf0: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
4d00: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
4d10: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
4d20: 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20  ", argv[0],.    
4d30: 20 20 20 22 20 46 4f 52 4d 41 54 20 49 4e 54 20     " FORMAT INT 
4d40: 49 4e 54 20 49 4e 54 5c 22 22 2c 20 30 29 3b 0a  INT INT\"", 0);.
4d50: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
4d60: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 66 6f 72 28  RROR;.  }.  for(
4d70: 69 3d 32 3b 20 69 3c 35 3b 20 69 2b 2b 29 7b 0a  i=2; i<5; i++){.
4d80: 20 20 20 20 69 66 28 20 21 73 71 6c 69 74 65 33      if( !sqlite3
4d90: 47 65 74 49 6e 74 36 34 28 61 72 67 76 5b 69 5d  GetInt64(argv[i]
4da0: 2c 20 26 61 5b 69 2d 32 5d 29 20 29 7b 0a 20 20  , &a[i-2]) ){.  
4db0: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
4dc0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 61 72  sult(interp, "ar
4dd0: 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20 61 20  gument is not a 
4de0: 76 61 6c 69 64 20 36 34 2d 62 69 74 20 69 6e 74  valid 64-bit int
4df0: 65 67 65 72 22 2c 20 30 29 3b 0a 20 20 20 20 20  eger", 0);.     
4e00: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
4e10: 52 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 7a  R;.    }.  }.  z
4e20: 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
4e30: 74 66 28 61 72 67 76 5b 31 5d 2c 20 61 5b 30 5d  tf(argv[1], a[0]
4e40: 2c 20 61 5b 31 5d 2c 20 61 5b 32 5d 29 3b 0a 20  , a[1], a[2]);. 
4e50: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
4e60: 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b  t(interp, z, 0);
4e70: 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  .  sqlite3_free(
4e80: 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  z);.  return TCL
4e90: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
4ea0: 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70  age:  sqlite3_mp
4eb0: 72 69 6e 74 66 5f 73 74 72 20 46 4f 52 4d 41 54  rintf_str FORMAT
4ec0: 20 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45 52   INTEGER INTEGER
4ed0: 20 53 54 52 49 4e 47 0a 2a 2a 0a 2a 2a 20 43 61   STRING.**.** Ca
4ee0: 6c 6c 20 6d 70 72 69 6e 74 66 20 77 69 74 68 20  ll mprintf with 
4ef0: 74 77 6f 20 69 6e 74 65 67 65 72 20 61 72 67 75  two integer argu
4f00: 6d 65 6e 74 73 20 61 6e 64 20 6f 6e 65 20 73 74  ments and one st
4f10: 72 69 6e 67 20 61 72 67 75 6d 65 6e 74 0a 2a 2f  ring argument.*/
4f20: 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69  .static int sqli
4f30: 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72 28  te3_mprintf_str(
4f40: 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64  .  void *NotUsed
4f50: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
4f60: 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
4f70: 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
4f80: 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
4f90: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
4fa0: 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20   int argc,      
4fb0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
4fc0: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
4fd0: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20  /.  char **argv 
4fe0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
4ff0: 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d  xt of each argum
5000: 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20  ent */.){.  int 
5010: 61 5b 33 5d 2c 20 69 3b 0a 20 20 63 68 61 72 20  a[3], i;.  char 
5020: 2a 7a 3b 0a 20 20 69 66 28 20 61 72 67 63 3c 34  *z;.  if( argc<4
5030: 20 7c 7c 20 61 72 67 63 3e 35 20 29 7b 0a 20 20   || argc>5 ){.  
5040: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
5050: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
5060: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
5070: 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
5080: 2c 0a 20 20 20 20 20 20 20 22 20 46 4f 52 4d 41  ,.       " FORMA
5090: 54 20 49 4e 54 20 49 4e 54 20 3f 53 54 52 49 4e  T INT INT ?STRIN
50a0: 47 3f 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72  G?\"", 0);.    r
50b0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
50c0: 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 32 3b 20  .  }.  for(i=2; 
50d0: 69 3c 34 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  i<4; i++){.    i
50e0: 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e  f( Tcl_GetInt(in
50f0: 74 65 72 70 2c 20 61 72 67 76 5b 69 5d 2c 20 26  terp, argv[i], &
5100: 61 5b 69 2d 32 5d 29 20 29 20 72 65 74 75 72 6e  a[i-2]) ) return
5110: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
5120: 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70    z = sqlite3_mp
5130: 72 69 6e 74 66 28 61 72 67 76 5b 31 5d 2c 20 61  rintf(argv[1], a
5140: 5b 30 5d 2c 20 61 5b 31 5d 2c 20 61 72 67 63 3e  [0], a[1], argc>
5150: 34 20 3f 20 61 72 67 76 5b 34 5d 20 3a 20 4e 55  4 ? argv[4] : NU
5160: 4c 4c 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e  LL);.  Tcl_Appen
5170: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
5180: 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33  z, 0);.  sqlite3
5190: 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65 74 75  _free(z);.  retu
51a0: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
51b0: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
51c0: 74 65 33 5f 6d 70 72 69 6e 74 66 5f 64 6f 75 62  te3_mprintf_doub
51d0: 6c 65 20 46 4f 52 4d 41 54 20 49 4e 54 45 47 45  le FORMAT INTEGE
51e0: 52 20 49 4e 54 45 47 45 52 20 44 4f 55 42 4c 45  R INTEGER DOUBLE
51f0: 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69  .**.** Call mpri
5200: 6e 74 66 20 77 69 74 68 20 74 77 6f 20 69 6e 74  ntf with two int
5210: 65 67 65 72 20 61 72 67 75 6d 65 6e 74 73 20 61  eger arguments a
5220: 6e 64 20 6f 6e 65 20 64 6f 75 62 6c 65 20 61 72  nd one double ar
5230: 67 75 6d 65 6e 74 0a 2a 2f 0a 73 74 61 74 69 63  gument.*/.static
5240: 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 70 72   int sqlite3_mpr
5250: 69 6e 74 66 5f 64 6f 75 62 6c 65 28 0a 20 20 76  intf_double(.  v
5260: 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20  oid *NotUsed,.  
5270: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
5280: 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43  rp,    /* The TC
5290: 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68  L interpreter th
52a0: 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20  at invoked this 
52b0: 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74  command */.  int
52c0: 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20   argc,          
52d0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
52e0: 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
52f0: 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20  char **argv     
5300: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f         /* Text o
5310: 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20  f each argument 
5320: 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 61 5b 33 5d  */.){.  int a[3]
5330: 2c 20 69 3b 0a 20 20 64 6f 75 62 6c 65 20 72 3b  , i;.  double r;
5340: 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69 66  .  char *z;.  if
5350: 28 20 61 72 67 63 21 3d 35 20 29 7b 0a 20 20 20  ( argc!=5 ){.   
5360: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
5370: 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
5380: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
5390: 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c  be \"", argv[0],
53a0: 0a 20 20 20 20 20 20 20 22 20 46 4f 52 4d 41 54  .       " FORMAT
53b0: 20 49 4e 54 20 49 4e 54 20 44 4f 55 42 4c 45 5c   INT INT DOUBLE\
53c0: 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  "", 0);.    retu
53d0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
53e0: 7d 0a 20 20 66 6f 72 28 69 3d 32 3b 20 69 3c 34  }.  for(i=2; i<4
53f0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20  ; i++){.    if( 
5400: 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74 65 72  Tcl_GetInt(inter
5410: 70 2c 20 61 72 67 76 5b 69 5d 2c 20 26 61 5b 69  p, argv[i], &a[i
5420: 2d 32 5d 29 20 29 20 72 65 74 75 72 6e 20 54 43  -2]) ) return TC
5430: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
5440: 66 28 20 54 63 6c 5f 47 65 74 44 6f 75 62 6c 65  f( Tcl_GetDouble
5450: 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 34 5d  (interp, argv[4]
5460: 2c 20 26 72 29 20 29 20 72 65 74 75 72 6e 20 54  , &r) ) return T
5470: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 20 3d 20  CL_ERROR;.  z = 
5480: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
5490: 61 72 67 76 5b 31 5d 2c 20 61 5b 30 5d 2c 20 61  argv[1], a[0], a
54a0: 5b 31 5d 2c 20 72 29 3b 0a 20 20 54 63 6c 5f 41  [1], r);.  Tcl_A
54b0: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
54c0: 72 70 2c 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c  rp, z, 0);.  sql
54d0: 69 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20  ite3_free(z);.  
54e0: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
54f0: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
5500: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
5510: 73 63 61 6c 65 64 20 46 4f 52 4d 41 54 20 44 4f  scaled FORMAT DO
5520: 55 42 4c 45 20 44 4f 55 42 4c 45 0a 2a 2a 0a 2a  UBLE DOUBLE.**.*
5530: 2a 20 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77  * Call mprintf w
5540: 69 74 68 20 61 20 73 69 6e 67 6c 65 20 64 6f 75  ith a single dou
5550: 62 6c 65 20 61 72 67 75 6d 65 6e 74 20 77 68 69  ble argument whi
5560: 63 68 20 69 73 20 74 68 65 20 70 72 6f 64 75 63  ch is the produc
5570: 74 20 6f 66 20 74 68 65 0a 2a 2a 20 74 77 6f 20  t of the.** two 
5580: 61 72 67 75 6d 65 6e 74 73 20 67 69 76 65 6e 20  arguments given 
5590: 61 62 6f 76 65 2e 20 20 54 68 69 73 20 69 73 20  above.  This is 
55a0: 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  used to generate
55b0: 20 6f 76 65 72 66 6c 6f 77 20 61 6e 64 20 75 6e   overflow and un
55c0: 64 65 72 66 6c 6f 77 0a 2a 2a 20 64 6f 75 62 6c  derflow.** doubl
55d0: 65 73 20 74 6f 20 74 65 73 74 20 74 68 61 74 20  es to test that 
55e0: 74 68 65 79 20 61 72 65 20 63 6f 6e 76 65 72 74  they are convert
55f0: 65 64 20 70 72 6f 70 65 72 6c 79 2e 0a 2a 2f 0a  ed properly..*/.
5600: 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74  static int sqlit
5610: 65 33 5f 6d 70 72 69 6e 74 66 5f 73 63 61 6c 65  e3_mprintf_scale
5620: 64 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73  d(.  void *NotUs
5630: 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ed,.  Tcl_Interp
5640: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
5650: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
5660: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
5670: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
5680: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20  .  int argc,    
5690: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
56a0: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
56b0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67   */.  char **arg
56c0: 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  v            /* 
56d0: 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67  Text of each arg
56e0: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e  ument */.){.  in
56f0: 74 20 69 3b 0a 20 20 64 6f 75 62 6c 65 20 72 5b  t i;.  double r[
5700: 32 5d 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20  2];.  char *z;. 
5710: 20 69 66 28 20 61 72 67 63 21 3d 34 20 29 7b 0a   if( argc!=4 ){.
5720: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
5730: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
5740: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
5750: 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
5760: 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 4f 52  0],.       " FOR
5770: 4d 41 54 20 44 4f 55 42 4c 45 20 44 4f 55 42 4c  MAT DOUBLE DOUBL
5780: 45 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  E\"", 0);.    re
5790: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
57a0: 20 20 7d 0a 20 20 66 6f 72 28 69 3d 32 3b 20 69    }.  for(i=2; i
57b0: 3c 34 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66  <4; i++){.    if
57c0: 28 20 54 63 6c 5f 47 65 74 44 6f 75 62 6c 65 28  ( Tcl_GetDouble(
57d0: 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 69 5d 2c  interp, argv[i],
57e0: 20 26 72 5b 69 2d 32 5d 29 20 29 20 72 65 74 75   &r[i-2]) ) retu
57f0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
5800: 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f  }.  z = sqlite3_
5810: 6d 70 72 69 6e 74 66 28 61 72 67 76 5b 31 5d 2c  mprintf(argv[1],
5820: 20 72 5b 30 5d 2a 72 5b 31 5d 29 3b 0a 20 20 54   r[0]*r[1]);.  T
5830: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
5840: 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a 20  interp, z, 0);. 
5850: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 29   sqlite3_free(z)
5860: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
5870: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
5880: 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  e:  sqlite3_mpri
5890: 6e 74 66 5f 73 74 72 6f 6e 6c 79 20 46 4f 52 4d  ntf_stronly FORM
58a0: 41 54 20 53 54 52 49 4e 47 0a 2a 2a 0a 2a 2a 20  AT STRING.**.** 
58b0: 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77 69 74  Call mprintf wit
58c0: 68 20 61 20 73 69 6e 67 6c 65 20 64 6f 75 62 6c  h a single doubl
58d0: 65 20 61 72 67 75 6d 65 6e 74 20 77 68 69 63 68  e argument which
58e0: 20 69 73 20 74 68 65 20 70 72 6f 64 75 63 74 20   is the product 
58f0: 6f 66 20 74 68 65 0a 2a 2a 20 74 77 6f 20 61 72  of the.** two ar
5900: 67 75 6d 65 6e 74 73 20 67 69 76 65 6e 20 61 62  guments given ab
5910: 6f 76 65 2e 20 20 54 68 69 73 20 69 73 20 75 73  ove.  This is us
5920: 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 6f  ed to generate o
5930: 76 65 72 66 6c 6f 77 20 61 6e 64 20 75 6e 64 65  verflow and unde
5940: 72 66 6c 6f 77 0a 2a 2a 20 64 6f 75 62 6c 65 73  rflow.** doubles
5950: 20 74 6f 20 74 65 73 74 20 74 68 61 74 20 74 68   to test that th
5960: 65 79 20 61 72 65 20 63 6f 6e 76 65 72 74 65 64  ey are converted
5970: 20 70 72 6f 70 65 72 6c 79 2e 0a 2a 2f 0a 73 74   properly..*/.st
5980: 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33  atic int sqlite3
5990: 5f 6d 70 72 69 6e 74 66 5f 73 74 72 6f 6e 6c 79  _mprintf_stronly
59a0: 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65  (.  void *NotUse
59b0: 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  d,.  Tcl_Interp 
59c0: 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
59d0: 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
59e0: 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
59f0: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
5a00: 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20    int argc,     
5a10: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
5a20: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
5a30: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  */.  char **argv
5a40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
5a50: 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75  ext of each argu
5a60: 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 63 68 61  ment */.){.  cha
5a70: 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72 67 63  r *z;.  if( argc
5a80: 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=3 ){.    Tcl_A
5a90: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
5aa0: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
5ab0: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
5ac0: 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20  , argv[0],.     
5ad0: 20 20 22 20 46 4f 52 4d 41 54 20 53 54 52 49 4e    " FORMAT STRIN
5ae0: 47 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  G\"", 0);.    re
5af0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
5b00: 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65    }.  z = sqlite
5b10: 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b 31  3_mprintf(argv[1
5b20: 5d 2c 20 61 72 67 76 5b 32 5d 29 3b 0a 20 20 54  ], argv[2]);.  T
5b30: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
5b40: 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a 20  interp, z, 0);. 
5b50: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 29   sqlite3_free(z)
5b60: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
5b70: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
5b80: 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  e:  sqlite3_mpri
5b90: 6e 74 66 5f 68 65 78 64 6f 75 62 6c 65 20 46 4f  ntf_hexdouble FO
5ba0: 52 4d 41 54 20 48 45 58 0a 2a 2a 0a 2a 2a 20 43  RMAT HEX.**.** C
5bb0: 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77 69 74 68  all mprintf with
5bc0: 20 61 20 73 69 6e 67 6c 65 20 64 6f 75 62 6c 65   a single double
5bd0: 20 61 72 67 75 6d 65 6e 74 20 77 68 69 63 68 20   argument which 
5be0: 69 73 20 64 65 72 69 76 65 64 20 66 72 6f 6d 20  is derived from 
5bf0: 74 68 65 0a 2a 2a 20 68 65 78 61 64 65 63 69 6d  the.** hexadecim
5c00: 61 6c 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61  al encoding of a
5c10: 6e 20 49 45 45 45 20 64 6f 75 62 6c 65 2e 0a 2a  n IEEE double..*
5c20: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c  /.static int sql
5c30: 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 68 65 78  ite3_mprintf_hex
5c40: 64 6f 75 62 6c 65 28 0a 20 20 76 6f 69 64 20 2a  double(.  void *
5c50: 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49  NotUsed,.  Tcl_I
5c60: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20  nterp *interp,  
5c70: 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74    /* The TCL int
5c80: 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e  erpreter that in
5c90: 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61  voked this comma
5ca0: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63  nd */.  int argc
5cb0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
5cc0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
5cd0: 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20  ments */.  char 
5ce0: 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20  **argv          
5cf0: 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63    /* Text of eac
5d00: 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b  h argument */.){
5d10: 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 64 6f  .  char *z;.  do
5d20: 75 62 6c 65 20 72 3b 0a 20 20 75 6e 73 69 67 6e  uble r;.  unsign
5d30: 65 64 20 20 78 31 2c 20 78 32 3b 0a 20 20 6c 6f  ed  x1, x2;.  lo
5d40: 6e 67 20 6c 6f 6e 67 20 75 6e 73 69 67 6e 65 64  ng long unsigned
5d50: 20 64 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d   d;.  if( argc!=
5d60: 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  3 ){.    Tcl_App
5d70: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
5d80: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
5d90: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
5da0: 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20  argv[0],.       
5db0: 22 20 46 4f 52 4d 41 54 20 53 54 52 49 4e 47 5c  " FORMAT STRING\
5dc0: 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  "", 0);.    retu
5dd0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
5de0: 7d 0a 20 20 69 66 28 20 73 73 63 61 6e 66 28 61  }.  if( sscanf(a
5df0: 72 67 76 5b 32 5d 2c 20 22 25 30 38 78 25 30 38  rgv[2], "%08x%08
5e00: 78 22 2c 20 26 78 32 2c 20 26 78 31 29 21 3d 32  x", &x2, &x1)!=2
5e10: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
5e20: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
5e30: 20 22 32 6e 64 20 61 72 67 75 6d 65 6e 74 20 73   "2nd argument s
5e40: 68 6f 75 6c 64 20 62 65 20 31 36 2d 63 68 61 72  hould be 16-char
5e50: 61 63 74 65 72 73 20 6f 66 20 68 65 78 22 2c 20  acters of hex", 
5e60: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
5e70: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
5e80: 64 20 3d 20 78 32 3b 0a 20 20 64 20 3d 20 28 64  d = x2;.  d = (d
5e90: 3c 3c 33 32 29 20 2b 20 78 31 3b 0a 20 20 6d 65  <<32) + x1;.  me
5ea0: 6d 63 70 79 28 26 72 2c 20 26 64 2c 20 73 69 7a  mcpy(&r, &d, siz
5eb0: 65 6f 66 28 72 29 29 3b 0a 20 20 7a 20 3d 20 73  eof(r));.  z = s
5ec0: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 61  qlite3_mprintf(a
5ed0: 72 67 76 5b 31 5d 2c 20 72 29 3b 0a 20 20 54 63  rgv[1], r);.  Tc
5ee0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
5ef0: 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a 20 20  nterp, z, 0);.  
5f00: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 29 3b  sqlite3_free(z);
5f10: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
5f20: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
5f30: 3a 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f  : sqlite_malloc_
5f40: 66 61 69 6c 20 4e 20 20 3f 52 45 50 45 41 54 2d  fail N  ?REPEAT-
5f50: 49 4e 54 45 52 56 41 4c 3f 0a 2a 2a 0a 2a 2a 20  INTERVAL?.**.** 
5f60: 52 69 67 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63  Rig sqliteMalloc
5f70: 28 29 20 74 6f 20 66 61 69 6c 20 6f 6e 20 74 68  () to fail on th
5f80: 65 20 4e 2d 74 68 20 63 61 6c 6c 20 61 6e 64 20  e N-th call and 
5f90: 65 76 65 72 79 20 52 45 50 45 41 54 2d 49 4e 54  every REPEAT-INT
5fa0: 45 52 56 41 4c 20 63 61 6c 6c 0a 2a 2a 20 61 66  ERVAL call.** af
5fb0: 74 65 72 20 74 68 61 74 2e 20 20 49 66 20 52 45  ter that.  If RE
5fc0: 50 45 41 54 2d 49 4e 54 45 52 56 41 4c 20 69 73  PEAT-INTERVAL is
5fd0: 20 30 20 6f 72 20 69 73 20 6f 6d 69 74 74 65 64   0 or is omitted
5fe0: 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 61 20 73 69  , then only a si
5ff0: 6e 67 6c 65 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 77  ngle.** malloc w
6000: 69 6c 6c 20 66 61 69 6c 2e 20 20 49 66 20 52 45  ill fail.  If RE
6010: 50 45 41 54 2d 49 4e 54 45 52 56 41 4c 20 69 73  PEAT-INTERVAL is
6020: 20 31 20 74 68 65 6e 20 61 6c 6c 20 6d 61 6c 6c   1 then all mall
6030: 6f 63 73 20 61 66 74 65 72 20 74 68 65 0a 2a 2a  ocs after the.**
6040: 20 66 69 72 73 74 20 66 61 69 6c 75 72 65 20 77   first failure w
6050: 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20  ill continue to 
6060: 66 61 69 6c 20 6f 6e 20 65 76 65 72 79 20 63 61  fail on every ca
6070: 6c 6c 2e 20 20 49 66 20 52 45 50 45 41 54 2d 49  ll.  If REPEAT-I
6080: 4e 54 45 52 56 41 4c 20 69 73 0a 2a 2a 20 32 20  NTERVAL is.** 2 
6090: 74 68 65 6e 20 65 76 65 72 79 20 6f 74 68 65 72  then every other
60a0: 20 6d 61 6c 6c 6f 63 20 77 69 6c 6c 20 66 61 69   malloc will fai
60b0: 6c 2e 20 20 41 6e 64 20 73 6f 20 66 6f 72 74 68  l.  And so forth
60c0: 2e 0a 2a 2a 0a 2a 2a 20 54 75 72 6e 20 6f 66 66  ..**.** Turn off
60d0: 20 74 68 69 73 20 6d 65 63 68 61 6e 69 73 6d 20   this mechanism 
60e0: 61 6e 64 20 72 65 73 65 74 20 74 68 65 20 73 71  and reset the sq
60f0: 6c 69 74 65 33 54 68 72 65 61 64 44 61 74 61 28  lite3ThreadData(
6100: 29 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  )->mallocFailed 
6110: 76 61 72 69 61 62 6c 65 20 69 73 20 4e 3d 3d 30  variable is N==0
6120: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
6130: 54 45 5f 4d 45 4d 44 45 42 55 47 0a 73 74 61 74  TE_MEMDEBUG.stat
6140: 69 63 20 69 6e 74 20 73 71 6c 69 74 65 5f 6d 61  ic int sqlite_ma
6150: 6c 6c 6f 63 5f 66 61 69 6c 28 0a 20 20 76 6f 69  lloc_fail(.  voi
6160: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63  d *NotUsed,.  Tc
6170: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
6180: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
6190: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
61a0: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
61b0: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61  mmand */.  int a
61c0: 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  rgc,            
61d0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
61e0: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68  rguments */.  ch
61f0: 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20  ar **argv       
6200: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
6210: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f  each argument */
6220: 0a 29 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69  .){.  int n;.  i
6230: 6e 74 20 72 65 70 3b 0a 20 20 69 66 28 20 61 72  nt rep;.  if( ar
6240: 67 63 21 3d 32 20 26 26 20 61 72 67 63 21 3d 33  gc!=2 && argc!=3
6250: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
6260: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
6270: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
6280: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61  should be \"", a
6290: 72 67 76 5b 30 5d 2c 20 22 20 4e 5c 22 22 2c 20  rgv[0], " N\"", 
62a0: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
62b0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
62c0: 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69  if( Tcl_GetInt(i
62d0: 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20  nterp, argv[1], 
62e0: 26 6e 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  &n) ) return TCL
62f0: 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 61 72  _ERROR;.  if( ar
6300: 67 63 3d 3d 33 20 29 7b 0a 20 20 20 20 69 66 28  gc==3 ){.    if(
6310: 20 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74 65   Tcl_GetInt(inte
6320: 72 70 2c 20 61 72 67 76 5b 32 5d 2c 20 26 72 65  rp, argv[2], &re
6330: 70 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  p) ) return TCL_
6340: 45 52 52 4f 52 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ERROR;.  }else{.
6350: 20 20 20 20 72 65 70 20 3d 20 30 3b 0a 20 20 7d      rep = 0;.  }
6360: 0a 20 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c  .  sqlite3_iMall
6370: 6f 63 46 61 69 6c 20 3d 20 6e 3b 0a 20 20 73 71  ocFail = n;.  sq
6380: 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 52 65 73  lite3_iMallocRes
6390: 65 74 20 3d 20 72 65 70 3b 0a 20 20 72 65 74 75  et = rep;.  retu
63a0: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 23 65 6e  rn TCL_OK;.}.#en
63b0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  dif../*.** Usage
63c0: 3a 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f  : sqlite_malloc_
63d0: 73 74 61 74 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72  stat.**.** Retur
63e0: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
63f0: 70 72 69 6f 72 20 63 61 6c 6c 73 20 74 6f 20 73  prior calls to s
6400: 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 20 61 6e  qliteMalloc() an
6410: 64 20 73 71 6c 69 74 65 46 72 65 65 28 29 2e 0a  d sqliteFree()..
6420: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
6430: 5f 4d 45 4d 44 45 42 55 47 0a 73 74 61 74 69 63  _MEMDEBUG.static
6440: 20 69 6e 74 20 73 71 6c 69 74 65 5f 6d 61 6c 6c   int sqlite_mall
6450: 6f 63 5f 73 74 61 74 28 0a 20 20 76 6f 69 64 20  oc_stat(.  void 
6460: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f  *NotUsed,.  Tcl_
6470: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
6480: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
6490: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
64a0: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
64b0: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67  and */.  int arg
64c0: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
64d0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
64e0: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72  uments */.  char
64f0: 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20   **argv         
6500: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61     /* Text of ea
6510: 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29  ch argument */.)
6520: 7b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 32 30  {.  char zBuf[20
6530: 30 5d 3b 0a 20 20 73 70 72 69 6e 74 66 28 7a 42  0];.  sprintf(zB
6540: 75 66 2c 20 22 25 64 20 25 64 20 25 64 22 2c 20  uf, "%d %d %d", 
6550: 73 71 6c 69 74 65 33 5f 6e 4d 61 6c 6c 6f 63 2c  sqlite3_nMalloc,
6560: 73 71 6c 69 74 65 33 5f 6e 46 72 65 65 2c 73 71  sqlite3_nFree,sq
6570: 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46 61 69  lite3_iMallocFai
6580: 6c 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64  l);.  Tcl_Append
6590: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a  Result(interp, z
65a0: 42 75 66 2c 20 30 29 3b 0a 20 20 72 65 74 75 72  Buf, 0);.  retur
65b0: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
65c0: 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  ** This function
65d0: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 54 63   implements a Tc
65e0: 6c 20 63 6f 6d 6d 61 6e 64 20 74 68 61 74 20 6d  l command that m
65f0: 61 79 20 62 65 20 69 6e 76 6f 6b 65 64 20 75 73  ay be invoked us
6600: 69 6e 67 20 61 6e 79 20 6f 66 0a 2a 2a 20 74 68  ing any of.** th
6610: 65 20 66 6f 75 72 20 66 6f 72 6d 73 20 65 6e 75  e four forms enu
6620: 6d 65 72 61 74 65 64 20 62 65 6c 6f 77 2e 0a 2a  merated below..*
6630: 2a 0a 2a 2a 20 73 71 6c 69 74 65 5f 6d 61 6c 6c  *.** sqlite_mall
6640: 6f 63 5f 6f 75 74 73 74 61 6e 64 69 6e 67 0a 2a  oc_outstanding.*
6650: 2a 20 20 20 20 20 52 65 74 75 72 6e 20 61 20 73  *     Return a s
6660: 75 6d 6d 61 72 79 20 6f 66 20 61 6c 6c 20 75 6e  ummary of all un
6670: 66 72 65 65 64 20 62 6c 6f 63 6b 73 20 6f 66 20  freed blocks of 
6680: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 65 64  memory allocated
6690: 20 62 79 20 74 68 65 0a 2a 2a 20 20 20 20 20 63   by the.**     c
66a0: 75 72 72 65 6e 74 20 74 68 72 65 61 64 2e 20 53  urrent thread. S
66b0: 65 65 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76  ee comments abov
66c0: 65 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74  e function sqlit
66d0: 65 33 4f 75 74 73 74 61 6e 64 69 6e 67 4d 61 6c  e3OutstandingMal
66e0: 6c 6f 63 73 28 29 20 0a 2a 2a 20 20 20 20 20 69  locs() .**     i
66f0: 6e 20 75 74 69 6c 2e 63 20 66 6f 72 20 61 20 64  n util.c for a d
6700: 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 74 68  escription of th
6710: 65 20 72 65 74 75 72 6e 65 64 20 76 61 6c 75 65  e returned value
6720: 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 5f 6d  ..**.** sqlite_m
6730: 61 6c 6c 6f 63 5f 6f 75 74 73 74 61 6e 64 69 6e  alloc_outstandin
6740: 67 20 2d 62 79 74 65 73 0a 2a 2a 20 20 20 20 20  g -bytes.**     
6750: 52 65 74 75 72 6e 20 74 68 65 20 74 6f 74 61 6c  Return the total
6760: 20 61 6d 6f 75 6e 74 20 6f 66 20 75 6e 66 72 65   amount of unfre
6770: 65 64 20 6d 65 6d 6f 72 79 20 28 69 6e 20 62 79  ed memory (in by
6780: 74 65 73 29 20 61 6c 6c 6f 63 61 74 65 64 20 62  tes) allocated b
6790: 79 20 0a 2a 2a 20 20 20 20 20 74 68 69 73 20 74  y .**     this t
67a0: 68 72 65 61 64 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c  hread..**.** sql
67b0: 69 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74  ite_malloc_outst
67c0: 61 6e 64 69 6e 67 20 2d 6d 61 78 62 79 74 65 73  anding -maxbytes
67d0: 0a 2a 2a 20 20 20 20 20 52 65 74 75 72 6e 20 74  .**     Return t
67e0: 68 65 20 6d 61 78 69 6d 75 6d 20 61 6d 6f 75 6e  he maximum amoun
67f0: 74 20 6f 66 20 64 79 6e 61 6d 69 63 20 6d 65 6d  t of dynamic mem
6800: 6f 72 79 20 69 6e 20 75 73 65 20 61 74 20 6f 6e  ory in use at on
6810: 65 20 74 69 6d 65 20 0a 2a 2a 20 20 20 20 20 62  e time .**     b
6820: 79 20 74 68 69 73 20 74 68 72 65 61 64 2e 0a 2a  y this thread..*
6830: 2a 0a 2a 2a 20 73 71 6c 69 74 65 5f 6d 61 6c 6c  *.** sqlite_mall
6840: 6f 63 5f 6f 75 74 73 74 61 6e 64 69 6e 67 20 2d  oc_outstanding -
6850: 63 6c 65 61 72 6d 61 78 62 79 74 65 73 0a 2a 2a  clearmaxbytes.**
6860: 20 20 20 20 20 53 65 74 20 74 68 65 20 76 61 6c       Set the val
6870: 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 5b  ue returned by [
6880: 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75  sqlite_malloc_ou
6890: 74 73 74 61 6e 64 69 6e 67 20 2d 6d 61 78 62 79  tstanding -maxby
68a0: 74 65 73 5d 0a 2a 2a 20 20 20 20 20 74 6f 20 74  tes].**     to t
68b0: 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65  he current value
68c0: 20 6f 66 20 5b 73 71 6c 69 74 65 5f 6d 61 6c 6c   of [sqlite_mall
68d0: 6f 63 5f 6f 75 74 73 74 61 6e 64 69 6e 67 20 2d  oc_outstanding -
68e0: 62 79 74 65 73 5d 2e 20 0a 2a 2f 0a 73 74 61 74  bytes]. .*/.stat
68f0: 69 63 20 69 6e 74 20 73 71 6c 69 74 65 5f 6d 61  ic int sqlite_ma
6900: 6c 6c 6f 63 5f 6f 75 74 73 74 61 6e 64 69 6e 67  lloc_outstanding
6910: 28 0a 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63  (.  ClientData c
6920: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
6930: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
6940: 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69      /* The TCL i
6950: 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20  nterpreter that 
6960: 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d  invoked this com
6970: 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62  mand */.  int ob
6980: 6a 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  jc,             
6990: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
69a0: 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c  guments */.  Tcl
69b0: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
69c0: 5b 5d 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61  []  /* Command a
69d0: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20  rguments */.){. 
69e0: 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69   extern int sqli
69f0: 74 65 33 4f 75 74 73 74 61 6e 64 69 6e 67 4d 61  te3OutstandingMa
6a00: 6c 6c 6f 63 73 28 54 63 6c 5f 49 6e 74 65 72 70  llocs(Tcl_Interp
6a10: 20 2a 69 6e 74 65 72 70 29 3b 0a 0a 20 20 69 66   *interp);..  if
6a20: 28 20 6f 62 6a 63 21 3d 31 20 26 26 20 6f 62 6a  ( objc!=1 && obj
6a30: 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
6a40: 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74  WrongNumArgs(int
6a50: 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 3f  erp, 1, objv, "?
6a60: 2d 62 79 74 65 73 3f 22 29 3b 0a 20 20 20 20 72  -bytes?");.    r
6a70: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
6a80: 0a 20 20 7d 0a 0a 20 20 69 66 28 20 6f 62 6a 63  .  }..  if( objc
6a90: 3d 3d 32 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74  ==2 ){.    const
6aa0: 20 63 68 61 72 20 2a 7a 41 72 67 20 3d 20 54 63   char *zArg = Tc
6ab0: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
6ac0: 5b 31 5d 29 3b 0a 20 20 20 20 69 66 28 20 30 3d  [1]);.    if( 0=
6ad0: 3d 73 74 72 63 6d 70 28 7a 41 72 67 2c 20 22 2d  =strcmp(zArg, "-
6ae0: 62 79 74 65 73 22 29 20 29 7b 0a 20 20 20 20 20  bytes") ){.     
6af0: 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c   Tcl_SetObjResul
6b00: 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
6b10: 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33 54  wIntObj(sqlite3T
6b20: 68 72 65 61 64 44 61 74 61 28 29 2d 3e 6e 41 6c  hreadData()->nAl
6b30: 6c 6f 63 29 29 3b 0a 23 69 66 6e 64 65 66 20 53  loc));.#ifndef S
6b40: 51 4c 49 54 45 5f 4f 4d 49 54 5f 4d 45 4d 4f 52  QLITE_OMIT_MEMOR
6b50: 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 0a 20 20 20  Y_MANAGEMENT.   
6b60: 20 7d 65 6c 73 65 20 69 66 28 20 30 3d 3d 73 74   }else if( 0==st
6b70: 72 63 6d 70 28 7a 41 72 67 2c 20 22 2d 6d 61 78  rcmp(zArg, "-max
6b80: 62 79 74 65 73 22 29 20 29 7b 0a 20 20 20 20 20  bytes") ){.     
6b90: 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c   Tcl_SetObjResul
6ba0: 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
6bb0: 77 57 69 64 65 49 6e 74 4f 62 6a 28 73 71 6c 69  wWideIntObj(sqli
6bc0: 74 65 33 54 68 72 65 61 64 44 61 74 61 28 29 2d  te3ThreadData()-
6bd0: 3e 6e 4d 61 78 41 6c 6c 6f 63 29 29 3b 0a 20 20  >nMaxAlloc));.  
6be0: 20 20 7d 65 6c 73 65 20 69 66 28 20 30 3d 3d 73    }else if( 0==s
6bf0: 74 72 63 6d 70 28 7a 41 72 67 2c 20 22 2d 63 6c  trcmp(zArg, "-cl
6c00: 65 61 72 6d 61 78 62 79 74 65 73 22 29 20 29 7b  earmaxbytes") ){
6c10: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 54 68  .      sqlite3Th
6c20: 72 65 61 64 44 61 74 61 28 29 2d 3e 6e 4d 61 78  readData()->nMax
6c30: 41 6c 6c 6f 63 20 3d 20 73 71 6c 69 74 65 33 54  Alloc = sqlite3T
6c40: 68 72 65 61 64 44 61 74 61 28 29 2d 3e 6e 41 6c  hreadData()->nAl
6c50: 6c 6f 63 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  loc;.#endif.    
6c60: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 54 63 6c  }else{.      Tcl
6c70: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
6c80: 74 65 72 70 2c 20 22 62 61 64 20 6f 70 74 69 6f  terp, "bad optio
6c90: 6e 20 5c 22 22 2c 20 7a 41 72 67 2c 20 0a 20 20  n \"", zArg, .  
6ca0: 20 20 20 20 20 20 22 5c 22 3a 20 6d 75 73 74 20        "\": must 
6cb0: 62 65 20 2d 62 79 74 65 73 2c 20 2d 6d 61 78 62  be -bytes, -maxb
6cc0: 79 74 65 73 20 6f 72 20 2d 63 6c 65 61 72 6d 61  ytes or -clearma
6cd0: 78 62 79 74 65 73 22 2c 20 30 0a 20 20 20 20 20  xbytes", 0.     
6ce0: 20 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   );.      return
6cf0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20   TCL_ERROR;.    
6d00: 7d 0a 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  }..    return TC
6d10: 4c 5f 4f 4b 3b 0a 20 20 7d 0a 0a 20 20 72 65 74  L_OK;.  }..  ret
6d20: 75 72 6e 20 73 71 6c 69 74 65 33 4f 75 74 73 74  urn sqlite3Outst
6d30: 61 6e 64 69 6e 67 4d 61 6c 6c 6f 63 73 28 69 6e  andingMallocs(in
6d40: 74 65 72 70 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a  terp);.}.#endif.
6d50: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  ./*.** Usage: sq
6d60: 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 73 68 61  lite3_enable_sha
6d70: 72 65 64 5f 63 61 63 68 65 20 42 4f 4f 4c 45 41  red_cache BOOLEA
6d80: 4e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  N.**.*/.#ifndef 
6d90: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
6da0: 45 44 5f 43 41 43 48 45 0a 73 74 61 74 69 63 20  ED_CACHE.static 
6db0: 69 6e 74 20 74 65 73 74 5f 65 6e 61 62 6c 65 5f  int test_enable_
6dc0: 73 68 61 72 65 64 5f 63 61 63 68 65 28 0a 20 20  shared_cache(.  
6dd0: 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e  ClientData clien
6de0: 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
6df0: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
6e00: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
6e10: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
6e20: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
6e30: 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20   */.  int objc, 
6e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
6e50: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
6e60: 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a  nts */.  Tcl_Obj
6e70: 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20   *CONST objv[]  
6e80: 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d  /* Command argum
6e90: 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  ents */.){.  int
6ea0: 20 72 63 3b 0a 20 20 69 6e 74 20 65 6e 61 62 6c   rc;.  int enabl
6eb0: 65 3b 0a 20 20 54 68 72 65 61 64 44 61 74 61 20  e;.  ThreadData 
6ec0: 2a 70 54 73 64 20 3d 20 73 71 6c 69 74 65 33 54  *pTsd = sqlite3T
6ed0: 68 72 65 61 64 44 61 74 61 28 29 3b 0a 20 20 54  hreadData();.  T
6ee0: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
6ef0: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 42  interp, Tcl_NewB
6f00: 6f 6f 6c 65 61 6e 4f 62 6a 28 70 54 73 64 2d 3e  ooleanObj(pTsd->
6f10: 75 73 65 53 68 61 72 65 64 44 61 74 61 29 29 3b  useSharedData));
6f20: 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20  ..  if( objc!=2 
6f30: 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67  ){.    Tcl_Wrong
6f40: 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20  NumArgs(interp, 
6f50: 31 2c 20 6f 62 6a 76 2c 20 22 42 4f 4f 4c 45 41  1, objv, "BOOLEA
6f60: 4e 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  N");.    return 
6f70: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
6f80: 20 69 66 28 20 54 63 6c 5f 47 65 74 42 6f 6f 6c   if( Tcl_GetBool
6f90: 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  eanFromObj(inter
6fa0: 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20 26 65 6e 61  p, objv[1], &ena
6fb0: 62 6c 65 29 20 29 7b 0a 20 20 20 20 72 65 74 75  ble) ){.    retu
6fc0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
6fd0: 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
6fe0: 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 63  _enable_shared_c
6ff0: 61 63 68 65 28 65 6e 61 62 6c 65 29 3b 0a 20 20  ache(enable);.  
7000: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
7010: 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74  K ){.    Tcl_Set
7020: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28  Result(interp, (
7030: 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 45 72  char *)sqlite3Er
7040: 72 53 74 72 28 72 63 29 2c 20 54 43 4c 5f 53 54  rStr(rc), TCL_ST
7050: 41 54 49 43 29 3b 0a 20 20 20 20 72 65 74 75 72  ATIC);.    retur
7060: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
7070: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
7080: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ;.}.#endif../*.*
7090: 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
70a0: 5f 61 62 6f 72 74 0a 2a 2a 0a 2a 2a 20 53 68 75  _abort.**.** Shu
70b0: 74 64 6f 77 6e 20 74 68 65 20 70 72 6f 63 65 73  tdown the proces
70c0: 73 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20  s immediately.  
70d0: 54 68 69 73 20 69 73 20 6e 6f 74 20 61 20 63 6c  This is not a cl
70e0: 65 61 6e 20 73 68 75 74 64 6f 77 6e 2e 0a 2a 2a  ean shutdown..**
70f0: 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20 69 73   This command is
7100: 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 74 68   used to test th
7110: 65 20 72 65 63 6f 76 65 72 61 62 69 6c 69 74 79  e recoverability
7120: 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 20 69   of a database i
7130: 6e 0a 2a 2a 20 74 68 65 20 65 76 65 6e 74 20 6f  n.** the event o
7140: 66 20 61 20 70 72 6f 67 72 61 6d 20 63 72 61 73  f a program cras
7150: 68 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  h..*/.static int
7160: 20 73 71 6c 69 74 65 5f 61 62 6f 72 74 28 0a 20   sqlite_abort(. 
7170: 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a   void *NotUsed,.
7180: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
7190: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
71a0: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
71b0: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
71c0: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
71d0: 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20  nt argc,        
71e0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
71f0: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
7200: 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20    char **argv   
7210: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
7220: 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e   of each argumen
7230: 74 20 2a 2f 0a 29 7b 0a 20 20 61 73 73 65 72 74  t */.){.  assert
7240: 28 20 69 6e 74 65 72 70 3d 3d 30 20 29 3b 20 20  ( interp==0 );  
7250: 20 2f 2a 20 54 68 69 73 20 77 69 6c 6c 20 61 6c   /* This will al
7260: 77 61 79 73 20 66 61 69 6c 20 2a 2f 0a 20 20 72  ways fail */.  r
7270: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
7280: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
7290: 77 69 6e 67 20 72 6f 75 74 69 6e 65 20 69 73 20  wing routine is 
72a0: 61 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 53  a user-defined S
72b0: 51 4c 20 66 75 6e 63 74 69 6f 6e 20 77 68 6f 73  QL function whos
72c0: 65 20 70 75 72 70 6f 73 65 0a 2a 2a 20 69 73 20  e purpose.** is 
72d0: 74 6f 20 74 65 73 74 20 74 68 65 20 73 71 6c 69  to test the sqli
72e0: 74 65 5f 73 65 74 5f 72 65 73 75 6c 74 28 29 20  te_set_result() 
72f0: 41 50 49 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  API..*/.static v
7300: 6f 69 64 20 74 65 73 74 46 75 6e 63 28 73 71 6c  oid testFunc(sql
7310: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f  ite3_context *co
7320: 6e 74 65 78 74 2c 20 69 6e 74 20 61 72 67 63 2c  ntext, int argc,
7330: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
7340: 2a 61 72 67 76 29 7b 0a 20 20 77 68 69 6c 65 28  *argv){.  while(
7350: 20 61 72 67 63 3e 3d 32 20 29 7b 0a 20 20 20 20   argc>=2 ){.    
7360: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 72 67  const char *zArg
7370: 30 20 3d 20 28 63 68 61 72 2a 29 73 71 6c 69 74  0 = (char*)sqlit
7380: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72  e3_value_text(ar
7390: 67 76 5b 30 5d 29 3b 0a 20 20 20 20 69 66 28 20  gv[0]);.    if( 
73a0: 7a 41 72 67 30 20 29 7b 0a 20 20 20 20 20 20 69  zArg0 ){.      i
73b0: 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74 72  f( 0==sqlite3Str
73c0: 49 43 6d 70 28 7a 41 72 67 30 2c 20 22 69 6e 74  ICmp(zArg0, "int
73d0: 22 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  ") ){.        sq
73e0: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74  lite3_result_int
73f0: 28 63 6f 6e 74 65 78 74 2c 20 73 71 6c 69 74 65  (context, sqlite
7400: 33 5f 76 61 6c 75 65 5f 69 6e 74 28 61 72 67 76  3_value_int(argv
7410: 5b 31 5d 29 29 3b 0a 20 20 20 20 20 20 7d 65 6c  [1]));.      }el
7420: 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74  se if( sqlite3St
7430: 72 49 43 6d 70 28 7a 41 72 67 30 2c 22 69 6e 74  rICmp(zArg0,"int
7440: 36 34 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  64")==0 ){.     
7450: 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c     sqlite3_resul
7460: 74 5f 69 6e 74 36 34 28 63 6f 6e 74 65 78 74 2c  t_int64(context,
7470: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69   sqlite3_value_i
7480: 6e 74 36 34 28 61 72 67 76 5b 31 5d 29 29 3b 0a  nt64(argv[1]));.
7490: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
74a0: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
74b0: 41 72 67 30 2c 22 73 74 72 69 6e 67 22 29 3d 3d  Arg0,"string")==
74c0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  0 ){.        sql
74d0: 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74  ite3_result_text
74e0: 28 63 6f 6e 74 65 78 74 2c 20 28 63 68 61 72 2a  (context, (char*
74f0: 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  )sqlite3_value_t
7500: 65 78 74 28 61 72 67 76 5b 31 5d 29 2c 20 2d 31  ext(argv[1]), -1
7510: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ,.            SQ
7520: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
7530: 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
7540: 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
7550: 7a 41 72 67 30 2c 22 64 6f 75 62 6c 65 22 29 3d  zArg0,"double")=
7560: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  =0 ){.        sq
7570: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75  lite3_result_dou
7580: 62 6c 65 28 63 6f 6e 74 65 78 74 2c 20 73 71 6c  ble(context, sql
7590: 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c  ite3_value_doubl
75a0: 65 28 61 72 67 76 5b 31 5d 29 29 3b 0a 20 20 20  e(argv[1]));.   
75b0: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c     }else if( sql
75c0: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 41 72 67  ite3StrICmp(zArg
75d0: 30 2c 22 6e 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a  0,"null")==0 ){.
75e0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
75f0: 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74  result_null(cont
7600: 65 78 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ext);.      }els
7610: 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72  e if( sqlite3Str
7620: 49 43 6d 70 28 7a 41 72 67 30 2c 22 76 61 6c 75  ICmp(zArg0,"valu
7630: 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  e")==0 ){.      
7640: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
7650: 5f 76 61 6c 75 65 28 63 6f 6e 74 65 78 74 2c 20  _value(context, 
7660: 61 72 67 76 5b 73 71 6c 69 74 65 33 5f 76 61 6c  argv[sqlite3_val
7670: 75 65 5f 69 6e 74 28 61 72 67 76 5b 31 5d 29 5d  ue_int(argv[1])]
7680: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
7690: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 65 72 72          goto err
76a0: 6f 72 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a  or_out;.      }.
76b0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
76c0: 20 67 6f 74 6f 20 65 72 72 6f 72 5f 6f 75 74 3b   goto error_out;
76d0: 0a 20 20 20 20 7d 0a 20 20 20 20 61 72 67 63 20  .    }.    argc 
76e0: 2d 3d 20 32 3b 0a 20 20 20 20 61 72 67 76 20 2b  -= 2;.    argv +
76f0: 3d 20 32 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  = 2;.  }.  retur
7700: 6e 3b 0a 0a 65 72 72 6f 72 5f 6f 75 74 3a 0a 20  n;..error_out:. 
7710: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
7720: 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 22 66  error(context,"f
7730: 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 73 68  irst argument sh
7740: 6f 75 6c 64 20 62 65 20 6f 6e 65 20 6f 66 3a 20  ould be one of: 
7750: 22 0a 20 20 20 20 20 20 22 69 6e 74 20 69 6e 74  ".      "int int
7760: 36 34 20 73 74 72 69 6e 67 20 64 6f 75 62 6c 65  64 string double
7770: 20 6e 75 6c 6c 20 76 61 6c 75 65 22 2c 20 2d 31   null value", -1
7780: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  );.}../*.** Usag
7790: 65 3a 20 20 20 73 71 6c 69 74 65 5f 72 65 67 69  e:   sqlite_regi
77a0: 73 74 65 72 5f 74 65 73 74 5f 66 75 6e 63 74 69  ster_test_functi
77b0: 6f 6e 20 20 44 42 20 20 4e 41 4d 45 0a 2a 2a 0a  on  DB  NAME.**.
77c0: 2a 2a 20 52 65 67 69 73 74 65 72 20 74 68 65 20  ** Register the 
77d0: 74 65 73 74 20 53 51 4c 20 66 75 6e 63 74 69 6f  test SQL functio
77e0: 6e 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  n on the databas
77f0: 65 20 44 42 20 75 6e 64 65 72 20 74 68 65 20 6e  e DB under the n
7800: 61 6d 65 20 4e 41 4d 45 2e 0a 2a 2f 0a 73 74 61  ame NAME..*/.sta
7810: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 72 65 67  tic int test_reg
7820: 69 73 74 65 72 5f 66 75 6e 63 28 0a 20 20 76 6f  ister_func(.  vo
7830: 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54  id *NotUsed,.  T
7840: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
7850: 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c  p,    /* The TCL
7860: 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61   interpreter tha
7870: 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63  t invoked this c
7880: 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  ommand */.  int 
7890: 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20  argc,           
78a0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
78b0: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63  arguments */.  c
78c0: 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20  har **argv      
78d0: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
78e0: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a   each argument *
78f0: 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  /.){.  sqlite3 *
7900: 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  db;.  int rc;.  
7910: 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20  if( argc!=3 ){. 
7920: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
7930: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
7940: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
7950: 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30  d be \"", argv[0
7960: 5d 2c 20 0a 20 20 20 20 20 20 20 22 20 44 42 20  ], .       " DB 
7970: 46 55 4e 43 54 49 4f 4e 2d 4e 41 4d 45 22 2c 20  FUNCTION-NAME", 
7980: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
7990: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
79a0: 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72  if( getDbPointer
79b0: 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d  (interp, argv[1]
79c0: 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
79d0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20  TCL_ERROR;.  rc 
79e0: 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  = sqlite3_create
79f0: 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 61 72  _function(db, ar
7a00: 67 76 5b 32 5d 2c 20 2d 31 2c 20 53 51 4c 49 54  gv[2], -1, SQLIT
7a10: 45 5f 55 54 46 38 2c 20 30 2c 20 0a 20 20 20 20  E_UTF8, 0, .    
7a20: 20 20 74 65 73 74 46 75 6e 63 2c 20 30 2c 20 30    testFunc, 0, 0
7a30: 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 30 20 29  );.  if( rc!=0 )
7a40: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
7a50: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 73  Result(interp, s
7a60: 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29  qlite3ErrStr(rc)
7a70: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
7a80: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
7a90: 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73    if( sqlite3Tes
7aa0: 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c  tErrCode(interp,
7ab0: 20 64 62 2c 20 72 63 29 20 29 20 72 65 74 75 72   db, rc) ) retur
7ac0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72  n TCL_ERROR;.  r
7ad0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
7ae0: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
7af0: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
7b00: 20 53 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 46 69 6e   STMT .**.** Fin
7b10: 61 6c 69 7a 65 20 61 20 73 74 61 74 65 6d 65 6e  alize a statemen
7b20: 74 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 73 74 61  t handle..*/.sta
7b30: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 66 69 6e  tic int test_fin
7b40: 61 6c 69 7a 65 28 0a 20 20 76 6f 69 64 20 2a 20  alize(.  void * 
7b50: 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
7b60: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
7b70: 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
7b80: 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
7b90: 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74  bjv[].){.  sqlit
7ba0: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a  e3_stmt *pStmt;.
7bb0: 20 20 69 6e 74 20 72 63 3b 0a 20 20 73 71 6c 69    int rc;.  sqli
7bc0: 74 65 33 20 2a 64 62 3b 0a 0a 20 20 69 66 28 20  te3 *db;..  if( 
7bd0: 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  objc!=2 ){.    T
7be0: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
7bf0: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
7c00: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
7c10: 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63   \"",.        Tc
7c20: 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f  l_GetStringFromO
7c30: 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20  bj(objv[0], 0), 
7c40: 22 20 3c 53 54 4d 54 3e 22 2c 20 30 29 3b 0a 20  " <STMT>", 0);. 
7c50: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
7c60: 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  ROR;.  }..  if( 
7c70: 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69  getStmtPointer(i
7c80: 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
7c90: 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
7ca0: 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20  pStmt) ) return 
7cb0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 69 66  TCL_ERROR;..  if
7cc0: 28 20 70 53 74 6d 74 20 29 7b 0a 20 20 20 20 64  ( pStmt ){.    d
7cd0: 62 20 3d 20 53 74 6d 74 54 6f 44 62 28 70 53 74  b = StmtToDb(pSt
7ce0: 6d 74 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20  mt);.  }.  rc = 
7cf0: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
7d00: 28 70 53 74 6d 74 29 3b 0a 20 20 54 63 6c 5f 53  (pStmt);.  Tcl_S
7d10: 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
7d20: 20 28 63 68 61 72 20 2a 29 65 72 72 6f 72 4e 61   (char *)errorNa
7d30: 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54  me(rc), TCL_STAT
7d40: 49 43 29 3b 0a 20 20 69 66 28 20 64 62 20 26 26  IC);.  if( db &&
7d50: 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43   sqlite3TestErrC
7d60: 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20  ode(interp, db, 
7d70: 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  rc) ) return TCL
7d80: 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74 75 72 6e  _ERROR;.  return
7d90: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
7da0: 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
7db0: 33 5f 72 65 73 65 74 20 20 53 54 4d 54 20 0a 2a  3_reset  STMT .*
7dc0: 2a 0a 2a 2a 20 52 65 73 65 74 20 61 20 73 74 61  *.** Reset a sta
7dd0: 74 65 6d 65 6e 74 20 68 61 6e 64 6c 65 2e 0a 2a  tement handle..*
7de0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
7df0: 74 5f 72 65 73 65 74 28 0a 20 20 76 6f 69 64 20  t_reset(.  void 
7e00: 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
7e10: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
7e20: 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
7e30: 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
7e40: 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
7e50: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
7e60: 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69  ;.  int rc;..  i
7e70: 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20  f( objc!=2 ){.  
7e80: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
7e90: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
7ea0: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
7eb0: 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20   be \"",.       
7ec0: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72   Tcl_GetStringFr
7ed0: 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30  omObj(objv[0], 0
7ee0: 29 2c 20 22 20 3c 53 54 4d 54 3e 22 2c 20 30 29  ), " <STMT>", 0)
7ef0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
7f00: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69  _ERROR;.  }..  i
7f10: 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
7f20: 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
7f30: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
7f40: 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
7f50: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20  rn TCL_ERROR;.. 
7f60: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 72 65   rc = sqlite3_re
7f70: 73 65 74 28 70 53 74 6d 74 29 3b 0a 20 20 69 66  set(pStmt);.  if
7f80: 28 20 70 53 74 6d 74 20 26 26 20 73 71 6c 69 74  ( pStmt && sqlit
7f90: 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e  e3TestErrCode(in
7fa0: 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70  terp, StmtToDb(p
7fb0: 53 74 6d 74 29 2c 20 72 63 29 20 29 7b 0a 20 20  Stmt), rc) ){.  
7fc0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
7fd0: 4f 52 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 53 65  OR;.  }.  Tcl_Se
7fe0: 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  tResult(interp, 
7ff0: 28 63 68 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d  (char *)errorNam
8000: 65 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49  e(rc), TCL_STATI
8010: 43 29 3b 0a 2f 2a 0a 20 20 69 66 28 20 72 63 20  C);./*.  if( rc 
8020: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  ){.    return TC
8030: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 2a 2f 0a  L_ERROR;.  }.*/.
8040: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
8050: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
8060: 20 20 73 71 6c 69 74 65 33 5f 65 78 70 69 72 65    sqlite3_expire
8070: 64 20 53 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 52 65  d STMT .**.** Re
8080: 74 75 72 6e 20 54 52 55 45 20 69 66 20 61 20 72  turn TRUE if a r
8090: 65 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 66 20  ecompilation of 
80a0: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73  the statement is
80b0: 20 72 65 63 6f 6d 6d 65 6e 64 65 64 2e 0a 2a 2f   recommended..*/
80c0: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
80d0: 5f 65 78 70 69 72 65 64 28 0a 20 20 76 6f 69 64  _expired(.  void
80e0: 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
80f0: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
8100: 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
8110: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
8120: 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
8130: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
8140: 74 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32  t;.  if( objc!=2
8150: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
8160: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
8170: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
8180: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20  should be \"",. 
8190: 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
81a0: 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76  ringFromObj(objv
81b0: 5b 30 5d 2c 20 30 29 2c 20 22 20 3c 53 54 4d 54  [0], 0), " <STMT
81c0: 3e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  >", 0);.    retu
81d0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
81e0: 7d 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  }.  if( getStmtP
81f0: 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
8200: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
8210: 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29  v[1]), &pStmt) )
8220: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
8230: 52 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52  R;.  Tcl_SetObjR
8240: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
8250: 6c 5f 4e 65 77 42 6f 6f 6c 65 61 6e 4f 62 6a 28  l_NewBooleanObj(
8260: 73 71 6c 69 74 65 33 5f 65 78 70 69 72 65 64 28  sqlite3_expired(
8270: 70 53 74 6d 74 29 29 29 3b 0a 20 20 72 65 74 75  pStmt)));.  retu
8280: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
8290: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
82a0: 74 65 33 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e  te3_transfer_bin
82b0: 64 69 6e 67 73 20 46 52 4f 4d 53 54 4d 54 20 54  dings FROMSTMT T
82c0: 4f 53 54 4d 54 0a 2a 2a 0a 2a 2a 20 54 72 61 6e  OSTMT.**.** Tran
82d0: 73 66 65 72 20 61 6c 6c 20 62 69 6e 64 69 6e 67  sfer all binding
82e0: 73 20 66 72 6f 6d 20 46 52 4f 4d 53 54 4d 54 20  s from FROMSTMT 
82f0: 6f 76 65 72 20 74 6f 20 54 4f 53 54 4d 54 0a 2a  over to TOSTMT.*
8300: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
8310: 74 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e 64 28  t_transfer_bind(
8320: 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
8330: 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
8340: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
8350: 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
8360: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
8370: 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
8380: 74 20 2a 70 53 74 6d 74 31 2c 20 2a 70 53 74 6d  t *pStmt1, *pStm
8390: 74 32 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  t2;.  if( objc!=
83a0: 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  3 ){.    Tcl_App
83b0: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
83c0: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
83d0: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a   should be \"",.
83e0: 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53          Tcl_GetS
83f0: 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a  tringFromObj(obj
8400: 76 5b 30 5d 2c 20 30 29 2c 20 22 20 46 52 4f 4d  v[0], 0), " FROM
8410: 2d 53 54 4d 54 20 54 4f 2d 53 54 4d 54 22 2c 20  -STMT TO-STMT", 
8420: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
8430: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
8440: 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  if( getStmtPoint
8450: 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
8460: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
8470: 29 2c 20 26 70 53 74 6d 74 31 29 29 20 72 65 74  ), &pStmt1)) ret
8480: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
8490: 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
84a0: 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
84b0: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32  GetString(objv[2
84c0: 5d 29 2c 20 26 70 53 74 6d 74 32 29 29 20 72 65  ]), &pStmt2)) re
84d0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
84e0: 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
84f0: 6c 74 28 69 6e 74 65 72 70 2c 20 0a 20 20 20 20  lt(interp, .    
8500: 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73   Tcl_NewIntObj(s
8510: 71 6c 69 74 65 33 5f 74 72 61 6e 73 66 65 72 5f  qlite3_transfer_
8520: 62 69 6e 64 69 6e 67 73 28 70 53 74 6d 74 31 2c  bindings(pStmt1,
8530: 70 53 74 6d 74 32 29 29 29 3b 0a 20 20 72 65 74  pStmt2)));.  ret
8540: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
8550: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
8560: 69 74 65 33 5f 63 68 61 6e 67 65 73 20 44 42 0a  ite3_changes DB.
8570: 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  **.** Return the
8580: 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 6e 67   number of chang
8590: 65 73 20 6d 61 64 65 20 74 6f 20 74 68 65 20 64  es made to the d
85a0: 61 74 61 62 61 73 65 20 62 79 20 74 68 65 20 6c  atabase by the l
85b0: 61 73 74 20 53 51 4c 0a 2a 2a 20 65 78 65 63 75  ast SQL.** execu
85c0: 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  tion..*/.static 
85d0: 69 6e 74 20 74 65 73 74 5f 63 68 61 6e 67 65 73  int test_changes
85e0: 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
85f0: 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
8600: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
8610: 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
8620: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
8630: 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  .){.  sqlite3 *d
8640: 62 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32  b;.  if( objc!=2
8650: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
8660: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
8670: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
8680: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20  should be \"",. 
8690: 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
86a0: 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20  ing(objv[0]), " 
86b0: 44 42 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  DB", 0);.    ret
86c0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
86d0: 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f   }.  if( getDbPo
86e0: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
86f0: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
8700: 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74  [1]), &db) ) ret
8710: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
8720: 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c   Tcl_SetObjResul
8730: 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
8740: 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33 5f  wIntObj(sqlite3_
8750: 63 68 61 6e 67 65 73 28 64 62 29 29 29 3b 0a 20  changes(db)));. 
8760: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
8770: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73  }../*.** This is
8780: 20 74 68 65 20 22 73 74 61 74 69 63 5f 62 69 6e   the "static_bin
8790: 64 5f 76 61 6c 75 65 22 20 74 68 61 74 20 76 61  d_value" that va
87a0: 72 69 61 62 6c 65 73 20 61 72 65 20 62 6f 75 6e  riables are boun
87b0: 64 20 74 6f 20 77 68 65 6e 0a 2a 2a 20 74 68 65  d to when.** the
87c0: 20 46 4c 41 47 20 6f 70 74 69 6f 6e 20 6f 66 20   FLAG option of 
87d0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 20 69 73 20  sqlite3_bind is 
87e0: 22 73 74 61 74 69 63 22 0a 2a 2f 0a 73 74 61 74  "static".*/.stat
87f0: 69 63 20 63 68 61 72 20 2a 73 71 6c 69 74 65 5f  ic char *sqlite_
8800: 73 74 61 74 69 63 5f 62 69 6e 64 5f 76 61 6c 75  static_bind_valu
8810: 65 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20 55 73  e = 0;../*.** Us
8820: 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 62 69  age:  sqlite3_bi
8830: 6e 64 20 20 56 4d 20 20 49 44 58 20 20 56 41 4c  nd  VM  IDX  VAL
8840: 55 45 20 20 46 4c 41 47 53 0a 2a 2a 0a 2a 2a 20  UE  FLAGS.**.** 
8850: 53 65 74 73 20 74 68 65 20 76 61 6c 75 65 20 6f  Sets the value o
8860: 66 20 74 68 65 20 49 44 58 2d 74 68 20 6f 63 63  f the IDX-th occ
8870: 75 72 61 6e 63 65 20 6f 66 20 22 3f 22 20 69 6e  urance of "?" in
8880: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51   the original SQ
8890: 4c 0a 2a 2a 20 73 74 72 69 6e 67 2e 20 20 56 41  L.** string.  VA
88a0: 4c 55 45 20 69 73 20 74 68 65 20 6e 65 77 20 76  LUE is the new v
88b0: 61 6c 75 65 2e 20 20 49 66 20 46 4c 41 47 53 3d  alue.  If FLAGS=
88c0: 3d 22 6e 75 6c 6c 22 20 74 68 65 6e 20 56 41 4c  ="null" then VAL
88d0: 55 45 20 69 73 0a 2a 2a 20 69 67 6e 6f 72 65 64  UE is.** ignored
88e0: 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 69   and the value i
88f0: 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20  s set to NULL.  
8900: 49 66 20 46 4c 41 47 53 3d 3d 22 73 74 61 74 69  If FLAGS=="stati
8910: 63 22 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 76  c" then.** the v
8920: 61 6c 75 65 20 69 73 20 73 65 74 20 74 6f 20 74  alue is set to t
8930: 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 73 74  he value of a st
8940: 61 74 69 63 20 76 61 72 69 61 62 6c 65 20 6e 61  atic variable na
8950: 6d 65 64 0a 2a 2a 20 22 73 71 6c 69 74 65 5f 73  med.** "sqlite_s
8960: 74 61 74 69 63 5f 62 69 6e 64 5f 76 61 6c 75 65  tatic_bind_value
8970: 22 2e 20 20 49 66 20 46 4c 41 47 53 3d 3d 22 6e  ".  If FLAGS=="n
8980: 6f 72 6d 61 6c 22 20 74 68 65 6e 20 61 20 63 6f  ormal" then a co
8990: 70 79 0a 2a 2a 20 6f 66 20 74 68 65 20 56 41 4c  py.** of the VAL
89a0: 55 45 20 69 73 20 6d 61 64 65 2e 20 20 49 66 20  UE is made.  If 
89b0: 46 4c 41 47 53 3d 3d 22 62 6c 6f 62 31 30 22 20  FLAGS=="blob10" 
89c0: 74 68 65 6e 20 61 20 56 41 4c 55 45 20 69 73 20  then a VALUE is 
89d0: 69 67 6e 6f 72 65 64 0a 2a 2a 20 61 6e 20 61 20  ignored.** an a 
89e0: 31 30 2d 62 79 74 65 20 62 6c 6f 62 20 22 61 62  10-byte blob "ab
89f0: 63 5c 30 30 30 78 79 7a 5c 30 30 30 70 71 22 20  c\000xyz\000pq" 
8a00: 69 73 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2f 0a  is inserted..*/.
8a10: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
8a20: 62 69 6e 64 28 0a 20 20 76 6f 69 64 20 2a 4e 6f  bind(.  void *No
8a30: 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74  tUsed,.  Tcl_Int
8a40: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
8a50: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
8a60: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
8a70: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
8a80: 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20   */.  int argc, 
8a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8aa0: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
8ab0: 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  nts */.  char **
8ac0: 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20  argv            
8ad0: 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20  /* Text of each 
8ae0: 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20  argument */.){. 
8af0: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
8b00: 53 74 6d 74 3b 0a 20 20 69 6e 74 20 72 63 3b 0a  Stmt;.  int rc;.
8b10: 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 69 66 28    int idx;.  if(
8b20: 20 61 72 67 63 21 3d 35 20 29 7b 0a 20 20 20 20   argc!=5 ){.    
8b30: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
8b40: 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
8b50: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
8b60: 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20  e \"", argv[0], 
8b70: 0a 20 20 20 20 20 20 20 22 20 56 4d 20 49 44 58  .       " VM IDX
8b80: 20 56 41 4c 55 45 20 28 6e 75 6c 6c 7c 73 74 61   VALUE (null|sta
8b90: 74 69 63 7c 6e 6f 72 6d 61 6c 29 5c 22 22 2c 20  tic|normal)\"", 
8ba0: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
8bb0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
8bc0: 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  if( getStmtPoint
8bd0: 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  er(interp, argv[
8be0: 31 5d 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  1], &pStmt) ) re
8bf0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
8c00: 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
8c10: 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 32 5d  (interp, argv[2]
8c20: 2c 20 26 69 64 78 29 20 29 20 72 65 74 75 72 6e  , &idx) ) return
8c30: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
8c40: 28 20 73 74 72 63 6d 70 28 61 72 67 76 5b 34 5d  ( strcmp(argv[4]
8c50: 2c 22 6e 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20  ,"null")==0 ){. 
8c60: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
8c70: 62 69 6e 64 5f 6e 75 6c 6c 28 70 53 74 6d 74 2c  bind_null(pStmt,
8c80: 20 69 64 78 29 3b 0a 20 20 7d 65 6c 73 65 20 69   idx);.  }else i
8c90: 66 28 20 73 74 72 63 6d 70 28 61 72 67 76 5b 34  f( strcmp(argv[4
8ca0: 5d 2c 22 73 74 61 74 69 63 22 29 3d 3d 30 20 29  ],"static")==0 )
8cb0: 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
8cc0: 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 70 53 74  e3_bind_text(pSt
8cd0: 6d 74 2c 20 69 64 78 2c 20 73 71 6c 69 74 65 5f  mt, idx, sqlite_
8ce0: 73 74 61 74 69 63 5f 62 69 6e 64 5f 76 61 6c 75  static_bind_valu
8cf0: 65 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 7d 65 6c  e, -1, 0);.  }el
8d00: 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 61 72  se if( strcmp(ar
8d10: 67 76 5b 34 5d 2c 22 6e 6f 72 6d 61 6c 22 29 3d  gv[4],"normal")=
8d20: 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  =0 ){.    rc = s
8d30: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74  qlite3_bind_text
8d40: 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 61 72 67  (pStmt, idx, arg
8d50: 76 5b 33 5d 2c 20 2d 31 2c 20 53 51 4c 49 54 45  v[3], -1, SQLITE
8d60: 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 7d  _TRANSIENT);.  }
8d70: 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
8d80: 61 72 67 76 5b 34 5d 2c 22 62 6c 6f 62 31 30 22  argv[4],"blob10"
8d90: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d  )==0 ){.    rc =
8da0: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65   sqlite3_bind_te
8db0: 78 74 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 22  xt(pStmt, idx, "
8dc0: 61 62 63 5c 30 30 30 78 79 7a 5c 30 30 30 70 71  abc\000xyz\000pq
8dd0: 22 2c 20 31 30 2c 20 53 51 4c 49 54 45 5f 53 54  ", 10, SQLITE_ST
8de0: 41 54 49 43 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ATIC);.  }else{.
8df0: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
8e00: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 34 74  sult(interp, "4t
8e10: 68 20 61 72 67 75 6d 65 6e 74 20 73 68 6f 75 6c  h argument shoul
8e20: 64 20 62 65 20 22 0a 20 20 20 20 20 20 20 20 22  d be ".        "
8e30: 5c 22 6e 75 6c 6c 5c 22 20 6f 72 20 5c 22 73 74  \"null\" or \"st
8e40: 61 74 69 63 5c 22 20 6f 72 20 5c 22 6e 6f 72 6d  atic\" or \"norm
8e50: 61 6c 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72  al\"", 0);.    r
8e60: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
8e70: 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74  .  }.  if( sqlit
8e80: 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e  e3TestErrCode(in
8e90: 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70  terp, StmtToDb(p
8ea0: 53 74 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74  Stmt), rc) ) ret
8eb0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
8ec0: 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 63   if( rc ){.    c
8ed0: 68 61 72 20 7a 42 75 66 5b 35 30 5d 3b 0a 20 20  har zBuf[50];.  
8ee0: 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20    sprintf(zBuf, 
8ef0: 22 28 25 64 29 20 22 2c 20 72 63 29 3b 0a 20 20  "(%d) ", rc);.  
8f00: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
8f10: 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c  lt(interp, zBuf,
8f20: 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72   sqlite3ErrStr(r
8f30: 63 29 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  c), 0);.    retu
8f40: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
8f50: 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  }.  return TCL_O
8f60: 4b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  K;.}..#ifndef SQ
8f70: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
8f80: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 61 64 64  /*.** Usage: add
8f90: 5f 74 65 73 74 5f 63 6f 6c 6c 61 74 65 20 3c 64  _test_collate <d
8fa0: 62 20 70 74 72 3e 20 3c 75 74 66 38 3e 20 3c 75  b ptr> <utf8> <u
8fb0: 74 66 31 36 6c 65 3e 20 3c 75 74 66 31 36 62 65  tf16le> <utf16be
8fc0: 3e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e  >.**.** This fun
8fd0: 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f  ction is used to
8fe0: 20 74 65 73 74 20 74 68 61 74 20 53 51 4c 69 74   test that SQLit
8ff0: 65 20 73 65 6c 65 63 74 73 20 74 68 65 20 63 6f  e selects the co
9000: 72 72 65 63 74 20 63 6f 6c 6c 61 74 69 6f 6e 0a  rrect collation.
9010: 2a 2a 20 73 65 71 75 65 6e 63 65 20 63 61 6c 6c  ** sequence call
9020: 62 61 63 6b 20 77 68 65 6e 20 6d 75 6c 74 69 70  back when multip
9030: 6c 65 20 76 65 72 73 69 6f 6e 73 20 28 66 6f 72  le versions (for
9040: 20 64 69 66 66 65 72 65 6e 74 20 74 65 78 74 20   different text 
9050: 65 6e 63 6f 64 69 6e 67 73 29 0a 2a 2a 20 61 72  encodings).** ar
9060: 65 20 61 76 61 69 6c 61 62 6c 65 2e 0a 2a 2a 0a  e available..**.
9070: 2a 2a 20 43 61 6c 6c 69 6e 67 20 74 68 69 73 20  ** Calling this 
9080: 72 6f 75 74 69 6e 65 20 72 65 67 69 73 74 65 72  routine register
9090: 73 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20  s the collation 
90a0: 73 65 71 75 65 6e 63 65 20 22 74 65 73 74 5f 63  sequence "test_c
90b0: 6f 6c 6c 61 74 65 22 0a 2a 2a 20 77 69 74 68 20  ollate".** with 
90c0: 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20  database handle 
90d0: 3c 64 62 3e 2e 20 54 68 65 20 73 65 63 6f 6e 64  <db>. The second
90e0: 20 61 72 67 75 6d 65 6e 74 20 6d 75 73 74 20 62   argument must b
90f0: 65 20 61 20 6c 69 73 74 20 6f 66 20 74 68 72 65  e a list of thre
9100: 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 76 61 6c  e.** boolean val
9110: 75 65 73 2e 20 49 66 20 74 68 65 20 66 69 72 73  ues. If the firs
9120: 74 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20  t is true, then 
9130: 61 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 65 73  a version of tes
9140: 74 5f 63 6f 6c 6c 61 74 65 20 69 73 0a 2a 2a 20  t_collate is.** 
9150: 72 65 67 69 73 74 65 72 65 64 20 66 6f 72 20 55  registered for U
9160: 54 46 2d 38 2c 20 69 66 20 74 68 65 20 73 65 63  TF-8, if the sec
9170: 6f 6e 64 20 69 73 20 74 72 75 65 2c 20 61 20 76  ond is true, a v
9180: 65 72 73 69 6f 6e 20 69 73 20 72 65 67 69 73 74  ersion is regist
9190: 65 72 65 64 20 66 6f 72 0a 2a 2a 20 55 54 46 2d  ered for.** UTF-
91a0: 31 36 6c 65 2c 20 69 66 20 74 68 65 20 74 68 69  16le, if the thi
91b0: 72 64 20 69 73 20 74 72 75 65 2c 20 61 20 55 54  rd is true, a UT
91c0: 46 2d 31 36 62 65 20 76 65 72 73 69 6f 6e 20 69  F-16be version i
91d0: 73 20 61 76 61 69 6c 61 62 6c 65 2e 0a 2a 2a 20  s available..** 
91e0: 50 72 65 76 69 6f 75 73 20 76 65 72 73 69 6f 6e  Previous version
91f0: 73 20 6f 66 20 74 65 73 74 5f 63 6f 6c 6c 61 74  s of test_collat
9200: 65 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 2a  e are deleted..*
9210: 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 6c 61 74 69  *.** The collati
9220: 6f 6e 20 73 65 71 75 65 6e 63 65 20 74 65 73 74  on sequence test
9230: 5f 63 6f 6c 6c 61 74 65 20 69 73 20 69 6d 70 6c  _collate is impl
9240: 65 6d 65 6e 74 65 64 20 62 79 20 63 61 6c 6c 69  emented by calli
9250: 6e 67 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77  ng the.** follow
9260: 69 6e 67 20 54 43 4c 20 73 63 72 69 70 74 3a 0a  ing TCL script:.
9270: 2a 2a 0a 2a 2a 20 20 20 22 74 65 73 74 5f 63 6f  **.**   "test_co
9280: 6c 6c 61 74 65 20 3c 65 6e 63 3e 20 3c 6c 68 73  llate <enc> <lhs
9290: 3e 20 3c 72 68 73 3e 22 0a 2a 2a 0a 2a 2a 20 54  > <rhs>".**.** T
92a0: 68 65 20 3c 6c 68 73 3e 20 61 6e 64 20 3c 72 68  he <lhs> and <rh
92b0: 73 3e 20 61 72 65 20 74 68 65 20 74 77 6f 20 76  s> are the two v
92c0: 61 6c 75 65 73 20 62 65 69 6e 67 20 63 6f 6d 70  alues being comp
92d0: 61 72 65 64 2c 20 65 6e 63 6f 64 65 64 20 69 6e  ared, encoded in
92e0: 20 55 54 46 2d 38 2e 0a 2a 2a 20 54 68 65 20 3c   UTF-8..** The <
92f0: 65 6e 63 3e 20 70 61 72 61 6d 65 74 65 72 20 69  enc> parameter i
9300: 73 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f  s the encoding o
9310: 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20  f the collation 
9320: 66 75 6e 63 74 69 6f 6e 20 74 68 61 74 0a 2a 2a  function that.**
9330: 20 53 51 4c 69 74 65 20 73 65 6c 65 63 74 65 64   SQLite selected
9340: 20 74 6f 20 63 61 6c 6c 2e 20 54 68 65 20 54 43   to call. The TC
9350: 4c 20 74 65 73 74 20 73 63 72 69 70 74 20 69 6d  L test script im
9360: 70 6c 65 6d 65 6e 74 73 20 74 68 65 0a 2a 2a 20  plements the.** 
9370: 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22 20 70  "test_collate" p
9380: 72 6f 63 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  roc..**.** Note 
9390: 74 68 61 74 20 74 68 69 73 20 77 69 6c 6c 20 6f  that this will o
93a0: 6e 6c 79 20 77 6f 72 6b 20 77 69 74 68 20 6f 6e  nly work with on
93b0: 65 20 69 6e 74 65 70 72 65 74 65 72 20 61 74 20  e intepreter at 
93c0: 61 20 74 69 6d 65 2c 20 61 73 20 74 68 65 0a 2a  a time, as the.*
93d0: 2a 20 69 6e 74 65 72 70 20 70 6f 69 6e 74 65 72  * interp pointer
93e0: 20 74 6f 20 75 73 65 20 77 68 65 6e 20 65 76 61   to use when eva
93f0: 6c 75 61 74 69 6e 67 20 74 68 65 20 54 43 4c 20  luating the TCL 
9400: 73 63 72 69 70 74 20 69 73 20 73 74 6f 72 65 64  script is stored
9410: 20 69 6e 0a 2a 2a 20 70 54 65 73 74 43 6f 6c 6c   in.** pTestColl
9420: 61 74 65 49 6e 74 65 72 70 2e 0a 2a 2f 0a 73 74  ateInterp..*/.st
9430: 61 74 69 63 20 54 63 6c 5f 49 6e 74 65 72 70 2a  atic Tcl_Interp*
9440: 20 70 54 65 73 74 43 6f 6c 6c 61 74 65 49 6e 74   pTestCollateInt
9450: 65 72 70 3b 0a 73 74 61 74 69 63 20 69 6e 74 20  erp;.static int 
9460: 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 66 75 6e  test_collate_fun
9470: 63 28 0a 20 20 76 6f 69 64 20 2a 70 43 74 78 2c  c(.  void *pCtx,
9480: 20 0a 20 20 69 6e 74 20 6e 41 2c 20 63 6f 6e 73   .  int nA, cons
9490: 74 20 76 6f 69 64 20 2a 7a 41 2c 0a 20 20 69 6e  t void *zA,.  in
94a0: 74 20 6e 42 2c 20 63 6f 6e 73 74 20 76 6f 69 64  t nB, const void
94b0: 20 2a 7a 42 0a 29 7b 0a 20 20 54 63 6c 5f 49 6e   *zB.){.  Tcl_In
94c0: 74 65 72 70 20 2a 69 20 3d 20 70 54 65 73 74 43  terp *i = pTestC
94d0: 6f 6c 6c 61 74 65 49 6e 74 65 72 70 3b 0a 20 20  ollateInterp;.  
94e0: 69 6e 74 20 65 6e 63 69 6e 20 3d 20 28 69 6e 74  int encin = (int
94f0: 29 70 43 74 78 3b 0a 20 20 69 6e 74 20 72 65 73  )pCtx;.  int res
9500: 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 73 71  ;.  int n;..  sq
9510: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
9520: 6c 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 58  l;.  Tcl_Obj *pX
9530: 3b 0a 0a 20 20 70 58 20 3d 20 54 63 6c 5f 4e 65  ;..  pX = Tcl_Ne
9540: 77 53 74 72 69 6e 67 4f 62 6a 28 22 74 65 73 74  wStringObj("test
9550: 5f 63 6f 6c 6c 61 74 65 22 2c 20 2d 31 29 3b 0a  _collate", -1);.
9560: 20 20 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75    Tcl_IncrRefCou
9570: 6e 74 28 70 58 29 3b 0a 0a 20 20 73 77 69 74 63  nt(pX);..  switc
9580: 68 28 20 65 6e 63 69 6e 20 29 7b 0a 20 20 20 20  h( encin ){.    
9590: 63 61 73 65 20 53 51 4c 49 54 45 5f 55 54 46 38  case SQLITE_UTF8
95a0: 3a 0a 20 20 20 20 20 20 54 63 6c 5f 4c 69 73 74  :.      Tcl_List
95b0: 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  ObjAppendElement
95c0: 28 69 2c 70 58 2c 54 63 6c 5f 4e 65 77 53 74 72  (i,pX,Tcl_NewStr
95d0: 69 6e 67 4f 62 6a 28 22 55 54 46 2d 38 22 2c 2d  ingObj("UTF-8",-
95e0: 31 29 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  1));.      break
95f0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
9600: 45 5f 55 54 46 31 36 4c 45 3a 0a 20 20 20 20 20  E_UTF16LE:.     
9610: 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65   Tcl_ListObjAppe
9620: 6e 64 45 6c 65 6d 65 6e 74 28 69 2c 70 58 2c 54  ndElement(i,pX,T
9630: 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
9640: 22 55 54 46 2d 31 36 4c 45 22 2c 2d 31 29 29 3b  "UTF-16LE",-1));
9650: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
9660: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 55 54    case SQLITE_UT
9670: 46 31 36 42 45 3a 0a 20 20 20 20 20 20 54 63 6c  F16BE:.      Tcl
9680: 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
9690: 65 6d 65 6e 74 28 69 2c 70 58 2c 54 63 6c 5f 4e  ement(i,pX,Tcl_N
96a0: 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 55 54 46  ewStringObj("UTF
96b0: 2d 31 36 42 45 22 2c 2d 31 29 29 3b 0a 20 20 20  -16BE",-1));.   
96c0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65     break;.    de
96d0: 66 61 75 6c 74 3a 0a 20 20 20 20 20 20 61 73 73  fault:.      ass
96e0: 65 72 74 28 30 29 3b 0a 20 20 7d 0a 0a 20 20 70  ert(0);.  }..  p
96f0: 56 61 6c 20 3d 20 73 71 6c 69 74 65 33 56 61 6c  Val = sqlite3Val
9700: 75 65 4e 65 77 28 29 3b 0a 20 20 73 71 6c 69 74  ueNew();.  sqlit
9710: 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 70 56  e3ValueSetStr(pV
9720: 61 6c 2c 20 6e 41 2c 20 7a 41 2c 20 65 6e 63 69  al, nA, zA, enci
9730: 6e 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  n, SQLITE_STATIC
9740: 29 3b 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33  );.  n = sqlite3
9750: 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 70 56 61  _value_bytes(pVa
9760: 6c 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62  l);.  Tcl_ListOb
9770: 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  jAppendElement(i
9780: 2c 70 58 2c 0a 20 20 20 20 20 20 54 63 6c 5f 4e  ,pX,.      Tcl_N
9790: 65 77 53 74 72 69 6e 67 4f 62 6a 28 28 63 68 61  ewStringObj((cha
97a0: 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  r*)sqlite3_value
97b0: 5f 74 65 78 74 28 70 56 61 6c 29 2c 6e 29 29 3b  _text(pVal),n));
97c0: 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53  .  sqlite3ValueS
97d0: 65 74 53 74 72 28 70 56 61 6c 2c 20 6e 42 2c 20  etStr(pVal, nB, 
97e0: 7a 42 2c 20 65 6e 63 69 6e 2c 20 53 51 4c 49 54  zB, encin, SQLIT
97f0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 6e 20 3d  E_STATIC);.  n =
9800: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62   sqlite3_value_b
9810: 79 74 65 73 28 70 56 61 6c 29 3b 0a 20 20 54 63  ytes(pVal);.  Tc
9820: 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45  l_ListObjAppendE
9830: 6c 65 6d 65 6e 74 28 69 2c 70 58 2c 0a 20 20 20  lement(i,pX,.   
9840: 20 20 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67     Tcl_NewString
9850: 4f 62 6a 28 28 63 68 61 72 2a 29 73 71 6c 69 74  Obj((char*)sqlit
9860: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 56  e3_value_text(pV
9870: 61 6c 29 2c 6e 29 29 3b 0a 20 20 73 71 6c 69 74  al),n));.  sqlit
9880: 65 33 56 61 6c 75 65 46 72 65 65 28 70 56 61 6c  e3ValueFree(pVal
9890: 29 3b 0a 0a 20 20 54 63 6c 5f 45 76 61 6c 4f 62  );..  Tcl_EvalOb
98a0: 6a 45 78 28 69 2c 20 70 58 2c 20 30 29 3b 0a 20  jEx(i, pX, 0);. 
98b0: 20 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e   Tcl_DecrRefCoun
98c0: 74 28 70 58 29 3b 0a 20 20 54 63 6c 5f 47 65 74  t(pX);.  Tcl_Get
98d0: 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 2c 20 54 63  IntFromObj(i, Tc
98e0: 6c 5f 47 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_GetObjResult(i
98f0: 29 2c 20 26 72 65 73 29 3b 0a 20 20 72 65 74 75  ), &res);.  retu
9900: 72 6e 20 72 65 73 3b 0a 7d 0a 73 74 61 74 69 63  rn res;.}.static
9910: 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c 6c 61 74   int test_collat
9920: 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  e(.  void * clie
9930: 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
9940: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
9950: 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
9960: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
9970: 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  ].){.  sqlite3 *
9980: 64 62 3b 0a 20 20 69 6e 74 20 76 61 6c 3b 0a 20  db;.  int val;. 
9990: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
99a0: 70 56 61 6c 3b 0a 20 20 69 6e 74 20 72 63 3b 0a  pVal;.  int rc;.
99b0: 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 35 20 29  .  if( objc!=5 )
99c0: 20 67 6f 74 6f 20 62 61 64 5f 61 72 67 73 3b 0a   goto bad_args;.
99d0: 20 20 70 54 65 73 74 43 6f 6c 6c 61 74 65 49 6e    pTestCollateIn
99e0: 74 65 72 70 20 3d 20 69 6e 74 65 72 70 3b 0a 20  terp = interp;. 
99f0: 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
9a00: 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
9a10: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
9a20: 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
9a30: 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 69 66  TCL_ERROR;..  if
9a40: 28 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65  ( TCL_OK!=Tcl_Ge
9a50: 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28  tBooleanFromObj(
9a60: 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c  interp, objv[2],
9a70: 20 26 76 61 6c 29 20 29 20 72 65 74 75 72 6e 20   &val) ) return 
9a80: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20  TCL_ERROR;.  rc 
9a90: 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  = sqlite3_create
9aa0: 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 22  _collation(db, "
9ab0: 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22 2c 20 53  test_collate", S
9ac0: 51 4c 49 54 45 5f 55 54 46 38 2c 20 0a 20 20 20  QLITE_UTF8, .   
9ad0: 20 20 20 20 20 20 20 28 76 6f 69 64 20 2a 29 53         (void *)S
9ae0: 51 4c 49 54 45 5f 55 54 46 38 2c 20 76 61 6c 3f  QLITE_UTF8, val?
9af0: 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 66 75 6e  test_collate_fun
9b00: 63 3a 30 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  c:0);.  if( rc==
9b10: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
9b20: 20 69 66 28 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c   if( TCL_OK!=Tcl
9b30: 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f  _GetBooleanFromO
9b40: 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
9b50: 33 5d 2c 20 26 76 61 6c 29 20 29 20 72 65 74 75  3], &val) ) retu
9b60: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
9b70: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63    rc = sqlite3_c
9b80: 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28  reate_collation(
9b90: 64 62 2c 20 22 74 65 73 74 5f 63 6f 6c 6c 61 74  db, "test_collat
9ba0: 65 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36  e", SQLITE_UTF16
9bb0: 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  LE, .           
9bc0: 20 28 76 6f 69 64 20 2a 29 53 51 4c 49 54 45 5f   (void *)SQLITE_
9bd0: 55 54 46 31 36 4c 45 2c 20 76 61 6c 3f 74 65 73  UTF16LE, val?tes
9be0: 74 5f 63 6f 6c 6c 61 74 65 5f 66 75 6e 63 3a 30  t_collate_func:0
9bf0: 29 3b 0a 20 20 20 20 69 66 28 20 54 43 4c 5f 4f  );.    if( TCL_O
9c00: 4b 21 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61  K!=Tcl_GetBoolea
9c10: 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  nFromObj(interp,
9c20: 20 6f 62 6a 76 5b 34 5d 2c 20 26 76 61 6c 29 20   objv[4], &val) 
9c30: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
9c40: 4f 52 3b 0a 0a 20 20 20 20 70 56 61 6c 20 3d 20  OR;..    pVal = 
9c50: 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28  sqlite3ValueNew(
9c60: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 61  );.    sqlite3Va
9c70: 6c 75 65 53 65 74 53 74 72 28 70 56 61 6c 2c 20  lueSetStr(pVal, 
9c80: 2d 31 2c 20 22 74 65 73 74 5f 63 6f 6c 6c 61 74  -1, "test_collat
9c90: 65 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  e", SQLITE_UTF8,
9ca0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
9cb0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72 65  .    sqlite3_cre
9cc0: 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 31 36 28  ate_collation16(
9cd0: 64 62 2c 20 73 71 6c 69 74 65 33 56 61 6c 75 65  db, sqlite3Value
9ce0: 54 65 78 74 28 70 56 61 6c 2c 20 53 51 4c 49 54  Text(pVal, SQLIT
9cf0: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 29 2c 20  E_UTF16NATIVE), 
9d00: 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54  .          SQLIT
9d10: 45 5f 55 54 46 31 36 42 45 2c 20 28 76 6f 69 64  E_UTF16BE, (void
9d20: 20 2a 29 53 51 4c 49 54 45 5f 55 54 46 31 36 42   *)SQLITE_UTF16B
9d30: 45 2c 20 76 61 6c 3f 74 65 73 74 5f 63 6f 6c 6c  E, val?test_coll
9d40: 61 74 65 5f 66 75 6e 63 3a 30 29 3b 0a 20 20 20  ate_func:0);.   
9d50: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65   sqlite3ValueFre
9d60: 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 20 20 69  e(pVal);.  }.  i
9d70: 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72  f( sqlite3TestEr
9d80: 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62  rCode(interp, db
9d90: 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54  , rc) ) return T
9da0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74 75  CL_ERROR;.  retu
9db0: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 0a 62 61 64 5f  rn TCL_OK;..bad_
9dc0: 61 72 67 73 3a 0a 20 20 54 63 6c 5f 41 70 70 65  args:.  Tcl_Appe
9dd0: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
9de0: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
9df0: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20  should be \"",. 
9e00: 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
9e10: 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30  ngFromObj(objv[0
9e20: 5d 2c 20 30 29 2c 20 22 20 3c 44 42 3e 20 3c 75  ], 0), " <DB> <u
9e30: 74 66 38 3e 20 3c 75 74 66 31 36 6c 65 3e 20 3c  tf8> <utf16le> <
9e40: 75 74 66 31 36 62 65 3e 22 2c 20 30 29 3b 0a 20  utf16be>", 0);. 
9e50: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
9e60: 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e  R;.}../*.** When
9e70: 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 6e   the collation n
9e80: 65 65 64 65 64 20 63 61 6c 6c 62 61 63 6b 20 69  eeded callback i
9e90: 73 20 69 6e 76 6f 6b 65 64 2c 20 72 65 63 6f 72  s invoked, recor
9ea0: 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 0a 2a  d the name of .*
9eb0: 2a 20 74 68 65 20 72 65 71 75 65 73 74 65 64 20  * the requested 
9ec0: 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
9ed0: 6f 6e 20 68 65 72 65 2e 20 20 54 68 65 20 72 65  on here.  The re
9ee0: 63 6f 72 64 65 64 20 6e 61 6d 65 20 69 73 20 6c  corded name is l
9ef0: 69 6e 6b 65 64 0a 2a 2a 20 74 6f 20 61 20 54 43  inked.** to a TC
9f00: 4c 20 76 61 72 69 61 62 6c 65 20 61 6e 64 20 75  L variable and u
9f10: 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65  sed to make sure
9f20: 20 74 68 61 74 20 74 68 65 20 72 65 71 75 65 73   that the reques
9f30: 74 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 0a 2a 2a  ted collation.**
9f40: 20 6e 61 6d 65 20 69 73 20 63 6f 72 72 65 63 74   name is correct
9f50: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68 61 72  ..*/.static char
9f60: 20 7a 4e 65 65 64 65 64 43 6f 6c 6c 61 74 69 6f   zNeededCollatio
9f70: 6e 5b 32 30 30 5d 3b 0a 73 74 61 74 69 63 20 63  n[200];.static c
9f80: 68 61 72 20 2a 70 7a 4e 65 65 64 65 64 43 6f 6c  har *pzNeededCol
9f90: 6c 61 74 69 6f 6e 20 3d 20 7a 4e 65 65 64 65 64  lation = zNeeded
9fa0: 43 6f 6c 6c 61 74 69 6f 6e 3b 0a 0a 0a 2f 2a 0a  Collation;.../*.
9fb0: 2a 2a 20 43 61 6c 6c 65 64 20 77 68 65 6e 20 61  ** Called when a
9fc0: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
9fd0: 6e 63 65 20 69 73 20 6e 65 65 64 65 64 2e 20 20  nce is needed.  
9fe0: 52 65 67 69 73 74 65 72 65 64 20 75 73 69 6e 67  Registered using
9ff0: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 6c  .** sqlite3_coll
a000: 61 74 69 6f 6e 5f 6e 65 65 64 65 64 31 36 28 29  ation_needed16()
a010: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
a020: 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e 65   test_collate_ne
a030: 65 64 65 64 5f 63 62 28 0a 20 20 76 6f 69 64 20  eded_cb(.  void 
a040: 2a 70 43 74 78 2c 20 0a 20 20 73 71 6c 69 74 65  *pCtx, .  sqlite
a050: 33 20 2a 64 62 2c 0a 20 20 69 6e 74 20 65 54 65  3 *db,.  int eTe
a060: 78 74 52 65 70 2c 0a 20 20 63 6f 6e 73 74 20 76  xtRep,.  const v
a070: 6f 69 64 20 2a 70 4e 61 6d 65 0a 29 7b 0a 20 20  oid *pName.){.  
a080: 69 6e 74 20 65 6e 63 20 3d 20 64 62 2d 3e 65 6e  int enc = db->en
a090: 63 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63 68  c;.  int i;.  ch
a0a0: 61 72 20 2a 7a 3b 0a 20 20 66 6f 72 28 7a 20 3d  ar *z;.  for(z =
a0b0: 20 28 63 68 61 72 2a 29 70 4e 61 6d 65 2c 20 69   (char*)pName, i
a0c0: 3d 30 3b 20 2a 7a 20 7c 7c 20 7a 5b 31 5d 3b 20  =0; *z || z[1]; 
a0d0: 7a 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 2a 7a  z++){.    if( *z
a0e0: 20 29 20 7a 4e 65 65 64 65 64 43 6f 6c 6c 61 74   ) zNeededCollat
a0f0: 69 6f 6e 5b 69 2b 2b 5d 20 3d 20 2a 7a 3b 0a 20  ion[i++] = *z;. 
a100: 20 7d 0a 20 20 7a 4e 65 65 64 65 64 43 6f 6c 6c   }.  zNeededColl
a110: 61 74 69 6f 6e 5b 69 5d 20 3d 20 30 3b 0a 20 20  ation[i] = 0;.  
a120: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63  sqlite3_create_c
a130: 6f 6c 6c 61 74 69 6f 6e 28 0a 20 20 20 20 20 20  ollation(.      
a140: 64 62 2c 20 22 74 65 73 74 5f 63 6f 6c 6c 61 74  db, "test_collat
a150: 65 22 2c 20 64 62 2d 3e 65 6e 63 2c 20 28 76 6f  e", db->enc, (vo
a160: 69 64 20 2a 29 65 6e 63 2c 20 74 65 73 74 5f 63  id *)enc, test_c
a170: 6f 6c 6c 61 74 65 5f 66 75 6e 63 29 3b 0a 7d 0a  ollate_func);.}.
a180: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 61 64  ./*.** Usage: ad
a190: 64 5f 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e  d_test_collate_n
a1a0: 65 65 64 65 64 20 44 42 0a 2a 2f 0a 73 74 61 74  eeded DB.*/.stat
a1b0: 69 63 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c 6c  ic int test_coll
a1c0: 61 74 65 5f 6e 65 65 64 65 64 28 0a 20 20 76 6f  ate_needed(.  vo
a1d0: 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
a1e0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
a1f0: 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
a200: 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
a210: 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
a220: 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69  sqlite3 *db;.  i
a230: 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62  nt rc;..  if( ob
a240: 6a 63 21 3d 32 20 29 20 67 6f 74 6f 20 62 61 64  jc!=2 ) goto bad
a250: 5f 61 72 67 73 3b 0a 20 20 69 66 28 20 67 65 74  _args;.  if( get
a260: 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  DbPointer(interp
a270: 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
a280: 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29  objv[1]), &db) )
a290: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
a2a0: 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  R;.  rc = sqlite
a2b0: 33 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 6e 65 65 64  3_collation_need
a2c0: 65 64 31 36 28 64 62 2c 20 30 2c 20 74 65 73 74  ed16(db, 0, test
a2d0: 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64 5f  _collate_needed_
a2e0: 63 62 29 3b 0a 20 20 7a 4e 65 65 64 65 64 43 6f  cb);.  zNeededCo
a2f0: 6c 6c 61 74 69 6f 6e 5b 30 5d 20 3d 20 30 3b 0a  llation[0] = 0;.
a300: 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73    if( sqlite3Tes
a310: 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c  tErrCode(interp,
a320: 20 64 62 2c 20 72 63 29 20 29 20 72 65 74 75 72   db, rc) ) retur
a330: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72  n TCL_ERROR;.  r
a340: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 0a 62  eturn TCL_OK;..b
a350: 61 64 5f 61 72 67 73 3a 0a 20 20 54 63 6c 5f 57  ad_args:.  Tcl_W
a360: 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65  rongNumArgs(inte
a370: 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 44 42  rp, 1, objv, "DB
a380: 22 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ");.  return TCL
a390: 5f 45 52 52 4f 52 3b 0a 7d 0a 23 65 6e 64 69 66  _ERROR;.}.#endif
a3a0: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
a3b0: 55 54 46 31 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  UTF16 */../*.** 
a3c0: 55 73 61 67 65 3a 20 61 64 64 5f 74 65 73 74 5f  Usage: add_test_
a3d0: 66 75 6e 63 74 69 6f 6e 20 3c 64 62 20 70 74 72  function <db ptr
a3e0: 3e 20 3c 75 74 66 38 3e 20 3c 75 74 66 31 36 6c  > <utf8> <utf16l
a3f0: 65 3e 20 3c 75 74 66 31 36 62 65 3e 0a 2a 2a 0a  e> <utf16be>.**.
a400: 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  ** This function
a410: 20 69 73 20 75 73 65 64 20 74 6f 20 74 65 73 74   is used to test
a420: 20 74 68 61 74 20 53 51 4c 69 74 65 20 73 65 6c   that SQLite sel
a430: 65 63 74 73 20 74 68 65 20 63 6f 72 72 65 63 74  ects the correct
a440: 20 75 73 65 72 0a 2a 2a 20 66 75 6e 63 74 69 6f   user.** functio
a450: 6e 20 63 61 6c 6c 62 61 63 6b 20 77 68 65 6e 20  n callback when 
a460: 6d 75 6c 74 69 70 6c 65 20 76 65 72 73 69 6f 6e  multiple version
a470: 73 20 28 66 6f 72 20 64 69 66 66 65 72 65 6e 74  s (for different
a480: 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 73 29   text encodings)
a490: 0a 2a 2a 20 61 72 65 20 61 76 61 69 6c 61 62 6c  .** are availabl
a4a0: 65 2e 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 69 6e 67  e..**.** Calling
a4b0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65   this routine re
a4c0: 67 69 73 74 65 72 73 20 75 70 20 74 6f 20 74 68  gisters up to th
a4d0: 72 65 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  ree versions of 
a4e0: 74 68 65 20 75 73 65 72 20 66 75 6e 63 74 69 6f  the user functio
a4f0: 6e 0a 2a 2a 20 22 74 65 73 74 5f 66 75 6e 63 74  n.** "test_funct
a500: 69 6f 6e 22 20 77 69 74 68 20 64 61 74 61 62 61  ion" with databa
a510: 73 65 20 68 61 6e 64 6c 65 20 3c 64 62 3e 2e 20  se handle <db>. 
a520: 20 49 66 20 74 68 65 20 73 65 63 6f 6e 64 20 61   If the second a
a530: 72 67 75 6d 65 6e 74 20 69 73 0a 2a 2a 20 74 72  rgument is.** tr
a540: 75 65 2c 20 74 68 65 6e 20 61 20 76 65 72 73 69  ue, then a versi
a550: 6f 6e 20 6f 66 20 74 65 73 74 5f 66 75 6e 63 74  on of test_funct
a560: 69 6f 6e 20 69 73 20 72 65 67 69 73 74 65 72 65  ion is registere
a570: 64 20 66 6f 72 20 55 54 46 2d 38 2c 20 69 66 20  d for UTF-8, if 
a580: 74 68 65 0a 2a 2a 20 74 68 69 72 64 20 69 73 20  the.** third is 
a590: 74 72 75 65 2c 20 61 20 76 65 72 73 69 6f 6e 20  true, a version 
a5a0: 69 73 20 72 65 67 69 73 74 65 72 65 64 20 66 6f  is registered fo
a5b0: 72 20 55 54 46 2d 31 36 6c 65 2c 20 69 66 20 74  r UTF-16le, if t
a5c0: 68 65 20 66 6f 75 72 74 68 20 69 73 0a 2a 2a 20  he fourth is.** 
a5d0: 74 72 75 65 2c 20 61 20 55 54 46 2d 31 36 62 65  true, a UTF-16be
a5e0: 20 76 65 72 73 69 6f 6e 20 69 73 20 61 76 61 69   version is avai
a5f0: 6c 61 62 6c 65 2e 20 20 50 72 65 76 69 6f 75 73  lable.  Previous
a600: 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 2a 2a 20   versions of.** 
a610: 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 20 61 72  test_function ar
a620: 65 20 64 65 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a  e deleted..**.**
a630: 20 54 68 65 20 75 73 65 72 20 66 75 6e 63 74 69   The user functi
a640: 6f 6e 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65  on is implemente
a650: 64 20 62 79 20 63 61 6c 6c 69 6e 67 20 74 68 65  d by calling the
a660: 20 66 6f 6c 6c 6f 77 69 6e 67 20 54 43 4c 20 73   following TCL s
a670: 63 72 69 70 74 3a 0a 2a 2a 0a 2a 2a 20 20 20 22  cript:.**.**   "
a680: 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 20 3c 65  test_function <e
a690: 6e 63 3e 20 3c 61 72 67 3e 22 0a 2a 2a 0a 2a 2a  nc> <arg>".**.**
a6a0: 20 57 68 65 72 65 20 3c 65 6e 63 3e 20 69 73 20   Where <enc> is 
a6b0: 6f 6e 65 20 6f 66 20 55 54 46 2d 38 2c 20 55 54  one of UTF-8, UT
a6c0: 46 2d 31 36 4c 45 20 6f 72 20 55 54 46 31 36 42  F-16LE or UTF16B
a6d0: 45 2c 20 61 6e 64 20 3c 61 72 67 3e 20 69 73 20  E, and <arg> is 
a6e0: 74 68 65 0a 2a 2a 20 73 69 6e 67 6c 65 20 61 72  the.** single ar
a6f0: 67 75 6d 65 6e 74 20 70 61 73 73 65 64 20 74 6f  gument passed to
a700: 20 74 68 65 20 53 51 4c 20 66 75 6e 63 74 69 6f   the SQL functio
a710: 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 72 65 74  n. The value ret
a720: 75 72 6e 65 64 20 62 79 0a 2a 2a 20 74 68 65 20  urned by.** the 
a730: 54 43 4c 20 73 63 72 69 70 74 20 69 73 20 75 73  TCL script is us
a740: 65 64 20 61 73 20 74 68 65 20 72 65 74 75 72 6e  ed as the return
a750: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 53 51   value of the SQ
a760: 4c 20 66 75 6e 63 74 69 6f 6e 2e 20 49 74 0a 2a  L function. It.*
a770: 2a 20 69 73 20 70 61 73 73 65 64 20 74 6f 20 53  * is passed to S
a780: 51 4c 69 74 65 20 75 73 69 6e 67 20 55 54 46 2d  QLite using UTF-
a790: 31 36 42 45 20 66 6f 72 20 61 20 55 54 46 2d 38  16BE for a UTF-8
a7a0: 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 28 29   test_function()
a7b0: 2c 20 55 54 46 2d 38 0a 2a 2a 20 66 6f 72 20 61  , UTF-8.** for a
a7c0: 20 55 54 46 2d 31 36 4c 45 20 74 65 73 74 5f 66   UTF-16LE test_f
a7d0: 75 6e 63 74 69 6f 6e 28 29 2c 20 61 6e 64 20 55  unction(), and U
a7e0: 54 46 2d 31 36 4c 45 20 66 6f 72 20 61 6e 20 69  TF-16LE for an i
a7f0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 68  mplementation th
a800: 61 74 0a 2a 2a 20 70 72 65 66 65 72 73 20 55 54  at.** prefers UT
a810: 46 2d 31 36 42 45 2e 0a 2a 2f 0a 23 69 66 6e 64  F-16BE..*/.#ifnd
a820: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
a830: 54 46 31 36 0a 73 74 61 74 69 63 20 76 6f 69 64  TF16.static void
a840: 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 5f 75   test_function_u
a850: 74 66 38 28 0a 20 20 73 71 6c 69 74 65 33 5f 63  tf8(.  sqlite3_c
a860: 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 0a 20  ontext *pCtx, . 
a870: 20 69 6e 74 20 6e 41 72 67 2c 0a 20 20 73 71 6c   int nArg,.  sql
a880: 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67  ite3_value **arg
a890: 76 0a 29 7b 0a 20 20 54 63 6c 5f 49 6e 74 65 72  v.){.  Tcl_Inter
a8a0: 70 20 2a 69 6e 74 65 72 70 3b 0a 20 20 54 63 6c  p *interp;.  Tcl
a8b0: 5f 4f 62 6a 20 2a 70 58 3b 0a 20 20 73 71 6c 69  _Obj *pX;.  sqli
a8c0: 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 3b  te3_value *pVal;
a8d0: 0a 20 20 69 6e 74 65 72 70 20 3d 20 28 54 63 6c  .  interp = (Tcl
a8e0: 5f 49 6e 74 65 72 70 20 2a 29 73 71 6c 69 74 65  _Interp *)sqlite
a8f0: 33 5f 75 73 65 72 5f 64 61 74 61 28 70 43 74 78  3_user_data(pCtx
a900: 29 3b 0a 20 20 70 58 20 3d 20 54 63 6c 5f 4e 65  );.  pX = Tcl_Ne
a910: 77 53 74 72 69 6e 67 4f 62 6a 28 22 74 65 73 74  wStringObj("test
a920: 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 2d 31 29 3b  _function", -1);
a930: 0a 20 20 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f  .  Tcl_IncrRefCo
a940: 75 6e 74 28 70 58 29 3b 0a 20 20 54 63 6c 5f 4c  unt(pX);.  Tcl_L
a950: 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d  istObjAppendElem
a960: 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 58 2c 20  ent(interp, pX, 
a970: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
a980: 28 22 55 54 46 2d 38 22 2c 20 2d 31 29 29 3b 0a  ("UTF-8", -1));.
a990: 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70    Tcl_ListObjApp
a9a0: 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72  endElement(inter
a9b0: 70 2c 20 70 58 2c 20 0a 20 20 20 20 20 20 54 63  p, pX, .      Tc
a9c0: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 28  l_NewStringObj((
a9d0: 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61  char*)sqlite3_va
a9e0: 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b 30 5d  lue_text(argv[0]
a9f0: 29 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 45  ), -1));.  Tcl_E
aa00: 76 61 6c 4f 62 6a 45 78 28 69 6e 74 65 72 70 2c  valObjEx(interp,
aa10: 20 70 58 2c 20 30 29 3b 0a 20 20 54 63 6c 5f 44   pX, 0);.  Tcl_D
aa20: 65 63 72 52 65 66 43 6f 75 6e 74 28 70 58 29 3b  ecrRefCount(pX);
aa30: 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  .  sqlite3_resul
aa40: 74 5f 74 65 78 74 28 70 43 74 78 2c 20 54 63 6c  t_text(pCtx, Tcl
aa50: 5f 47 65 74 53 74 72 69 6e 67 52 65 73 75 6c 74  _GetStringResult
aa60: 28 69 6e 74 65 72 70 29 2c 20 2d 31 2c 20 53 51  (interp), -1, SQ
aa70: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
aa80: 0a 20 20 70 56 61 6c 20 3d 20 73 71 6c 69 74 65  .  pVal = sqlite
aa90: 33 56 61 6c 75 65 4e 65 77 28 29 3b 0a 20 20 73  3ValueNew();.  s
aaa0: 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74  qlite3ValueSetSt
aab0: 72 28 70 56 61 6c 2c 20 2d 31 2c 20 54 63 6c 5f  r(pVal, -1, Tcl_
aac0: 47 65 74 53 74 72 69 6e 67 52 65 73 75 6c 74 28  GetStringResult(
aad0: 69 6e 74 65 72 70 29 2c 20 0a 20 20 20 20 20 20  interp), .      
aae0: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
aaf0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 73  ITE_STATIC);.  s
ab00: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65  qlite3_result_te
ab10: 78 74 31 36 62 65 28 70 43 74 78 2c 20 73 71 6c  xt16be(pCtx, sql
ab20: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31  ite3_value_text1
ab30: 36 62 65 28 70 56 61 6c 29 2c 0a 20 20 20 20 20  6be(pVal),.     
ab40: 20 2d 31 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e   -1, SQLITE_TRAN
ab50: 53 49 45 4e 54 29 3b 0a 20 20 73 71 6c 69 74 65  SIENT);.  sqlite
ab60: 33 56 61 6c 75 65 46 72 65 65 28 70 56 61 6c 29  3ValueFree(pVal)
ab70: 3b 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20  ;.}.static void 
ab80: 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 5f 75 74  test_function_ut
ab90: 66 31 36 6c 65 28 0a 20 20 73 71 6c 69 74 65 33  f16le(.  sqlite3
aba0: 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20  _context *pCtx, 
abb0: 0a 20 20 69 6e 74 20 6e 41 72 67 2c 0a 20 20 73  .  int nArg,.  s
abc0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
abd0: 72 67 76 0a 29 7b 0a 20 20 54 63 6c 5f 49 6e 74  rgv.){.  Tcl_Int
abe0: 65 72 70 20 2a 69 6e 74 65 72 70 3b 0a 20 20 54  erp *interp;.  T
abf0: 63 6c 5f 4f 62 6a 20 2a 70 58 3b 0a 20 20 73 71  cl_Obj *pX;.  sq
ac00: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
ac10: 6c 3b 0a 20 20 69 6e 74 65 72 70 20 3d 20 28 54  l;.  interp = (T
ac20: 63 6c 5f 49 6e 74 65 72 70 20 2a 29 73 71 6c 69  cl_Interp *)sqli
ac30: 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 70 43  te3_user_data(pC
ac40: 74 78 29 3b 0a 20 20 70 58 20 3d 20 54 63 6c 5f  tx);.  pX = Tcl_
ac50: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 74 65  NewStringObj("te
ac60: 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 2d 31  st_function", -1
ac70: 29 3b 0a 20 20 54 63 6c 5f 49 6e 63 72 52 65 66  );.  Tcl_IncrRef
ac80: 43 6f 75 6e 74 28 70 58 29 3b 0a 20 20 54 63 6c  Count(pX);.  Tcl
ac90: 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
aca0: 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 58  ement(interp, pX
acb0: 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
acc0: 62 6a 28 22 55 54 46 2d 31 36 4c 45 22 2c 20 2d  bj("UTF-16LE", -
acd0: 31 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f  1));.  Tcl_ListO
ace0: 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  bjAppendElement(
acf0: 69 6e 74 65 72 70 2c 20 70 58 2c 20 0a 20 20 20  interp, pX, .   
ad00: 20 20 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67     Tcl_NewString
ad10: 4f 62 6a 28 28 63 68 61 72 2a 29 73 71 6c 69 74  Obj((char*)sqlit
ad20: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72  e3_value_text(ar
ad30: 67 76 5b 30 5d 29 2c 20 2d 31 29 29 3b 0a 20 20  gv[0]), -1));.  
ad40: 54 63 6c 5f 45 76 61 6c 4f 62 6a 45 78 28 69 6e  Tcl_EvalObjEx(in
ad50: 74 65 72 70 2c 20 70 58 2c 20 30 29 3b 0a 20 20  terp, pX, 0);.  
ad60: 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74  Tcl_DecrRefCount
ad70: 28 70 58 29 3b 0a 20 20 70 56 61 6c 20 3d 20 73  (pX);.  pVal = s
ad80: 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 29  qlite3ValueNew()
ad90: 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65  ;.  sqlite3Value
ada0: 53 65 74 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c  SetStr(pVal, -1,
adb0: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 52 65   Tcl_GetStringRe
adc0: 73 75 6c 74 28 69 6e 74 65 72 70 29 2c 20 0a 20  sult(interp), . 
add0: 20 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38       SQLITE_UTF8
ade0: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
adf0: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75  ;.  sqlite3_resu
ae00: 6c 74 5f 74 65 78 74 28 70 43 74 78 2c 28 63 68  lt_text(pCtx,(ch
ae10: 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75  ar*)sqlite3_valu
ae20: 65 5f 74 65 78 74 28 70 56 61 6c 29 2c 2d 31 2c  e_text(pVal),-1,
ae30: 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54  SQLITE_TRANSIENT
ae40: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75  );.  sqlite3Valu
ae50: 65 46 72 65 65 28 70 56 61 6c 29 3b 0a 7d 0a 73  eFree(pVal);.}.s
ae60: 74 61 74 69 63 20 76 6f 69 64 20 74 65 73 74 5f  tatic void test_
ae70: 66 75 6e 63 74 69 6f 6e 5f 75 74 66 31 36 62 65  function_utf16be
ae80: 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (.  sqlite3_cont
ae90: 65 78 74 20 2a 70 43 74 78 2c 20 0a 20 20 69 6e  ext *pCtx, .  in
aea0: 74 20 6e 41 72 67 2c 0a 20 20 73 71 6c 69 74 65  t nArg,.  sqlite
aeb0: 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76 0a 29  3_value **argv.)
aec0: 7b 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  {.  Tcl_Interp *
aed0: 69 6e 74 65 72 70 3b 0a 20 20 54 63 6c 5f 4f 62  interp;.  Tcl_Ob
aee0: 6a 20 2a 70 58 3b 0a 20 20 73 71 6c 69 74 65 33  j *pX;.  sqlite3
aef0: 5f 76 61 6c 75 65 20 2a 70 56 61 6c 3b 0a 20 20  _value *pVal;.  
af00: 69 6e 74 65 72 70 20 3d 20 28 54 63 6c 5f 49 6e  interp = (Tcl_In
af10: 74 65 72 70 20 2a 29 73 71 6c 69 74 65 33 5f 75  terp *)sqlite3_u
af20: 73 65 72 5f 64 61 74 61 28 70 43 74 78 29 3b 0a  ser_data(pCtx);.
af30: 20 20 70 58 20 3d 20 54 63 6c 5f 4e 65 77 53 74    pX = Tcl_NewSt
af40: 72 69 6e 67 4f 62 6a 28 22 74 65 73 74 5f 66 75  ringObj("test_fu
af50: 6e 63 74 69 6f 6e 22 2c 20 2d 31 29 3b 0a 20 20  nction", -1);.  
af60: 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74  Tcl_IncrRefCount
af70: 28 70 58 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74  (pX);.  Tcl_List
af80: 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  ObjAppendElement
af90: 28 69 6e 74 65 72 70 2c 20 70 58 2c 20 54 63 6c  (interp, pX, Tcl
afa0: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 55  _NewStringObj("U
afb0: 54 46 2d 31 36 42 45 22 2c 20 2d 31 29 29 3b 0a  TF-16BE", -1));.
afc0: 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70    Tcl_ListObjApp
afd0: 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72  endElement(inter
afe0: 70 2c 20 70 58 2c 20 0a 20 20 20 20 20 20 54 63  p, pX, .      Tc
aff0: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 28  l_NewStringObj((
b000: 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61  char*)sqlite3_va
b010: 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b 30 5d  lue_text(argv[0]
b020: 29 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 45  ), -1));.  Tcl_E
b030: 76 61 6c 4f 62 6a 45 78 28 69 6e 74 65 72 70 2c  valObjEx(interp,
b040: 20 70 58 2c 20 30 29 3b 0a 20 20 54 63 6c 5f 44   pX, 0);.  Tcl_D
b050: 65 63 72 52 65 66 43 6f 75 6e 74 28 70 58 29 3b  ecrRefCount(pX);
b060: 0a 20 20 70 56 61 6c 20 3d 20 73 71 6c 69 74 65  .  pVal = sqlite
b070: 33 56 61 6c 75 65 4e 65 77 28 29 3b 0a 20 20 73  3ValueNew();.  s
b080: 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74  qlite3ValueSetSt
b090: 72 28 70 56 61 6c 2c 20 2d 31 2c 20 54 63 6c 5f  r(pVal, -1, Tcl_
b0a0: 47 65 74 53 74 72 69 6e 67 52 65 73 75 6c 74 28  GetStringResult(
b0b0: 69 6e 74 65 72 70 29 2c 20 0a 20 20 20 20 20 20  interp), .      
b0c0: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
b0d0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 73  ITE_STATIC);.  s
b0e0: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65  qlite3_result_te
b0f0: 78 74 31 36 6c 65 28 70 43 74 78 2c 20 73 71 6c  xt16le(pCtx, sql
b100: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31  ite3_value_text1
b110: 36 6c 65 28 70 56 61 6c 29 2c 0a 20 20 20 20 20  6le(pVal),.     
b120: 20 2d 31 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e   -1, SQLITE_TRAN
b130: 53 49 45 4e 54 29 3b 0a 20 20 73 71 6c 69 74 65  SIENT);.  sqlite
b140: 33 56 61 6c 75 65 46 72 65 65 28 70 56 61 6c 29  3ValueFree(pVal)
b150: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
b160: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
b170: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
b180: 73 74 5f 66 75 6e 63 74 69 6f 6e 28 0a 20 20 76  st_function(.  v
b190: 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
b1a0: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
b1b0: 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
b1c0: 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
b1d0: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23  ONST objv[].){.#
b1e0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
b1f0: 49 54 5f 55 54 46 31 36 0a 20 20 73 71 6c 69 74  IT_UTF16.  sqlit
b200: 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 76 61  e3 *db;.  int va
b210: 6c 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  l;..  if( objc!=
b220: 35 20 29 20 67 6f 74 6f 20 62 61 64 5f 61 72 67  5 ) goto bad_arg
b230: 73 3b 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f  s;.  if( getDbPo
b240: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
b250: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
b260: 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74  [1]), &db) ) ret
b270: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a  urn TCL_ERROR;..
b280: 20 20 69 66 28 20 54 43 4c 5f 4f 4b 21 3d 54 63    if( TCL_OK!=Tc
b290: 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d  l_GetBooleanFrom
b2a0: 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
b2b0: 5b 32 5d 2c 20 26 76 61 6c 29 20 29 20 72 65 74  [2], &val) ) ret
b2c0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
b2d0: 20 69 66 28 20 76 61 6c 20 29 7b 0a 20 20 20 20   if( val ){.    
b2e0: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
b2f0: 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22 74 65 73  unction(db, "tes
b300: 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 31 2c 20  t_function", 1, 
b310: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 0a 20 20  SQLITE_UTF8, .  
b320: 20 20 20 20 20 20 69 6e 74 65 72 70 2c 20 74 65        interp, te
b330: 73 74 5f 66 75 6e 63 74 69 6f 6e 5f 75 74 66 38  st_function_utf8
b340: 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 69  , 0, 0);.  }.  i
b350: 66 28 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47  f( TCL_OK!=Tcl_G
b360: 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a  etBooleanFromObj
b370: 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d  (interp, objv[3]
b380: 2c 20 26 76 61 6c 29 20 29 20 72 65 74 75 72 6e  , &val) ) return
b390: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
b3a0: 28 20 76 61 6c 20 29 7b 0a 20 20 20 20 73 71 6c  ( val ){.    sql
b3b0: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
b3c0: 74 69 6f 6e 28 64 62 2c 20 22 74 65 73 74 5f 66  tion(db, "test_f
b3d0: 75 6e 63 74 69 6f 6e 22 2c 20 31 2c 20 53 51 4c  unction", 1, SQL
b3e0: 49 54 45 5f 55 54 46 31 36 4c 45 2c 20 0a 20 20  ITE_UTF16LE, .  
b3f0: 20 20 20 20 20 20 69 6e 74 65 72 70 2c 20 74 65        interp, te
b400: 73 74 5f 66 75 6e 63 74 69 6f 6e 5f 75 74 66 31  st_function_utf1
b410: 36 6c 65 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a  6le, 0, 0);.  }.
b420: 20 20 69 66 28 20 54 43 4c 5f 4f 4b 21 3d 54 63    if( TCL_OK!=Tc
b430: 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d  l_GetBooleanFrom
b440: 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
b450: 5b 34 5d 2c 20 26 76 61 6c 29 20 29 20 72 65 74  [4], &val) ) ret
b460: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
b470: 20 69 66 28 20 76 61 6c 20 29 7b 0a 20 20 20 20   if( val ){.    
b480: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
b490: 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22 74 65 73  unction(db, "tes
b4a0: 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 31 2c 20  t_function", 1, 
b4b0: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 2c 20  SQLITE_UTF16BE, 
b4c0: 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 70 2c  .        interp,
b4d0: 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 5f 75   test_function_u
b4e0: 74 66 31 36 62 65 2c 20 30 2c 20 30 29 3b 0a 20  tf16be, 0, 0);. 
b4f0: 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54 43 4c   }..  return TCL
b500: 5f 4f 4b 3b 0a 62 61 64 5f 61 72 67 73 3a 0a 20  _OK;.bad_args:. 
b510: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
b520: 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
b530: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
b540: 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 54 63  be \"",.      Tc
b550: 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f  l_GetStringFromO
b560: 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20  bj(objv[0], 0), 
b570: 22 20 3c 44 42 3e 20 3c 75 74 66 38 3e 20 3c 75  " <DB> <utf8> <u
b580: 74 66 31 36 6c 65 3e 20 3c 75 74 66 31 36 62 65  tf16le> <utf16be
b590: 3e 22 2c 20 30 29 3b 0a 23 65 6e 64 69 66 20 2f  >", 0);.#endif /
b5a0: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  * SQLITE_OMIT_UT
b5b0: 46 31 36 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20  F16 */.  return 
b5c0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 7d 0a 0a 2f 2a  TCL_ERROR;.}../*
b5d0: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 20 20 20  .** Usage:      
b5e0: 20 20 20 74 65 73 74 5f 65 72 72 73 74 72 20 3c     test_errstr <
b5f0: 65 72 72 20 63 6f 64 65 3e 0a 2a 2a 0a 2a 2a 20  err code>.**.** 
b600: 54 65 73 74 20 74 68 61 74 20 74 68 65 20 65 6e  Test that the en
b610: 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20 73  glish language s
b620: 74 72 69 6e 67 20 65 71 75 69 76 61 6c 65 6e 74  tring equivalent
b630: 73 20 66 6f 72 20 73 71 6c 69 74 65 20 65 72 72  s for sqlite err
b640: 6f 72 20 63 6f 64 65 73 0a 2a 2a 20 61 72 65 20  or codes.** are 
b650: 73 61 6e 65 2e 20 54 68 65 20 70 61 72 61 6d 65  sane. The parame
b660: 74 65 72 20 69 73 20 61 6e 20 69 6e 74 65 67 65  ter is an intege
b670: 72 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 61  r representing a
b680: 6e 20 73 71 6c 69 74 65 20 65 72 72 6f 72 20 63  n sqlite error c
b690: 6f 64 65 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75  ode..** The resu
b6a0: 6c 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20  lt is a list of 
b6b0: 74 77 6f 20 65 6c 65 6d 65 6e 74 73 2c 20 74 68  two elements, th
b6c0: 65 20 73 74 72 69 6e 67 20 72 65 70 72 65 73 65  e string represe
b6d0: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ntation of the.*
b6e0: 2a 20 65 72 72 6f 72 20 63 6f 64 65 20 61 6e 64  * error code and
b6f0: 20 74 68 65 20 65 6e 67 6c 69 73 68 20 6c 61 6e   the english lan
b700: 67 75 61 67 65 20 65 78 70 6c 61 6e 61 74 69 6f  guage explanatio
b710: 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  n..*/.static int
b720: 20 74 65 73 74 5f 65 72 72 73 74 72 28 0a 20 20   test_errstr(.  
b730: 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
b740: 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
b750: 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
b760: 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
b770: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
b780: 20 20 63 68 61 72 20 2a 7a 43 6f 64 65 3b 0a 20    char *zCode;. 
b790: 20 69 6e 74 20 69 3b 0a 20 20 69 66 28 20 6f 62   int i;.  if( ob
b7a0: 6a 63 21 3d 31 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=1 ){.    Tcl
b7b0: 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e  _WrongNumArgs(in
b7c0: 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22  terp, 1, objv, "
b7d0: 3c 65 72 72 6f 72 20 63 6f 64 65 3e 22 29 3b 0a  <error code>");.
b7e0: 20 20 7d 0a 0a 20 20 7a 43 6f 64 65 20 3d 20 54    }..  zCode = T
b7f0: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
b800: 76 5b 31 5d 29 3b 0a 20 20 66 6f 72 28 69 3d 30  v[1]);.  for(i=0
b810: 3b 20 69 3c 32 30 30 3b 20 69 2b 2b 29 7b 0a 20  ; i<200; i++){. 
b820: 20 20 20 69 66 28 20 30 3d 3d 73 74 72 63 6d 70     if( 0==strcmp
b830: 28 65 72 72 6f 72 4e 61 6d 65 28 69 29 2c 20 7a  (errorName(i), z
b840: 43 6f 64 65 29 20 29 20 62 72 65 61 6b 3b 0a 20  Code) ) break;. 
b850: 20 7d 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75   }.  Tcl_SetResu
b860: 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72  lt(interp, (char
b870: 20 2a 29 73 71 6c 69 74 65 33 45 72 72 53 74 72   *)sqlite3ErrStr
b880: 28 69 29 2c 20 30 29 3b 0a 20 20 72 65 74 75 72  (i), 0);.  retur
b890: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
b8a0: 2a 2a 20 55 73 61 67 65 3a 20 20 20 20 62 72 65  ** Usage:    bre
b8b0: 61 6b 70 6f 69 6e 74 0a 2a 2a 0a 2a 2a 20 54 68  akpoint.**.** Th
b8c0: 69 73 20 72 6f 75 74 69 6e 65 20 65 78 69 73 74  is routine exist
b8d0: 73 20 66 6f 72 20 6f 6e 65 20 70 75 72 70 6f 73  s for one purpos
b8e0: 65 20 2d 20 74 6f 20 70 72 6f 76 69 64 65 20 61  e - to provide a
b8f0: 20 70 6c 61 63 65 20 74 6f 20 70 75 74 20 61 0a   place to put a.
b900: 2a 2a 20 62 72 65 61 6b 70 6f 69 6e 74 20 77 69  ** breakpoint wi
b910: 74 68 20 47 44 42 20 74 68 61 74 20 63 61 6e 20  th GDB that can 
b920: 62 65 20 74 72 69 67 67 65 72 65 64 20 75 73 69  be triggered usi
b930: 6e 67 20 54 43 4c 20 63 6f 64 65 2e 20 20 54 68  ng TCL code.  Th
b940: 65 20 75 73 65 0a 2a 2a 20 66 6f 72 20 74 68 69  e use.** for thi
b950: 73 20 69 73 20 77 68 65 6e 20 61 20 70 61 72 74  s is when a part
b960: 69 63 75 6c 61 72 20 74 65 73 74 20 66 61 69 6c  icular test fail
b970: 73 20 6f 6e 20 28 73 61 79 29 20 74 68 65 20 31  s on (say) the 1
b980: 34 38 35 74 68 20 69 74 65 72 61 74 69 6f 6e 2e  485th iteration.
b990: 0a 2a 2a 20 49 6e 20 74 68 65 20 54 43 4c 20 74  .** In the TCL t
b9a0: 65 73 74 20 73 63 72 69 70 74 2c 20 77 65 20 63  est script, we c
b9b0: 61 6e 20 61 64 64 20 63 6f 64 65 20 6c 69 6b 65  an add code like
b9c0: 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20   this:.**.**    
b9d0: 20 69 66 20 7b 24 69 3d 3d 31 34 38 35 7d 20 62   if {$i==1485} b
b9e0: 72 65 61 6b 70 6f 69 6e 74 0a 2a 2a 0a 2a 2a 20  reakpoint.**.** 
b9f0: 54 68 65 6e 20 72 75 6e 20 74 65 73 74 66 69 78  Then run testfix
ba00: 74 75 72 65 20 69 6e 20 74 68 65 20 64 65 62 75  ture in the debu
ba10: 67 67 65 72 20 61 6e 64 20 77 61 69 74 20 66 6f  gger and wait fo
ba20: 72 20 74 68 65 20 62 72 65 61 6b 70 6f 69 6e 74  r the breakpoint
ba30: 20 74 6f 0a 2a 2a 20 66 69 72 65 2e 20 20 54 68   to.** fire.  Th
ba40: 65 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 62 72  en additional br
ba50: 65 61 6b 70 6f 69 6e 74 73 20 63 61 6e 20 62 65  eakpoints can be
ba60: 20 73 65 74 20 74 6f 20 74 72 61 63 65 20 64 6f   set to trace do
ba70: 77 6e 20 74 68 65 20 62 75 67 2e 0a 2a 2f 0a 73  wn the bug..*/.s
ba80: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62  tatic int test_b
ba90: 72 65 61 6b 70 6f 69 6e 74 28 0a 20 20 76 6f 69  reakpoint(.  voi
baa0: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63  d *NotUsed,.  Tc
bab0: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
bac0: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
bad0: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
bae0: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
baf0: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61  mmand */.  int a
bb00: 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  rgc,            
bb10: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
bb20: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68  rguments */.  ch
bb30: 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20  ar **argv       
bb40: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
bb50: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f  each argument */
bb60: 0a 29 7b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  .){.  return TCL
bb70: 5f 4f 4b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  _OK;         /* 
bb80: 44 6f 20 6e 6f 74 68 69 6e 67 20 2a 2f 0a 7d 0a  Do nothing */.}.
bb90: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20  ./*.** Usage:   
bba0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
bbb0: 20 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 0a 2a    STMT N VALUE.*
bbc0: 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 73 71  *.** Test the sq
bbd0: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 20 69  lite3_bind_int i
bbe0: 6e 74 65 72 66 61 63 65 2e 20 20 53 54 4d 54 20  nterface.  STMT 
bbf0: 69 73 20 61 20 70 72 65 70 61 72 65 64 20 73 74  is a prepared st
bc00: 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73  atement..** N is
bc10: 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20   the index of a 
bc20: 77 69 6c 64 63 61 72 64 20 69 6e 20 74 68 65 20  wildcard in the 
bc30: 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
bc40: 6e 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e  nt.  This comman
bc50: 64 0a 2a 2a 20 62 69 6e 64 73 20 61 20 33 32 2d  d.** binds a 32-
bc60: 62 69 74 20 69 6e 74 65 67 65 72 20 56 41 4c 55  bit integer VALU
bc70: 45 20 74 6f 20 74 68 61 74 20 77 69 6c 64 63 61  E to that wildca
bc80: 72 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  rd..*/.static in
bc90: 74 20 74 65 73 74 5f 62 69 6e 64 5f 69 6e 74 28  t test_bind_int(
bca0: 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
bcb0: 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
bcc0: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
bcd0: 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
bce0: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
bcf0: 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
bd00: 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20  t *pStmt;.  int 
bd10: 69 64 78 3b 0a 20 20 69 6e 74 20 76 61 6c 75 65  idx;.  int value
bd20: 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69  ;.  int rc;..  i
bd30: 66 28 20 6f 62 6a 63 21 3d 34 20 29 7b 0a 20 20  f( objc!=4 ){.  
bd40: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
bd50: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
bd60: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
bd70: 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20   be \"",.       
bd80: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72   Tcl_GetStringFr
bd90: 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30  omObj(objv[0], 0
bda0: 29 2c 20 22 20 53 54 4d 54 20 4e 20 56 41 4c 55  ), " STMT N VALU
bdb0: 45 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  E", 0);.    retu
bdc0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
bdd0: 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74  }..  if( getStmt
bde0: 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
bdf0: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
be00: 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20  jv[1]), &pStmt) 
be10: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
be20: 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65  OR;.  if( Tcl_Ge
be30: 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65  tIntFromObj(inte
be40: 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 69 64  rp, objv[2], &id
be50: 78 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  x) ) return TCL_
be60: 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c  ERROR;.  if( Tcl
be70: 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
be80: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20  nterp, objv[3], 
be90: 26 76 61 6c 75 65 29 20 29 20 72 65 74 75 72 6e  &value) ) return
bea0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72   TCL_ERROR;..  r
beb0: 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  c = sqlite3_bind
bec0: 5f 69 6e 74 28 70 53 74 6d 74 2c 20 69 64 78 2c  _int(pStmt, idx,
bed0: 20 76 61 6c 75 65 29 3b 0a 20 20 69 66 28 20 73   value);.  if( s
bee0: 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64  qlite3TestErrCod
bef0: 65 28 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f  e(interp, StmtTo
bf00: 44 62 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29  Db(pStmt), rc) )
bf10: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
bf20: 52 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  R;.  if( rc!=SQL
bf30: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65  ITE_OK ){.    re
bf40: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
bf50: 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54 43    }..  return TC
bf60: 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  L_OK;.}.../*.** 
bf70: 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33  Usage:   sqlite3
bf80: 5f 62 69 6e 64 5f 69 6e 74 36 34 20 20 53 54 4d  _bind_int64  STM
bf90: 54 20 4e 20 56 41 4c 55 45 0a 2a 2a 0a 2a 2a 20  T N VALUE.**.** 
bfa0: 54 65 73 74 20 74 68 65 20 73 71 6c 69 74 65 33  Test the sqlite3
bfb0: 5f 62 69 6e 64 5f 69 6e 74 36 34 20 69 6e 74 65  _bind_int64 inte
bfc0: 72 66 61 63 65 2e 20 20 53 54 4d 54 20 69 73 20  rface.  STMT is 
bfd0: 61 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  a prepared state
bfe0: 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20 74 68  ment..** N is th
bff0: 65 20 69 6e 64 65 78 20 6f 66 20 61 20 77 69 6c  e index of a wil
c000: 64 63 61 72 64 20 69 6e 20 74 68 65 20 70 72 65  dcard in the pre
c010: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e  pared statement.
c020: 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a    This command.*
c030: 2a 20 62 69 6e 64 73 20 61 20 36 34 2d 62 69 74  * binds a 64-bit
c040: 20 69 6e 74 65 67 65 72 20 56 41 4c 55 45 20 74   integer VALUE t
c050: 6f 20 74 68 61 74 20 77 69 6c 64 63 61 72 64 2e  o that wildcard.
c060: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
c070: 65 73 74 5f 62 69 6e 64 5f 69 6e 74 36 34 28 0a  est_bind_int64(.
c080: 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
c090: 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
c0a0: 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
c0b0: 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
c0c0: 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
c0d0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  {.  sqlite3_stmt
c0e0: 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69   *pStmt;.  int i
c0f0: 64 78 3b 0a 20 20 69 36 34 20 76 61 6c 75 65 3b  dx;.  i64 value;
c100: 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66  .  int rc;..  if
c110: 28 20 6f 62 6a 63 21 3d 34 20 29 7b 0a 20 20 20  ( objc!=4 ){.   
c120: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
c130: 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
c140: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
c150: 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20  be \"",.        
c160: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f  Tcl_GetStringFro
c170: 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29  mObj(objv[0], 0)
c180: 2c 20 22 20 53 54 4d 54 20 4e 20 56 41 4c 55 45  , " STMT N VALUE
c190: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
c1a0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
c1b0: 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  ..  if( getStmtP
c1c0: 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
c1d0: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
c1e0: 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29  v[1]), &pStmt) )
c1f0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
c200: 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  R;.  if( Tcl_Get
c210: 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
c220: 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 69 64 78  p, objv[2], &idx
c230: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
c240: 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f  RROR;.  if( Tcl_
c250: 47 65 74 57 69 64 65 49 6e 74 46 72 6f 6d 4f 62  GetWideIntFromOb
c260: 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33  j(interp, objv[3
c270: 5d 2c 20 26 76 61 6c 75 65 29 20 29 20 72 65 74  ], &value) ) ret
c280: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a  urn TCL_ERROR;..
c290: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62    rc = sqlite3_b
c2a0: 69 6e 64 5f 69 6e 74 36 34 28 70 53 74 6d 74 2c  ind_int64(pStmt,
c2b0: 20 69 64 78 2c 20 76 61 6c 75 65 29 3b 0a 20 20   idx, value);.  
c2c0: 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45  if( sqlite3TestE
c2d0: 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 53  rrCode(interp, S
c2e0: 74 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 2c 20  tmtToDb(pStmt), 
c2f0: 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  rc) ) return TCL
c300: 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 63  _ERROR;.  if( rc
c310: 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
c320: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
c330: 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75  ROR;.  }..  retu
c340: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f  rn TCL_OK;.}.../
c350: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71  *.** Usage:   sq
c360: 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c  lite3_bind_doubl
c370: 65 20 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 0a  e  STMT N VALUE.
c380: 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 73  **.** Test the s
c390: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62  qlite3_bind_doub
c3a0: 6c 65 20 69 6e 74 65 72 66 61 63 65 2e 20 20 53  le interface.  S
c3b0: 54 4d 54 20 69 73 20 61 20 70 72 65 70 61 72 65  TMT is a prepare
c3c0: 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20  d statement..** 
c3d0: 4e 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  N is the index o
c3e0: 66 20 61 20 77 69 6c 64 63 61 72 64 20 69 6e 20  f a wildcard in 
c3f0: 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
c400: 74 65 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 6f  tement.  This co
c410: 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64 73 20 61  mmand.** binds a
c420: 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20   64-bit integer 
c430: 56 41 4c 55 45 20 74 6f 20 74 68 61 74 20 77 69  VALUE to that wi
c440: 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73 74 61 74 69  ldcard..*/.stati
c450: 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f  c int test_bind_
c460: 64 6f 75 62 6c 65 28 0a 20 20 76 6f 69 64 20 2a  double(.  void *
c470: 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
c480: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
c490: 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
c4a0: 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
c4b0: 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
c4c0: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
c4d0: 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 64 6f  .  int idx;.  do
c4e0: 75 62 6c 65 20 76 61 6c 75 65 3b 0a 20 20 69 6e  uble value;.  in
c4f0: 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  t rc;..  if( obj
c500: 63 21 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=4 ){.    Tcl_
c510: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
c520: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
c530: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
c540: 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47  ",.        Tcl_G
c550: 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28  etStringFromObj(
c560: 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 53  objv[0], 0), " S
c570: 54 4d 54 20 4e 20 56 41 4c 55 45 22 2c 20 30 29  TMT N VALUE", 0)
c580: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
c590: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69  _ERROR;.  }..  i
c5a0: 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
c5b0: 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
c5c0: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
c5d0: 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
c5e0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
c5f0: 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72  if( Tcl_GetIntFr
c600: 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
c610: 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20 29 20 72  jv[2], &idx) ) r
c620: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
c630: 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 44 6f  .  if( Tcl_GetDo
c640: 75 62 6c 65 46 72 6f 6d 4f 62 6a 28 69 6e 74 65  ubleFromObj(inte
c650: 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 76 61  rp, objv[3], &va
c660: 6c 75 65 29 20 29 20 72 65 74 75 72 6e 20 54 43  lue) ) return TC
c670: 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d  L_ERROR;..  rc =
c680: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f   sqlite3_bind_do
c690: 75 62 6c 65 28 70 53 74 6d 74 2c 20 69 64 78 2c  uble(pStmt, idx,
c6a0: 20 76 61 6c 75 65 29 3b 0a 20 20 69 66 28 20 73   value);.  if( s
c6b0: 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64  qlite3TestErrCod
c6c0: 65 28 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f  e(interp, StmtTo
c6d0: 44 62 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29  Db(pStmt), rc) )
c6e0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
c6f0: 52 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  R;.  if( rc!=SQL
c700: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65  ITE_OK ){.    re
c710: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
c720: 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54 43    }..  return TC
c730: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
c740: 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f  sage:   sqlite3_
c750: 62 69 6e 64 5f 6e 75 6c 6c 20 20 53 54 4d 54 20  bind_null  STMT 
c760: 4e 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65  N.**.** Test the
c770: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75   sqlite3_bind_nu
c780: 6c 6c 20 69 6e 74 65 72 66 61 63 65 2e 20 20 53  ll interface.  S
c790: 54 4d 54 20 69 73 20 61 20 70 72 65 70 61 72 65  TMT is a prepare
c7a0: 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20  d statement..** 
c7b0: 4e 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  N is the index o
c7c0: 66 20 61 20 77 69 6c 64 63 61 72 64 20 69 6e 20  f a wildcard in 
c7d0: 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
c7e0: 74 65 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 6f  tement.  This co
c7f0: 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64 73 20 61  mmand.** binds a
c800: 20 4e 55 4c 4c 20 74 6f 20 74 68 65 20 77 69 6c   NULL to the wil
c810: 64 63 61 72 64 2e 0a 2a 2f 0a 73 74 61 74 69 63  dcard..*/.static
c820: 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f 6e   int test_bind_n
c830: 75 6c 6c 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  ull(.  void * cl
c840: 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
c850: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
c860: 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
c870: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
c880: 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
c890: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20  _stmt *pStmt;.  
c8a0: 69 6e 74 20 69 64 78 3b 0a 20 20 69 6e 74 20 72  int idx;.  int r
c8b0: 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  c;..  if( objc!=
c8c0: 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  3 ){.    Tcl_App
c8d0: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
c8e0: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
c8f0: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a   should be \"",.
c900: 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53          Tcl_GetS
c910: 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a  tringFromObj(obj
c920: 76 5b 30 5d 2c 20 30 29 2c 20 22 20 53 54 4d 54  v[0], 0), " STMT
c930: 20 4e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74   N", 0);.    ret
c940: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
c950: 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d   }..  if( getStm
c960: 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  tPointer(interp,
c970: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
c980: 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29  bjv[1]), &pStmt)
c990: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
c9a0: 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47  ROR;.  if( Tcl_G
c9b0: 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
c9c0: 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 69  erp, objv[2], &i
c9d0: 64 78 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  dx) ) return TCL
c9e0: 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20  _ERROR;..  rc = 
c9f0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c  sqlite3_bind_nul
ca00: 6c 28 70 53 74 6d 74 2c 20 69 64 78 29 3b 0a 20  l(pStmt, idx);. 
ca10: 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74   if( sqlite3Test
ca20: 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20  ErrCode(interp, 
ca30: 53 74 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 2c  StmtToDb(pStmt),
ca40: 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43   rc) ) return TC
ca50: 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72  L_ERROR;.  if( r
ca60: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
ca70: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
ca80: 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72 65 74  RROR;.  }..  ret
ca90: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
caa0: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71  *.** Usage:   sq
cab0: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 20  lite3_bind_text 
cac0: 20 53 54 4d 54 20 4e 20 53 54 52 49 4e 47 20 42   STMT N STRING B
cad0: 59 54 45 53 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20  YTES.**.** Test 
cae0: 74 68 65 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  the sqlite3_bind
caf0: 5f 74 65 78 74 20 69 6e 74 65 72 66 61 63 65 2e  _text interface.
cb00: 20 20 53 54 4d 54 20 69 73 20 61 20 70 72 65 70    STMT is a prep
cb10: 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a  ared statement..
cb20: 2a 2a 20 4e 20 69 73 20 74 68 65 20 69 6e 64 65  ** N is the inde
cb30: 78 20 6f 66 20 61 20 77 69 6c 64 63 61 72 64 20  x of a wildcard 
cb40: 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20  in the prepared 
cb50: 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 69 73  statement.  This
cb60: 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64   command.** bind
cb70: 73 20 61 20 55 54 46 2d 38 20 73 74 72 69 6e 67  s a UTF-8 string
cb80: 20 53 54 52 49 4e 47 20 74 6f 20 74 68 65 20 77   STRING to the w
cb90: 69 6c 64 63 61 72 64 2e 20 20 54 68 65 20 73 74  ildcard.  The st
cba0: 72 69 6e 67 20 69 73 20 42 59 54 45 53 20 62 79  ring is BYTES by
cbb0: 74 65 73 0a 2a 2a 20 6c 6f 6e 67 2e 0a 2a 2f 0a  tes.** long..*/.
cbc0: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
cbd0: 62 69 6e 64 5f 74 65 78 74 28 0a 20 20 76 6f 69  bind_text(.  voi
cbe0: 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
cbf0: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
cc00: 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
cc10: 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
cc20: 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73  ST objv[].){.  s
cc30: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
cc40: 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20  mt;.  int idx;. 
cc50: 20 69 6e 74 20 62 79 74 65 73 3b 0a 20 20 63 68   int bytes;.  ch
cc60: 61 72 20 2a 76 61 6c 75 65 3b 0a 20 20 69 6e 74  ar *value;.  int
cc70: 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63   rc;..  if( objc
cc80: 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=5 ){.    Tcl_A
cc90: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
cca0: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
ccb0: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
ccc0: 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65  ,.        Tcl_Ge
ccd0: 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f  tStringFromObj(o
cce0: 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 53 54  bjv[0], 0), " ST
ccf0: 4d 54 20 4e 20 56 41 4c 55 45 20 42 59 54 45 53  MT N VALUE BYTES
cd00: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
cd10: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
cd20: 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  ..  if( getStmtP
cd30: 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
cd40: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
cd50: 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29  v[1]), &pStmt) )
cd60: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
cd70: 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  R;.  if( Tcl_Get
cd80: 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
cd90: 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 69 64 78  p, objv[2], &idx
cda0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
cdb0: 52 52 4f 52 3b 0a 20 20 76 61 6c 75 65 20 3d 20  RROR;.  value = 
cdc0: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
cdd0: 6a 76 5b 33 5d 29 3b 0a 20 20 69 66 28 20 54 63  jv[3]);.  if( Tc
cde0: 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
cdf0: 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c  interp, objv[4],
ce00: 20 26 62 79 74 65 73 29 20 29 20 72 65 74 75 72   &bytes) ) retur
ce10: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
ce20: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e  rc = sqlite3_bin
ce30: 64 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 69 64  d_text(pStmt, id
ce40: 78 2c 20 76 61 6c 75 65 2c 20 62 79 74 65 73 2c  x, value, bytes,
ce50: 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
ce60: 54 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  T);.  if( sqlite
ce70: 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74  3TestErrCode(int
ce80: 65 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53  erp, StmtToDb(pS
ce90: 74 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74 75  tmt), rc) ) retu
cea0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
ceb0: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
cec0: 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  K ){.    Tcl_App
ced0: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
cee0: 2c 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72  , sqlite3TestErr
cef0: 6f 72 4e 61 6d 65 28 72 63 29 2c 20 30 29 3b 0a  orName(rc), 0);.
cf00: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
cf10: 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72 65 74  RROR;.  }..  ret
cf20: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
cf30: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71  *.** Usage:   sq
cf40: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 31  lite3_bind_text1
cf50: 36 20 20 53 54 4d 54 20 4e 20 53 54 52 49 4e 47  6  STMT N STRING
cf60: 20 42 59 54 45 53 0a 2a 2a 0a 2a 2a 20 54 65 73   BYTES.**.** Tes
cf70: 74 20 74 68 65 20 73 71 6c 69 74 65 33 5f 62 69  t the sqlite3_bi
cf80: 6e 64 5f 74 65 78 74 31 36 20 69 6e 74 65 72 66  nd_text16 interf
cf90: 61 63 65 2e 20 20 53 54 4d 54 20 69 73 20 61 20  ace.  STMT is a 
cfa0: 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
cfb0: 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20  nt..** N is the 
cfc0: 69 6e 64 65 78 20 6f 66 20 61 20 77 69 6c 64 63  index of a wildc
cfd0: 61 72 64 20 69 6e 20 74 68 65 20 70 72 65 70 61  ard in the prepa
cfe0: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  red statement.  
cff0: 54 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20  This command.** 
d000: 62 69 6e 64 73 20 61 20 55 54 46 2d 31 36 20 73  binds a UTF-16 s
d010: 74 72 69 6e 67 20 53 54 52 49 4e 47 20 74 6f 20  tring STRING to 
d020: 74 68 65 20 77 69 6c 64 63 61 72 64 2e 20 20 54  the wildcard.  T
d030: 68 65 20 73 74 72 69 6e 67 20 69 73 20 42 59 54  he string is BYT
d040: 45 53 20 62 79 74 65 73 0a 2a 2a 20 6c 6f 6e 67  ES bytes.** long
d050: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
d060: 74 65 73 74 5f 62 69 6e 64 5f 74 65 78 74 31 36  test_bind_text16
d070: 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
d080: 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
d090: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
d0a0: 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
d0b0: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
d0c0: 0a 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .){.#ifndef SQLI
d0d0: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20  TE_OMIT_UTF16.  
d0e0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
d0f0: 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a  tmt;.  int idx;.
d100: 20 20 69 6e 74 20 62 79 74 65 73 3b 0a 20 20 63    int bytes;.  c
d110: 68 61 72 20 2a 76 61 6c 75 65 3b 0a 20 20 69 6e  har *value;.  in
d120: 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  t rc;..  if( obj
d130: 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=5 ){.    Tcl_
d140: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
d150: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
d160: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
d170: 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47  ",.        Tcl_G
d180: 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28  etStringFromObj(
d190: 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 53  objv[0], 0), " S
d1a0: 54 4d 54 20 4e 20 56 41 4c 55 45 20 42 59 54 45  TMT N VALUE BYTE
d1b0: 53 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  S", 0);.    retu
d1c0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
d1d0: 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74  }..  if( getStmt
d1e0: 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
d1f0: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
d200: 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20  jv[1]), &pStmt) 
d210: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
d220: 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65  OR;.  if( Tcl_Ge
d230: 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65  tIntFromObj(inte
d240: 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 69 64  rp, objv[2], &id
d250: 78 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  x) ) return TCL_
d260: 45 52 52 4f 52 3b 0a 20 20 76 61 6c 75 65 20 3d  ERROR;.  value =
d270: 20 28 63 68 61 72 2a 29 54 63 6c 5f 47 65 74 42   (char*)Tcl_GetB
d280: 79 74 65 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28  yteArrayFromObj(
d290: 6f 62 6a 76 5b 33 5d 2c 20 30 29 3b 0a 20 20 69  objv[3], 0);.  i
d2a0: 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f  f( Tcl_GetIntFro
d2b0: 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
d2c0: 76 5b 34 5d 2c 20 26 62 79 74 65 73 29 20 29 20  v[4], &bytes) ) 
d2d0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
d2e0: 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  ;..  rc = sqlite
d2f0: 33 5f 62 69 6e 64 5f 74 65 78 74 31 36 28 70 53  3_bind_text16(pS
d300: 74 6d 74 2c 20 69 64 78 2c 20 28 76 6f 69 64 20  tmt, idx, (void 
d310: 2a 29 76 61 6c 75 65 2c 20 62 79 74 65 73 2c 20  *)value, bytes, 
d320: 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54  SQLITE_TRANSIENT
d330: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
d340: 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65  TestErrCode(inte
d350: 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74  rp, StmtToDb(pSt
d360: 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74 75 72  mt), rc) ) retur
d370: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
d380: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
d390: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54   ){.    return T
d3a0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 23  CL_ERROR;.  }..#
d3b0: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
d3c0: 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 20 20  OMIT_UTF16 */.  
d3d0: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
d3e0: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
d3f0: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c   sqlite3_bind_bl
d400: 6f 62 20 20 53 54 4d 54 20 4e 20 44 41 54 41 20  ob  STMT N DATA 
d410: 42 59 54 45 53 0a 2a 2a 0a 2a 2a 20 54 65 73 74  BYTES.**.** Test
d420: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 62 69 6e   the sqlite3_bin
d430: 64 5f 62 6c 6f 62 20 69 6e 74 65 72 66 61 63 65  d_blob interface
d440: 2e 20 20 53 54 4d 54 20 69 73 20 61 20 70 72 65  .  STMT is a pre
d450: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e  pared statement.
d460: 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20 69 6e 64  .** N is the ind
d470: 65 78 20 6f 66 20 61 20 77 69 6c 64 63 61 72 64  ex of a wildcard
d480: 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
d490: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 69   statement.  Thi
d4a0: 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e  s command.** bin
d4b0: 64 73 20 61 20 42 4c 4f 42 20 74 6f 20 74 68 65  ds a BLOB to the
d4c0: 20 77 69 6c 64 63 61 72 64 2e 20 20 54 68 65 20   wildcard.  The 
d4d0: 42 4c 4f 42 20 69 73 20 42 59 54 45 53 20 62 79  BLOB is BYTES by
d4e0: 74 65 73 20 69 6e 20 73 69 7a 65 2e 0a 2a 2f 0a  tes in size..*/.
d4f0: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
d500: 62 69 6e 64 5f 62 6c 6f 62 28 0a 20 20 76 6f 69  bind_blob(.  voi
d510: 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
d520: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
d530: 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
d540: 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
d550: 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73  ST objv[].){.  s
d560: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
d570: 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20  mt;.  int idx;. 
d580: 20 69 6e 74 20 62 79 74 65 73 3b 0a 20 20 63 68   int bytes;.  ch
d590: 61 72 20 2a 76 61 6c 75 65 3b 0a 20 20 69 6e 74  ar *value;.  int
d5a0: 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63   rc;..  if( objc
d5b0: 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=5 ){.    Tcl_A
d5c0: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
d5d0: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
d5e0: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
d5f0: 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65  ,.        Tcl_Ge
d600: 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f  tStringFromObj(o
d610: 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 53 54  bjv[0], 0), " ST
d620: 4d 54 20 4e 20 44 41 54 41 20 42 59 54 45 53 22  MT N DATA BYTES"
d630: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
d640: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
d650: 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f  .  if( getStmtPo
d660: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
d670: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
d680: 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20  [1]), &pStmt) ) 
d690: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
d6a0: 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49  ;.  if( Tcl_GetI
d6b0: 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  ntFromObj(interp
d6c0: 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 69 64 78 29  , objv[2], &idx)
d6d0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
d6e0: 52 4f 52 3b 0a 20 20 76 61 6c 75 65 20 3d 20 54  ROR;.  value = T
d6f0: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
d700: 76 5b 33 5d 29 3b 0a 20 20 69 66 28 20 54 63 6c  v[3]);.  if( Tcl
d710: 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
d720: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20  nterp, objv[4], 
d730: 26 62 79 74 65 73 29 20 29 20 72 65 74 75 72 6e  &bytes) ) return
d740: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72   TCL_ERROR;..  r
d750: 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  c = sqlite3_bind
d760: 5f 62 6c 6f 62 28 70 53 74 6d 74 2c 20 69 64 78  _blob(pStmt, idx
d770: 2c 20 76 61 6c 75 65 2c 20 62 79 74 65 73 2c 20  , value, bytes, 
d780: 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54  SQLITE_TRANSIENT
d790: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
d7a0: 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65  TestErrCode(inte
d7b0: 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74  rp, StmtToDb(pSt
d7c0: 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74 75 72  mt), rc) ) retur
d7d0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
d7e0: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
d7f0: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54   ){.    return T
d800: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
d810: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
d820: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
d830: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70    sqlite3_bind_p
d840: 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 20 20  arameter_count  
d850: 53 54 4d 54 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72  STMT.**.** Retur
d860: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
d870: 77 69 6c 64 63 61 72 64 73 20 69 6e 20 74 68 65  wildcards in the
d880: 20 67 69 76 65 6e 20 73 74 61 74 65 6d 65 6e 74   given statement
d890: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
d8a0: 74 65 73 74 5f 62 69 6e 64 5f 70 61 72 61 6d 65  test_bind_parame
d8b0: 74 65 72 5f 63 6f 75 6e 74 28 0a 20 20 76 6f 69  ter_count(.  voi
d8c0: 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
d8d0: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
d8e0: 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
d8f0: 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
d900: 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73  ST objv[].){.  s
d910: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
d920: 6d 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  mt;..  if( objc!
d930: 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72  =2 ){.    Tcl_Wr
d940: 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72  ongNumArgs(inter
d950: 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 53 54 4d  p, 1, objv, "STM
d960: 54 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  T");.    return 
d970: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
d980: 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
d990: 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
d9a0: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
d9b0: 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
d9c0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
d9d0: 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
d9e0: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
d9f0: 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33  ewIntObj(sqlite3
da00: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
da10: 63 6f 75 6e 74 28 70 53 74 6d 74 29 29 29 3b 0a  count(pStmt)));.
da20: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
da30: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
da40: 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f     sqlite3_bind_
da50: 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 20 20  parameter_name  
da60: 53 54 4d 54 20 20 4e 0a 2a 2a 0a 2a 2a 20 52 65  STMT  N.**.** Re
da70: 74 75 72 6e 20 74 68 65 20 6e 61 6d 65 20 6f 66  turn the name of
da80: 20 74 68 65 20 4e 74 68 20 77 69 6c 64 63 61 72   the Nth wildcar
da90: 64 2e 20 20 54 68 65 20 66 69 72 73 74 20 77 69  d.  The first wi
daa0: 6c 64 63 61 72 64 20 69 73 20 31 2e 0a 2a 2a 20  ldcard is 1..** 
dab0: 41 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 20  An empty string 
dac0: 69 73 20 72 65 74 75 72 6e 65 64 20 69 66 20 4e  is returned if N
dad0: 20 69 73 20 6f 75 74 20 6f 66 20 72 61 6e 67 65   is out of range
dae0: 20 6f 72 20 69 66 20 74 68 65 20 77 69 6c 64 63   or if the wildc
daf0: 61 72 64 0a 2a 2a 20 69 73 20 6e 61 6d 65 6c 65  ard.** is namele
db00: 73 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ss..*/.static in
db10: 74 20 74 65 73 74 5f 62 69 6e 64 5f 70 61 72 61  t test_bind_para
db20: 6d 65 74 65 72 5f 6e 61 6d 65 28 0a 20 20 76 6f  meter_name(.  vo
db30: 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
db40: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
db50: 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
db60: 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
db70: 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
db80: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
db90: 74 6d 74 3b 0a 20 20 69 6e 74 20 69 3b 0a 0a 20  tmt;.  int i;.. 
dba0: 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a   if( objc!=3 ){.
dbb0: 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d      Tcl_WrongNum
dbc0: 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20  Args(interp, 1, 
dbd0: 6f 62 6a 76 2c 20 22 53 54 4d 54 20 4e 22 29 3b  objv, "STMT N");
dbe0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
dbf0: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
dc00: 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28   getStmtPointer(
dc10: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
dc20: 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
dc30: 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e  &pStmt) ) return
dc40: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
dc50: 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d  ( Tcl_GetIntFrom
dc60: 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
dc70: 5b 32 5d 2c 20 26 69 29 20 29 20 72 65 74 75 72  [2], &i) ) retur
dc80: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54  n TCL_ERROR;.  T
dc90: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
dca0: 69 6e 74 65 72 70 2c 20 0a 20 20 20 20 20 54 63  interp, .     Tc
dcb0: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 73  l_NewStringObj(s
dcc0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
dcd0: 6d 65 74 65 72 5f 6e 61 6d 65 28 70 53 74 6d 74  meter_name(pStmt
dce0: 2c 69 29 2c 2d 31 29 0a 20 20 29 3b 0a 20 20 72  ,i),-1).  );.  r
dcf0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
dd00: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20  ./*.** Usage:   
dd10: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
dd20: 61 6d 65 74 65 72 5f 69 6e 64 65 78 20 20 53 54  ameter_index  ST
dd30: 4d 54 20 20 4e 41 4d 45 0a 2a 2a 0a 2a 2a 20 52  MT  NAME.**.** R
dd40: 65 74 75 72 6e 20 74 68 65 20 69 6e 64 65 78 20  eturn the index 
dd50: 6f 66 20 74 68 65 20 77 69 6c 64 63 61 72 64 20  of the wildcard 
dd60: 63 61 6c 6c 65 64 20 4e 41 4d 45 2e 20 20 52 65  called NAME.  Re
dd70: 74 75 72 6e 20 30 20 69 66 20 74 68 65 72 65 20  turn 0 if there 
dd80: 69 73 0a 2a 2a 20 6e 6f 20 73 75 63 68 20 77 69  is.** no such wi
dd90: 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73 74 61 74 69  ldcard..*/.stati
dda0: 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f  c int test_bind_
ddb0: 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 28  parameter_index(
ddc0: 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
ddd0: 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
dde0: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
ddf0: 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
de00: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
de10: 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
de20: 74 20 2a 70 53 74 6d 74 3b 0a 0a 20 20 69 66 28  t *pStmt;..  if(
de30: 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20   objc!=3 ){.    
de40: 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73  Tcl_WrongNumArgs
de50: 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76  (interp, 1, objv
de60: 2c 20 22 53 54 4d 54 20 4e 41 4d 45 22 29 3b 0a  , "STMT NAME");.
de70: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
de80: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
de90: 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69  getStmtPointer(i
dea0: 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
deb0: 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
dec0: 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20  pStmt) ) return 
ded0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c  TCL_ERROR;.  Tcl
dee0: 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
def0: 74 65 72 70 2c 20 0a 20 20 20 20 20 54 63 6c 5f  terp, .     Tcl_
df00: 4e 65 77 49 6e 74 4f 62 6a 28 0a 20 20 20 20 20  NewIntObj(.     
df10: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70    sqlite3_bind_p
df20: 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 28 70  arameter_index(p
df30: 53 74 6d 74 2c 54 63 6c 5f 47 65 74 53 74 72 69  Stmt,Tcl_GetStri
df40: 6e 67 28 6f 62 6a 76 5b 32 5d 29 29 0a 20 20 20  ng(objv[2])).   
df50: 20 20 29 0a 20 20 29 3b 0a 20 20 72 65 74 75 72    ).  );.  retur
df60: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
df70: 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69  ** Usage:   sqli
df80: 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e  te3_clear_bindin
df90: 67 73 20 53 54 4d 54 0a 2a 2a 0a 2a 2f 0a 23 69  gs STMT.**.*/.#i
dfa0: 66 20 30 0a 73 74 61 74 69 63 20 69 6e 74 20 74  f 0.static int t
dfb0: 65 73 74 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e  est_clear_bindin
dfc0: 67 73 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  gs(.  void * cli
dfd0: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
dfe0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
dff0: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
e000: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
e010: 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  [].){.  sqlite3_
e020: 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 0a 20 20  stmt *pStmt;..  
e030: 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20  if( objc!=2 ){. 
e040: 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41     Tcl_WrongNumA
e050: 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f  rgs(interp, 1, o
e060: 62 6a 76 2c 20 22 53 54 4d 54 22 29 3b 0a 20 20  bjv, "STMT");.  
e070: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
e080: 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
e090: 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74  tStmtPointer(int
e0a0: 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
e0b0: 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53  ng(objv[1]), &pS
e0c0: 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43  tmt) ) return TC
e0d0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53  L_ERROR;.  Tcl_S
e0e0: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
e0f0: 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62  rp, Tcl_NewIntOb
e100: 6a 28 73 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f  j(sqlite3_clear_
e110: 62 69 6e 64 69 6e 67 73 28 70 53 74 6d 74 29 29  bindings(pStmt))
e120: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
e130: 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OK;.}.#endif../*
e140: 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
e150: 65 33 5f 65 72 72 63 6f 64 65 20 44 42 0a 2a 2a  e3_errcode DB.**
e160: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 73  .** Return the s
e170: 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61  tring representa
e180: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6d 6f 73 74  tion of the most
e190: 20 72 65 63 65 6e 74 20 73 71 6c 69 74 65 33 5f   recent sqlite3_
e1a0: 2a 20 41 50 49 0a 2a 2a 20 65 72 72 6f 72 20 63  * API.** error c
e1b0: 6f 64 65 2e 20 65 2e 67 2e 20 22 53 51 4c 49 54  ode. e.g. "SQLIT
e1c0: 45 5f 45 52 52 4f 52 22 2e 0a 2a 2f 0a 73 74 61  E_ERROR"..*/.sta
e1d0: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 65 72 72  tic int test_err
e1e0: 63 6f 64 65 28 0a 20 20 76 6f 69 64 20 2a 20 63  code(.  void * c
e1f0: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
e200: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
e210: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
e220: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
e230: 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
e240: 33 20 2a 64 62 3b 0a 0a 20 20 69 66 28 20 6f 62  3 *db;..  if( ob
e250: 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=2 ){.    Tcl
e260: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
e270: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
e280: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
e290: 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f  "", .       Tcl_
e2a0: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30  GetString(objv[0
e2b0: 5d 29 2c 20 22 20 44 42 22 2c 20 30 29 3b 0a 20  ]), " DB", 0);. 
e2c0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
e2d0: 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67  ROR;.  }.  if( g
e2e0: 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65  etDbPointer(inte
e2f0: 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
e300: 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29  g(objv[1]), &db)
e310: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
e320: 52 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65  ROR;.  Tcl_SetRe
e330: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68  sult(interp, (ch
e340: 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28 73  ar *)errorName(s
e350: 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28 64  qlite3_errcode(d
e360: 62 29 29 2c 20 30 29 3b 0a 20 20 72 65 74 75 72  b)), 0);.  retur
e370: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
e380: 2a 2a 20 55 73 61 67 65 3a 20 20 20 74 65 73 74  ** Usage:   test
e390: 5f 65 72 72 6d 73 67 20 44 42 0a 2a 2a 0a 2a 2a  _errmsg DB.**.**
e3a0: 20 52 65 74 75 72 6e 73 20 74 68 65 20 55 54 46   Returns the UTF
e3b0: 2d 38 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  -8 representatio
e3c0: 6e 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20 6d  n of the error m
e3d0: 65 73 73 61 67 65 20 73 74 72 69 6e 67 20 66 6f  essage string fo
e3e0: 72 20 74 68 65 0a 2a 2a 20 6d 6f 73 74 20 72 65  r the.** most re
e3f0: 63 65 6e 74 20 73 71 6c 69 74 65 33 5f 2a 20 41  cent sqlite3_* A
e400: 50 49 20 63 61 6c 6c 2e 0a 2a 2f 0a 73 74 61 74  PI call..*/.stat
e410: 69 63 20 69 6e 74 20 74 65 73 74 5f 65 72 72 6d  ic int test_errm
e420: 73 67 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  sg(.  void * cli
e430: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
e440: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
e450: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
e460: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
e470: 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  [].){.  sqlite3 
e480: 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  *db;.  const cha
e490: 72 20 2a 7a 45 72 72 3b 0a 0a 20 20 69 66 28 20  r *zErr;..  if( 
e4a0: 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  objc!=2 ){.    T
e4b0: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
e4c0: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
e4d0: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
e4e0: 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63   \"", .       Tc
e4f0: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
e500: 5b 30 5d 29 2c 20 22 20 44 42 22 2c 20 30 29 3b  [0]), " DB", 0);
e510: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
e520: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
e530: 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e   getDbPointer(in
e540: 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
e550: 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64  ing(objv[1]), &d
e560: 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
e570: 45 52 52 4f 52 3b 0a 0a 20 20 7a 45 72 72 20 3d  ERROR;..  zErr =
e580: 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28   sqlite3_errmsg(
e590: 64 62 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62  db);.  Tcl_SetOb
e5a0: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
e5b0: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
e5c0: 28 7a 45 72 72 2c 20 2d 31 29 29 3b 0a 20 20 72  (zErr, -1));.  r
e5d0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
e5e0: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20  ./*.** Usage:   
e5f0: 74 65 73 74 5f 65 72 72 6d 73 67 31 36 20 44 42  test_errmsg16 DB
e600: 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 73 20 74  .**.** Returns t
e610: 68 65 20 55 54 46 2d 31 36 20 72 65 70 72 65 73  he UTF-16 repres
e620: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
e630: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74  error message st
e640: 72 69 6e 67 20 66 6f 72 20 74 68 65 0a 2a 2a 20  ring for the.** 
e650: 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 71 6c 69  most recent sqli
e660: 74 65 33 5f 2a 20 41 50 49 20 63 61 6c 6c 2e 20  te3_* API call. 
e670: 54 68 69 73 20 69 73 20 61 20 62 79 74 65 20 61  This is a byte a
e680: 72 72 61 79 20 6f 62 6a 65 63 74 20 61 74 20 74  rray object at t
e690: 68 65 20 54 43 4c 20 0a 2a 2a 20 6c 65 76 65 6c  he TCL .** level
e6a0: 2c 20 61 6e 64 20 69 74 20 69 6e 63 6c 75 64 65  , and it include
e6b0: 73 20 74 68 65 20 30 78 30 30 20 30 78 30 30 20  s the 0x00 0x00 
e6c0: 74 65 72 6d 69 6e 61 74 6f 72 20 62 79 74 65 73  terminator bytes
e6d0: 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
e6e0: 68 65 0a 2a 2a 20 55 54 46 2d 31 36 20 73 74 72  he.** UTF-16 str
e6f0: 69 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ing..*/.static i
e700: 6e 74 20 74 65 73 74 5f 65 72 72 6d 73 67 31 36  nt test_errmsg16
e710: 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
e720: 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
e730: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
e740: 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
e750: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
e760: 0a 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .){.#ifndef SQLI
e770: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20  TE_OMIT_UTF16.  
e780: 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 63  sqlite3 *db;.  c
e790: 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 45 72 72 3b  onst void *zErr;
e7a0: 0a 20 20 69 6e 74 20 62 79 74 65 73 3b 0a 0a 20  .  int bytes;.. 
e7b0: 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a   if( objc!=2 ){.
e7c0: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
e7d0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
e7e0: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
e7f0: 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20  ld be \"", .    
e800: 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
e810: 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44 42 22  (objv[0]), " DB"
e820: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
e830: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
e840: 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74    if( getDbPoint
e850: 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
e860: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
e870: 29 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e  ), &db) ) return
e880: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 7a   TCL_ERROR;..  z
e890: 45 72 72 20 3d 20 73 71 6c 69 74 65 33 5f 65 72  Err = sqlite3_er
e8a0: 72 6d 73 67 31 36 28 64 62 29 3b 0a 20 20 62 79  rmsg16(db);.  by
e8b0: 74 65 73 20 3d 20 73 71 6c 69 74 65 33 75 74 66  tes = sqlite3utf
e8c0: 31 36 42 79 74 65 4c 65 6e 28 7a 45 72 72 2c 20  16ByteLen(zErr, 
e8d0: 2d 31 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62  -1);.  Tcl_SetOb
e8e0: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
e8f0: 54 63 6c 5f 4e 65 77 42 79 74 65 41 72 72 61 79  Tcl_NewByteArray
e900: 4f 62 6a 28 7a 45 72 72 2c 20 62 79 74 65 73 29  Obj(zErr, bytes)
e910: 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  );.#endif /* SQL
e920: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a  ITE_OMIT_UTF16 *
e930: 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  /.  return TCL_O
e940: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
e950: 65 3a 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  e: sqlite3_prepa
e960: 72 65 20 44 42 20 73 71 6c 20 62 79 74 65 73 20  re DB sql bytes 
e970: 74 61 69 6c 76 61 72 0a 2a 2a 0a 2a 2a 20 43 6f  tailvar.**.** Co
e980: 6d 70 69 6c 65 20 75 70 20 74 6f 20 3c 62 79 74  mpile up to <byt
e990: 65 73 3e 20 62 79 74 65 73 20 6f 66 20 74 68 65  es> bytes of the
e9a0: 20 73 75 70 70 6c 69 65 64 20 53 51 4c 20 73 74   supplied SQL st
e9b0: 72 69 6e 67 20 3c 73 71 6c 3e 20 75 73 69 6e 67  ring <sql> using
e9c0: 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 68 61 6e  .** database han
e9d0: 64 6c 65 20 3c 44 42 3e 2e 20 54 68 65 20 70 61  dle <DB>. The pa
e9e0: 72 61 6d 65 74 65 72 20 3c 74 61 69 6c 76 61 6c  rameter <tailval
e9f0: 3e 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  > is the name of
ea00: 20 61 20 67 6c 6f 62 61 6c 0a 2a 2a 20 76 61 72   a global.** var
ea10: 69 61 62 6c 65 20 74 68 61 74 20 69 73 20 73 65  iable that is se
ea20: 74 20 74 6f 20 74 68 65 20 75 6e 75 73 65 64 20  t to the unused 
ea30: 70 6f 72 74 69 6f 6e 20 6f 66 20 3c 73 71 6c 3e  portion of <sql>
ea40: 20 28 69 66 20 61 6e 79 29 2e 20 41 0a 2a 2a 20   (if any). A.** 
ea50: 53 54 4d 54 20 68 61 6e 64 6c 65 20 69 73 20 72  STMT handle is r
ea60: 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a 73 74 61 74  eturned..*/.stat
ea70: 69 63 20 69 6e 74 20 74 65 73 74 5f 70 72 65 70  ic int test_prep
ea80: 61 72 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  are(.  void * cl
ea90: 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
eaa0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
eab0: 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
eac0: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
ead0: 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
eae0: 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68   *db;.  const ch
eaf0: 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 69 6e 74 20  ar *zSql;.  int 
eb00: 62 79 74 65 73 3b 0a 20 20 63 6f 6e 73 74 20 63  bytes;.  const c
eb10: 68 61 72 20 2a 7a 54 61 69 6c 20 3d 20 30 3b 0a  har *zTail = 0;.
eb20: 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
eb30: 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20 63 68 61  pStmt = 0;.  cha
eb40: 72 20 7a 42 75 66 5b 35 30 5d 3b 0a 20 20 69 6e  r zBuf[50];.  in
eb50: 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  t rc;..  if( obj
eb60: 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=5 ){.    Tcl_
eb70: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
eb80: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
eb90: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
eba0: 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
ebb0: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
ebc0: 29 2c 20 22 20 44 42 20 73 71 6c 20 62 79 74 65  ), " DB sql byte
ebd0: 73 20 74 61 69 6c 76 61 72 22 2c 20 30 29 3b 0a  s tailvar", 0);.
ebe0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
ebf0: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
ec00: 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
ec10: 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
ec20: 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62  ng(objv[1]), &db
ec30: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
ec40: 52 52 4f 52 3b 0a 20 20 7a 53 71 6c 20 3d 20 54  RROR;.  zSql = T
ec50: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
ec60: 76 5b 32 5d 29 3b 0a 20 20 69 66 28 20 54 63 6c  v[2]);.  if( Tcl
ec70: 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
ec80: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20  nterp, objv[3], 
ec90: 26 62 79 74 65 73 29 20 29 20 72 65 74 75 72 6e  &bytes) ) return
eca0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72   TCL_ERROR;..  r
ecb0: 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
ecc0: 61 72 65 28 64 62 2c 20 7a 53 71 6c 2c 20 62 79  are(db, zSql, by
ecd0: 74 65 73 2c 20 26 70 53 74 6d 74 2c 20 26 7a 54  tes, &pStmt, &zT
ece0: 61 69 6c 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  ail);.  if( sqli
ecf0: 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69  te3TestErrCode(i
ed00: 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29  nterp, db, rc) )
ed10: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
ed20: 52 3b 0a 20 20 69 66 28 20 7a 54 61 69 6c 20 29  R;.  if( zTail )
ed30: 7b 0a 20 20 20 20 69 66 28 20 62 79 74 65 73 3e  {.    if( bytes>
ed40: 3d 30 20 29 7b 0a 20 20 20 20 20 20 62 79 74 65  =0 ){.      byte
ed50: 73 20 3d 20 62 79 74 65 73 20 2d 20 28 7a 54 61  s = bytes - (zTa
ed60: 69 6c 2d 7a 53 71 6c 29 3b 0a 20 20 20 20 7d 0a  il-zSql);.    }.
ed70: 20 20 20 20 54 63 6c 5f 4f 62 6a 53 65 74 56 61      Tcl_ObjSetVa
ed80: 72 32 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  r2(interp, objv[
ed90: 34 5d 2c 20 30 2c 20 54 63 6c 5f 4e 65 77 53 74  4], 0, Tcl_NewSt
eda0: 72 69 6e 67 4f 62 6a 28 7a 54 61 69 6c 2c 20 62  ringObj(zTail, b
edb0: 79 74 65 73 29 2c 20 30 29 3b 0a 20 20 7d 0a 20  ytes), 0);.  }. 
edc0: 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
edd0: 4f 4b 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  OK ){.    assert
ede0: 28 20 70 53 74 6d 74 3d 3d 30 20 29 3b 0a 20 20  ( pStmt==0 );.  
edf0: 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20    sprintf(zBuf, 
ee00: 22 28 25 64 29 20 22 2c 20 72 63 29 3b 0a 20 20  "(%d) ", rc);.  
ee10: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
ee20: 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c  lt(interp, zBuf,
ee30: 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28   sqlite3_errmsg(
ee40: 64 62 29 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  db), 0);.    ret
ee50: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
ee60: 20 7d 0a 0a 20 20 69 66 28 20 70 53 74 6d 74 20   }..  if( pStmt 
ee70: 29 7b 0a 20 20 20 20 69 66 28 20 6d 61 6b 65 50  ){.    if( makeP
ee80: 6f 69 6e 74 65 72 53 74 72 28 69 6e 74 65 72 70  ointerStr(interp
ee90: 2c 20 7a 42 75 66 2c 20 70 53 74 6d 74 29 20 29  , zBuf, pStmt) )
eea0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
eeb0: 52 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  R;.    Tcl_Appen
eec0: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
eed0: 7a 42 75 66 2c 20 30 29 3b 0a 20 20 7d 0a 20 20  zBuf, 0);.  }.  
eee0: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
eef0: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
ef00: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 44  qlite3_prepare D
ef10: 42 20 73 71 6c 20 62 79 74 65 73 20 74 61 69 6c  B sql bytes tail
ef20: 76 61 72 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 69 6c  var.**.** Compil
ef30: 65 20 75 70 20 74 6f 20 3c 62 79 74 65 73 3e 20  e up to <bytes> 
ef40: 62 79 74 65 73 20 6f 66 20 74 68 65 20 73 75 70  bytes of the sup
ef50: 70 6c 69 65 64 20 53 51 4c 20 73 74 72 69 6e 67  plied SQL string
ef60: 20 3c 73 71 6c 3e 20 75 73 69 6e 67 0a 2a 2a 20   <sql> using.** 
ef70: 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20  database handle 
ef80: 3c 44 42 3e 2e 20 54 68 65 20 70 61 72 61 6d 65  <DB>. The parame
ef90: 74 65 72 20 3c 74 61 69 6c 76 61 6c 3e 20 69 73  ter <tailval> is
efa0: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 67   the name of a g
efb0: 6c 6f 62 61 6c 0a 2a 2a 20 76 61 72 69 61 62 6c  lobal.** variabl
efc0: 65 20 74 68 61 74 20 69 73 20 73 65 74 20 74 6f  e that is set to
efd0: 20 74 68 65 20 75 6e 75 73 65 64 20 70 6f 72 74   the unused port
efe0: 69 6f 6e 20 6f 66 20 3c 73 71 6c 3e 20 28 69 66  ion of <sql> (if
eff0: 20 61 6e 79 29 2e 20 41 0a 2a 2a 20 53 54 4d 54   any). A.** STMT
f000: 20 68 61 6e 64 6c 65 20 69 73 20 72 65 74 75 72   handle is retur
f010: 6e 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ned..*/.static i
f020: 6e 74 20 74 65 73 74 5f 70 72 65 70 61 72 65 31  nt test_prepare1
f030: 36 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  6(.  void * clie
f040: 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
f050: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
f060: 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
f070: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
f080: 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c  ].){.#ifndef SQL
f090: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20  ITE_OMIT_UTF16. 
f0a0: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
f0b0: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 53 71 6c  const void *zSql
f0c0: 3b 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  ;.  const void *
f0d0: 7a 54 61 69 6c 20 3d 20 30 3b 0a 20 20 54 63 6c  zTail = 0;.  Tcl
f0e0: 5f 4f 62 6a 20 2a 70 54 61 69 6c 20 3d 20 30 3b  _Obj *pTail = 0;
f0f0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
f100: 2a 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20 63 68  *pStmt = 0;.  ch
f110: 61 72 20 7a 42 75 66 5b 35 30 5d 3b 20 0a 20 20  ar zBuf[50]; .  
f120: 69 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20 62 79  int rc;.  int by
f130: 74 65 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  tes;            
f140: 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 74 65 67      /* The integ
f150: 65 72 20 73 70 65 63 69 66 69 65 64 20 61 73 20  er specified as 
f160: 61 72 67 20 33 20 2a 2f 0a 20 20 69 6e 74 20 6f  arg 3 */.  int o
f170: 62 6a 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20  bjlen;          
f180: 20 20 20 20 20 2f 2a 20 54 68 65 20 62 79 74 65       /* The byte
f190: 2d 61 72 72 61 79 20 6c 65 6e 67 74 68 20 6f 66  -array length of
f1a0: 20 61 72 67 20 32 20 2a 2f 0a 0a 20 20 69 66 28   arg 2 */..  if(
f1b0: 20 6f 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20   objc!=5 ){.    
f1c0: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
f1d0: 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
f1e0: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
f1f0: 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54  e \"", .       T
f200: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
f210: 76 5b 30 5d 29 2c 20 22 20 44 42 20 73 71 6c 20  v[0]), " DB sql 
f220: 62 79 74 65 73 20 74 61 69 6c 76 61 72 22 2c 20  bytes tailvar", 
f230: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
f240: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
f250: 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72  if( getDbPointer
f260: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
f270: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
f280: 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
f290: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 53 71 6c  CL_ERROR;.  zSql
f2a0: 20 3d 20 54 63 6c 5f 47 65 74 42 79 74 65 41 72   = Tcl_GetByteAr
f2b0: 72 61 79 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b  rayFromObj(objv[
f2c0: 32 5d 2c 20 26 6f 62 6a 6c 65 6e 29 3b 0a 20 20  2], &objlen);.  
f2d0: 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72  if( Tcl_GetIntFr
f2e0: 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
f2f0: 6a 76 5b 33 5d 2c 20 26 62 79 74 65 73 29 20 29  jv[3], &bytes) )
f300: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
f310: 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  R;..  rc = sqlit
f320: 65 33 5f 70 72 65 70 61 72 65 31 36 28 64 62 2c  e3_prepare16(db,
f330: 20 7a 53 71 6c 2c 20 62 79 74 65 73 2c 20 26 70   zSql, bytes, &p
f340: 53 74 6d 74 2c 20 26 7a 54 61 69 6c 29 3b 0a 20  Stmt, &zTail);. 
f350: 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74   if( sqlite3Test
f360: 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20  ErrCode(interp, 
f370: 64 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e  db, rc) ) return
f380: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
f390: 28 20 72 63 20 29 7b 0a 20 20 20 20 72 65 74 75  ( rc ){.    retu
f3a0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
f3b0: 7d 0a 0a 20 20 69 66 28 20 7a 54 61 69 6c 20 29  }..  if( zTail )
f3c0: 7b 0a 20 20 20 20 6f 62 6a 6c 65 6e 20 3d 20 6f  {.    objlen = o
f3d0: 62 6a 6c 65 6e 20 2d 20 28 28 75 38 20 2a 29 7a  bjlen - ((u8 *)z
f3e0: 54 61 69 6c 2d 28 75 38 20 2a 29 7a 53 71 6c 29  Tail-(u8 *)zSql)
f3f0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6f  ;.  }else{.    o
f400: 62 6a 6c 65 6e 20 3d 20 30 3b 0a 20 20 7d 0a 20  bjlen = 0;.  }. 
f410: 20 70 54 61 69 6c 20 3d 20 54 63 6c 5f 4e 65 77   pTail = Tcl_New
f420: 42 79 74 65 41 72 72 61 79 4f 62 6a 28 28 75 38  ByteArrayObj((u8
f430: 20 2a 29 7a 54 61 69 6c 2c 20 6f 62 6a 6c 65 6e   *)zTail, objlen
f440: 29 3b 0a 20 20 54 63 6c 5f 49 6e 63 72 52 65 66  );.  Tcl_IncrRef
f450: 43 6f 75 6e 74 28 70 54 61 69 6c 29 3b 0a 20 20  Count(pTail);.  
f460: 54 63 6c 5f 4f 62 6a 53 65 74 56 61 72 32 28 69  Tcl_ObjSetVar2(i
f470: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20  nterp, objv[4], 
f480: 30 2c 20 70 54 61 69 6c 2c 20 30 29 3b 0a 20 20  0, pTail, 0);.  
f490: 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74  Tcl_DecrRefCount
f4a0: 28 70 54 61 69 6c 29 3b 0a 0a 20 20 69 66 28 20  (pTail);..  if( 
f4b0: 70 53 74 6d 74 20 29 7b 0a 20 20 20 20 69 66 28  pStmt ){.    if(
f4c0: 20 6d 61 6b 65 50 6f 69 6e 74 65 72 53 74 72 28   makePointerStr(
f4d0: 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 70 53  interp, zBuf, pS
f4e0: 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43  tmt) ) return TC
f4f0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 54  L_ERROR;.  }.  T
f500: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
f510: 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29  interp, zBuf, 0)
f520: 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
f530: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f  TE_OMIT_UTF16 */
f540: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
f550: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
f560: 3a 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 20 66  : sqlite3_open f
f570: 69 6c 65 6e 61 6d 65 20 3f 6f 70 74 69 6f 6e 73  ilename ?options
f580: 2d 6c 69 73 74 3f 0a 2a 2f 0a 73 74 61 74 69 63  -list?.*/.static
f590: 20 69 6e 74 20 74 65 73 74 5f 6f 70 65 6e 28 0a   int test_open(.
f5a0: 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
f5b0: 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
f5c0: 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
f5d0: 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
f5e0: 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
f5f0: 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
f600: 7a 46 69 6c 65 6e 61 6d 65 3b 0a 20 20 73 71 6c  zFilename;.  sql
f610: 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20  ite3 *db;.  int 
f620: 72 63 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b  rc;.  char zBuf[
f630: 31 30 30 5d 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  100];..  if( obj
f640: 63 21 3d 33 20 26 26 20 6f 62 6a 63 21 3d 32 20  c!=3 && objc!=2 
f650: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
f660: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
f670: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
f680: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20  hould be \"", . 
f690: 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
f6a0: 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20  ing(objv[0]), " 
f6b0: 66 69 6c 65 6e 61 6d 65 20 6f 70 74 69 6f 6e 73  filename options
f6c0: 2d 6c 69 73 74 22 2c 20 30 29 3b 0a 20 20 20 20  -list", 0);.    
f6d0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
f6e0: 3b 0a 20 20 7d 0a 0a 20 20 7a 46 69 6c 65 6e 61  ;.  }..  zFilena
f6f0: 6d 65 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69  me = Tcl_GetStri
f700: 6e 67 28 6f 62 6a 76 5b 31 5d 29 3b 0a 20 20 72  ng(objv[1]);.  r
f710: 63 20 3d 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e  c = sqlite3_open
f720: 28 7a 46 69 6c 65 6e 61 6d 65 2c 20 26 64 62 29  (zFilename, &db)
f730: 3b 0a 20 20 0a 20 20 69 66 28 20 6d 61 6b 65 50  ;.  .  if( makeP
f740: 6f 69 6e 74 65 72 53 74 72 28 69 6e 74 65 72 70  ointerStr(interp
f750: 2c 20 7a 42 75 66 2c 20 64 62 29 20 29 20 72 65  , zBuf, db) ) re
f760: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
f770: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
f780: 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c  lt(interp, zBuf,
f790: 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43   0);.  return TC
f7a0: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
f7b0: 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 6f 70  sage: sqlite3_op
f7c0: 65 6e 31 36 20 66 69 6c 65 6e 61 6d 65 20 6f 70  en16 filename op
f7d0: 74 69 6f 6e 73 0a 2a 2f 0a 73 74 61 74 69 63 20  tions.*/.static 
f7e0: 69 6e 74 20 74 65 73 74 5f 6f 70 65 6e 31 36 28  int test_open16(
f7f0: 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
f800: 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
f810: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
f820: 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
f830: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
f840: 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ){.#ifndef SQLIT
f850: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 63  E_OMIT_UTF16.  c
f860: 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 46 69 6c 65  onst void *zFile
f870: 6e 61 6d 65 3b 0a 20 20 73 71 6c 69 74 65 33 20  name;.  sqlite3 
f880: 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  *db;.  int rc;. 
f890: 20 63 68 61 72 20 7a 42 75 66 5b 31 30 30 5d 3b   char zBuf[100];
f8a0: 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20  ..  if( objc!=3 
f8b0: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
f8c0: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
f8d0: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
f8e0: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20  hould be \"", . 
f8f0: 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
f900: 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20  ing(objv[0]), " 
f910: 66 69 6c 65 6e 61 6d 65 20 6f 70 74 69 6f 6e 73  filename options
f920: 2d 6c 69 73 74 22 2c 20 30 29 3b 0a 20 20 20 20  -list", 0);.    
f930: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
f940: 3b 0a 20 20 7d 0a 0a 20 20 7a 46 69 6c 65 6e 61  ;.  }..  zFilena
f950: 6d 65 20 3d 20 54 63 6c 5f 47 65 74 42 79 74 65  me = Tcl_GetByte
f960: 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28 6f 62 6a  ArrayFromObj(obj
f970: 76 5b 31 5d 2c 20 30 29 3b 0a 20 20 72 63 20 3d  v[1], 0);.  rc =
f980: 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 28   sqlite3_open16(
f990: 7a 46 69 6c 65 6e 61 6d 65 2c 20 26 64 62 29 3b  zFilename, &db);
f9a0: 0a 20 20 0a 20 20 69 66 28 20 6d 61 6b 65 50 6f  .  .  if( makePo
f9b0: 69 6e 74 65 72 53 74 72 28 69 6e 74 65 72 70 2c  interStr(interp,
f9c0: 20 7a 42 75 66 2c 20 64 62 29 20 29 20 72 65 74   zBuf, db) ) ret
f9d0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
f9e0: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
f9f0: 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20  t(interp, zBuf, 
fa00: 30 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  0);.#endif /* SQ
fa10: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
fa20: 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  */.  return TCL_
fa30: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
fa40: 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70  ge: sqlite3_comp
fa50: 6c 65 74 65 31 36 20 3c 55 54 46 2d 31 36 20 73  lete16 <UTF-16 s
fa60: 74 72 69 6e 67 3e 0a 2a 2a 0a 2a 2a 20 52 65 74  tring>.**.** Ret
fa70: 75 72 6e 20 31 20 69 66 20 74 68 65 20 73 75 70  urn 1 if the sup
fa80: 70 6c 69 65 64 20 61 72 67 75 6d 65 6e 74 20 69  plied argument i
fa90: 73 20 61 20 63 6f 6d 70 6c 65 74 65 20 53 51 4c  s a complete SQL
faa0: 20 73 74 61 74 65 6d 65 6e 74 2c 20 6f 72 20 7a   statement, or z
fab0: 65 72 6f 0a 2a 2a 20 6f 74 68 65 72 77 69 73 65  ero.** otherwise
fac0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
fad0: 74 65 73 74 5f 63 6f 6d 70 6c 65 74 65 31 36 28  test_complete16(
fae0: 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
faf0: 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
fb00: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
fb10: 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
fb20: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
fb30: 29 7b 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  ){.#if !defined(
fb40: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50  SQLITE_OMIT_COMP
fb50: 4c 45 54 45 29 20 26 26 20 21 64 65 66 69 6e 65  LETE) && !define
fb60: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  d(SQLITE_OMIT_UT
fb70: 46 31 36 29 0a 20 20 63 68 61 72 20 2a 7a 42 75  F16).  char *zBu
fb80: 66 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  f;..  if( objc!=
fb90: 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f  2 ){.    Tcl_Wro
fba0: 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
fbb0: 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 3c 75 74 66  , 1, objv, "<utf
fbc0: 2d 31 36 20 73 71 6c 3e 22 29 3b 0a 20 20 20 20  -16 sql>");.    
fbd0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
fbe0: 3b 0a 20 20 7d 0a 0a 20 20 7a 42 75 66 20 3d 20  ;.  }..  zBuf = 
fbf0: 28 63 68 61 72 2a 29 54 63 6c 5f 47 65 74 42 79  (char*)Tcl_GetBy
fc00: 74 65 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28 6f  teArrayFromObj(o
fc10: 62 6a 76 5b 31 5d 2c 20 30 29 3b 0a 20 20 54 63  bjv[1], 0);.  Tc
fc20: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
fc30: 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e  nterp, Tcl_NewIn
fc40: 74 4f 62 6a 28 73 71 6c 69 74 65 33 5f 63 6f 6d  tObj(sqlite3_com
fc50: 70 6c 65 74 65 31 36 28 7a 42 75 66 29 29 29 3b  plete16(zBuf)));
fc60: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
fc70: 45 5f 4f 4d 49 54 5f 43 4f 4d 50 4c 45 54 45 20  E_OMIT_COMPLETE 
fc80: 26 26 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  && SQLITE_OMIT_U
fc90: 54 46 31 36 20 2a 2f 0a 20 20 72 65 74 75 72 6e  TF16 */.  return
fca0: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
fcb0: 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33  * Usage: sqlite3
fcc0: 5f 73 74 65 70 20 53 54 4d 54 0a 2a 2a 0a 2a 2a  _step STMT.**.**
fcd0: 20 41 64 76 61 6e 63 65 20 74 68 65 20 73 74 61   Advance the sta
fce0: 74 65 6d 65 6e 74 20 74 6f 20 74 68 65 20 6e 65  tement to the ne
fcf0: 78 74 20 72 6f 77 2e 0a 2a 2f 0a 73 74 61 74 69  xt row..*/.stati
fd00: 63 20 69 6e 74 20 74 65 73 74 5f 73 74 65 70 28  c int test_step(
fd10: 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
fd20: 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
fd30: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
fd40: 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
fd50: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
fd60: 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
fd70: 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20  t *pStmt;.  int 
fd80: 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  rc;..  if( objc!
fd90: 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =2 ){.    Tcl_Ap
fda0: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
fdb0: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
fdc0: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
fdd0: 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74   .       Tcl_Get
fde0: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c  String(objv[0]),
fdf0: 20 22 20 53 54 4d 54 22 2c 20 30 29 3b 0a 20 20   " STMT", 0);.  
fe00: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
fe10: 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67  OR;.  }..  if( g
fe20: 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e  etStmtPointer(in
fe30: 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
fe40: 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70  ing(objv[1]), &p
fe50: 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
fe60: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d  CL_ERROR;.  rc =
fe70: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53   sqlite3_step(pS
fe80: 74 6d 74 29 3b 0a 0a 20 20 2f 2a 20 69 66 28 20  tmt);..  /* if( 
fe90: 72 63 21 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20  rc!=SQLITE_DONE 
fea0: 26 26 20 72 63 21 3d 53 51 4c 49 54 45 5f 52 4f  && rc!=SQLITE_RO
feb0: 57 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  W ) return TCL_E
fec0: 52 52 4f 52 3b 20 2a 2f 0a 20 20 54 63 6c 5f 53  RROR; */.  Tcl_S
fed0: 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
fee0: 20 28 63 68 61 72 20 2a 29 65 72 72 6f 72 4e 61   (char *)errorNa
fef0: 6d 65 28 72 63 29 2c 20 30 29 3b 0a 20 20 72 65  me(rc), 0);.  re
ff00: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
ff10: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  /*.** Usage: sql
ff20: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e  ite3_column_coun
ff30: 74 20 53 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 52 65  t STMT .**.** Re
ff40: 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  turn the number 
ff50: 6f 66 20 63 6f 6c 75 6d 6e 73 20 72 65 74 75 72  of columns retur
ff60: 6e 65 64 20 62 79 20 74 68 65 20 73 71 6c 20 73  ned by the sql s
ff70: 74 61 74 65 6d 65 6e 74 20 53 54 4d 54 2e 0a 2a  tatement STMT..*
ff80: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
ff90: 74 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 0a  t_column_count(.
ffa0: 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
ffb0: 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
ffc0: 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
ffd0: 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
ffe0: 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
fff0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  {.  sqlite3_stmt
10000 20 2a 70 53 74 6d 74 3b 0a 0a 20 20 69 66 28 20   *pStmt;..  if( 
10010 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  objc!=2 ){.    T
10020 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
10030 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
10040 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
10050 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63   \"", .       Tc
10060 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
10070 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c  [0]), " STMT col
10080 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  umn", 0);.    re
10090 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
100a0 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74    }..  if( getSt
100b0 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  mtPointer(interp
100c0 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
100d0 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74  objv[1]), &pStmt
100e0 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
100f0 52 52 4f 52 3b 0a 0a 20 20 54 63 6c 5f 53 65 74  RROR;..  Tcl_Set
10100 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
10110 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28  , Tcl_NewIntObj(
10120 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63  sqlite3_column_c
10130 6f 75 6e 74 28 70 53 74 6d 74 29 29 29 3b 0a 20  ount(pStmt)));. 
10140 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
10150 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
10160 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
10170 79 70 65 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a  ype STMT column.
10180 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  **.** Return the
10190 20 74 79 70 65 20 6f 66 20 74 68 65 20 64 61 74   type of the dat
101a0 61 20 69 6e 20 63 6f 6c 75 6d 6e 20 27 63 6f 6c  a in column 'col
101b0 75 6d 6e 27 20 6f 66 20 74 68 65 20 63 75 72 72  umn' of the curr
101c0 65 6e 74 20 72 6f 77 2e 0a 2a 2f 0a 73 74 61 74  ent row..*/.stat
101d0 69 63 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c 75  ic int test_colu
101e0 6d 6e 5f 74 79 70 65 28 0a 20 20 76 6f 69 64 20  mn_type(.  void 
101f0 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
10200 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
10210 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
10220 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
10230 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
10240 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
10250 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a 20 20 69  ;.  int col;.  i
10260 6e 74 20 74 70 3b 0a 0a 20 20 69 66 28 20 6f 62  nt tp;..  if( ob
10270 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=3 ){.    Tcl
10280 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
10290 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
102a0 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
102b0 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f  "", .       Tcl_
102c0 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30  GetString(objv[0
102d0 5d 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d  ]), " STMT colum
102e0 6e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  n", 0);.    retu
102f0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
10300 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74  }..  if( getStmt
10310 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
10320 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
10330 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20  jv[1]), &pStmt) 
10340 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
10350 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65  OR;.  if( Tcl_Ge
10360 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65  tIntFromObj(inte
10370 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f  rp, objv[2], &co
10380 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  l) ) return TCL_
10390 45 52 52 4f 52 3b 0a 0a 20 20 74 70 20 3d 20 73  ERROR;..  tp = s
103a0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79  qlite3_column_ty
103b0 70 65 28 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a  pe(pStmt, col);.
103c0 20 20 73 77 69 74 63 68 28 20 74 70 20 29 7b 0a    switch( tp ){.
103d0 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
103e0 49 4e 54 45 47 45 52 3a 20 0a 20 20 20 20 20 20  INTEGER: .      
103f0 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
10400 74 65 72 70 2c 20 22 49 4e 54 45 47 45 52 22 2c  terp, "INTEGER",
10410 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 20 0a 20   TCL_STATIC); . 
10420 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
10430 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  case SQLITE_NULL
10440 3a 0a 20 20 20 20 20 20 54 63 6c 5f 53 65 74 52  :.      Tcl_SetR
10450 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 4e  esult(interp, "N
10460 55 4c 4c 22 2c 20 54 43 4c 5f 53 54 41 54 49 43  ULL", TCL_STATIC
10470 29 3b 20 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  ); .      break;
10480 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
10490 5f 46 4c 4f 41 54 3a 0a 20 20 20 20 20 20 54 63  _FLOAT:.      Tc
104a0 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65  l_SetResult(inte
104b0 72 70 2c 20 22 46 4c 4f 41 54 22 2c 20 54 43 4c  rp, "FLOAT", TCL
104c0 5f 53 54 41 54 49 43 29 3b 20 0a 20 20 20 20 20  _STATIC); .     
104d0 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
104e0 20 53 51 4c 49 54 45 5f 54 45 58 54 3a 0a 20 20   SQLITE_TEXT:.  
104f0 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c      Tcl_SetResul
10500 74 28 69 6e 74 65 72 70 2c 20 22 54 45 58 54 22  t(interp, "TEXT"
10510 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 20 0a  , TCL_STATIC); .
10520 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
10530 20 63 61 73 65 20 53 51 4c 49 54 45 5f 42 4c 4f   case SQLITE_BLO
10540 42 3a 0a 20 20 20 20 20 20 54 63 6c 5f 53 65 74  B:.      Tcl_Set
10550 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
10560 42 4c 4f 42 22 2c 20 54 43 4c 5f 53 54 41 54 49  BLOB", TCL_STATI
10570 43 29 3b 20 0a 20 20 20 20 20 20 62 72 65 61 6b  C); .      break
10580 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 0a 20  ;.    default:. 
10590 20 20 20 20 20 61 73 73 65 72 74 28 30 29 3b 0a       assert(0);.
105a0 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54 43    }..  return TC
105b0 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
105c0 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f  sage: sqlite3_co
105d0 6c 75 6d 6e 5f 69 6e 74 36 34 20 53 54 4d 54 20  lumn_int64 STMT 
105e0 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 52 65 74  column.**.** Ret
105f0 75 72 6e 20 74 68 65 20 64 61 74 61 20 69 6e 20  urn the data in 
10600 63 6f 6c 75 6d 6e 20 27 63 6f 6c 75 6d 6e 27 20  column 'column' 
10610 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  of the current r
10620 6f 77 20 63 61 73 74 20 61 73 20 61 6e 0a 2a 2a  ow cast as an.**
10630 20 77 69 64 65 20 28 36 34 2d 62 69 74 29 20 69   wide (64-bit) i
10640 6e 74 65 67 65 72 2e 0a 2a 2f 0a 73 74 61 74 69  nteger..*/.stati
10650 63 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c 75 6d  c int test_colum
10660 6e 5f 69 6e 74 36 34 28 0a 20 20 76 6f 69 64 20  n_int64(.  void 
10670 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
10680 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
10690 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
106a0 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
106b0 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
106c0 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
106d0 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a 20 20 69  ;.  int col;.  i
106e0 36 34 20 69 56 61 6c 3b 0a 0a 20 20 69 66 28 20  64 iVal;..  if( 
106f0 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54  objc!=3 ){.    T
10700 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
10710 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
10720 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
10730 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63   \"", .       Tc
10740 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
10750 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c  [0]), " STMT col
10760 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  umn", 0);.    re
10770 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
10780 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74    }..  if( getSt
10790 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  mtPointer(interp
107a0 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
107b0 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74  objv[1]), &pStmt
107c0 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
107d0 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f  RROR;.  if( Tcl_
107e0 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e  GetIntFromObj(in
107f0 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26  terp, objv[2], &
10800 63 6f 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43  col) ) return TC
10810 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 69 56 61 6c  L_ERROR;..  iVal
10820 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d   = sqlite3_colum
10830 6e 5f 69 6e 74 36 34 28 70 53 74 6d 74 2c 20 63  n_int64(pStmt, c
10840 6f 6c 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62  ol);.  Tcl_SetOb
10850 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
10860 54 63 6c 5f 4e 65 77 57 69 64 65 49 6e 74 4f 62  Tcl_NewWideIntOb
10870 6a 28 69 56 61 6c 29 29 3b 0a 20 20 72 65 74 75  j(iVal));.  retu
10880 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
10890 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
108a0 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 20 53  e3_column_blob S
108b0 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2f 0a 73 74  TMT column.*/.st
108c0 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63 6f  atic int test_co
108d0 6c 75 6d 6e 5f 62 6c 6f 62 28 0a 20 20 76 6f 69  lumn_blob(.  voi
108e0 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
108f0 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
10900 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
10910 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
10920 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73  ST objv[].){.  s
10930 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
10940 6d 74 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a 0a  mt;.  int col;..
10950 20 20 69 6e 74 20 6c 65 6e 3b 0a 20 20 63 6f 6e    int len;.  con
10960 73 74 20 76 6f 69 64 20 2a 70 42 6c 6f 62 3b 0a  st void *pBlob;.
10970 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29  .  if( objc!=3 )
10980 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
10990 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
109a0 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
109b0 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20  ould be \"", .  
109c0 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
109d0 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53  ng(objv[0]), " S
109e0 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b  TMT column", 0);
109f0 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
10a00 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66  ERROR;.  }..  if
10a10 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
10a20 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
10a30 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
10a40 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
10a50 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
10a60 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f  f( Tcl_GetIntFro
10a70 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
10a80 76 5b 32 5d 2c 20 26 63 6f 6c 29 20 29 20 72 65  v[2], &col) ) re
10a90 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
10aa0 0a 20 20 70 42 6c 6f 62 20 3d 20 73 71 6c 69 74  .  pBlob = sqlit
10ab0 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 70  e3_column_blob(p
10ac0 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20 6c 65  Stmt, col);.  le
10ad0 6e 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  n = sqlite3_colu
10ae0 6d 6e 5f 62 79 74 65 73 28 70 53 74 6d 74 2c 20  mn_bytes(pStmt, 
10af0 63 6f 6c 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f  col);.  Tcl_SetO
10b00 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
10b10 20 54 63 6c 5f 4e 65 77 42 79 74 65 41 72 72 61   Tcl_NewByteArra
10b20 79 4f 62 6a 28 70 42 6c 6f 62 2c 20 6c 65 6e 29  yObj(pBlob, len)
10b30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
10b40 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
10b50 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ge: sqlite3_colu
10b60 6d 6e 5f 64 6f 75 62 6c 65 20 53 54 4d 54 20 63  mn_double STMT c
10b70 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 52 65 74 75  olumn.**.** Retu
10b80 72 6e 20 74 68 65 20 64 61 74 61 20 69 6e 20 63  rn the data in c
10b90 6f 6c 75 6d 6e 20 27 63 6f 6c 75 6d 6e 27 20 6f  olumn 'column' o
10ba0 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f  f the current ro
10bb0 77 20 63 61 73 74 20 61 73 20 61 20 64 6f 75 62  w cast as a doub
10bc0 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  le..*/.static in
10bd0 74 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 64 6f  t test_column_do
10be0 75 62 6c 65 28 0a 20 20 76 6f 69 64 20 2a 20 63  uble(.  void * c
10bf0 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
10c00 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
10c10 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
10c20 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
10c30 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
10c40 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
10c50 20 69 6e 74 20 63 6f 6c 3b 0a 20 20 64 6f 75 62   int col;.  doub
10c60 6c 65 20 72 56 61 6c 3b 0a 0a 20 20 69 66 28 20  le rVal;..  if( 
10c70 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54  objc!=3 ){.    T
10c80 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
10c90 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
10ca0 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
10cb0 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63   \"", .       Tc
10cc0 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
10cd0 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c  [0]), " STMT col
10ce0 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  umn", 0);.    re
10cf0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
10d00 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74    }..  if( getSt
10d10 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  mtPointer(interp
10d20 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
10d30 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74  objv[1]), &pStmt
10d40 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
10d50 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f  RROR;.  if( Tcl_
10d60 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e  GetIntFromObj(in
10d70 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26  terp, objv[2], &
10d80 63 6f 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43  col) ) return TC
10d90 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 56 61 6c  L_ERROR;..  rVal
10da0 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d   = sqlite3_colum
10db0 6e 5f 64 6f 75 62 6c 65 28 70 53 74 6d 74 2c 20  n_double(pStmt, 
10dc0 63 6f 6c 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f  col);.  Tcl_SetO
10dd0 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
10de0 20 54 63 6c 5f 4e 65 77 44 6f 75 62 6c 65 4f 62   Tcl_NewDoubleOb
10df0 6a 28 72 56 61 6c 29 29 3b 0a 20 20 72 65 74 75  j(rVal));.  retu
10e00 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
10e10 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
10e20 65 33 5f 64 61 74 61 5f 63 6f 75 6e 74 20 53 54  e3_data_count ST
10e30 4d 54 20 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e  MT .**.** Return
10e40 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
10e50 6f 6c 75 6d 6e 73 20 72 65 74 75 72 6e 65 64 20  olumns returned 
10e60 62 79 20 74 68 65 20 73 71 6c 20 73 74 61 74 65  by the sql state
10e70 6d 65 6e 74 20 53 54 4d 54 2e 0a 2a 2f 0a 73 74  ment STMT..*/.st
10e80 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 64 61  atic int test_da
10e90 74 61 5f 63 6f 75 6e 74 28 0a 20 20 76 6f 69 64  ta_count(.  void
10ea0 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
10eb0 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
10ec0 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
10ed0 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
10ee0 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
10ef0 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
10f00 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  t;..  if( objc!=
10f10 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  2 ){.    Tcl_App
10f20 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
10f30 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
10f40 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
10f50 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  .       Tcl_GetS
10f60 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20  tring(objv[0]), 
10f70 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20  " STMT column", 
10f80 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
10f90 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
10fa0 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
10fb0 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
10fc0 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
10fd0 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
10fe0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
10ff0 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  .  Tcl_SetObjRes
11000 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
11010 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65  NewIntObj(sqlite
11020 33 5f 64 61 74 61 5f 63 6f 75 6e 74 28 70 53 74  3_data_count(pSt
11030 6d 74 29 29 29 3b 0a 20 20 72 65 74 75 72 6e 20  mt)));.  return 
11040 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
11050 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
11060 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 53 54 4d 54  column_text STMT
11070 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73   column.**.** Us
11080 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c  age: sqlite3_col
11090 75 6d 6e 5f 64 65 63 6c 74 79 70 65 20 53 54 4d  umn_decltype STM
110a0 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55  T column.**.** U
110b0 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f  sage: sqlite3_co
110c0 6c 75 6d 6e 5f 6e 61 6d 65 20 53 54 4d 54 20 63  lumn_name STMT c
110d0 6f 6c 75 6d 6e 0a 2a 2f 0a 73 74 61 74 69 63 20  olumn.*/.static 
110e0 69 6e 74 20 74 65 73 74 5f 73 74 6d 74 5f 75 74  int test_stmt_ut
110f0 66 38 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  f8(.  void * cli
11100 65 6e 74 44 61 74 61 2c 20 20 20 20 20 20 20 20  entData,        
11110 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 53 51  /* Pointer to SQ
11120 4c 69 74 65 20 41 50 49 20 66 75 6e 63 74 69 6f  Lite API functio
11130 6e 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 20 2a  n to be invoke *
11140 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  /.  Tcl_Interp *
11150 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
11160 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
11170 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
11180 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
11190 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b  Stmt;.  int col;
111a0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 28  .  const char *(
111b0 2a 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f  *xFunc)(sqlite3_
111c0 73 74 6d 74 2a 2c 20 69 6e 74 29 20 3d 20 63 6c  stmt*, int) = cl
111d0 69 65 6e 74 44 61 74 61 3b 0a 20 20 63 6f 6e 73  ientData;.  cons
111e0 74 20 63 68 61 72 20 2a 7a 52 65 74 3b 0a 0a 20  t char *zRet;.. 
111f0 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a   if( objc!=3 ){.
11200 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
11210 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
11220 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
11230 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20  ld be \"", .    
11240 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
11250 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d  (objv[0]), " STM
11260 54 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20  T column", 0);. 
11270 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
11280 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  ROR;.  }..  if( 
11290 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69  getStmtPointer(i
112a0 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
112b0 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
112c0 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20  pStmt) ) return 
112d0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  TCL_ERROR;.  if(
112e0 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f   Tcl_GetIntFromO
112f0 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
11300 32 5d 2c 20 26 63 6f 6c 29 20 29 20 72 65 74 75  2], &col) ) retu
11310 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
11320 7a 52 65 74 20 3d 20 78 46 75 6e 63 28 70 53 74  zRet = xFunc(pSt
11330 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20 69 66 28 20  mt, col);.  if( 
11340 7a 52 65 74 20 29 7b 0a 20 20 20 20 54 63 6c 5f  zRet ){.    Tcl_
11350 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70  SetResult(interp
11360 2c 20 28 63 68 61 72 20 2a 29 7a 52 65 74 2c 20  , (char *)zRet, 
11370 30 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  0);.  }.  return
11380 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 73 74 61 74   TCL_OK;.}..stat
11390 69 63 20 69 6e 74 20 74 65 73 74 5f 67 6c 6f 62  ic int test_glob
113a0 61 6c 5f 72 65 63 6f 76 65 72 28 0a 20 20 76 6f  al_recover(.  vo
113b0 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
113c0 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
113d0 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
113e0 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
113f0 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69  NST objv[].){.#i
11400 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
11410 54 5f 47 4c 4f 42 41 4c 52 45 43 4f 56 45 52 0a  T_GLOBALRECOVER.
11420 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 66 28 20    int rc;.  if( 
11430 6f 62 6a 63 21 3d 31 20 29 7b 0a 20 20 20 20 54  objc!=1 ){.    T
11440 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28  cl_WrongNumArgs(
11450 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c  interp, 1, objv,
11460 20 22 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e   "");.    return
11470 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
11480 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 67    rc = sqlite3_g
11490 6c 6f 62 61 6c 5f 72 65 63 6f 76 65 72 28 29 3b  lobal_recover();
114a0 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74  .  Tcl_SetResult
114b0 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a  (interp, (char *
114c0 29 65 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20  )errorName(rc), 
114d0 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 23 65 6e  TCL_STATIC);.#en
114e0 64 69 66 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  dif.  return TCL
114f0 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
11500 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c  age: sqlite3_col
11510 75 6d 6e 5f 74 65 78 74 20 53 54 4d 54 20 63 6f  umn_text STMT co
11520 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65  lumn.**.** Usage
11530 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  : sqlite3_column
11540 5f 64 65 63 6c 74 79 70 65 20 53 54 4d 54 20 63  _decltype STMT c
11550 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67  olumn.**.** Usag
11560 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  e: sqlite3_colum
11570 6e 5f 6e 61 6d 65 20 53 54 4d 54 20 63 6f 6c 75  n_name STMT colu
11580 6d 6e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  mn.*/.static int
11590 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66 31 36   test_stmt_utf16
115a0 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
115b0 74 44 61 74 61 2c 20 20 20 20 20 2f 2a 20 50 6f  tData,     /* Po
115c0 69 6e 74 65 72 20 74 6f 20 53 51 4c 69 74 65 20  inter to SQLite 
115d0 41 50 49 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  API function to 
115e0 62 65 20 69 6e 76 6f 6b 65 64 20 2a 2f 0a 20 20  be invoked */.  
115f0 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
11600 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
11610 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
11620 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64   objv[].){.#ifnd
11630 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
11640 54 46 31 36 0a 20 20 73 71 6c 69 74 65 33 5f 73  TF16.  sqlite3_s
11650 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e  tmt *pStmt;.  in
11660 74 20 63 6f 6c 3b 0a 20 20 54 63 6c 5f 4f 62 6a  t col;.  Tcl_Obj
11670 20 2a 70 52 65 74 3b 0a 20 20 63 6f 6e 73 74 20   *pRet;.  const 
11680 76 6f 69 64 20 2a 7a 4e 61 6d 65 31 36 3b 0a 20  void *zName16;. 
11690 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 28 2a 78   const void *(*x
116a0 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 73 74  Func)(sqlite3_st
116b0 6d 74 2a 2c 20 69 6e 74 29 20 3d 20 63 6c 69 65  mt*, int) = clie
116c0 6e 74 44 61 74 61 3b 0a 0a 20 20 69 66 28 20 6f  ntData;..  if( o
116d0 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63  bjc!=3 ){.    Tc
116e0 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
116f0 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
11700 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
11710 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c  \"", .       Tcl
11720 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
11730 30 5d 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75  0]), " STMT colu
11740 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  mn", 0);.    ret
11750 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
11760 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d   }..  if( getStm
11770 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  tPointer(interp,
11780 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
11790 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29  bjv[1]), &pStmt)
117a0 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
117b0 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47  ROR;.  if( Tcl_G
117c0 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
117d0 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 63  erp, objv[2], &c
117e0 6f 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  ol) ) return TCL
117f0 5f 45 52 52 4f 52 3b 0a 0a 20 20 7a 4e 61 6d 65  _ERROR;..  zName
11800 31 36 20 3d 20 78 46 75 6e 63 28 70 53 74 6d 74  16 = xFunc(pStmt
11810 2c 20 63 6f 6c 29 3b 0a 20 20 69 66 28 20 7a 4e  , col);.  if( zN
11820 61 6d 65 31 36 20 29 7b 0a 20 20 20 20 70 52 65  ame16 ){.    pRe
11830 74 20 3d 20 54 63 6c 5f 4e 65 77 42 79 74 65 41  t = Tcl_NewByteA
11840 72 72 61 79 4f 62 6a 28 7a 4e 61 6d 65 31 36 2c  rrayObj(zName16,
11850 20 73 71 6c 69 74 65 33 75 74 66 31 36 42 79 74   sqlite3utf16Byt
11860 65 4c 65 6e 28 7a 4e 61 6d 65 31 36 2c 20 2d 31  eLen(zName16, -1
11870 29 2b 32 29 3b 0a 20 20 20 20 54 63 6c 5f 53 65  )+2);.    Tcl_Se
11880 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
11890 70 2c 20 70 52 65 74 29 3b 0a 20 20 7d 0a 23 65  p, pRet);.  }.#e
118a0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
118b0 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 20 20  MIT_UTF16 */..  
118c0 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
118d0 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
118e0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
118f0 74 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a  t STMT column.**
11900 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
11910 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 20  e3_column_bytes 
11920 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a  STMT column.**.*
11930 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33  * Usage: sqlite3
11940 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 31 36 20  _column_bytes16 
11950 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a  STMT column.**.*
11960 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
11970 74 5f 73 74 6d 74 5f 69 6e 74 28 0a 20 20 76 6f  t_stmt_int(.  vo
11980 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
11990 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
119a0 6f 20 53 51 4c 69 74 65 20 41 50 49 20 66 75 6e  o SQLite API fun
119b0 63 74 69 6f 6e 20 74 6f 20 62 65 20 69 6e 76 6f  ction to be invo
119c0 6b 65 64 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74  ked */.  Tcl_Int
119d0 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
119e0 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
119f0 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
11a00 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  .){.  sqlite3_st
11a10 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74  mt *pStmt;.  int
11a20 20 63 6f 6c 3b 0a 20 20 69 6e 74 20 28 2a 78 46   col;.  int (*xF
11a30 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 73 74 6d  unc)(sqlite3_stm
11a40 74 2a 2c 20 69 6e 74 29 20 3d 20 63 6c 69 65 6e  t*, int) = clien
11a50 74 44 61 74 61 3b 0a 0a 20 20 69 66 28 20 6f 62  tData;..  if( ob
11a60 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=3 ){.    Tcl
11a70 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
11a80 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
11a90 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
11aa0 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f  "", .       Tcl_
11ab0 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30  GetString(objv[0
11ac0 5d 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d  ]), " STMT colum
11ad0 6e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  n", 0);.    retu
11ae0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
11af0 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74  }..  if( getStmt
11b00 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
11b10 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
11b20 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20  jv[1]), &pStmt) 
11b30 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
11b40 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65  OR;.  if( Tcl_Ge
11b50 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65  tIntFromObj(inte
11b60 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f  rp, objv[2], &co
11b70 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  l) ) return TCL_
11b80 45 52 52 4f 52 3b 0a 0a 20 20 54 63 6c 5f 53 65  ERROR;..  Tcl_Se
11b90 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
11ba0 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a  p, Tcl_NewIntObj
11bb0 28 78 46 75 6e 63 28 70 53 74 6d 74 2c 20 63 6f  (xFunc(pStmt, co
11bc0 6c 29 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  l)));.  return T
11bd0 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  CL_OK;.}..#ifnde
11be0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 49  f SQLITE_OMIT_DI
11bf0 53 4b 49 4f 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  SKIO./*.** Usage
11c00 3a 20 20 73 71 6c 69 74 65 33 4f 73 4f 70 65 6e  :  sqlite3OsOpen
11c10 52 65 61 64 57 72 69 74 65 20 3c 66 69 6c 65 6e  ReadWrite <filen
11c20 61 6d 65 3e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ame>.*/.static i
11c30 6e 74 20 74 65 73 74 5f 73 71 6c 69 74 65 33 4f  nt test_sqlite3O
11c40 73 4f 70 65 6e 52 65 61 64 57 72 69 74 65 28 0a  sOpenReadWrite(.
11c50 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
11c60 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
11c70 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
11c80 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
11c90 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
11ca0 7b 0a 20 20 4f 73 46 69 6c 65 20 2a 70 46 69 6c  {.  OsFile *pFil
11cb0 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69  e;.  int rc;.  i
11cc0 6e 74 20 64 75 6d 6d 79 3b 0a 20 20 63 68 61 72  nt dummy;.  char
11cd0 20 7a 42 75 66 5b 31 30 30 5d 3b 0a 0a 20 20 69   zBuf[100];..  i
11ce0 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20  f( objc!=2 ){.  
11cf0 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
11d00 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
11d10 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
11d20 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20   be \"", .      
11d30 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
11d40 62 6a 76 5b 30 5d 29 2c 20 22 20 66 69 6c 65 6e  bjv[0]), " filen
11d50 61 6d 65 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  ame", 0);.    re
11d60 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
11d70 20 20 7d 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69    }..  rc = sqli
11d80 74 65 33 4f 73 4f 70 65 6e 52 65 61 64 57 72 69  te3OsOpenReadWri
11d90 74 65 28 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  te(Tcl_GetString
11da0 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 46 69 6c  (objv[1]), &pFil
11db0 65 2c 20 26 64 75 6d 6d 79 29 3b 0a 20 20 69 66  e, &dummy);.  if
11dc0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
11dd0 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 52 65  ){.    Tcl_SetRe
11de0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68  sult(interp, (ch
11df0 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72  ar *)errorName(r
11e00 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b  c), TCL_STATIC);
11e10 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
11e20 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 6d 61 6b  ERROR;.  }.  mak
11e30 65 50 6f 69 6e 74 65 72 53 74 72 28 69 6e 74 65  ePointerStr(inte
11e40 72 70 2c 20 7a 42 75 66 2c 20 70 46 69 6c 65 29  rp, zBuf, pFile)
11e50 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c  ;.  Tcl_SetResul
11e60 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20  t(interp, zBuf, 
11e70 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  0);.  return TCL
11e80 5f 45 52 52 4f 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  _ERROR;.}../*.**
11e90 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33   Usage:  sqlite3
11ea0 4f 73 43 6c 6f 73 65 20 3c 66 69 6c 65 20 68 61  OsClose <file ha
11eb0 6e 64 6c 65 3e 0a 2a 2f 0a 73 74 61 74 69 63 20  ndle>.*/.static 
11ec0 69 6e 74 20 74 65 73 74 5f 73 71 6c 69 74 65 33  int test_sqlite3
11ed0 4f 73 43 6c 6f 73 65 28 0a 20 20 76 6f 69 64 20  OsClose(.  void 
11ee0 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
11ef0 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
11f00 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
11f10 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
11f20 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 4f 73 46   objv[].){.  OsF
11f30 69 6c 65 20 2a 70 46 69 6c 65 3b 0a 20 20 69 6e  ile *pFile;.  in
11f40 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  t rc;..  if( obj
11f50 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
11f60 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
11f70 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
11f80 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
11f90 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
11fa0 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
11fb0 29 2c 20 22 20 66 69 6c 65 68 61 6e 64 6c 65 22  ), " filehandle"
11fc0 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
11fd0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
11fe0 0a 20 20 69 66 28 20 67 65 74 46 69 6c 65 50 6f  .  if( getFilePo
11ff0 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
12000 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
12010 5b 31 5d 29 2c 20 26 70 46 69 6c 65 29 20 29 7b  [1]), &pFile) ){
12020 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
12030 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 63 20  ERROR;.  }.  rc 
12040 3d 20 73 71 6c 69 74 65 33 4f 73 43 6c 6f 73 65  = sqlite3OsClose
12050 28 26 70 46 69 6c 65 29 3b 0a 20 20 69 66 28 20  (&pFile);.  if( 
12060 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
12070 0a 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75  .    Tcl_SetResu
12080 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72  lt(interp, (char
12090 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72 63 29   *)errorName(rc)
120a0 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20  , TCL_STATIC);. 
120b0 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
120c0 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  ROR;.  }.  retur
120d0 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
120e0 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
120f0 65 33 4f 73 4c 6f 63 6b 20 3c 66 69 6c 65 20 68  e3OsLock <file h
12100 61 6e 64 6c 65 3e 20 3c 6c 6f 63 6b 74 79 70 65  andle> <locktype
12110 3e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  >.*/.static int 
12120 74 65 73 74 5f 73 71 6c 69 74 65 33 4f 73 4c 6f  test_sqlite3OsLo
12130 63 6b 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  ck(.  void * cli
12140 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
12150 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
12160 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
12170 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
12180 5b 5d 0a 29 7b 0a 20 20 4f 73 46 69 6c 65 20 2a  [].){.  OsFile *
12190 20 70 46 69 6c 65 3b 0a 20 20 69 6e 74 20 72 63   pFile;.  int rc
121a0 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33  ;..  if( objc!=3
121b0 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
121c0 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
121d0 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
121e0 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a  should be \"", .
121f0 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53          Tcl_GetS
12200 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20  tring(objv[0]), 
12210 0a 20 20 20 20 20 20 20 20 22 20 66 69 6c 65 68  .        " fileh
12220 61 6e 64 6c 65 20 28 53 48 41 52 45 44 7c 52 45  andle (SHARED|RE
12230 53 45 52 56 45 44 7c 50 45 4e 44 49 4e 47 7c 45  SERVED|PENDING|E
12240 58 43 4c 55 53 49 56 45 29 22 2c 20 30 29 3b 0a  XCLUSIVE)", 0);.
12250 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
12260 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  RROR;.  }..  if(
12270 20 67 65 74 46 69 6c 65 50 6f 69 6e 74 65 72 28   getFilePointer(
12280 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
12290 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
122a0 26 70 46 69 6c 65 29 20 29 7b 0a 20 20 20 20 72  &pFile) ){.    r
122b0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
122c0 0a 20 20 7d 0a 0a 20 20 69 66 28 20 30 3d 3d 73  .  }..  if( 0==s
122d0 74 72 63 6d 70 28 22 53 48 41 52 45 44 22 2c 20  trcmp("SHARED", 
122e0 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
122f0 6a 76 5b 32 5d 29 29 20 29 7b 0a 20 20 20 20 72  jv[2])) ){.    r
12300 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 4c 6f 63  c = sqlite3OsLoc
12310 6b 28 70 46 69 6c 65 2c 20 53 48 41 52 45 44 5f  k(pFile, SHARED_
12320 4c 4f 43 4b 29 3b 0a 20 20 7d 0a 20 20 65 6c 73  LOCK);.  }.  els
12330 65 20 69 66 28 20 30 3d 3d 73 74 72 63 6d 70 28  e if( 0==strcmp(
12340 22 52 45 53 45 52 56 45 44 22 2c 20 54 63 6c 5f  "RESERVED", Tcl_
12350 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32  GetString(objv[2
12360 5d 29 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ])) ){.    rc = 
12370 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b 28 70 46  sqlite3OsLock(pF
12380 69 6c 65 2c 20 52 45 53 45 52 56 45 44 5f 4c 4f  ile, RESERVED_LO
12390 43 4b 29 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20  CK);.  }.  else 
123a0 69 66 28 20 30 3d 3d 73 74 72 63 6d 70 28 22 50  if( 0==strcmp("P
123b0 45 4e 44 49 4e 47 22 2c 20 54 63 6c 5f 47 65 74  ENDING", Tcl_Get
123c0 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 29  String(objv[2]))
123d0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
123e0 69 74 65 33 4f 73 4c 6f 63 6b 28 70 46 69 6c 65  ite3OsLock(pFile
123f0 2c 20 50 45 4e 44 49 4e 47 5f 4c 4f 43 4b 29 3b  , PENDING_LOCK);
12400 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20  .  }.  else if( 
12410 30 3d 3d 73 74 72 63 6d 70 28 22 45 58 43 4c 55  0==strcmp("EXCLU
12420 53 49 56 45 22 2c 20 54 63 6c 5f 47 65 74 53 74  SIVE", Tcl_GetSt
12430 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 29 20 29  ring(objv[2])) )
12440 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
12450 65 33 4f 73 4c 6f 63 6b 28 70 46 69 6c 65 2c 20  e3OsLock(pFile, 
12460 45 58 43 4c 55 53 49 56 45 5f 4c 4f 43 4b 29 3b  EXCLUSIVE_LOCK);
12470 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 54 63  .  }else{.    Tc
12480 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
12490 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
124a0 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
124b0 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 20 54 63  \"", .        Tc
124c0 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
124d0 5b 30 5d 29 2c 20 0a 20 20 20 20 20 20 20 20 22  [0]), .        "
124e0 20 66 69 6c 65 68 61 6e 64 6c 65 20 28 53 48 41   filehandle (SHA
124f0 52 45 44 7c 52 45 53 45 52 56 45 44 7c 50 45 4e  RED|RESERVED|PEN
12500 44 49 4e 47 7c 45 58 43 4c 55 53 49 56 45 29 22  DING|EXCLUSIVE)"
12510 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
12520 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
12530 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
12540 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f  E_OK ){.    Tcl_
12550 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70  SetResult(interp
12560 2c 20 28 63 68 61 72 20 2a 29 65 72 72 6f 72 4e  , (char *)errorN
12570 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54 41  ame(rc), TCL_STA
12580 54 49 43 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  TIC);.    return
12590 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
125a0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
125b0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
125c0 20 20 73 71 6c 69 74 65 33 4f 73 55 6e 6c 6f 63    sqlite3OsUnloc
125d0 6b 20 3c 66 69 6c 65 20 68 61 6e 64 6c 65 3e 0a  k <file handle>.
125e0 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
125f0 73 74 5f 73 71 6c 69 74 65 33 4f 73 55 6e 6c 6f  st_sqlite3OsUnlo
12600 63 6b 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  ck(.  void * cli
12610 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
12620 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
12630 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
12640 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
12650 5b 5d 0a 29 7b 0a 20 20 4f 73 46 69 6c 65 20 2a  [].){.  OsFile *
12660 20 70 46 69 6c 65 3b 0a 20 20 69 6e 74 20 72 63   pFile;.  int rc
12670 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32  ;..  if( objc!=2
12680 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
12690 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
126a0 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
126b0 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a  should be \"", .
126c0 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
126d0 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22  ring(objv[0]), "
126e0 20 66 69 6c 65 68 61 6e 64 6c 65 22 2c 20 30 29   filehandle", 0)
126f0 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
12700 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69  _ERROR;.  }..  i
12710 66 28 20 67 65 74 46 69 6c 65 50 6f 69 6e 74 65  f( getFilePointe
12720 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
12730 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
12740 2c 20 26 70 46 69 6c 65 29 20 29 7b 0a 20 20 20  , &pFile) ){.   
12750 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
12760 52 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  R;.  }.  rc = sq
12770 6c 69 74 65 33 4f 73 55 6e 6c 6f 63 6b 28 70 46  lite3OsUnlock(pF
12780 69 6c 65 2c 20 4e 4f 5f 4c 4f 43 4b 29 3b 0a 20  ile, NO_LOCK);. 
12790 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
127a0 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65  OK ){.    Tcl_Se
127b0 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  tResult(interp, 
127c0 28 63 68 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d  (char *)errorNam
127d0 65 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49  e(rc), TCL_STATI
127e0 43 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  C);.    return T
127f0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
12800 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
12810 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
12820 73 71 6c 69 74 65 33 4f 73 54 65 6d 70 46 69 6c  sqlite3OsTempFil
12830 65 4e 61 6d 65 0a 2a 2f 0a 73 74 61 74 69 63 20  eName.*/.static 
12840 69 6e 74 20 74 65 73 74 5f 73 71 6c 69 74 65 33  int test_sqlite3
12850 4f 73 54 65 6d 70 46 69 6c 65 4e 61 6d 65 28 0a  OsTempFileName(.
12860 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
12870 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
12880 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
12890 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
128a0 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
128b0 7b 0a 20 20 63 68 61 72 20 7a 46 69 6c 65 5b 53  {.  char zFile[S
128c0 51 4c 49 54 45 5f 54 45 4d 50 4e 41 4d 45 5f 53  QLITE_TEMPNAME_S
128d0 49 5a 45 5d 3b 0a 20 20 69 6e 74 20 72 63 3b 0a  IZE];.  int rc;.
128e0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f  .  rc = sqlite3O
128f0 73 54 65 6d 70 46 69 6c 65 4e 61 6d 65 28 7a 46  sTempFileName(zF
12900 69 6c 65 29 3b 0a 20 20 69 66 28 20 72 63 21 3d  ile);.  if( rc!=
12910 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
12920 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69   Tcl_SetResult(i
12930 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 65  nterp, (char *)e
12940 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43  rrorName(rc), TC
12950 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 72  L_STATIC);.    r
12960 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
12970 0a 20 20 7d 0a 20 20 54 63 6c 5f 41 70 70 65 6e  .  }.  Tcl_Appen
12980 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
12990 7a 46 69 6c 65 2c 20 30 29 3b 0a 20 20 72 65 74  zFile, 0);.  ret
129a0 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 23 65  urn TCL_OK;.}.#e
129b0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  ndif../*.** Usag
129c0 65 3a 20 20 73 71 6c 69 74 65 5f 73 65 74 5f 6d  e:  sqlite_set_m
129d0 61 67 69 63 20 20 44 42 20 20 4d 41 47 49 43 2d  agic  DB  MAGIC-
129e0 4e 55 4d 42 45 52 0a 2a 2a 0a 2a 2a 20 53 65 74  NUMBER.**.** Set
129f0 20 74 68 65 20 64 62 2d 3e 6d 61 67 69 63 20 76   the db->magic v
12a00 61 6c 75 65 2e 20 20 54 68 69 73 20 69 73 20 75  alue.  This is u
12a10 73 65 64 20 74 6f 20 74 65 73 74 20 65 72 72 6f  sed to test erro
12a20 72 20 72 65 63 6f 76 65 72 79 20 6c 6f 67 69 63  r recovery logic
12a30 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
12a40 73 71 6c 69 74 65 5f 73 65 74 5f 6d 61 67 69 63  sqlite_set_magic
12a50 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
12a60 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
12a70 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
12a80 6e 74 20 61 72 67 63 2c 0a 20 20 63 68 61 72 20  nt argc,.  char 
12a90 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 73 71 6c 69  **argv.){.  sqli
12aa0 74 65 33 20 2a 64 62 3b 0a 20 20 69 66 28 20 61  te3 *db;.  if( a
12ab0 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63  rgc!=3 ){.    Tc
12ac0 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
12ad0 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
12ae0 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
12af0 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20  \"", argv[0],.  
12b00 20 20 20 20 20 20 20 22 20 44 42 20 4d 41 47 49         " DB MAGI
12b10 43 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  C", 0);.    retu
12b20 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
12b30 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  }.  if( getDbPoi
12b40 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67  nter(interp, arg
12b50 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74  v[1], &db) ) ret
12b60 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
12b70 20 69 66 28 20 73 74 72 63 6d 70 28 61 72 67 76   if( strcmp(argv
12b80 5b 32 5d 2c 20 22 53 51 4c 49 54 45 5f 4d 41 47  [2], "SQLITE_MAG
12b90 49 43 5f 4f 50 45 4e 22 29 3d 3d 30 20 29 7b 0a  IC_OPEN")==0 ){.
12ba0 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20      db->magic = 
12bb0 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45  SQLITE_MAGIC_OPE
12bc0 4e 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73  N;.  }else if( s
12bd0 74 72 63 6d 70 28 61 72 67 76 5b 32 5d 2c 20 22  trcmp(argv[2], "
12be0 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f  SQLITE_MAGIC_CLO
12bf0 53 45 44 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  SED")==0 ){.    
12c00 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49  db->magic = SQLI
12c10 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 3b  TE_MAGIC_CLOSED;
12c20 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72  .  }else if( str
12c30 63 6d 70 28 61 72 67 76 5b 32 5d 2c 20 22 53 51  cmp(argv[2], "SQ
12c40 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 22  LITE_MAGIC_BUSY"
12c50 29 3d 3d 30 20 29 7b 0a 20 20 20 20 64 62 2d 3e  )==0 ){.    db->
12c60 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d  magic = SQLITE_M
12c70 41 47 49 43 5f 42 55 53 59 3b 0a 20 20 7d 65 6c  AGIC_BUSY;.  }el
12c80 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 61 72  se if( strcmp(ar
12c90 67 76 5b 32 5d 2c 20 22 53 51 4c 49 54 45 5f 4d  gv[2], "SQLITE_M
12ca0 41 47 49 43 5f 45 52 52 4f 52 22 29 3d 3d 30 20  AGIC_ERROR")==0 
12cb0 29 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63  ){.    db->magic
12cc0 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f   = SQLITE_MAGIC_
12cd0 45 52 52 4f 52 3b 0a 20 20 7d 65 6c 73 65 20 69  ERROR;.  }else i
12ce0 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e  f( Tcl_GetInt(in
12cf0 74 65 72 70 2c 20 61 72 67 76 5b 32 5d 2c 20 26  terp, argv[2], &
12d00 64 62 2d 3e 6d 61 67 69 63 29 20 29 7b 0a 20 20  db->magic) ){.  
12d10 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
12d20 4f 52 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  OR;.  }.  return
12d30 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
12d40 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
12d50 33 5f 69 6e 74 65 72 72 75 70 74 20 20 44 42 20  3_interrupt  DB 
12d60 0a 2a 2a 0a 2a 2a 20 54 72 69 67 67 65 72 20 61  .**.** Trigger a
12d70 6e 20 69 6e 74 65 72 72 75 70 74 20 6f 6e 20 44  n interrupt on D
12d80 42 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  B.*/.static int 
12d90 74 65 73 74 5f 69 6e 74 65 72 72 75 70 74 28 0a  test_interrupt(.
12da0 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
12db0 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
12dc0 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
12dd0 20 61 72 67 63 2c 0a 20 20 63 68 61 72 20 2a 2a   argc,.  char **
12de0 61 72 67 76 0a 29 7b 0a 20 20 73 71 6c 69 74 65  argv.){.  sqlite
12df0 33 20 2a 64 62 3b 0a 20 20 69 66 28 20 61 72 67  3 *db;.  if( arg
12e00 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
12e10 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
12e20 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
12e30 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
12e40 22 2c 20 61 72 67 76 5b 30 5d 2c 20 22 20 44 42  ", argv[0], " DB
12e50 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
12e60 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
12e70 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e  .  if( getDbPoin
12e80 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76  ter(interp, argv
12e90 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75  [1], &db) ) retu
12ea0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
12eb0 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
12ec0 74 28 64 62 29 3b 0a 20 20 72 65 74 75 72 6e 20  t(db);.  return 
12ed0 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 73 74 61 74 69  TCL_OK;.}..stati
12ee0 63 20 75 38 20 2a 73 71 6c 69 74 65 33 5f 73 74  c u8 *sqlite3_st
12ef0 61 63 6b 5f 62 61 73 65 6c 69 6e 65 20 3d 20 30  ack_baseline = 0
12f00 3b 0a 0a 2f 2a 0a 2a 2a 20 46 69 6c 6c 20 74 68  ;../*.** Fill th
12f10 65 20 73 74 61 63 6b 20 77 69 74 68 20 61 20 6b  e stack with a k
12f20 6e 6f 77 6e 20 62 69 74 70 61 74 74 65 72 6e 2e  nown bitpattern.
12f30 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
12f40 70 72 65 70 53 74 61 63 6b 28 76 6f 69 64 29 7b  prepStack(void){
12f50 0a 20 20 69 6e 74 20 69 3b 0a 20 20 75 33 32 20  .  int i;.  u32 
12f60 62 69 67 42 75 66 5b 36 35 35 33 36 5d 3b 0a 20  bigBuf[65536];. 
12f70 20 66 6f 72 28 69 3d 30 3b 20 69 3c 73 69 7a 65   for(i=0; i<size
12f80 6f 66 28 62 69 67 42 75 66 29 3b 20 69 2b 2b 29  of(bigBuf); i++)
12f90 20 62 69 67 42 75 66 5b 69 5d 20 3d 20 30 78 64   bigBuf[i] = 0xd
12fa0 65 61 64 62 65 65 66 3b 0a 20 20 73 71 6c 69 74  eadbeef;.  sqlit
12fb0 65 33 5f 73 74 61 63 6b 5f 62 61 73 65 6c 69 6e  e3_stack_baselin
12fc0 65 20 3d 20 28 75 38 2a 29 26 62 69 67 42 75 66  e = (u8*)&bigBuf
12fd0 5b 36 35 35 33 36 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a  [65536];.}../*.*
12fe0 2a 20 47 65 74 20 74 68 65 20 63 75 72 72 65 6e  * Get the curren
12ff0 74 20 73 74 61 63 6b 20 64 65 70 74 68 2e 20 20  t stack depth.  
13000 55 73 65 64 20 66 6f 72 20 64 65 62 75 67 67 69  Used for debuggi
13010 6e 67 20 6f 6e 6c 79 2e 0a 2a 2f 0a 75 36 34 20  ng only..*/.u64 
13020 73 71 6c 69 74 65 33 53 74 61 63 6b 44 65 70 74  sqlite3StackDept
13030 68 28 76 6f 69 64 29 7b 0a 20 20 75 38 20 78 3b  h(void){.  u8 x;
13040 0a 20 20 72 65 74 75 72 6e 20 28 75 36 34 29 28  .  return (u64)(
13050 73 71 6c 69 74 65 33 5f 73 74 61 63 6b 5f 62 61  sqlite3_stack_ba
13060 73 65 6c 69 6e 65 20 2d 20 26 78 29 3b 0a 7d 0a  seline - &x);.}.
13070 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
13080 71 6c 69 74 65 33 5f 73 74 61 63 6b 5f 75 73 65  qlite3_stack_use
13090 64 20 44 42 20 53 51 4c 0a 2a 2a 0a 2a 2a 20 54  d DB SQL.**.** T
130a0 72 79 20 74 6f 20 6d 65 61 73 75 72 65 20 74 68  ry to measure th
130b0 65 20 61 6d 6f 75 6e 74 20 6f 66 20 73 74 61 63  e amount of stac
130c0 6b 20 73 70 61 63 65 20 75 73 65 64 20 62 79 20  k space used by 
130d0 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65  a call to sqlite
130e0 33 5f 65 78 65 63 0a 2a 2f 0a 73 74 61 74 69 63  3_exec.*/.static
130f0 20 69 6e 74 20 74 65 73 74 5f 73 74 61 63 6b 5f   int test_stack_
13100 75 73 65 64 28 0a 20 20 76 6f 69 64 20 2a 20 63  used(.  void * c
13110 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
13120 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
13130 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a 20 20 63  .  int argc,.  c
13140 68 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20  har **argv.){.  
13150 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69  sqlite3 *db;.  i
13160 6e 74 20 69 3b 0a 20 20 69 66 28 20 61 72 67 63  nt i;.  if( argc
13170 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=3 ){.    Tcl_A
13180 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
13190 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
131a0 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
131b0 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20  , argv[0], .    
131c0 20 20 20 20 22 20 44 42 20 53 51 4c 22 2c 20 30      " DB SQL", 0
131d0 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
131e0 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
131f0 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
13200 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c  interp, argv[1],
13210 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
13220 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 70 72 65 70  CL_ERROR;.  prep
13230 53 74 61 63 6b 28 29 3b 0a 20 20 73 71 6c 69 74  Stack();.  sqlit
13240 65 33 5f 65 78 65 63 28 64 62 2c 20 61 72 67 76  e3_exec(db, argv
13250 5b 32 5d 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20  [2], 0, 0, 0);. 
13260 20 66 6f 72 28 69 3d 36 35 35 33 35 3b 20 69 3e   for(i=65535; i>
13270 3d 30 20 26 26 20 28 28 75 33 32 2a 29 73 71 6c  =0 && ((u32*)sql
13280 69 74 65 33 5f 73 74 61 63 6b 5f 62 61 73 65 6c  ite3_stack_basel
13290 69 6e 65 29 5b 2d 69 5d 3d 3d 30 78 64 65 61 64  ine)[-i]==0xdead
132a0 62 65 65 66 3b 20 69 2d 2d 29 7b 7d 0a 20 20 54  beef; i--){}.  T
132b0 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
132c0 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49  interp, Tcl_NewI
132d0 6e 74 4f 62 6a 28 69 2a 34 29 29 3b 0a 20 20 72  ntObj(i*4));.  r
132e0 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
132f0 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  ./*.** Usage: sq
13300 6c 69 74 65 5f 64 65 6c 65 74 65 5f 66 75 6e 63  lite_delete_func
13310 74 69 6f 6e 20 44 42 20 66 75 6e 63 74 69 6f 6e  tion DB function
13320 2d 6e 61 6d 65 0a 2a 2a 0a 2a 2a 20 44 65 6c 65  -name.**.** Dele
13330 74 65 20 74 68 65 20 75 73 65 72 20 66 75 6e 63  te the user func
13340 74 69 6f 6e 20 27 66 75 6e 63 74 69 6f 6e 2d 6e  tion 'function-n
13350 61 6d 65 27 20 66 72 6f 6d 20 64 61 74 61 62 61  ame' from databa
13360 73 65 20 68 61 6e 64 6c 65 20 44 42 2e 20 49 74  se handle DB. It
13370 0a 2a 2a 20 69 73 20 61 73 73 75 6d 65 64 20 74  .** is assumed t
13380 68 61 74 20 74 68 65 20 75 73 65 72 20 66 75 6e  hat the user fun
13390 63 74 69 6f 6e 20 77 61 73 20 63 72 65 61 74 65  ction was create
133a0 64 20 61 73 20 55 54 46 38 2c 20 61 6e 79 20 6e  d as UTF8, any n
133b0 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 61 72 67 75  umber of.** argu
133c0 6d 65 6e 74 73 20 28 74 68 65 20 77 61 79 20 74  ments (the way t
133d0 68 65 20 54 43 4c 20 69 6e 74 65 72 66 61 63 65  he TCL interface
133e0 20 64 6f 65 73 20 69 74 29 2e 0a 2a 2f 0a 73 74   does it)..*/.st
133f0 61 74 69 63 20 69 6e 74 20 64 65 6c 65 74 65 5f  atic int delete_
13400 66 75 6e 63 74 69 6f 6e 28 0a 20 20 76 6f 69 64  function(.  void
13410 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
13420 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
13430 65 72 70 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c  erp,.  int argc,
13440 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 0a 29  .  char **argv.)
13450 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 73 71  {.  int rc;.  sq
13460 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 66 28  lite3 *db;.  if(
13470 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20   argc!=3 ){.    
13480 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
13490 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
134a0 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
134b0 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20  e \"", argv[0], 
134c0 0a 20 20 20 20 20 20 20 20 22 20 44 42 20 66 75  .        " DB fu
134d0 6e 63 74 69 6f 6e 2d 6e 61 6d 65 22 2c 20 30 29  nction-name", 0)
134e0 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
134f0 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
13500 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69  ( getDbPointer(i
13510 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20  nterp, argv[1], 
13520 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
13530 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20  L_ERROR;.  rc = 
13540 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
13550 75 6e 63 74 69 6f 6e 28 64 62 2c 20 61 72 67 76  unction(db, argv
13560 5b 32 5d 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f  [2], -1, SQLITE_
13570 55 54 46 38 2c 20 30 2c 20 30 2c 20 30 2c 20 30  UTF8, 0, 0, 0, 0
13580 29 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75  );.  Tcl_SetResu
13590 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72  lt(interp, (char
135a0 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72 63 29   *)errorName(rc)
135b0 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20  , TCL_STATIC);. 
135c0 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
135d0 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
135e0 73 71 6c 69 74 65 5f 64 65 6c 65 74 65 5f 63 6f  sqlite_delete_co
135f0 6c 6c 61 74 69 6f 6e 20 44 42 20 63 6f 6c 6c 61  llation DB colla
13600 74 69 6f 6e 2d 6e 61 6d 65 0a 2a 2a 0a 2a 2a 20  tion-name.**.** 
13610 44 65 6c 65 74 65 20 74 68 65 20 63 6f 6c 6c 61  Delete the colla
13620 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 27 63  tion sequence 'c
13630 6f 6c 6c 61 74 69 6f 6e 2d 6e 61 6d 65 27 20 66  ollation-name' f
13640 72 6f 6d 20 64 61 74 61 62 61 73 65 20 68 61 6e  rom database han
13650 64 6c 65 20 0a 2a 2a 20 44 42 2e 20 49 74 20 69  dle .** DB. It i
13660 73 20 61 73 73 75 6d 65 64 20 74 68 61 74 20 74  s assumed that t
13670 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
13680 75 65 6e 63 65 20 77 61 73 20 63 72 65 61 74 65  uence was create
13690 64 20 61 73 20 55 54 46 38 20 28 74 68 65 20 0a  d as UTF8 (the .
136a0 2a 2a 20 77 61 79 20 74 68 65 20 54 43 4c 20 69  ** way the TCL i
136b0 6e 74 65 72 66 61 63 65 20 64 6f 65 73 20 69 74  nterface does it
136c0 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  )..*/.static int
136d0 20 64 65 6c 65 74 65 5f 63 6f 6c 6c 61 74 69 6f   delete_collatio
136e0 6e 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  n(.  void * clie
136f0 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
13700 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
13710 69 6e 74 20 61 72 67 63 2c 0a 20 20 63 68 61 72  int argc,.  char
13720 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 69 6e 74   **argv.){.  int
13730 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a   rc;.  sqlite3 *
13740 64 62 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d  db;.  if( argc!=
13750 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  3 ){.    Tcl_App
13760 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
13770 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
13780 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
13790 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20  argv[0], .      
137a0 20 20 22 20 44 42 20 66 75 6e 63 74 69 6f 6e 2d    " DB function-
137b0 6e 61 6d 65 22 2c 20 30 29 3b 0a 20 20 20 20 72  name", 0);.    r
137c0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
137d0 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
137e0 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
137f0 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20  argv[1], &db) ) 
13800 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
13810 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
13820 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f  _create_collatio
13830 6e 28 64 62 2c 20 61 72 67 76 5b 32 5d 2c 20 53  n(db, argv[2], S
13840 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 20 30  QLITE_UTF8, 0, 0
13850 29 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75  );.  Tcl_SetResu
13860 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72  lt(interp, (char
13870 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72 63 29   *)errorName(rc)
13880 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20  , TCL_STATIC);. 
13890 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
138a0 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
138b0 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f  sqlite3_get_auto
138c0 63 6f 6d 6d 69 74 20 44 42 0a 2a 2a 0a 2a 2a 20  commit DB.**.** 
138d0 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 74  Return true if t
138e0 68 65 20 64 61 74 61 62 61 73 65 20 44 42 20 69  he database DB i
138f0 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 61  s currently in a
13900 75 74 6f 2d 63 6f 6d 6d 69 74 20 6d 6f 64 65 2e  uto-commit mode.
13910 0a 2a 2a 20 52 65 74 75 72 6e 20 66 61 6c 73 65  .** Return false
13920 20 69 66 20 6e 6f 74 2e 0a 2a 2f 0a 73 74 61 74   if not..*/.stat
13930 69 63 20 69 6e 74 20 67 65 74 5f 61 75 74 6f 63  ic int get_autoc
13940 6f 6d 6d 69 74 28 0a 20 20 76 6f 69 64 20 2a 20  ommit(.  void * 
13950 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
13960 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
13970 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a 20 20  ,.  int argc,.  
13980 63 68 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a 20  char **argv.){. 
13990 20 63 68 61 72 20 7a 42 75 66 5b 33 30 5d 3b 0a   char zBuf[30];.
139a0 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
139b0 20 69 66 28 20 61 72 67 63 21 3d 32 20 29 7b 0a   if( argc!=2 ){.
139c0 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
139d0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
139e0 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
139f0 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
13a00 30 5d 2c 20 0a 20 20 20 20 20 20 20 20 22 20 44  0], .        " D
13a10 42 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  B", 0);.    retu
13a20 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
13a30 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  }.  if( getDbPoi
13a40 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67  nter(interp, arg
13a50 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74  v[1], &db) ) ret
13a60 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
13a70 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22   sprintf(zBuf, "
13a80 25 64 22 2c 20 73 71 6c 69 74 65 33 5f 67 65 74  %d", sqlite3_get
13a90 5f 61 75 74 6f 63 6f 6d 6d 69 74 28 64 62 29 29  _autocommit(db))
13aa0 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65  ;.  Tcl_AppendRe
13ab0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75  sult(interp, zBu
13ac0 66 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20  f, 0);.  return 
13ad0 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
13ae0 20 55 73 61 67 65 3a 20 20 74 63 6c 5f 76 61 72   Usage:  tcl_var
13af0 69 61 62 6c 65 5f 74 79 70 65 20 56 41 52 49 41  iable_type VARIA
13b00 42 4c 45 4e 41 4d 45 0a 2a 2a 0a 2a 2a 20 52 65  BLENAME.**.** Re
13b10 74 75 72 6e 20 74 68 65 20 6e 61 6d 65 20 6f 66  turn the name of
13b20 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65   the internal re
13b30 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 66 6f 72  presentation for
13b40 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
13b50 20 74 68 65 20 67 69 76 65 6e 20 76 61 72 69 61   the given varia
13b60 62 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ble..*/.static i
13b70 6e 74 20 74 63 6c 5f 76 61 72 69 61 62 6c 65 5f  nt tcl_variable_
13b80 74 79 70 65 28 0a 20 20 76 6f 69 64 20 2a 20 63  type(.  void * c
13b90 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
13ba0 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
13bb0 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
13bc0 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
13bd0 6a 76 5b 5d 0a 29 7b 0a 20 20 54 63 6c 5f 4f 62  jv[].){.  Tcl_Ob
13be0 6a 20 2a 70 56 61 72 3b 0a 20 20 69 66 28 20 6f  j *pVar;.  if( o
13bf0 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  bjc!=2 ){.    Tc
13c00 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69  l_WrongNumArgs(i
13c10 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20  nterp, 1, objv, 
13c20 22 56 41 52 49 41 42 4c 45 22 29 3b 0a 20 20 20  "VARIABLE");.   
13c30 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
13c40 52 3b 0a 20 20 7d 0a 20 20 70 56 61 72 20 3d 20  R;.  }.  pVar = 
13c50 54 63 6c 5f 47 65 74 56 61 72 32 45 78 28 69 6e  Tcl_GetVar2Ex(in
13c60 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
13c70 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 30 2c  ing(objv[1]), 0,
13c80 20 54 43 4c 5f 4c 45 41 56 45 5f 45 52 52 5f 4d   TCL_LEAVE_ERR_M
13c90 53 47 29 3b 0a 20 20 69 66 28 20 70 56 61 72 3d  SG);.  if( pVar=
13ca0 3d 30 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  =0 ) return TCL_
13cb0 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 70 56 61  ERROR;.  if( pVa
13cc0 72 2d 3e 74 79 70 65 50 74 72 20 29 7b 0a 20 20  r->typePtr ){.  
13cd0 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
13ce0 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
13cf0 65 77 53 74 72 69 6e 67 4f 62 6a 28 70 56 61 72  ewStringObj(pVar
13d00 2d 3e 74 79 70 65 50 74 72 2d 3e 6e 61 6d 65 2c  ->typePtr->name,
13d10 20 2d 31 29 29 3b 0a 20 20 7d 0a 20 20 72 65 74   -1));.  }.  ret
13d20 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
13d30 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
13d40 69 74 65 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d  ite3_release_mem
13d50 6f 72 79 20 3f 4e 3f 0a 2a 2a 0a 2a 2a 20 41 74  ory ?N?.**.** At
13d60 74 65 6d 70 74 20 74 6f 20 72 65 6c 65 61 73 65  tempt to release
13d70 20 6d 65 6d 6f 72 79 20 63 75 72 72 65 6e 74 6c   memory currentl
13d80 79 20 68 65 6c 64 20 62 75 74 20 6e 6f 74 20 61  y held but not a
13d90 63 74 75 61 6c 6c 79 20 72 65 71 75 69 72 65 64  ctually required
13da0 2e 0a 2a 2a 20 54 68 65 20 69 6e 74 65 67 65 72  ..** The integer
13db0 20 4e 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72   N is the number
13dc0 20 6f 66 20 62 79 74 65 73 20 77 65 20 61 72 65   of bytes we are
13dd0 20 74 72 79 69 6e 67 20 74 6f 20 72 65 6c 65 61   trying to relea
13de0 73 65 2e 20 20 54 68 65 20 0a 2a 2a 20 72 65 74  se.  The .** ret
13df0 75 72 6e 20 76 61 6c 75 65 20 69 73 20 74 68 65  urn value is the
13e00 20 61 6d 6f 75 6e 74 20 6f 66 20 6d 65 6d 6f 72   amount of memor
13e10 79 20 61 63 74 75 61 6c 6c 79 20 72 65 6c 65 61  y actually relea
13e20 73 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  sed..*/.static i
13e30 6e 74 20 74 65 73 74 5f 72 65 6c 65 61 73 65 5f  nt test_release_
13e40 6d 65 6d 6f 72 79 28 0a 20 20 76 6f 69 64 20 2a  memory(.  void *
13e50 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
13e60 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
13e70 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
13e80 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
13e90 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 20 21 64  objv[].){.#if !d
13ea0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
13eb0 49 54 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45  IT_MEMORY_MANAGE
13ec0 4d 45 4e 54 29 20 26 26 20 21 64 65 66 69 6e 65  MENT) && !define
13ed0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 49  d(SQLITE_OMIT_DI
13ee0 53 4b 49 4f 29 0a 20 20 69 6e 74 20 4e 3b 0a 20  SKIO).  int N;. 
13ef0 20 69 6e 74 20 61 6d 74 3b 0a 20 20 69 66 28 20   int amt;.  if( 
13f00 6f 62 6a 63 21 3d 31 20 26 26 20 6f 62 6a 63 21  objc!=1 && objc!
13f10 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72  =2 ){.    Tcl_Wr
13f20 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72  ongNumArgs(inter
13f30 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 3f 4e 3f  p, 1, objv, "?N?
13f40 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  ");.    return T
13f50 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
13f60 69 66 28 20 6f 62 6a 63 3d 3d 32 20 29 7b 0a 20  if( objc==2 ){. 
13f70 20 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e     if( Tcl_GetIn
13f80 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
13f90 20 6f 62 6a 76 5b 31 5d 2c 20 26 4e 29 20 29 20   objv[1], &N) ) 
13fa0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
13fb0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 4e  ;.  }else{.    N
13fc0 20 3d 20 2d 31 3b 0a 20 20 7d 0a 20 20 61 6d 74   = -1;.  }.  amt
13fd0 20 3d 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61   = sqlite3_relea
13fe0 73 65 5f 6d 65 6d 6f 72 79 28 4e 29 3b 0a 20 20  se_memory(N);.  
13ff0 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
14000 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
14010 49 6e 74 4f 62 6a 28 61 6d 74 29 29 3b 0a 23 65  IntObj(amt));.#e
14020 6e 64 69 66 0a 20 20 72 65 74 75 72 6e 20 54 43  ndif.  return TC
14030 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
14040 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 73  sage:  sqlite3_s
14050 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 20 3f  oft_heap_limit ?
14060 4e 3f 0a 2a 2a 0a 2a 2a 20 51 75 65 72 79 20 6f  N?.**.** Query o
14070 72 20 73 65 74 20 74 68 65 20 73 6f 66 74 20 68  r set the soft h
14080 65 61 70 20 6c 69 6d 69 74 20 66 6f 72 20 74 68  eap limit for th
14090 65 20 63 75 72 72 65 6e 74 20 74 68 72 65 61 64  e current thread
140a0 2e 20 20 54 68 65 0a 2a 2a 20 6c 69 6d 69 74 20  .  The.** limit 
140b0 69 73 20 6f 6e 6c 79 20 63 68 61 6e 67 65 64 20  is only changed 
140c0 69 66 20 74 68 65 20 4e 20 69 73 20 70 72 65 73  if the N is pres
140d0 65 6e 74 2e 20 20 54 68 65 20 70 72 65 76 69 6f  ent.  The previo
140e0 75 73 20 6c 69 6d 69 74 0a 2a 2a 20 69 73 20 72  us limit.** is r
140f0 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a 73 74 61 74  eturned..*/.stat
14100 69 63 20 69 6e 74 20 74 65 73 74 5f 73 6f 66 74  ic int test_soft
14110 5f 68 65 61 70 5f 6c 69 6d 69 74 28 0a 20 20 76  _heap_limit(.  v
14120 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
14130 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
14140 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
14150 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
14160 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23  ONST objv[].){.#
14170 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
14180 54 45 5f 4f 4d 49 54 5f 4d 45 4d 4f 52 59 5f 4d  TE_OMIT_MEMORY_M
14190 41 4e 41 47 45 4d 45 4e 54 29 20 26 26 20 21 64  ANAGEMENT) && !d
141a0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
141b0 49 54 5f 44 49 53 4b 49 4f 29 0a 20 20 69 6e 74  IT_DISKIO).  int
141c0 20 61 6d 74 3b 0a 20 20 69 66 28 20 6f 62 6a 63   amt;.  if( objc
141d0 21 3d 31 20 26 26 20 6f 62 6a 63 21 3d 32 20 29  !=1 && objc!=2 )
141e0 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e  {.    Tcl_WrongN
141f0 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31  umArgs(interp, 1
14200 2c 20 6f 62 6a 76 2c 20 22 3f 4e 3f 22 29 3b 0a  , objv, "?N?");.
14210 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
14220 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 61 6d 74 20  RROR;.  }.  amt 
14230 3d 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 44  = sqlite3ThreadD
14240 61 74 61 28 29 2d 3e 6e 53 6f 66 74 48 65 61 70  ata()->nSoftHeap
14250 4c 69 6d 69 74 3b 0a 20 20 69 66 28 20 6f 62 6a  Limit;.  if( obj
14260 63 3d 3d 32 20 29 7b 0a 20 20 20 20 69 6e 74 20  c==2 ){.    int 
14270 4e 3b 0a 20 20 20 20 69 66 28 20 54 63 6c 5f 47  N;.    if( Tcl_G
14280 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
14290 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20 26 4e  erp, objv[1], &N
142a0 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
142b0 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74 65  RROR;.    sqlite
142c0 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69  3_soft_heap_limi
142d0 74 28 4e 29 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f  t(N);.  }.  Tcl_
142e0 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
142f0 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f  erp, Tcl_NewIntO
14300 62 6a 28 61 6d 74 29 29 3b 0a 23 65 6e 64 69 66  bj(amt));.#endif
14310 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
14320 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  ;.}../*.** This 
14330 72 6f 75 74 69 6e 65 20 73 65 74 73 20 65 6e 74  routine sets ent
14340 72 69 65 73 20 69 6e 20 74 68 65 20 67 6c 6f 62  ries in the glob
14350 61 6c 20 3a 3a 73 71 6c 69 74 65 5f 6f 70 74 69  al ::sqlite_opti
14360 6f 6e 73 28 29 20 61 72 72 61 79 20 76 61 72 69  ons() array vari
14370 61 62 6c 65 0a 2a 2a 20 61 63 63 6f 72 64 69 6e  able.** accordin
14380 67 20 74 6f 20 74 68 65 20 63 6f 6d 70 69 6c 65  g to the compile
14390 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74  -time configurat
143a0 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 62  ion of the datab
143b0 61 73 65 2e 20 20 54 65 73 74 0a 2a 2a 20 70 72  ase.  Test.** pr
143c0 6f 63 65 64 75 72 65 73 20 75 73 65 20 74 68 69  ocedures use thi
143d0 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77  s to determine w
143e0 68 65 6e 20 74 65 73 74 73 20 73 68 6f 75 6c 64  hen tests should
143f0 20 62 65 20 6f 6d 69 74 74 65 64 2e 0a 2a 2f 0a   be omitted..*/.
14400 73 74 61 74 69 63 20 76 6f 69 64 20 73 65 74 5f  static void set_
14410 6f 70 74 69 6f 6e 73 28 54 63 6c 5f 49 6e 74 65  options(Tcl_Inte
14420 72 70 20 2a 69 6e 74 65 72 70 29 7b 0a 23 69 66  rp *interp){.#if
14430 64 65 66 20 53 51 4c 49 54 45 5f 33 32 42 49 54  def SQLITE_32BIT
14440 5f 52 4f 57 49 44 0a 20 20 54 63 6c 5f 53 65 74  _ROWID.  Tcl_Set
14450 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
14460 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
14470 72 6f 77 69 64 33 32 22 2c 20 22 31 22 2c 20 54  rowid32", "1", T
14480 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
14490 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
144a0 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
144b0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
144c0 72 6f 77 69 64 33 32 22 2c 20 22 30 22 2c 20 54  rowid32", "0", T
144d0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
144e0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
144f0 53 51 4c 49 54 45 5f 43 41 53 45 5f 53 45 4e 53  SQLITE_CASE_SENS
14500 49 54 49 56 45 5f 4c 49 4b 45 0a 20 20 54 63 6c  ITIVE_LIKE.  Tcl
14510 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
14520 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
14530 22 2c 22 63 61 73 65 73 65 6e 73 69 74 69 76 65  ","casesensitive
14540 6c 69 6b 65 22 2c 22 31 22 2c 54 43 4c 5f 47 4c  like","1",TCL_GL
14550 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
14560 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
14570 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
14580 6f 70 74 69 6f 6e 73 22 2c 22 63 61 73 65 73 65  options","casese
14590 6e 73 69 74 69 76 65 6c 69 6b 65 22 2c 22 30 22  nsitivelike","0"
145a0 2c 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59  ,TCL_GLOBAL_ONLY
145b0 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
145c0 66 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45  f SQLITE_DISABLE
145d0 5f 44 49 52 53 59 4e 43 0a 20 20 54 63 6c 5f 53  _DIRSYNC.  Tcl_S
145e0 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
145f0 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
14600 20 22 64 69 72 73 79 6e 63 22 2c 20 22 30 22 2c   "dirsync", "0",
14610 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
14620 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
14630 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
14640 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
14650 20 22 64 69 72 73 79 6e 63 22 2c 20 22 31 22 2c   "dirsync", "1",
14660 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
14670 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
14680 66 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45  f SQLITE_DISABLE
14690 5f 4c 46 53 0a 20 20 54 63 6c 5f 53 65 74 56 61  _LFS.  Tcl_SetVa
146a0 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
146b0 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 6c 66  te_options", "lf
146c0 73 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  s", "0", TCL_GLO
146d0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
146e0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
146f0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
14700 70 74 69 6f 6e 73 22 2c 20 22 6c 66 73 22 2c 20  ptions", "lfs", 
14710 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
14720 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
14730 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
14740 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 54  T_ALTERTABLE.  T
14750 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
14760 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
14770 6e 73 22 2c 20 22 61 6c 74 65 72 74 61 62 6c 65  ns", "altertable
14780 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
14790 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
147a0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
147b0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
147c0 74 69 6f 6e 73 22 2c 20 22 61 6c 74 65 72 74 61  tions", "alterta
147d0 62 6c 65 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47  ble", "1", TCL_G
147e0 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
147f0 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
14800 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 0a  TE_OMIT_ANALYZE.
14810 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
14820 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
14830 74 69 6f 6e 73 22 2c 20 22 61 6e 61 6c 79 7a 65  tions", "analyze
14840 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
14850 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
14860 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
14870 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
14880 74 69 6f 6e 73 22 2c 20 22 61 6e 61 6c 79 7a 65  tions", "analyze
14890 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
148a0 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
148b0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
148c0 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49  OMIT_AUTHORIZATI
148d0 4f 4e 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  ON.  Tcl_SetVar2
148e0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
148f0 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 61 75 74 68  _options", "auth
14900 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
14910 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
14920 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
14930 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
14940 74 69 6f 6e 73 22 2c 20 22 61 75 74 68 22 2c 20  tions", "auth", 
14950 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
14960 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
14970 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
14980 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
14990 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
149a0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
149b0 74 69 6f 6e 73 22 2c 20 22 61 75 74 6f 69 6e 63  tions", "autoinc
149c0 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
149d0 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
149e0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
149f0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
14a00 74 69 6f 6e 73 22 2c 20 22 61 75 74 6f 69 6e 63  tions", "autoinc
14a10 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
14a20 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
14a30 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
14a40 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a  OMIT_AUTOVACUUM.
14a50 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
14a60 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
14a70 74 69 6f 6e 73 22 2c 20 22 61 75 74 6f 76 61 63  tions", "autovac
14a80 75 75 6d 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  uum", "0", TCL_G
14a90 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
14aa0 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
14ab0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
14ac0 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 61 75 74 6f  _options", "auto
14ad0 76 61 63 75 75 6d 22 2c 20 22 31 22 2c 20 54 43  vacuum", "1", TC
14ae0 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
14af0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
14b00 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
14b10 20 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64   */.#if !defined
14b20 28 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f  (SQLITE_DEFAULT_
14b30 41 55 54 4f 56 41 43 55 55 4d 29 20 7c 7c 20 53  AUTOVACUUM) || S
14b40 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 41 55  QLITE_DEFAULT_AU
14b50 54 4f 56 41 43 55 55 4d 3d 3d 30 0a 20 20 54 63  TOVACUUM==0.  Tc
14b60 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
14b70 2c 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73  ,"sqlite_options
14b80 22 2c 22 64 65 66 61 75 6c 74 5f 61 75 74 6f 76  ","default_autov
14b90 61 63 75 75 6d 22 2c 22 30 22 2c 54 43 4c 5f 47  acuum","0",TCL_G
14ba0 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
14bb0 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
14bc0 28 69 6e 74 65 72 70 2c 22 73 71 6c 69 74 65 5f  (interp,"sqlite_
14bd0 6f 70 74 69 6f 6e 73 22 2c 22 64 65 66 61 75 6c  options","defaul
14be0 74 5f 61 75 74 6f 76 61 63 75 75 6d 22 2c 22 31  t_autovacuum","1
14bf0 22 2c 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  ",TCL_GLOBAL_ONL
14c00 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  Y);.#endif..#ifd
14c10 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
14c20 45 54 57 45 45 4e 5f 4f 50 54 49 4d 49 5a 41 54  ETWEEN_OPTIMIZAT
14c30 49 4f 4e 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  ION.  Tcl_SetVar
14c40 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
14c50 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 62 65 74  e_options", "bet
14c60 77 65 65 6e 5f 6f 70 74 22 2c 20 22 30 22 2c 20  ween_opt", "0", 
14c70 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
14c80 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
14c90 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
14ca0 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
14cb0 22 62 65 74 77 65 65 6e 5f 6f 70 74 22 2c 20 22  "between_opt", "
14cc0 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
14cd0 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
14ce0 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
14cf0 5f 42 4c 4f 42 5f 4c 49 54 45 52 41 4c 0a 20 20  _BLOB_LITERAL.  
14d00 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
14d10 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
14d20 6f 6e 73 22 2c 20 22 62 6c 6f 62 6c 69 74 22 2c  ons", "bloblit",
14d30 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
14d40 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
14d50 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
14d60 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
14d70 6f 6e 73 22 2c 20 22 62 6c 6f 62 6c 69 74 22 2c  ons", "bloblit",
14d80 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
14d90 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
14da0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
14db0 49 54 5f 43 41 53 54 0a 20 20 54 63 6c 5f 53 65  IT_CAST.  Tcl_Se
14dc0 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
14dd0 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
14de0 22 63 61 73 74 22 2c 20 22 30 22 2c 20 54 43 4c  "cast", "0", TCL
14df0 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
14e00 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
14e10 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
14e20 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63 61  te_options", "ca
14e30 73 74 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  st", "1", TCL_GL
14e40 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
14e50 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
14e60 45 5f 4f 4d 49 54 5f 43 48 45 43 4b 0a 20 20 54  E_OMIT_CHECK.  T
14e70 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
14e80 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
14e90 6e 73 22 2c 20 22 63 68 65 63 6b 22 2c 20 22 30  ns", "check", "0
14ea0 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
14eb0 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
14ec0 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
14ed0 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
14ee0 22 2c 20 22 63 68 65 63 6b 22 2c 20 22 31 22 2c  ", "check", "1",
14ef0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
14f00 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
14f10 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f  f SQLITE_OMIT_CO
14f20 4d 50 4c 45 54 45 0a 20 20 54 63 6c 5f 53 65 74  MPLETE.  Tcl_Set
14f30 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
14f40 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
14f50 63 6f 6d 70 6c 65 74 65 22 2c 20 22 30 22 2c 20  complete", "0", 
14f60 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
14f70 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
14f80 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
14f90 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
14fa0 22 63 6f 6d 70 6c 65 74 65 22 2c 20 22 31 22 2c  "complete", "1",
14fb0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
14fc0 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
14fd0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f  f SQLITE_OMIT_CO
14fe0 4d 50 4f 55 4e 44 5f 53 45 4c 45 43 54 0a 20 20  MPOUND_SELECT.  
14ff0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
15000 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
15010 6f 6e 73 22 2c 20 22 63 6f 6d 70 6f 75 6e 64 22  ons", "compound"
15020 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
15030 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
15040 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
15050 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
15060 69 6f 6e 73 22 2c 20 22 63 6f 6d 70 6f 75 6e 64  ions", "compound
15070 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
15080 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
15090 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
150a0 4f 4d 49 54 5f 43 4f 4e 46 4c 49 43 54 5f 43 4c  OMIT_CONFLICT_CL
150b0 41 55 53 45 0a 20 20 54 63 6c 5f 53 65 74 56 61  AUSE.  Tcl_SetVa
150c0 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
150d0 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63 6f  te_options", "co
150e0 6e 66 6c 69 63 74 22 2c 20 22 30 22 2c 20 54 43  nflict", "0", TC
150f0 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
15100 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
15110 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
15120 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63  ite_options", "c
15130 6f 6e 66 6c 69 63 74 22 2c 20 22 31 22 2c 20 54  onflict", "1", T
15140 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
15150 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 4f 53 5f  .#endif..#if OS_
15160 55 4e 49 58 0a 20 20 54 63 6c 5f 53 65 74 56 61  UNIX.  Tcl_SetVa
15170 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
15180 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63 72  te_options", "cr
15190 61 73 68 74 65 73 74 22 2c 20 22 31 22 2c 20 54  ashtest", "1", T
151a0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
151b0 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
151c0 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
151d0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
151e0 63 72 61 73 68 74 65 73 74 22 2c 20 22 30 22 2c  crashtest", "0",
151f0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
15200 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
15210 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 41  f SQLITE_OMIT_DA
15220 54 45 54 49 4d 45 5f 46 55 4e 43 53 0a 20 20 54  TETIME_FUNCS.  T
15230 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
15240 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
15250 6e 73 22 2c 20 22 64 61 74 65 74 69 6d 65 22 2c  ns", "datetime",
15260 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
15270 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
15280 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
15290 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
152a0 6f 6e 73 22 2c 20 22 64 61 74 65 74 69 6d 65 22  ons", "datetime"
152b0 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
152c0 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
152d0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
152e0 4d 49 54 5f 44 49 53 4b 49 4f 0a 20 20 54 63 6c  MIT_DISKIO.  Tcl
152f0 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
15300 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
15310 22 2c 20 22 64 69 73 6b 69 6f 22 2c 20 22 30 22  ", "diskio", "0"
15320 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
15330 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
15340 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
15350 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
15360 2c 20 22 64 69 73 6b 69 6f 22 2c 20 22 31 22 2c  , "diskio", "1",
15370 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
15380 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
15390 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
153a0 50 4c 41 49 4e 0a 20 20 54 63 6c 5f 53 65 74 56  PLAIN.  Tcl_SetV
153b0 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
153c0 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 65  ite_options", "e
153d0 78 70 6c 61 69 6e 22 2c 20 22 30 22 2c 20 54 43  xplain", "0", TC
153e0 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
153f0 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
15400 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
15410 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 65  ite_options", "e
15420 78 70 6c 61 69 6e 22 2c 20 22 31 22 2c 20 54 43  xplain", "1", TC
15430 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
15440 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
15450 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
15460 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 54 63 6c 5f  ING_POINT.  Tcl_
15470 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
15480 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
15490 2c 20 22 66 6c 6f 61 74 69 6e 67 70 6f 69 6e 74  , "floatingpoint
154a0 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
154b0 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
154c0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
154d0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
154e0 74 69 6f 6e 73 22 2c 20 22 66 6c 6f 61 74 69 6e  tions", "floatin
154f0 67 70 6f 69 6e 74 22 2c 20 22 31 22 2c 20 54 43  gpoint", "1", TC
15500 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
15510 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
15520 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
15530 47 4e 5f 4b 45 59 0a 20 20 54 63 6c 5f 53 65 74  GN_KEY.  Tcl_Set
15540 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
15550 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
15560 66 6f 72 65 69 67 6e 6b 65 79 22 2c 20 22 30 22  foreignkey", "0"
15570 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
15580 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
15590 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
155a0 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
155b0 2c 20 22 66 6f 72 65 69 67 6e 6b 65 79 22 2c 20  , "foreignkey", 
155c0 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
155d0 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
155e0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
155f0 54 5f 47 4c 4f 42 41 4c 52 45 43 4f 56 45 52 0a  T_GLOBALRECOVER.
15600 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
15610 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
15620 74 69 6f 6e 73 22 2c 20 22 67 6c 6f 62 61 6c 72  tions", "globalr
15630 65 63 6f 76 65 72 22 2c 20 22 30 22 2c 20 54 43  ecover", "0", TC
15640 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
15650 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
15660 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
15670 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 67  ite_options", "g
15680 6c 6f 62 61 6c 72 65 63 6f 76 65 72 22 2c 20 22  lobalrecover", "
15690 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
156a0 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
156b0 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
156c0 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
156d0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
156e0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
156f0 70 74 69 6f 6e 73 22 2c 20 22 69 6e 74 65 67 72  ptions", "integr
15700 69 74 79 63 6b 22 2c 20 22 30 22 2c 20 54 43 4c  ityck", "0", TCL
15710 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
15720 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
15730 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
15740 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 69 6e  te_options", "in
15750 74 65 67 72 69 74 79 63 6b 22 2c 20 22 31 22 2c  tegrityck", "1",
15760 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
15770 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
15780 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 49  f SQLITE_OMIT_LI
15790 4b 45 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 0a  KE_OPTIMIZATION.
157a0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
157b0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
157c0 74 69 6f 6e 73 22 2c 20 22 6c 69 6b 65 5f 6f 70  tions", "like_op
157d0 74 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  t", "0", TCL_GLO
157e0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
157f0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
15800 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
15810 70 74 69 6f 6e 73 22 2c 20 22 6c 69 6b 65 5f 6f  ptions", "like_o
15820 70 74 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  pt", "1", TCL_GL
15830 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
15840 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
15850 45 5f 4f 4d 49 54 5f 4d 45 4d 4f 52 59 44 42 0a  E_OMIT_MEMORYDB.
15860 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
15870 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
15880 74 69 6f 6e 73 22 2c 20 22 6d 65 6d 6f 72 79 64  tions", "memoryd
15890 62 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  b", "0", TCL_GLO
158a0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
158b0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
158c0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
158d0 70 74 69 6f 6e 73 22 2c 20 22 6d 65 6d 6f 72 79  ptions", "memory
158e0 64 62 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  db", "1", TCL_GL
158f0 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
15900 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
15910 45 5f 4f 4d 49 54 5f 4d 45 4d 4f 52 59 5f 4d 41  E_OMIT_MEMORY_MA
15920 4e 41 47 45 4d 45 4e 54 0a 20 20 54 63 6c 5f 53  NAGEMENT.  Tcl_S
15930 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
15940 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
15950 20 22 6d 65 6d 6f 72 79 6d 61 6e 61 67 65 22 2c   "memorymanage",
15960 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
15970 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
15980 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
15990 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
159a0 6f 6e 73 22 2c 20 22 6d 65 6d 6f 72 79 6d 61 6e  ons", "memoryman
159b0 61 67 65 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47  age", "1", TCL_G
159c0 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
159d0 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
159e0 54 45 5f 4f 4d 49 54 5f 4f 52 5f 4f 50 54 49 4d  TE_OMIT_OR_OPTIM
159f0 49 5a 41 54 49 4f 4e 0a 20 20 54 63 6c 5f 53 65  IZATION.  Tcl_Se
15a00 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
15a10 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
15a20 22 6f 72 5f 6f 70 74 22 2c 20 22 30 22 2c 20 54  "or_opt", "0", T
15a30 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
15a40 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
15a50 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
15a60 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
15a70 6f 72 5f 6f 70 74 22 2c 20 22 31 22 2c 20 54 43  or_opt", "1", TC
15a80 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
15a90 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
15aa0 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
15ab0 5f 50 52 41 47 4d 41 53 0a 20 20 54 63 6c 5f 53  _PRAGMAS.  Tcl_S
15ac0 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
15ad0 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
15ae0 20 22 70 61 67 65 72 5f 70 72 61 67 6d 61 73 22   "pager_pragmas"
15af0 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
15b00 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
15b10 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
15b20 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
15b30 69 6f 6e 73 22 2c 20 22 70 61 67 65 72 5f 70 72  ions", "pager_pr
15b40 61 67 6d 61 73 22 2c 20 22 31 22 2c 20 54 43 4c  agmas", "1", TCL
15b50 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
15b60 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
15b70 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 52 53 45 52  LITE_OMIT_PARSER
15b80 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
15b90 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
15ba0 70 74 69 6f 6e 73 22 2c 20 22 70 61 72 73 65 72  ptions", "parser
15bb0 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
15bc0 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
15bd0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
15be0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
15bf0 74 69 6f 6e 73 22 2c 20 22 70 61 72 73 65 72 22  tions", "parser"
15c00 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
15c10 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
15c20 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
15c30 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 29  ITE_OMIT_PRAGMA)
15c40 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
15c50 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41  TE_OMIT_FLAG_PRA
15c60 47 4d 41 53 29 0a 20 20 54 63 6c 5f 53 65 74 56  GMAS).  Tcl_SetV
15c70 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
15c80 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 70  ite_options", "p
15c90 72 61 67 6d 61 22 2c 20 22 30 22 2c 20 54 43 4c  ragma", "0", TCL
15ca0 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 20  _GLOBAL_ONLY);. 
15cb0 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
15cc0 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
15cd0 69 6f 6e 73 22 2c 20 22 69 6e 74 65 67 72 69 74  ions", "integrit
15ce0 79 63 6b 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  yck", "0", TCL_G
15cf0 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
15d00 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
15d10 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
15d20 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 70 72 61 67  _options", "prag
15d30 6d 61 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  ma", "1", TCL_GL
15d40 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
15d50 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
15d60 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f  E_OMIT_PROGRESS_
15d70 43 41 4c 4c 42 41 43 4b 0a 20 20 54 63 6c 5f 53  CALLBACK.  Tcl_S
15d80 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
15d90 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
15da0 20 22 70 72 6f 67 72 65 73 73 22 2c 20 22 30 22   "progress", "0"
15db0 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
15dc0 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
15dd0 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
15de0 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
15df0 2c 20 22 70 72 6f 67 72 65 73 73 22 2c 20 22 31  , "progress", "1
15e00 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
15e10 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
15e20 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
15e30 45 5f 52 45 44 45 46 5f 49 4f 0a 20 20 54 63 6c  E_REDEF_IO.  Tcl
15e40 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
15e50 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
15e60 22 2c 20 22 72 65 64 65 66 69 6f 22 2c 20 22 31  ", "redefio", "1
15e70 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
15e80 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
15e90 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
15ea0 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
15eb0 22 2c 20 22 72 65 64 65 66 69 6f 22 2c 20 22 30  ", "redefio", "0
15ec0 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
15ed0 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
15ee0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
15ef0 52 45 49 4e 44 45 58 0a 20 20 54 63 6c 5f 53 65  REINDEX.  Tcl_Se
15f00 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
15f10 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
15f20 22 72 65 69 6e 64 65 78 22 2c 20 22 30 22 2c 20  "reindex", "0", 
15f30 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
15f40 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
15f50 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
15f60 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
15f70 22 72 65 69 6e 64 65 78 22 2c 20 22 31 22 2c 20  "reindex", "1", 
15f80 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
15f90 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
15fa0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48   SQLITE_OMIT_SCH
15fb0 45 4d 41 5f 50 52 41 47 4d 41 53 0a 20 20 54 63  EMA_PRAGMAS.  Tc
15fc0 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
15fd0 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
15fe0 73 22 2c 20 22 73 63 68 65 6d 61 5f 70 72 61 67  s", "schema_prag
15ff0 6d 61 73 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  mas", "0", TCL_G
16000 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
16010 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
16020 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
16030 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 73 63 68 65  _options", "sche
16040 6d 61 5f 70 72 61 67 6d 61 73 22 2c 20 22 31 22  ma_pragmas", "1"
16050 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
16060 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  Y);.#endif..#ifd
16070 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
16080 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52  CHEMA_VERSION_PR
16090 41 47 4d 41 53 0a 20 20 54 63 6c 5f 53 65 74 56  AGMAS.  Tcl_SetV
160a0 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
160b0 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 73  ite_options", "s
160c0 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 22 2c 20  chema_version", 
160d0 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
160e0 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
160f0 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
16100 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
16110 6e 73 22 2c 20 22 73 63 68 65 6d 61 5f 76 65 72  ns", "schema_ver
16120 73 69 6f 6e 22 2c 20 22 31 22 2c 20 54 43 4c 5f  sion", "1", TCL_
16130 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
16140 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
16150 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
16160 43 41 43 48 45 0a 20 20 54 63 6c 5f 53 65 74 56  CACHE.  Tcl_SetV
16170 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
16180 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 73  ite_options", "s
16190 68 61 72 65 64 5f 63 61 63 68 65 22 2c 20 22 30  hared_cache", "0
161a0 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
161b0 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
161c0 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
161d0 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
161e0 22 2c 20 22 73 68 61 72 65 64 5f 63 61 63 68 65  ", "shared_cache
161f0 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
16200 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
16210 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
16220 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 0a 20 20  OMIT_SUBQUERY.  
16230 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
16240 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
16250 6f 6e 73 22 2c 20 22 73 75 62 71 75 65 72 79 22  ons", "subquery"
16260 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
16270 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
16280 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
16290 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
162a0 69 6f 6e 73 22 2c 20 22 73 75 62 71 75 65 72 79  ions", "subquery
162b0 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
162c0 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
162d0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
162e0 4f 4d 49 54 5f 54 43 4c 5f 56 41 52 49 41 42 4c  OMIT_TCL_VARIABL
162f0 45 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  E.  Tcl_SetVar2(
16300 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
16310 6f 70 74 69 6f 6e 73 22 2c 20 22 74 63 6c 76 61  options", "tclva
16320 72 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  r", "0", TCL_GLO
16330 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
16340 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
16350 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
16360 70 74 69 6f 6e 73 22 2c 20 22 74 63 6c 76 61 72  ptions", "tclvar
16370 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
16380 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
16390 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 54 48  ..#if defined(TH
163a0 52 45 41 44 53 41 46 45 29 20 26 26 20 54 48 52  READSAFE) && THR
163b0 45 41 44 53 41 46 45 0a 20 20 54 63 6c 5f 53 65  EADSAFE.  Tcl_Se
163c0 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
163d0 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
163e0 22 74 68 72 65 61 64 73 61 66 65 22 2c 20 22 31  "threadsafe", "1
163f0 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
16400 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
16410 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
16420 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
16430 22 2c 20 22 74 68 72 65 61 64 73 61 66 65 22 2c  ", "threadsafe",
16440 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
16450 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
16460 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
16470 49 54 5f 54 52 41 43 45 0a 20 20 54 63 6c 5f 53  IT_TRACE.  Tcl_S
16480 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
16490 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
164a0 20 22 74 72 61 63 65 22 2c 20 22 30 22 2c 20 54   "trace", "0", T
164b0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
164c0 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
164d0 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
164e0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
164f0 74 72 61 63 65 22 2c 20 22 31 22 2c 20 54 43 4c  trace", "1", TCL
16500 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
16510 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
16520 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
16530 52 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  R.  Tcl_SetVar2(
16540 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
16550 6f 70 74 69 6f 6e 73 22 2c 20 22 74 72 69 67 67  options", "trigg
16560 65 72 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  er", "0", TCL_GL
16570 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
16580 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
16590 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
165a0 6f 70 74 69 6f 6e 73 22 2c 20 22 74 72 69 67 67  options", "trigg
165b0 65 72 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  er", "1", TCL_GL
165c0 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
165d0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
165e0 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 20 20  E_OMIT_TEMPDB.  
165f0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
16600 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
16610 6f 6e 73 22 2c 20 22 74 65 6d 70 64 62 22 2c 20  ons", "tempdb", 
16620 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
16630 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
16640 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
16650 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
16660 6e 73 22 2c 20 22 74 65 6d 70 64 62 22 2c 20 22  ns", "tempdb", "
16670 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
16680 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
16690 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
166a0 5f 55 54 46 31 36 0a 20 20 54 63 6c 5f 53 65 74  _UTF16.  Tcl_Set
166b0 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
166c0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
166d0 75 74 66 31 36 22 2c 20 22 30 22 2c 20 54 43 4c  utf16", "0", TCL
166e0 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
166f0 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
16700 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
16710 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 75 74  te_options", "ut
16720 66 31 36 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47  f16", "1", TCL_G
16730 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
16740 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
16750 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 0a 20  TE_OMIT_VACUUM. 
16760 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
16770 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
16780 69 6f 6e 73 22 2c 20 22 76 61 63 75 75 6d 22 2c  ions", "vacuum",
16790 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
167a0 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
167b0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
167c0 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
167d0 6f 6e 73 22 2c 20 22 76 61 63 75 75 6d 22 2c 20  ons", "vacuum", 
167e0 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
167f0 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
16800 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
16810 54 5f 56 49 45 57 0a 20 20 54 63 6c 5f 53 65 74  T_VIEW.  Tcl_Set
16820 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
16830 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
16840 76 69 65 77 22 2c 20 22 30 22 2c 20 54 43 4c 5f  view", "0", TCL_
16850 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
16860 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
16870 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
16880 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 76 69 65  e_options", "vie
16890 77 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  w", "1", TCL_GLO
168a0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
168b0 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73  f.}../*.** Regis
168c0 74 65 72 20 63 6f 6d 6d 61 6e 64 73 20 77 69 74  ter commands wit
168d0 68 20 74 68 65 20 54 43 4c 20 69 6e 74 65 72 70  h the TCL interp
168e0 72 65 74 65 72 2e 0a 2a 2f 0a 69 6e 74 20 53 71  reter..*/.int Sq
168f0 6c 69 74 65 74 65 73 74 31 5f 49 6e 69 74 28 54  litetest1_Init(T
16900 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
16910 70 29 7b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74  p){.  extern int
16920 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
16930 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20  count;.  extern 
16940 69 6e 74 20 73 71 6c 69 74 65 33 5f 69 6e 74 65  int sqlite3_inte
16950 72 72 75 70 74 5f 63 6f 75 6e 74 3b 0a 20 20 65  rrupt_count;.  e
16960 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
16970 33 5f 6f 70 65 6e 5f 66 69 6c 65 5f 63 6f 75 6e  3_open_file_coun
16980 74 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20  t;.  extern int 
16990 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75  sqlite3_sort_cou
169a0 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74  nt;.  extern int
169b0 20 73 71 6c 69 74 65 33 5f 63 75 72 72 65 6e 74   sqlite3_current
169c0 5f 74 69 6d 65 3b 0a 20 20 73 74 61 74 69 63 20  _time;.  static 
169d0 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 63 68  struct {.     ch
169e0 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20 20  ar *zName;.     
169f0 54 63 6c 5f 43 6d 64 50 72 6f 63 20 2a 78 50 72  Tcl_CmdProc *xPr
16a00 6f 63 3b 0a 20 20 7d 20 61 43 6d 64 5b 5d 20 3d  oc;.  } aCmd[] =
16a10 20 7b 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74   {.     { "sqlit
16a20 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 22 2c  e3_mprintf_int",
16a30 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f             (Tcl_
16a40 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33  CmdProc*)sqlite3
16a50 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 20 20 20 20  _mprintf_int    
16a60 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
16a70 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 36 34  e3_mprintf_int64
16a80 22 2c 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f  ",         (Tcl_
16a90 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33  CmdProc*)sqlite3
16aa0 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 36 34 20 20  _mprintf_int64  
16ab0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
16ac0 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72 22 2c  e3_mprintf_str",
16ad0 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f             (Tcl_
16ae0 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33  CmdProc*)sqlite3
16af0 5f 6d 70 72 69 6e 74 66 5f 73 74 72 20 20 20 20  _mprintf_str    
16b00 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
16b10 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72 6f 6e  e3_mprintf_stron
16b20 6c 79 22 2c 20 20 20 20 20 20 20 28 54 63 6c 5f  ly",       (Tcl_
16b30 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33  CmdProc*)sqlite3
16b40 5f 6d 70 72 69 6e 74 66 5f 73 74 72 6f 6e 6c 79  _mprintf_stronly
16b50 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
16b60 65 33 5f 6d 70 72 69 6e 74 66 5f 64 6f 75 62 6c  e3_mprintf_doubl
16b70 65 22 2c 20 20 20 20 20 20 20 20 28 54 63 6c 5f  e",        (Tcl_
16b80 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33  CmdProc*)sqlite3
16b90 5f 6d 70 72 69 6e 74 66 5f 64 6f 75 62 6c 65 20  _mprintf_double 
16ba0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
16bb0 65 33 5f 6d 70 72 69 6e 74 66 5f 73 63 61 6c 65  e3_mprintf_scale
16bc0 64 22 2c 20 20 20 20 20 20 20 20 28 54 63 6c 5f  d",        (Tcl_
16bd0 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33  CmdProc*)sqlite3
16be0 5f 6d 70 72 69 6e 74 66 5f 73 63 61 6c 65 64 20  _mprintf_scaled 
16bf0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
16c00 65 33 5f 6d 70 72 69 6e 74 66 5f 68 65 78 64 6f  e3_mprintf_hexdo
16c10 75 62 6c 65 22 2c 20 20 20 28 54 63 6c 5f 43 6d  uble",   (Tcl_Cm
16c20 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33 5f 6d  dProc*)sqlite3_m
16c30 70 72 69 6e 74 66 5f 68 65 78 64 6f 75 62 6c 65  printf_hexdouble
16c40 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
16c50 65 33 5f 6d 70 72 69 6e 74 66 5f 7a 5f 74 65 73  e3_mprintf_z_tes
16c60 74 22 2c 20 20 20 20 20 20 20 20 28 54 63 6c 5f  t",        (Tcl_
16c70 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 6d 70  CmdProc*)test_mp
16c80 72 69 6e 74 66 5f 7a 20 20 20 20 20 20 20 20 7d  rintf_z        }
16c90 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
16ca0 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  3_last_insert_ro
16cb0 77 69 64 22 2c 20 20 20 20 20 28 54 63 6c 5f 43  wid",     (Tcl_C
16cc0 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 6c 61 73  mdProc*)test_las
16cd0 74 5f 72 6f 77 69 64 20 20 20 20 20 20 20 7d 2c  t_rowid       },
16ce0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
16cf0 5f 65 78 65 63 5f 70 72 69 6e 74 66 22 2c 20 20  _exec_printf",  
16d00 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d           (Tcl_Cm
16d10 64 50 72 6f 63 2a 29 74 65 73 74 5f 65 78 65 63  dProc*)test_exec
16d20 5f 70 72 69 6e 74 66 20 20 20 20 20 20 7d 2c 0a  _printf      },.
16d30 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
16d40 67 65 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74 66  get_table_printf
16d50 22 2c 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64  ",      (Tcl_Cmd
16d60 50 72 6f 63 2a 29 74 65 73 74 5f 67 65 74 5f 74  Proc*)test_get_t
16d70 61 62 6c 65 5f 70 72 69 6e 74 66 20 7d 2c 0a 20  able_printf },. 
16d80 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63      { "sqlite3_c
16d90 6c 6f 73 65 22 2c 20 20 20 20 20 20 20 20 20 20  lose",          
16da0 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
16db0 72 6f 63 2a 29 73 71 6c 69 74 65 5f 74 65 73 74  roc*)sqlite_test
16dc0 5f 63 6c 6f 73 65 20 20 20 20 20 7d 2c 0a 20 20  _close     },.  
16dd0 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 72     { "sqlite3_cr
16de0 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 22 2c 20  eate_function", 
16df0 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72        (Tcl_CmdPr
16e00 6f 63 2a 29 74 65 73 74 5f 63 72 65 61 74 65 5f  oc*)test_create_
16e10 66 75 6e 63 74 69 6f 6e 20 20 7d 2c 0a 20 20 20  function  },.   
16e20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 72 65    { "sqlite3_cre
16e30 61 74 65 5f 61 67 67 72 65 67 61 74 65 22 2c 20  ate_aggregate", 
16e40 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f       (Tcl_CmdPro
16e50 63 2a 29 74 65 73 74 5f 63 72 65 61 74 65 5f 61  c*)test_create_a
16e60 67 67 72 65 67 61 74 65 20 7d 2c 0a 20 20 20 20  ggregate },.    
16e70 20 7b 20 22 73 71 6c 69 74 65 5f 72 65 67 69 73   { "sqlite_regis
16e80 74 65 72 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f  ter_test_functio
16e90 6e 22 2c 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63  n", (Tcl_CmdProc
16ea0 2a 29 74 65 73 74 5f 72 65 67 69 73 74 65 72 5f  *)test_register_
16eb0 66 75 6e 63 20 20 20 20 7d 2c 0a 20 20 20 20 20  func    },.     
16ec0 7b 20 22 73 71 6c 69 74 65 5f 61 62 6f 72 74 22  { "sqlite_abort"
16ed0 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
16ee0 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
16ef0 29 73 71 6c 69 74 65 5f 61 62 6f 72 74 20 20 20  )sqlite_abort   
16f00 20 20 20 20 20 20 20 7d 2c 0a 23 69 66 64 65 66         },.#ifdef
16f10 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
16f20 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 5f  .     { "sqlite_
16f30 6d 61 6c 6c 6f 63 5f 66 61 69 6c 22 2c 20 20 20  malloc_fail",   
16f40 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d           (Tcl_Cm
16f50 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 5f 6d 61  dProc*)sqlite_ma
16f60 6c 6c 6f 63 5f 66 61 69 6c 20 20 20 20 7d 2c 0a  lloc_fail    },.
16f70 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 5f 6d       { "sqlite_m
16f80 61 6c 6c 6f 63 5f 73 74 61 74 22 2c 20 20 20 20  alloc_stat",    
16f90 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64          (Tcl_Cmd
16fa0 50 72 6f 63 2a 29 73 71 6c 69 74 65 5f 6d 61 6c  Proc*)sqlite_mal
16fb0 6c 6f 63 5f 73 74 61 74 20 20 20 20 7d 2c 0a 23  loc_stat    },.#
16fc0 65 6e 64 69 66 0a 20 20 20 20 20 7b 20 22 73 71  endif.     { "sq
16fd0 6c 69 74 65 5f 62 69 6e 64 22 2c 20 20 20 20 20  lite_bind",     
16fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54                (T
16ff0 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74  cl_CmdProc*)test
17000 5f 62 69 6e 64 20 20 20 20 20 20 20 20 20 20 20  _bind           
17010 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 62 72 65    },.     { "bre
17020 61 6b 70 6f 69 6e 74 22 2c 20 20 20 20 20 20 20  akpoint",       
17030 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63               (Tc
17040 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f  l_CmdProc*)test_
17050 62 72 65 61 6b 70 6f 69 6e 74 20 20 20 20 20 20  breakpoint      
17060 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
17070 74 65 33 5f 6b 65 79 22 2c 20 20 20 20 20 20 20  te3_key",       
17080 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c              (Tcl
17090 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 6b  _CmdProc*)test_k
170a0 65 79 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ey              
170b0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
170c0 65 33 5f 72 65 6b 65 79 22 2c 20 20 20 20 20 20  e3_rekey",      
170d0 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f             (Tcl_
170e0 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 72 65  CmdProc*)test_re
170f0 6b 65 79 20 20 20 20 20 20 20 20 20 20 20 20 7d  key            }
17100 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
17110 5f 73 65 74 5f 6d 61 67 69 63 22 2c 20 20 20 20  _set_magic",    
17120 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43            (Tcl_C
17130 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 5f 73  mdProc*)sqlite_s
17140 65 74 5f 6d 61 67 69 63 20 20 20 20 20 20 7d 2c  et_magic      },
17150 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
17160 5f 69 6e 74 65 72 72 75 70 74 22 2c 20 20 20 20  _interrupt",    
17170 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d           (Tcl_Cm
17180 64 50 72 6f 63 2a 29 74 65 73 74 5f 69 6e 74 65  dProc*)test_inte
17190 72 72 75 70 74 20 20 20 20 20 20 20 20 7d 2c 0a  rrupt        },.
171a0 23 69 66 20 30 0a 20 20 20 20 20 7b 20 22 73 71  #if 0.     { "sq
171b0 6c 69 74 65 33 5f 73 6c 65 65 70 22 2c 20 20 20  lite3_sleep",   
171c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54                (T
171d0 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74  cl_CmdProc*)test
171e0 5f 73 6c 65 65 70 20 20 20 20 20 20 20 20 20 20  _sleep          
171f0 20 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 20 20    },.#endif.    
17200 20 7b 20 22 73 71 6c 69 74 65 5f 64 65 6c 65 74   { "sqlite_delet
17210 65 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 20 20 20  e_function",    
17220 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63      (Tcl_CmdProc
17230 2a 29 64 65 6c 65 74 65 5f 66 75 6e 63 74 69 6f  *)delete_functio
17240 6e 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20  n       },.     
17250 7b 20 22 73 71 6c 69 74 65 5f 64 65 6c 65 74 65  { "sqlite_delete
17260 5f 63 6f 6c 6c 61 74 69 6f 6e 22 2c 20 20 20 20  _collation",    
17270 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
17280 29 64 65 6c 65 74 65 5f 63 6f 6c 6c 61 74 69 6f  )delete_collatio
17290 6e 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b  n      },.     {
172a0 20 22 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75   "sqlite3_get_au
172b0 74 6f 63 6f 6d 6d 69 74 22 2c 20 20 20 20 20 20  tocommit",      
172c0 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29    (Tcl_CmdProc*)
172d0 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 20  get_autocommit  
172e0 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20        },.     { 
172f0 22 73 71 6c 69 74 65 33 5f 73 74 61 63 6b 5f 75  "sqlite3_stack_u
17300 73 65 64 22 2c 20 20 20 20 20 20 20 20 20 20 20  sed",           
17310 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74   (Tcl_CmdProc*)t
17320 65 73 74 5f 73 74 61 63 6b 5f 75 73 65 64 20 20  est_stack_used  
17330 20 20 20 20 20 7d 2c 0a 20 20 7d 3b 0a 20 20 73       },.  };.  s
17340 74 61 74 69 63 20 73 74 72 75 63 74 20 7b 0a 20  tatic struct {. 
17350 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
17360 0a 20 20 20 20 20 54 63 6c 5f 4f 62 6a 43 6d 64  .     Tcl_ObjCmd
17370 50 72 6f 63 20 2a 78 50 72 6f 63 3b 0a 20 20 20  Proc *xProc;.   
17380 20 20 76 6f 69 64 20 2a 63 6c 69 65 6e 74 44 61    void *clientDa
17390 74 61 3b 0a 20 20 7d 20 61 4f 62 6a 43 6d 64 5b  ta;.  } aObjCmd[
173a0 5d 20 3d 20 7b 0a 20 20 20 20 20 7b 20 22 73 71  ] = {.     { "sq
173b0 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e  lite3_connection
173c0 5f 70 6f 69 6e 74 65 72 22 2c 20 20 20 20 67 65  _pointer",    ge
173d0 74 5f 73 71 6c 69 74 65 5f 70 6f 69 6e 74 65 72  t_sqlite_pointer
173e0 2c 20 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73  , 0 },.     { "s
173f0 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 22  qlite3_bind_int"
17400 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  ,              t
17410 65 73 74 5f 62 69 6e 64 5f 69 6e 74 2c 20 20 20  est_bind_int,   
17420 20 20 20 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22     0 },.     { "
17430 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
17440 36 34 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  64",            
17450 74 65 73 74 5f 62 69 6e 64 5f 69 6e 74 36 34 2c  test_bind_int64,
17460 20 20 20 20 30 20 7d 2c 0a 20 20 20 20 20 7b 20      0 },.     { 
17470 22 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f  "sqlite3_bind_do
17480 75 62 6c 65 22 2c 20 20 20 20 20 20 20 20 20 20  uble",          
17490 20 74 65 73 74 5f 62 69 6e 64 5f 64 6f 75 62 6c   test_bind_doubl
174a0 65 2c 20 20 20 30 20 7d 2c 0a 20 20 20 20 20 7b  e,   0 },.     {
174b0 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e   "sqlite3_bind_n
174c0 75 6c 6c 22 2c 20 20 20 20 20 20 20 20 20 20 20  ull",           
174d0 20 20 74 65 73 74 5f 62 69 6e 64 5f 6e 75 6c 6c    test_bind_null
174e0 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20       ,0 },.     
174f0 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  { "sqlite3_bind_
17500 74 65 78 74 22 2c 20 20 20 20 20 20 20 20 20 20  text",          
17510 20 20 20 74 65 73 74 5f 62 69 6e 64 5f 74 65 78     test_bind_tex
17520 74 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20  t     ,0 },.    
17530 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64   { "sqlite3_bind
17540 5f 74 65 78 74 31 36 22 2c 20 20 20 20 20 20 20  _text16",       
17550 20 20 20 20 74 65 73 74 5f 62 69 6e 64 5f 74 65      test_bind_te
17560 78 74 31 36 20 20 20 2c 30 20 7d 2c 0a 20 20 20  xt16   ,0 },.   
17570 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e    { "sqlite3_bin
17580 64 5f 62 6c 6f 62 22 2c 20 20 20 20 20 20 20 20  d_blob",        
17590 20 20 20 20 20 74 65 73 74 5f 62 69 6e 64 5f 62       test_bind_b
175a0 6c 6f 62 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20  lob     ,0 },.  
175b0 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69     { "sqlite3_bi
175c0 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f 75  nd_parameter_cou
175d0 6e 74 22 2c 20 20 74 65 73 74 5f 62 69 6e 64 5f  nt",  test_bind_
175e0 70 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 2c  parameter_count,
175f0 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c   0},.     { "sql
17600 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
17610 74 65 72 5f 6e 61 6d 65 22 2c 20 20 20 74 65 73  ter_name",   tes
17620 74 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  t_bind_parameter
17630 5f 6e 61 6d 65 2c 20 20 30 7d 2c 0a 20 20 20 20  _name,  0},.    
17640 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64   { "sqlite3_bind
17650 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78  _parameter_index
17660 22 2c 20 20 74 65 73 74 5f 62 69 6e 64 5f 70 61  ",  test_bind_pa
17670 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 2c 20 30  rameter_index, 0
17680 7d 2c 0a 23 69 66 20 30 0a 20 20 20 20 20 7b 20  },.#if 0.     { 
17690 22 73 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f 62  "sqlite3_clear_b
176a0 69 6e 64 69 6e 67 73 22 2c 20 20 20 20 20 20 20  indings",       
176b0 20 74 65 73 74 5f 63 6c 65 61 72 5f 62 69 6e 64   test_clear_bind
176c0 69 6e 67 73 2c 20 30 7d 2c 0a 23 65 6e 64 69 66  ings, 0},.#endif
176d0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
176e0 5f 65 72 72 63 6f 64 65 22 2c 20 20 20 20 20 20  _errcode",      
176f0 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 65 72           test_er
17700 72 63 6f 64 65 20 20 20 20 20 20 20 2c 30 20 7d  rcode       ,0 }
17710 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
17720 33 5f 65 72 72 6d 73 67 22 2c 20 20 20 20 20 20  3_errmsg",      
17730 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 65            test_e
17740 72 72 6d 73 67 20 20 20 20 20 20 20 20 2c 30 20  rrmsg        ,0 
17750 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
17760 65 33 5f 65 72 72 6d 73 67 31 36 22 2c 20 20 20  e3_errmsg16",   
17770 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f             test_
17780 65 72 72 6d 73 67 31 36 20 20 20 20 20 20 2c 30  errmsg16      ,0
17790 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
177a0 74 65 33 5f 6f 70 65 6e 22 2c 20 20 20 20 20 20  te3_open",      
177b0 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
177c0 5f 6f 70 65 6e 20 20 20 20 20 20 20 20 20 20 2c  _open          ,
177d0 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
177e0 69 74 65 33 5f 6f 70 65 6e 31 36 22 2c 20 20 20  ite3_open16",   
177f0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73               tes
17800 74 5f 6f 70 65 6e 31 36 20 20 20 20 20 20 20 20  t_open16        
17810 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  ,0 },.     { "sq
17820 6c 69 74 65 33 5f 63 6f 6d 70 6c 65 74 65 31 36  lite3_complete16
17830 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 74 65  ",            te
17840 73 74 5f 63 6f 6d 70 6c 65 74 65 31 36 20 20 20  st_complete16   
17850 20 2c 30 20 7d 2c 0a 0a 20 20 20 20 20 7b 20 22   ,0 },..     { "
17860 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 22  sqlite3_prepare"
17870 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
17880 74 65 73 74 5f 70 72 65 70 61 72 65 20 20 20 20  test_prepare    
17890 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20     ,0 },.     { 
178a0 22 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  "sqlite3_prepare
178b0 31 36 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  16",            
178c0 20 74 65 73 74 5f 70 72 65 70 61 72 65 31 36 20   test_prepare16 
178d0 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b      ,0 },.     {
178e0 20 22 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69   "sqlite3_finali
178f0 7a 65 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  ze",            
17900 20 20 74 65 73 74 5f 66 69 6e 61 6c 69 7a 65 20    test_finalize 
17910 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20       ,0 },.     
17920 7b 20 22 73 71 6c 69 74 65 33 5f 72 65 73 65 74  { "sqlite3_reset
17930 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ",              
17940 20 20 20 74 65 73 74 5f 72 65 73 65 74 20 20 20     test_reset   
17950 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20        ,0 },.    
17960 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 78 70 69   { "sqlite3_expi
17970 72 65 64 22 2c 20 20 20 20 20 20 20 20 20 20 20  red",           
17980 20 20 20 20 74 65 73 74 5f 65 78 70 69 72 65 64      test_expired
17990 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20         ,0 },.   
179a0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 74 72 61    { "sqlite3_tra
179b0 6e 73 66 65 72 5f 62 69 6e 64 69 6e 67 73 22 2c  nsfer_bindings",
179c0 20 20 20 20 20 74 65 73 74 5f 74 72 61 6e 73 66       test_transf
179d0 65 72 5f 62 69 6e 64 20 2c 30 20 7d 2c 0a 20 20  er_bind ,0 },.  
179e0 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 68     { "sqlite3_ch
179f0 61 6e 67 65 73 22 2c 20 20 20 20 20 20 20 20 20  anges",         
17a00 20 20 20 20 20 20 74 65 73 74 5f 63 68 61 6e 67        test_chang
17a10 65 73 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20  es       ,0 },. 
17a20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 73      { "sqlite3_s
17a30 74 65 70 22 2c 20 20 20 20 20 20 20 20 20 20 20  tep",           
17a40 20 20 20 20 20 20 20 74 65 73 74 5f 73 74 65 70         test_step
17a50 20 20 20 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a            ,0 },.
17a60 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
17a70 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 22  _release_memory"
17a80 2c 20 20 20 20 20 20 20 20 74 65 73 74 5f 72 65  ,        test_re
17a90 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 2c 20 20 30  lease_memory,  0
17aa0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
17ab0 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d  e3_soft_heap_lim
17ac0 69 74 22 2c 20 20 20 20 20 20 20 74 65 73 74 5f  it",       test_
17ad0 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 2c  soft_heap_limit,
17ae0 20 30 7d 2c 0a 0a 20 20 20 20 20 2f 2a 20 73 71   0},..     /* sq
17af0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 2a 28 29  lite3_column_*()
17b00 20 41 50 49 20 2a 2f 0a 20 20 20 20 20 7b 20 22   API */.     { "
17b10 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63  sqlite3_column_c
17b20 6f 75 6e 74 22 2c 20 20 20 20 20 20 20 20 20 20  ount",          
17b30 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e  test_column_coun
17b40 74 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20  t  ,0 },.     { 
17b50 22 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 63 6f  "sqlite3_data_co
17b60 75 6e 74 22 2c 20 20 20 20 20 20 20 20 20 20 20  unt",           
17b70 20 74 65 73 74 5f 64 61 74 61 5f 63 6f 75 6e 74   test_data_count
17b80 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b      ,0 },.     {
17b90 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   "sqlite3_column
17ba0 5f 74 79 70 65 22 2c 20 20 20 20 20 20 20 20 20  _type",         
17bb0 20 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 74 79    test_column_ty
17bc0 70 65 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20  pe   ,0 },.     
17bd0 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  { "sqlite3_colum
17be0 6e 5f 62 6c 6f 62 22 2c 20 20 20 20 20 20 20 20  n_blob",        
17bf0 20 20 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 62     test_column_b
17c00 6c 6f 62 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20  lob   ,0 },.    
17c10 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75   { "sqlite3_colu
17c20 6d 6e 5f 64 6f 75 62 6c 65 22 2c 20 20 20 20 20  mn_double",     
17c30 20 20 20 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f      test_column_
17c40 64 6f 75 62 6c 65 20 2c 30 20 7d 2c 0a 20 20 20  double ,0 },.   
17c50 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c    { "sqlite3_col
17c60 75 6d 6e 5f 69 6e 74 36 34 22 2c 20 20 20 20 20  umn_int64",     
17c70 20 20 20 20 20 74 65 73 74 5f 63 6f 6c 75 6d 6e       test_column
17c80 5f 69 6e 74 36 34 20 20 2c 30 20 7d 2c 0a 20 20  _int64  ,0 },.  
17c90 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f     { "sqlite3_co
17ca0 6c 75 6d 6e 5f 74 65 78 74 22 2c 20 20 20 20 20  lumn_text",     
17cb0 20 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66 38    test_stmt_utf8
17cc0 2c 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ,  sqlite3_colum
17cd0 6e 5f 74 65 78 74 20 20 20 20 20 20 7d 2c 0a 20  n_text      },. 
17ce0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63      { "sqlite3_c
17cf0 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 22 2c  olumn_decltype",
17d00 20 20 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66     test_stmt_utf
17d10 38 2c 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  8,  sqlite3_colu
17d20 6d 6e 5f 64 65 63 6c 74 79 70 65 20 20 7d 2c 0a  mn_decltype  },.
17d30 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
17d40 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 22 2c 20 20 20  column_name",   
17d50 20 20 20 20 74 65 73 74 5f 73 74 6d 74 5f 75 74      test_stmt_ut
17d60 66 38 2c 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c  f8,  sqlite3_col
17d70 75 6d 6e 5f 6e 61 6d 65 20 20 20 20 20 20 7d 2c  umn_name      },
17d80 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
17d90 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 22 2c 20 20 20  _column_int",   
17da0 20 20 20 20 20 74 65 73 74 5f 73 74 6d 74 5f 69       test_stmt_i
17db0 6e 74 2c 20 20 20 73 71 6c 69 74 65 33 5f 63 6f  nt,   sqlite3_co
17dc0 6c 75 6d 6e 5f 69 6e 74 20 20 20 20 20 20 20 7d  lumn_int       }
17dd0 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
17de0 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 22 2c  3_column_bytes",
17df0 20 20 20 20 20 20 74 65 73 74 5f 73 74 6d 74 5f        test_stmt_
17e00 69 6e 74 2c 20 20 20 73 71 6c 69 74 65 33 5f 63  int,   sqlite3_c
17e10 6f 6c 75 6d 6e 5f 62 79 74 65 73 20 20 20 20 20  olumn_bytes     
17e20 7d 2c 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  },.#ifndef SQLIT
17e30 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 20  E_OMIT_UTF16.   
17e40 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c    { "sqlite3_col
17e50 75 6d 6e 5f 62 79 74 65 73 31 36 22 2c 20 20 20  umn_bytes16",   
17e60 20 74 65 73 74 5f 73 74 6d 74 5f 69 6e 74 2c 20   test_stmt_int, 
17e70 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e    sqlite3_column
17e80 5f 62 79 74 65 73 31 36 20 20 20 7d 2c 0a 20 20  _bytes16   },.  
17e90 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f     { "sqlite3_co
17ea0 6c 75 6d 6e 5f 74 65 78 74 31 36 22 2c 20 20 20  lumn_text16",   
17eb0 20 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66 31    test_stmt_utf1
17ec0 36 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  6, sqlite3_colum
17ed0 6e 5f 74 65 78 74 31 36 20 20 20 20 7d 2c 0a 20  n_text16    },. 
17ee0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63      { "sqlite3_c
17ef0 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 31 36  olumn_decltype16
17f00 22 2c 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66  ", test_stmt_utf
17f10 31 36 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  16, sqlite3_colu
17f20 6d 6e 5f 64 65 63 6c 74 79 70 65 31 36 7d 2c 0a  mn_decltype16},.
17f30 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
17f40 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36 22 2c 20  column_name16", 
17f50 20 20 20 20 74 65 73 74 5f 73 74 6d 74 5f 75 74      test_stmt_ut
17f60 66 31 36 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c  f16, sqlite3_col
17f70 75 6d 6e 5f 6e 61 6d 65 31 36 20 20 20 20 7d 2c  umn_name16    },
17f80 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 7b 20 22  .#endif.     { "
17f90 73 71 6c 69 74 65 33 5f 67 6c 6f 62 61 6c 5f 72  sqlite3_global_r
17fa0 65 63 6f 76 65 72 22 2c 20 20 20 20 74 65 73 74  ecover",    test
17fb0 5f 67 6c 6f 62 61 6c 5f 72 65 63 6f 76 65 72 2c  _global_recover,
17fc0 20 30 20 20 20 7d 2c 0a 0a 20 20 20 20 20 2f 2a   0   },..     /*
17fd0 20 46 75 6e 63 74 69 6f 6e 73 20 66 72 6f 6d 20   Functions from 
17fe0 6f 73 2e 68 20 2a 2f 0a 23 69 66 6e 64 65 66 20  os.h */.#ifndef 
17ff0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 49 53 4b  SQLITE_OMIT_DISK
18000 49 4f 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  IO.     { "sqlit
18010 65 33 4f 73 4f 70 65 6e 52 65 61 64 57 72 69 74  e3OsOpenReadWrit
18020 65 22 2c 74 65 73 74 5f 73 71 6c 69 74 65 33 4f  e",test_sqlite3O
18030 73 4f 70 65 6e 52 65 61 64 57 72 69 74 65 2c 20  sOpenReadWrite, 
18040 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
18050 69 74 65 33 4f 73 43 6c 6f 73 65 22 2c 20 20 20  ite3OsClose",   
18060 20 20 20 20 20 74 65 73 74 5f 73 71 6c 69 74 65       test_sqlite
18070 33 4f 73 43 6c 6f 73 65 2c 20 30 20 7d 2c 0a 20  3OsClose, 0 },. 
18080 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 4f 73      { "sqlite3Os
18090 4c 6f 63 6b 22 2c 20 20 20 20 20 20 20 20 20 74  Lock",         t
180a0 65 73 74 5f 73 71 6c 69 74 65 33 4f 73 4c 6f 63  est_sqlite3OsLoc
180b0 6b 2c 20 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22  k, 0 },.     { "
180c0 73 71 6c 69 74 65 33 4f 73 54 65 6d 70 46 69 6c  sqlite3OsTempFil
180d0 65 4e 61 6d 65 22 2c 20 74 65 73 74 5f 73 71 6c  eName", test_sql
180e0 69 74 65 33 4f 73 54 65 6d 70 46 69 6c 65 4e 61  ite3OsTempFileNa
180f0 6d 65 2c 20 30 20 7d 2c 0a 20 20 20 0a 20 20 20  me, 0 },.   .   
18100 20 20 2f 2a 20 43 75 73 74 6f 6d 20 74 65 73 74    /* Custom test
18110 20 69 6e 74 65 72 66 61 63 65 73 20 2a 2f 0a 20   interfaces */. 
18120 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 4f 73      { "sqlite3Os
18130 55 6e 6c 6f 63 6b 22 2c 20 20 20 20 20 20 20 20  Unlock",        
18140 20 74 65 73 74 5f 73 71 6c 69 74 65 33 4f 73 55   test_sqlite3OsU
18150 6e 6c 6f 63 6b 2c 20 30 20 20 20 20 7d 2c 0a 23  nlock, 0    },.#
18160 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
18170 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
18180 20 20 20 20 20 7b 20 22 61 64 64 5f 74 65 73 74       { "add_test
18190 5f 63 6f 6c 6c 61 74 65 22 2c 20 20 20 20 20 20  _collate",      
181a0 20 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 2c 20    test_collate, 
181b0 30 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a  0            },.
181c0 20 20 20 20 20 7b 20 22 61 64 64 5f 74 65 73 74       { "add_test
181d0 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64 22  _collate_needed"
181e0 2c 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e  , test_collate_n
181f0 65 65 64 65 64 2c 20 30 20 20 20 20 20 7d 2c 0a  eeded, 0     },.
18200 20 20 20 20 20 7b 20 22 61 64 64 5f 74 65 73 74       { "add_test
18210 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 20 20 20 20  _function",     
18220 20 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 2c    test_function,
18230 20 30 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a   0           },.
18240 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
18250 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20  LITE_MEMDEBUG.  
18260 20 20 20 7b 20 22 73 71 6c 69 74 65 5f 6d 61 6c     { "sqlite_mal
18270 6c 6f 63 5f 6f 75 74 73 74 61 6e 64 69 6e 67 22  loc_outstanding"
18280 2c 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f  , sqlite_malloc_
18290 6f 75 74 73 74 61 6e 64 69 6e 67 2c 20 30 7d 2c  outstanding, 0},
182a0 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 7b 20 22  .#endif.     { "
182b0 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 65 72 72  sqlite3_test_err
182c0 73 74 72 22 2c 20 20 20 20 20 74 65 73 74 5f 65  str",     test_e
182d0 72 72 73 74 72 2c 20 30 20 20 20 20 20 20 20 20  rrstr, 0        
182e0 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22       },.     { "
182f0 74 63 6c 5f 76 61 72 69 61 62 6c 65 5f 74 79 70  tcl_variable_typ
18300 65 22 2c 20 20 20 20 20 20 20 74 63 6c 5f 76 61  e",       tcl_va
18310 72 69 61 62 6c 65 5f 74 79 70 65 2c 20 30 20 20  riable_type, 0  
18320 20 20 20 20 20 7d 2c 0a 23 69 66 6e 64 65 66 20       },.#ifndef 
18330 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
18340 45 44 5f 43 41 43 48 45 0a 20 20 20 20 20 7b 20  ED_CACHE.     { 
18350 22 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f  "sqlite3_enable_
18360 73 68 61 72 65 64 5f 63 61 63 68 65 22 2c 20 74  shared_cache", t
18370 65 73 74 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65  est_enable_share
18380 64 5f 63 61 63 68 65 2c 20 30 7d 2c 0a 23 65 6e  d_cache, 0},.#en
18390 64 69 66 0a 20 20 7d 3b 0a 20 20 73 74 61 74 69  dif.  };.  stati
183a0 63 20 69 6e 74 20 62 69 74 6d 61 73 6b 5f 73 69  c int bitmask_si
183b0 7a 65 20 3d 20 73 69 7a 65 6f 66 28 42 69 74 6d  ze = sizeof(Bitm
183c0 61 73 6b 29 2a 38 3b 0a 20 20 69 6e 74 20 69 3b  ask)*8;.  int i;
183d0 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
183e0 6c 69 74 65 33 5f 6f 73 5f 74 72 61 63 65 3b 0a  lite3_os_trace;.
183f0 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c    extern int sql
18400 69 74 65 33 5f 77 68 65 72 65 5f 74 72 61 63 65  ite3_where_trace
18410 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  ;.  extern int s
18420 71 6c 69 74 65 33 5f 73 79 6e 63 5f 63 6f 75 6e  qlite3_sync_coun
18430 74 2c 20 73 71 6c 69 74 65 33 5f 66 75 6c 6c 73  t, sqlite3_fulls
18440 79 6e 63 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74  ync_count;.  ext
18450 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ern int sqlite3_
18460 6f 70 65 6e 74 65 6d 70 5f 63 6f 75 6e 74 3b 0a  opentemp_count;.
18470 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c    extern int sql
18480 69 74 65 33 5f 6d 65 6d 55 73 65 64 3b 0a 20 20  ite3_memUsed;.  
18490 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74  extern int sqlit
184a0 65 33 5f 6d 61 6c 6c 6f 63 5f 69 64 3b 0a 20 20  e3_malloc_id;.  
184b0 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74  extern int sqlit
184c0 65 33 5f 6d 65 6d 4d 61 78 3b 0a 20 20 65 78 74  e3_memMax;.  ext
184d0 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ern int sqlite3_
184e0 6c 69 6b 65 5f 63 6f 75 6e 74 3b 0a 23 69 66 20  like_count;.#if 
184f0 4f 53 5f 57 49 4e 0a 20 20 65 78 74 65 72 6e 20  OS_WIN.  extern 
18500 69 6e 74 20 73 71 6c 69 74 65 33 5f 6f 73 5f 74  int sqlite3_os_t
18510 79 70 65 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64  ype;.#endif.#ifd
18520 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
18530 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c    extern int sql
18540 69 74 65 33 5f 76 64 62 65 5f 61 64 64 6f 70 5f  ite3_vdbe_addop_
18550 74 72 61 63 65 3b 0a 23 65 6e 64 69 66 0a 23 69  trace;.#endif.#i
18560 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
18570 0a 20 20 65 78 74 65 72 6e 20 63 68 61 72 20 73  .  extern char s
18580 71 6c 69 74 65 33 5f 71 75 65 72 79 5f 70 6c 61  qlite3_query_pla
18590 6e 5b 5d 3b 0a 20 20 73 74 61 74 69 63 20 63 68  n[];.  static ch
185a0 61 72 20 2a 71 75 65 72 79 5f 70 6c 61 6e 20 3d  ar *query_plan =
185b0 20 73 71 6c 69 74 65 33 5f 71 75 65 72 79 5f 70   sqlite3_query_p
185c0 6c 61 6e 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 66  lan;.#endif..  f
185d0 6f 72 28 69 3d 30 3b 20 69 3c 73 69 7a 65 6f 66  or(i=0; i<sizeof
185e0 28 61 43 6d 64 29 2f 73 69 7a 65 6f 66 28 61 43  (aCmd)/sizeof(aC
185f0 6d 64 5b 30 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20  md[0]); i++){.  
18600 20 20 54 63 6c 5f 43 72 65 61 74 65 43 6f 6d 6d    Tcl_CreateComm
18610 61 6e 64 28 69 6e 74 65 72 70 2c 20 61 43 6d 64  and(interp, aCmd
18620 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 61 43 6d 64 5b  [i].zName, aCmd[
18630 69 5d 2e 78 50 72 6f 63 2c 20 30 2c 20 30 29 3b  i].xProc, 0, 0);
18640 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 3b 20  .  }.  for(i=0; 
18650 69 3c 73 69 7a 65 6f 66 28 61 4f 62 6a 43 6d 64  i<sizeof(aObjCmd
18660 29 2f 73 69 7a 65 6f 66 28 61 4f 62 6a 43 6d 64  )/sizeof(aObjCmd
18670 5b 30 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  [0]); i++){.    
18680 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d  Tcl_CreateObjCom
18690 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 61 4f 62  mand(interp, aOb
186a0 6a 43 6d 64 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 0a  jCmd[i].zName, .
186b0 20 20 20 20 20 20 20 20 61 4f 62 6a 43 6d 64 5b          aObjCmd[
186c0 69 5d 2e 78 50 72 6f 63 2c 20 61 4f 62 6a 43 6d  i].xProc, aObjCm
186d0 64 5b 69 5d 2e 63 6c 69 65 6e 74 44 61 74 61 2c  d[i].clientData,
186e0 20 30 29 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 4c   0);.  }.  Tcl_L
186f0 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22  inkVar(interp, "
18700 73 71 6c 69 74 65 5f 73 65 61 72 63 68 5f 63 6f  sqlite_search_co
18710 75 6e 74 22 2c 20 0a 20 20 20 20 20 20 28 63 68  unt", .      (ch
18720 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 73 65 61  ar*)&sqlite3_sea
18730 72 63 68 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c  rch_count, TCL_L
18740 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f  INK_INT);.  Tcl_
18750 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20  LinkVar(interp, 
18760 22 73 71 6c 69 74 65 5f 73 6f 72 74 5f 63 6f 75  "sqlite_sort_cou
18770 6e 74 22 2c 20 0a 20 20 20 20 20 20 28 63 68 61  nt", .      (cha
18780 72 2a 29 26 73 71 6c 69 74 65 33 5f 73 6f 72 74  r*)&sqlite3_sort
18790 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b  _count, TCL_LINK
187a0 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e  _INT);.  Tcl_Lin
187b0 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71  kVar(interp, "sq
187c0 6c 69 74 65 5f 6c 69 6b 65 5f 63 6f 75 6e 74 22  lite_like_count"
187d0 2c 20 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29  , .      (char*)
187e0 26 73 71 6c 69 74 65 33 5f 6c 69 6b 65 5f 63 6f  &sqlite3_like_co
187f0 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e  unt, TCL_LINK_IN
18800 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61  T);.  Tcl_LinkVa
18810 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  r(interp, "sqlit
18820 65 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  e_interrupt_coun
18830 74 22 2c 20 0a 20 20 20 20 20 20 28 63 68 61 72  t", .      (char
18840 2a 29 26 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  *)&sqlite3_inter
18850 72 75 70 74 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f  rupt_count, TCL_
18860 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c  LINK_INT);.  Tcl
18870 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c  _LinkVar(interp,
18880 20 22 73 71 6c 69 74 65 5f 6f 70 65 6e 5f 66 69   "sqlite_open_fi
18890 6c 65 5f 63 6f 75 6e 74 22 2c 20 0a 20 20 20 20  le_count", .    
188a0 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65    (char*)&sqlite
188b0 33 5f 6f 70 65 6e 5f 66 69 6c 65 5f 63 6f 75 6e  3_open_file_coun
188c0 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29  t, TCL_LINK_INT)
188d0 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  ;.  Tcl_LinkVar(
188e0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
188f0 63 75 72 72 65 6e 74 5f 74 69 6d 65 22 2c 20 0a  current_time", .
18900 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71        (char*)&sq
18910 6c 69 74 65 33 5f 63 75 72 72 65 6e 74 5f 74 69  lite3_current_ti
18920 6d 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54  me, TCL_LINK_INT
18930 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72  );.  Tcl_LinkVar
18940 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
18950 5f 6f 73 5f 74 72 61 63 65 22 2c 0a 20 20 20 20  _os_trace",.    
18960 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65    (char*)&sqlite
18970 33 5f 6f 73 5f 74 72 61 63 65 2c 20 54 43 4c 5f  3_os_trace, TCL_
18980 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23 69 66 6e 64  LINK_INT);.#ifnd
18990 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
189a0 54 46 31 36 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56  TF16.  Tcl_LinkV
189b0 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  ar(interp, "sqli
189c0 74 65 5f 6c 61 73 74 5f 6e 65 65 64 65 64 5f 63  te_last_needed_c
189d0 6f 6c 6c 61 74 69 6f 6e 22 2c 0a 20 20 20 20 20  ollation",.     
189e0 20 28 63 68 61 72 2a 29 26 70 7a 4e 65 65 64 65   (char*)&pzNeede
189f0 64 43 6f 6c 6c 61 74 69 6f 6e 2c 20 54 43 4c 5f  dCollation, TCL_
18a00 4c 49 4e 4b 5f 53 54 52 49 4e 47 7c 54 43 4c 5f  LINK_STRING|TCL_
18a10 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59 29 3b  LINK_READ_ONLY);
18a20 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
18a30 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20  QLITE_MEMDEBUG. 
18a40 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
18a50 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6d 61 6c  erp, "sqlite_mal
18a60 6c 6f 63 5f 69 64 22 2c 0a 20 20 20 20 20 20 28  loc_id",.      (
18a70 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6d  char*)&sqlite3_m
18a80 61 6c 6c 6f 63 5f 69 64 2c 20 54 43 4c 5f 4c 49  alloc_id, TCL_LI
18a90 4e 4b 5f 53 54 52 49 4e 47 29 3b 0a 23 65 6e 64  NK_STRING);.#end
18aa0 69 66 0a 23 69 66 20 4f 53 5f 57 49 4e 0a 20 20  if.#if OS_WIN.  
18ab0 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
18ac0 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 73 5f 74  rp, "sqlite_os_t
18ad0 79 70 65 22 2c 0a 20 20 20 20 20 20 28 63 68 61  ype",.      (cha
18ae0 72 2a 29 26 73 71 6c 69 74 65 33 5f 6f 73 5f 74  r*)&sqlite3_os_t
18af0 79 70 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e  ype, TCL_LINK_IN
18b00 54 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  T);.#endif.#ifde
18b10 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
18b20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
18b30 72 70 2c 20 22 73 71 6c 69 74 65 5f 71 75 65 72  rp, "sqlite_quer
18b40 79 5f 70 6c 61 6e 22 2c 0a 20 20 20 20 20 20 28  y_plan",.      (
18b50 63 68 61 72 2a 29 26 71 75 65 72 79 5f 70 6c 61  char*)&query_pla
18b60 6e 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 53 54 52 49  n, TCL_LINK_STRI
18b70 4e 47 7c 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41 44  NG|TCL_LINK_READ
18b80 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 23  _ONLY);.#endif.#
18b90 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
18ba0 55 47 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72  UG.  Tcl_LinkVar
18bb0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
18bc0 5f 61 64 64 6f 70 5f 74 72 61 63 65 22 2c 0a 20  _addop_trace",. 
18bd0 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c       (char*)&sql
18be0 69 74 65 33 5f 76 64 62 65 5f 61 64 64 6f 70 5f  ite3_vdbe_addop_
18bf0 74 72 61 63 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f  trace, TCL_LINK_
18c00 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b  INT);.  Tcl_Link
18c10 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  Var(interp, "sql
18c20 69 74 65 5f 77 68 65 72 65 5f 74 72 61 63 65 22  ite_where_trace"
18c30 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26  ,.      (char*)&
18c40 73 71 6c 69 74 65 33 5f 77 68 65 72 65 5f 74 72  sqlite3_where_tr
18c50 61 63 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e  ace, TCL_LINK_IN
18c60 54 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  T);.#endif.#ifde
18c70 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  f SQLITE_MEMDEBU
18c80 47 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  G.  Tcl_LinkVar(
18c90 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
18ca0 6d 65 6d 75 73 65 64 22 2c 0a 20 20 20 20 20 20  memused",.      
18cb0 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f  (char*)&sqlite3_
18cc0 6d 65 6d 55 73 65 64 2c 20 54 43 4c 5f 4c 49 4e  memUsed, TCL_LIN
18cd0 4b 5f 49 4e 54 20 7c 20 54 43 4c 5f 4c 49 4e 4b  K_INT | TCL_LINK
18ce0 5f 52 45 41 44 5f 4f 4e 4c 59 29 3b 0a 20 20 54  _READ_ONLY);.  T
18cf0 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72  cl_LinkVar(inter
18d00 70 2c 20 22 73 71 6c 69 74 65 5f 6d 65 6d 6d 61  p, "sqlite_memma
18d10 78 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a  x",.      (char*
18d20 29 26 73 71 6c 69 74 65 33 5f 6d 65 6d 4d 61 78  )&sqlite3_memMax
18d30 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 20 7c  , TCL_LINK_INT |
18d40 20 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41 44 5f 4f   TCL_LINK_READ_O
18d50 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  NLY);.#endif.#if
18d60 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
18d70 5f 44 49 53 4b 49 4f 0a 20 20 54 63 6c 5f 4c 69  _DISKIO.  Tcl_Li
18d80 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73  nkVar(interp, "s
18d90 71 6c 69 74 65 5f 6f 70 65 6e 74 65 6d 70 5f 63  qlite_opentemp_c
18da0 6f 75 6e 74 22 2c 0a 20 20 20 20 20 20 28 63 68  ount",.      (ch
18db0 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6f 70 65  ar*)&sqlite3_ope
18dc0 6e 74 65 6d 70 5f 63 6f 75 6e 74 2c 20 54 43 4c  ntemp_count, TCL
18dd0 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23 65 6e 64  _LINK_INT);.#end
18de0 69 66 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72  if.  Tcl_LinkVar
18df0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
18e00 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f 76 61 6c  _static_bind_val
18e10 75 65 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72  ue",.      (char
18e20 2a 29 26 73 71 6c 69 74 65 5f 73 74 61 74 69 63  *)&sqlite_static
18e30 5f 62 69 6e 64 5f 76 61 6c 75 65 2c 20 54 43 4c  _bind_value, TCL
18e40 5f 4c 49 4e 4b 5f 53 54 52 49 4e 47 29 3b 0a 20  _LINK_STRING);. 
18e50 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
18e60 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 74 65 6d  erp, "sqlite_tem
18e70 70 5f 64 69 72 65 63 74 6f 72 79 22 2c 0a 20 20  p_directory",.  
18e80 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69      (char*)&sqli
18e90 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f  te3_temp_directo
18ea0 72 79 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 53 54 52  ry, TCL_LINK_STR
18eb0 49 4e 47 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b  ING);.  Tcl_Link
18ec0 56 61 72 28 69 6e 74 65 72 70 2c 20 22 62 69 74  Var(interp, "bit
18ed0 6d 61 73 6b 5f 73 69 7a 65 22 2c 0a 20 20 20 20  mask_size",.    
18ee0 20 20 28 63 68 61 72 2a 29 26 62 69 74 6d 61 73    (char*)&bitmas
18ef0 6b 5f 73 69 7a 65 2c 20 54 43 4c 5f 4c 49 4e 4b  k_size, TCL_LINK
18f00 5f 49 4e 54 7c 54 43 4c 5f 4c 49 4e 4b 5f 52 45  _INT|TCL_LINK_RE
18f10 41 44 5f 4f 4e 4c 59 29 3b 0a 23 69 66 20 4f 53  AD_ONLY);.#if OS
18f20 5f 55 4e 49 58 0a 20 20 54 63 6c 5f 4c 69 6e 6b  _UNIX.  Tcl_Link
18f30 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  Var(interp, "sql
18f40 69 74 65 5f 73 79 6e 63 5f 63 6f 75 6e 74 22 2c  ite_sync_count",
18f50 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73  .      (char*)&s
18f60 71 6c 69 74 65 33 5f 73 79 6e 63 5f 63 6f 75 6e  qlite3_sync_coun
18f70 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29  t, TCL_LINK_INT)
18f80 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  ;.  Tcl_LinkVar(
18f90 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
18fa0 66 75 6c 6c 73 79 6e 63 5f 63 6f 75 6e 74 22 2c  fullsync_count",
18fb0 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73  .      (char*)&s
18fc0 71 6c 69 74 65 33 5f 66 75 6c 6c 73 79 6e 63 5f  qlite3_fullsync_
18fd0 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f  count, TCL_LINK_
18fe0 49 4e 54 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  INT);.#endif /* 
18ff0 4f 53 5f 55 4e 49 58 20 2a 2f 0a 20 20 73 65 74  OS_UNIX */.  set
19000 5f 6f 70 74 69 6f 6e 73 28 69 6e 74 65 72 70 29  _options(interp)
19010 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
19020 4b 3b 0a 7d 0a                                   K;.}.