/ Hex Artifact Content
Login

Artifact b076d9c42b547ec0891b67722f00681b21756d91:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 43 6f 64 65 20 66  ******.** Code f
0180: 6f 72 20 74 65 73 74 69 6e 67 20 74 68 65 20 70  or testing the p
0190: 72 69 6e 74 66 28 29 20 69 6e 74 65 72 66 61 63  rintf() interfac
01a0: 65 20 74 6f 20 53 51 4c 69 74 65 2e 20 20 54 68  e to SQLite.  Th
01b0: 69 73 20 63 6f 64 65 0a 2a 2a 20 69 73 20 6e 6f  is code.** is no
01c0: 74 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68  t included in th
01d0: 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79  e SQLite library
01e0: 2e 20 20 49 74 20 69 73 20 75 73 65 64 20 66 6f  .  It is used fo
01f0: 72 20 61 75 74 6f 6d 61 74 65 64 0a 2a 2a 20 74  r automated.** t
0200: 65 73 74 69 6e 67 20 6f 66 20 74 68 65 20 53 51  esting of the SQ
0210: 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a  Lite library..**
0220: 0a 2a 2a 20 24 49 64 3a 20 74 65 73 74 31 2e 63  .** $Id: test1.c
0230: 2c 76 20 31 2e 31 39 35 20 32 30 30 36 2f 30 31  ,v 1.195 2006/01
0240: 2f 31 38 20 30 35 3a 35 31 3a 35 38 20 64 61 6e  /18 05:51:58 dan
0250: 69 65 6c 6b 31 39 37 37 20 45 78 70 20 24 0a 2a  ielk1977 Exp $.*
0260: 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69  /.#include "sqli
0270: 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63 6c 75 64  teInt.h".#includ
0280: 65 20 22 74 63 6c 2e 68 22 0a 23 69 6e 63 6c 75  e "tcl.h".#inclu
0290: 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75  de "os.h".#inclu
02a0: 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23 69  de <stdlib.h>.#i
02b0: 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e 68  nclude <string.h
02c0: 3e 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73  >../*.** This is
02d0: 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 66   a copy of the f
02e0: 69 72 73 74 20 70 61 72 74 20 6f 66 20 74 68 65  irst part of the
02f0: 20 53 71 6c 69 74 65 44 62 20 73 74 72 75 63 74   SqliteDb struct
0300: 75 72 65 20 69 6e 20 0a 2a 2a 20 74 63 6c 73 71  ure in .** tclsq
0310: 6c 69 74 65 2e 63 2e 20 20 57 65 20 6e 65 65 64  lite.c.  We need
0320: 20 69 74 20 68 65 72 65 20 73 6f 20 74 68 61 74   it here so that
0330: 20 74 68 65 20 67 65 74 5f 73 71 6c 69 74 65 5f   the get_sqlite_
0340: 70 6f 69 6e 74 65 72 20 72 6f 75 74 69 6e 65 0a  pointer routine.
0350: 2a 2a 20 63 61 6e 20 65 78 74 72 61 63 74 20 74  ** can extract t
0360: 68 65 20 73 71 6c 69 74 65 33 2a 20 70 6f 69 6e  he sqlite3* poin
0370: 74 65 72 20 66 72 6f 6d 20 61 6e 20 65 78 69 73  ter from an exis
0380: 74 69 6e 67 20 54 63 6c 20 53 51 4c 69 74 65 0a  ting Tcl SQLite.
0390: 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 2a  ** connection..*
03a0: 2f 0a 73 74 72 75 63 74 20 53 71 6c 69 74 65 44  /.struct SqliteD
03b0: 62 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  b {.  sqlite3 *d
03c0: 62 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 54  b;.};../*.** A T
03d0: 43 4c 20 63 6f 6d 6d 61 6e 64 20 74 68 61 74 20  CL command that 
03e0: 72 65 74 75 72 6e 73 20 74 68 65 20 61 64 64 72  returns the addr
03f0: 65 73 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74  ess of the sqlit
0400: 65 2a 20 70 6f 69 6e 74 65 72 0a 2a 2a 20 66 6f  e* pointer.** fo
0410: 72 20 61 6e 20 73 71 6c 69 74 65 20 63 6f 6e 6e  r an sqlite conn
0420: 65 63 74 69 6f 6e 20 69 6e 73 74 61 6e 63 65 2e  ection instance.
0430: 20 20 42 61 64 20 74 68 69 6e 67 73 20 68 61 70    Bad things hap
0440: 70 65 6e 20 69 66 20 74 68 65 0a 2a 2a 20 69 6e  pen if the.** in
0450: 70 75 74 20 69 73 20 6e 6f 74 20 61 6e 20 73 71  put is not an sq
0460: 6c 69 74 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  lite connection.
0470: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 67  .*/.static int g
0480: 65 74 5f 73 71 6c 69 74 65 5f 70 6f 69 6e 74 65  et_sqlite_pointe
0490: 72 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  r(.  void * clie
04a0: 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
04b0: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
04c0: 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
04d0: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
04e0: 5d 0a 29 7b 0a 20 20 73 74 72 75 63 74 20 53 71  ].){.  struct Sq
04f0: 6c 69 74 65 44 62 20 2a 70 3b 0a 20 20 54 63 6c  liteDb *p;.  Tcl
0500: 5f 43 6d 64 49 6e 66 6f 20 63 6d 64 49 6e 66 6f  _CmdInfo cmdInfo
0510: 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 31 30  ;.  char zBuf[10
0520: 30 5d 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  0];.  if( objc!=
0530: 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f  2 ){.    Tcl_Wro
0540: 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
0550: 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 53 51 4c 49  , 1, objv, "SQLI
0560: 54 45 2d 43 4f 4e 4e 45 43 54 49 4f 4e 22 29 3b  TE-CONNECTION");
0570: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
0580: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
0590: 20 21 54 63 6c 5f 47 65 74 43 6f 6d 6d 61 6e 64   !Tcl_GetCommand
05a0: 49 6e 66 6f 28 69 6e 74 65 72 70 2c 20 54 63 6c  Info(interp, Tcl
05b0: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
05c0: 31 5d 29 2c 20 26 63 6d 64 49 6e 66 6f 29 20 29  1]), &cmdInfo) )
05d0: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
05e0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
05f0: 63 6f 6d 6d 61 6e 64 20 6e 6f 74 20 66 6f 75 6e  command not foun
0600: 64 3a 20 22 2c 0a 20 20 20 20 20 20 20 20 20 20  d: ",.          
0610: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
0620: 62 6a 76 5b 31 5d 29 2c 20 28 63 68 61 72 2a 29  bjv[1]), (char*)
0630: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
0640: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
0650: 70 20 3d 20 28 73 74 72 75 63 74 20 53 71 6c 69  p = (struct Sqli
0660: 74 65 44 62 2a 29 63 6d 64 49 6e 66 6f 2e 6f 62  teDb*)cmdInfo.ob
0670: 6a 43 6c 69 65 6e 74 44 61 74 61 3b 0a 20 20 73  jClientData;.  s
0680: 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 25 70  printf(zBuf, "%p
0690: 22 2c 20 70 2d 3e 64 62 29 3b 0a 20 20 69 66 28  ", p->db);.  if(
06a0: 20 73 74 72 6e 63 6d 70 28 7a 42 75 66 2c 22 30   strncmp(zBuf,"0
06b0: 78 22 2c 32 29 20 29 7b 0a 20 20 20 20 73 70 72  x",2) ){.    spr
06c0: 69 6e 74 66 28 7a 42 75 66 2c 20 22 30 78 25 70  intf(zBuf, "0x%p
06d0: 22 2c 20 70 2d 3e 64 62 29 3b 0a 20 20 7d 0a 20  ", p->db);.  }. 
06e0: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
06f0: 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20  t(interp, zBuf, 
0700: 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  0);.  return TCL
0710: 5f 4f 4b 3b 0a 7d 0a 0a 63 6f 6e 73 74 20 63 68  _OK;.}..const ch
0720: 61 72 20 2a 73 71 6c 69 74 65 33 54 65 73 74 45  ar *sqlite3TestE
0730: 72 72 6f 72 4e 61 6d 65 28 69 6e 74 20 72 63 29  rrorName(int rc)
0740: 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
0750: 7a 4e 61 6d 65 20 3d 20 30 3b 0a 20 20 73 77 69  zName = 0;.  swi
0760: 74 63 68 28 20 72 63 20 29 7b 0a 20 20 20 20 63  tch( rc ){.    c
0770: 61 73 65 20 53 51 4c 49 54 45 5f 4f 4b 3a 20 20  ase SQLITE_OK:  
0780: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
0790: 53 51 4c 49 54 45 5f 4f 4b 22 3b 20 20 20 20 20  SQLITE_OK";     
07a0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
07b0: 63 61 73 65 20 53 51 4c 49 54 45 5f 45 52 52 4f  case SQLITE_ERRO
07c0: 52 3a 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20  R:      zName = 
07d0: 22 53 51 4c 49 54 45 5f 45 52 52 4f 52 22 3b 20  "SQLITE_ERROR"; 
07e0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
07f0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 50 45 52   case SQLITE_PER
0800: 4d 3a 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d  M:       zName =
0810: 20 22 53 51 4c 49 54 45 5f 50 45 52 4d 22 3b 20   "SQLITE_PERM"; 
0820: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
0830: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 41 42    case SQLITE_AB
0840: 4f 52 54 3a 20 20 20 20 20 20 7a 4e 61 6d 65 20  ORT:      zName 
0850: 3d 20 22 53 51 4c 49 54 45 5f 41 42 4f 52 54 22  = "SQLITE_ABORT"
0860: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
0870: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 42     case SQLITE_B
0880: 55 53 59 3a 20 20 20 20 20 20 20 7a 4e 61 6d 65  USY:       zName
0890: 20 3d 20 22 53 51 4c 49 54 45 5f 42 55 53 59 22   = "SQLITE_BUSY"
08a0: 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  ;        break;.
08b0: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
08c0: 4c 4f 43 4b 45 44 3a 20 20 20 20 20 7a 4e 61 6d  LOCKED:     zNam
08d0: 65 20 3d 20 22 53 51 4c 49 54 45 5f 4c 4f 43 4b  e = "SQLITE_LOCK
08e0: 45 44 22 3b 20 20 20 20 20 20 62 72 65 61 6b 3b  ED";      break;
08f0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
0900: 5f 4e 4f 4d 45 4d 3a 20 20 20 20 20 20 7a 4e 61  _NOMEM:      zNa
0910: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4e 4f 4d  me = "SQLITE_NOM
0920: 45 4d 22 3b 20 20 20 20 20 20 20 62 72 65 61 6b  EM";       break
0930: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
0940: 45 5f 52 45 41 44 4f 4e 4c 59 3a 20 20 20 7a 4e  E_READONLY:   zN
0950: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 52 45  ame = "SQLITE_RE
0960: 41 44 4f 4e 4c 59 22 3b 20 20 20 20 62 72 65 61  ADONLY";    brea
0970: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
0980: 54 45 5f 49 4e 54 45 52 52 55 50 54 3a 20 20 7a  TE_INTERRUPT:  z
0990: 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49  Name = "SQLITE_I
09a0: 4e 54 45 52 52 55 50 54 22 3b 20 20 20 62 72 65  NTERRUPT";   bre
09b0: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
09c0: 49 54 45 5f 49 4f 45 52 52 3a 20 20 20 20 20 20  ITE_IOERR:      
09d0: 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f  zName = "SQLITE_
09e0: 49 4f 45 52 52 22 3b 20 20 20 20 20 20 20 62 72  IOERR";       br
09f0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
0a00: 4c 49 54 45 5f 43 4f 52 52 55 50 54 3a 20 20 20  LITE_CORRUPT:   
0a10: 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45   zName = "SQLITE
0a20: 5f 43 4f 52 52 55 50 54 22 3b 20 20 20 20 20 62  _CORRUPT";     b
0a30: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
0a40: 51 4c 49 54 45 5f 46 55 4c 4c 3a 20 20 20 20 20  QLITE_FULL:     
0a50: 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54    zName = "SQLIT
0a60: 45 5f 46 55 4c 4c 22 3b 20 20 20 20 20 20 20 20  E_FULL";        
0a70: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
0a80: 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 3a  SQLITE_CANTOPEN:
0a90: 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49     zName = "SQLI
0aa0: 54 45 5f 43 41 4e 54 4f 50 45 4e 22 3b 20 20 20  TE_CANTOPEN";   
0ab0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
0ac0: 20 53 51 4c 49 54 45 5f 50 52 4f 54 4f 43 4f 4c   SQLITE_PROTOCOL
0ad0: 3a 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c  :   zName = "SQL
0ae0: 49 54 45 5f 50 52 4f 54 4f 43 4f 4c 22 3b 20 20  ITE_PROTOCOL";  
0af0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0b00: 65 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 3a 20  e SQLITE_EMPTY: 
0b10: 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51       zName = "SQ
0b20: 4c 49 54 45 5f 45 4d 50 54 59 22 3b 20 20 20 20  LITE_EMPTY";    
0b30: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
0b40: 73 65 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41  se SQLITE_SCHEMA
0b50: 3a 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53  :     zName = "S
0b60: 51 4c 49 54 45 5f 53 43 48 45 4d 41 22 3b 20 20  QLITE_SCHEMA";  
0b70: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
0b80: 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54  ase SQLITE_CONST
0b90: 52 41 49 4e 54 3a 20 7a 4e 61 6d 65 20 3d 20 22  RAINT: zName = "
0ba0: 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
0bb0: 54 22 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  T";  break;.    
0bc0: 63 61 73 65 20 53 51 4c 49 54 45 5f 4d 49 53 4d  case SQLITE_MISM
0bd0: 41 54 43 48 3a 20 20 20 7a 4e 61 6d 65 20 3d 20  ATCH:   zName = 
0be0: 22 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48  "SQLITE_MISMATCH
0bf0: 22 3b 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ";    break;.   
0c00: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4d 49 53   case SQLITE_MIS
0c10: 55 53 45 3a 20 20 20 20 20 7a 4e 61 6d 65 20 3d  USE:     zName =
0c20: 20 22 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 22   "SQLITE_MISUSE"
0c30: 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ;      break;.  
0c40: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f    case SQLITE_NO
0c50: 4c 46 53 3a 20 20 20 20 20 20 7a 4e 61 6d 65 20  LFS:      zName 
0c60: 3d 20 22 53 51 4c 49 54 45 5f 4e 4f 4c 46 53 22  = "SQLITE_NOLFS"
0c70: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
0c80: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 41     case SQLITE_A
0c90: 55 54 48 3a 20 20 20 20 20 20 20 7a 4e 61 6d 65  UTH:       zName
0ca0: 20 3d 20 22 53 51 4c 49 54 45 5f 41 55 54 48 22   = "SQLITE_AUTH"
0cb0: 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  ;        break;.
0cc0: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
0cd0: 46 4f 52 4d 41 54 3a 20 20 20 20 20 7a 4e 61 6d  FORMAT:     zNam
0ce0: 65 20 3d 20 22 53 51 4c 49 54 45 5f 46 4f 52 4d  e = "SQLITE_FORM
0cf0: 41 54 22 3b 20 20 20 20 20 20 62 72 65 61 6b 3b  AT";      break;
0d00: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
0d10: 5f 52 41 4e 47 45 3a 20 20 20 20 20 20 7a 4e 61  _RANGE:      zNa
0d20: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 52 41 4e  me = "SQLITE_RAN
0d30: 47 45 22 3b 20 20 20 20 20 20 20 62 72 65 61 6b  GE";       break
0d40: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
0d50: 45 5f 52 4f 57 3a 20 20 20 20 20 20 20 20 7a 4e  E_ROW:        zN
0d60: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 52 4f  ame = "SQLITE_RO
0d70: 57 22 3b 20 20 20 20 20 20 20 20 20 62 72 65 61  W";         brea
0d80: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
0d90: 54 45 5f 44 4f 4e 45 3a 20 20 20 20 20 20 20 7a  TE_DONE:       z
0da0: 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 44  Name = "SQLITE_D
0db0: 4f 4e 45 22 3b 20 20 20 20 20 20 20 20 62 72 65  ONE";        bre
0dc0: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
0dd0: 49 54 45 5f 4e 4f 54 41 44 42 3a 20 20 20 20 20  ITE_NOTADB:     
0de0: 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f  zName = "SQLITE_
0df0: 4e 4f 54 41 44 42 22 3b 20 20 20 20 20 20 62 72  NOTADB";      br
0e00: 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74  eak;.    default
0e10: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
0e20: 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45   zName = "SQLITE
0e30: 5f 55 6e 6b 6e 6f 77 6e 22 3b 20 20 20 20 20 62  _Unknown";     b
0e40: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 72 65 74 75  reak;.  }.  retu
0e50: 72 6e 20 7a 4e 61 6d 65 3b 0a 7d 0a 23 64 65 66  rn zName;.}.#def
0e60: 69 6e 65 20 65 72 72 6f 72 4e 61 6d 65 20 73 71  ine errorName sq
0e70: 6c 69 74 65 33 54 65 73 74 45 72 72 6f 72 4e 61  lite3TestErrorNa
0e80: 6d 65 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72  me../*.** Conver
0e90: 74 20 61 6e 20 73 71 6c 69 74 65 33 5f 73 74 6d  t an sqlite3_stm
0ea0: 74 2a 20 69 6e 74 6f 20 61 6e 20 73 71 6c 69 74  t* into an sqlit
0eb0: 65 33 2a 2e 20 20 54 68 69 73 20 64 65 70 65 6e  e3*.  This depen
0ec0: 64 73 20 6f 6e 20 74 68 65 0a 2a 2a 20 66 61 63  ds on the.** fac
0ed0: 74 20 74 68 61 74 20 74 68 65 20 73 71 6c 69 74  t that the sqlit
0ee0: 65 33 2a 20 69 73 20 74 68 65 20 66 69 72 73 74  e3* is the first
0ef0: 20 66 69 65 6c 64 20 69 6e 20 74 68 65 20 56 64   field in the Vd
0f00: 62 65 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  be structure..*/
0f10: 0a 23 64 65 66 69 6e 65 20 53 74 6d 74 54 6f 44  .#define StmtToD
0f20: 62 28 58 29 20 20 20 73 71 6c 69 74 65 33 5f 64  b(X)   sqlite3_d
0f30: 62 5f 68 61 6e 64 6c 65 28 58 29 0a 0a 2f 2a 0a  b_handle(X)../*.
0f40: 2a 2a 20 43 68 65 63 6b 20 61 20 72 65 74 75 72  ** Check a retur
0f50: 6e 20 76 61 6c 75 65 20 74 6f 20 6d 61 6b 65 20  n value to make 
0f60: 73 75 72 65 20 69 74 20 61 67 72 65 65 73 20 77  sure it agrees w
0f70: 69 74 68 20 74 68 65 20 72 65 73 75 6c 74 73 0a  ith the results.
0f80: 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f  ** from sqlite3_
0f90: 65 72 72 63 6f 64 65 2e 0a 2a 2f 0a 69 6e 74 20  errcode..*/.int 
0fa0: 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f  sqlite3TestErrCo
0fb0: 64 65 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  de(Tcl_Interp *i
0fc0: 6e 74 65 72 70 2c 20 73 71 6c 69 74 65 33 20 2a  nterp, sqlite3 *
0fd0: 64 62 2c 20 69 6e 74 20 72 63 29 7b 0a 20 20 69  db, int rc){.  i
0fe0: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4d 49  f( rc!=SQLITE_MI
0ff0: 53 55 53 45 20 26 26 20 72 63 21 3d 53 51 4c 49  SUSE && rc!=SQLI
1000: 54 45 5f 4f 4b 20 26 26 20 73 71 6c 69 74 65 33  TE_OK && sqlite3
1010: 5f 65 72 72 63 6f 64 65 28 64 62 29 21 3d 72 63  _errcode(db)!=rc
1020: 20 29 7b 0a 20 20 20 20 63 68 61 72 20 7a 42 75   ){.    char zBu
1030: 66 5b 32 30 30 5d 3b 0a 20 20 20 20 69 6e 74 20  f[200];.    int 
1040: 72 32 20 3d 20 73 71 6c 69 74 65 33 5f 65 72 72  r2 = sqlite3_err
1050: 63 6f 64 65 28 64 62 29 3b 0a 20 20 20 20 73 70  code(db);.    sp
1060: 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 65 72 72  rintf(zBuf, "err
1070: 6f 72 20 63 6f 64 65 20 25 73 20 28 25 64 29 20  or code %s (%d) 
1080: 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 73  does not match s
1090: 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20 25  qlite3_errcode %
10a0: 73 20 28 25 64 29 22 2c 0a 20 20 20 20 20 20 20  s (%d)",.       
10b0: 65 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 72  errorName(rc), r
10c0: 63 2c 20 65 72 72 6f 72 4e 61 6d 65 28 72 32 29  c, errorName(r2)
10d0: 2c 20 72 32 29 3b 0a 20 20 20 20 54 63 6c 5f 52  , r2);.    Tcl_R
10e0: 65 73 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  esetResult(inter
10f0: 70 29 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65  p);.    Tcl_Appe
1100: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
1110: 20 7a 42 75 66 2c 20 30 29 3b 0a 20 20 20 20 72   zBuf, 0);.    r
1120: 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 72  eturn 1;.  }.  r
1130: 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a  eturn 0;.}../*.*
1140: 2a 20 44 65 63 6f 64 65 20 61 20 70 6f 69 6e 74  * Decode a point
1150: 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33  er to an sqlite3
1160: 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 73 74 61 74   object..*/.stat
1170: 69 63 20 69 6e 74 20 67 65 74 44 62 50 6f 69 6e  ic int getDbPoin
1180: 74 65 72 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ter(Tcl_Interp *
1190: 69 6e 74 65 72 70 2c 20 63 6f 6e 73 74 20 63 68  interp, const ch
11a0: 61 72 20 2a 7a 41 2c 20 73 71 6c 69 74 65 33 20  ar *zA, sqlite3 
11b0: 2a 2a 70 70 44 62 29 7b 0a 20 20 2a 70 70 44 62  **ppDb){.  *ppDb
11c0: 20 3d 20 28 73 71 6c 69 74 65 33 2a 29 73 71 6c   = (sqlite3*)sql
11d0: 69 74 65 33 54 65 78 74 54 6f 50 74 72 28 7a 41  ite3TextToPtr(zA
11e0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
11f0: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 65 63  OK;.}../*.** Dec
1200: 6f 64 65 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  ode a pointer to
1210: 20 61 6e 20 73 71 6c 69 74 65 33 5f 73 74 6d 74   an sqlite3_stmt
1220: 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 73 74 61 74   object..*/.stat
1230: 69 63 20 69 6e 74 20 67 65 74 53 74 6d 74 50 6f  ic int getStmtPo
1240: 69 6e 74 65 72 28 0a 20 20 54 63 6c 5f 49 6e 74  inter(.  Tcl_Int
1250: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 0a 20 20  erp *interp, .  
1260: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 72 67  const char *zArg
1270: 2c 20 20 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  ,  .  sqlite3_st
1280: 6d 74 20 2a 2a 70 70 53 74 6d 74 0a 29 7b 0a 20  mt **ppStmt.){. 
1290: 20 2a 70 70 53 74 6d 74 20 3d 20 28 73 71 6c 69   *ppStmt = (sqli
12a0: 74 65 33 5f 73 74 6d 74 2a 29 73 71 6c 69 74 65  te3_stmt*)sqlite
12b0: 33 54 65 78 74 54 6f 50 74 72 28 7a 41 72 67 29  3TextToPtr(zArg)
12c0: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
12d0: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 65 63 6f  K;.}../*.** Deco
12e0: 64 65 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  de a pointer to 
12f0: 61 6e 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  an sqlite3_stmt 
1300: 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 73 74 61 74 69  object..*/.stati
1310: 63 20 69 6e 74 20 67 65 74 46 69 6c 65 50 6f 69  c int getFilePoi
1320: 6e 74 65 72 28 0a 20 20 54 63 6c 5f 49 6e 74 65  nter(.  Tcl_Inte
1330: 72 70 20 2a 69 6e 74 65 72 70 2c 20 0a 20 20 63  rp *interp, .  c
1340: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 72 67 2c  onst char *zArg,
1350: 20 20 0a 20 20 4f 73 46 69 6c 65 20 2a 2a 70 70    .  OsFile **pp
1360: 46 69 6c 65 0a 29 7b 0a 20 20 2a 70 70 46 69 6c  File.){.  *ppFil
1370: 65 20 3d 20 28 4f 73 46 69 6c 65 2a 29 73 71 6c  e = (OsFile*)sql
1380: 69 74 65 33 54 65 78 74 54 6f 50 74 72 28 7a 41  ite3TextToPtr(zA
1390: 72 67 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  rg);.  return TC
13a0: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47  L_OK;.}../*.** G
13b0: 65 6e 65 72 61 74 65 20 61 20 74 65 78 74 20 72  enerate a text r
13c0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
13d0: 20 61 20 70 6f 69 6e 74 65 72 20 74 68 61 74 20   a pointer that 
13e0: 63 61 6e 20 62 65 20 75 6e 64 65 72 73 74 6f 6f  can be understoo
13f0: 64 0a 2a 2a 20 62 79 20 74 68 65 20 67 65 74 44  d.** by the getD
1400: 62 50 6f 69 6e 74 65 72 20 61 6e 64 20 67 65 74  bPointer and get
1410: 56 6d 50 6f 69 6e 74 65 72 20 72 6f 75 74 69 6e  VmPointer routin
1420: 65 73 20 61 62 6f 76 65 2e 0a 2a 2a 0a 2a 2a 20  es above..**.** 
1430: 54 68 65 20 70 72 6f 62 6c 65 6d 20 69 73 2c 20  The problem is, 
1440: 6f 6e 20 73 6f 6d 65 20 6d 61 63 68 69 6e 65 73  on some machines
1450: 20 28 53 6f 6c 61 72 69 73 29 20 69 66 20 79 6f   (Solaris) if yo
1460: 75 20 64 6f 20 61 20 70 72 69 6e 74 66 20 77 69  u do a printf wi
1470: 74 68 0a 2a 2a 20 22 25 70 22 20 79 6f 75 20 63  th.** "%p" you c
1480: 61 6e 6e 6f 74 20 74 75 72 6e 20 61 72 6f 75 6e  annot turn aroun
1490: 64 20 61 6e 64 20 64 6f 20 61 20 73 63 61 6e 66  d and do a scanf
14a0: 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 22   with the same "
14b0: 25 70 22 20 61 6e 64 0a 2a 2a 20 67 65 74 20 79  %p" and.** get y
14c0: 6f 75 72 20 70 6f 69 6e 74 65 72 20 62 61 63 6b  our pointer back
14d0: 2e 20 20 59 6f 75 20 68 61 76 65 20 74 6f 20 70  .  You have to p
14e0: 72 65 70 65 6e 64 20 61 20 22 30 78 22 20 62 65  repend a "0x" be
14f0: 66 6f 72 65 20 69 74 20 77 69 6c 6c 0a 2a 2a 20  fore it will.** 
1500: 77 6f 72 6b 2e 20 20 4f 72 20 61 74 20 6c 65 61  work.  Or at lea
1510: 73 74 20 74 68 61 74 20 69 73 20 77 68 61 74 20  st that is what 
1520: 69 73 20 72 65 70 6f 72 74 65 64 20 74 6f 20 6d  is reported to m
1530: 65 20 28 64 72 68 29 2e 20 20 42 75 74 20 74 68  e (drh).  But th
1540: 69 73 0a 2a 2a 20 62 65 68 61 76 69 6f 72 20 76  is.** behavior v
1550: 61 72 69 65 73 20 66 72 6f 6d 20 6d 61 63 68 69  aries from machi
1560: 6e 65 20 74 6f 20 6d 61 63 68 69 6e 65 2e 20 20  ne to machine.  
1570: 54 68 65 20 73 6f 6c 75 74 69 6f 6e 20 75 73 65  The solution use
1580: 64 20 68 65 72 20 69 73 0a 2a 2a 20 74 6f 20 74  d her is.** to t
1590: 65 73 74 20 74 68 65 20 73 74 72 69 6e 67 20 72  est the string r
15a0: 69 67 68 74 20 61 66 74 65 72 20 69 74 20 69 73  ight after it is
15b0: 20 67 65 6e 65 72 61 74 65 64 20 74 6f 20 73 65   generated to se
15c0: 65 20 69 66 20 69 74 20 63 61 6e 20 62 65 0a 2a  e if it can be.*
15d0: 2a 20 75 6e 64 65 72 73 74 6f 6f 64 20 62 79 20  * understood by 
15e0: 73 63 61 6e 66 2c 20 61 6e 64 20 69 66 20 6e 6f  scanf, and if no
15f0: 74 2c 20 74 72 79 20 70 72 65 70 65 6e 64 69 6e  t, try prependin
1600: 67 20 61 6e 20 22 30 78 22 20 74 6f 20 73 65 65  g an "0x" to see
1610: 20 69 66 0a 2a 2a 20 74 68 61 74 20 68 65 6c 70   if.** that help
1620: 73 2e 20 20 49 66 20 6e 6f 74 68 69 6e 67 20 77  s.  If nothing w
1630: 6f 72 6b 73 2c 20 61 20 66 61 74 61 6c 20 65 72  orks, a fatal er
1640: 72 6f 72 20 69 73 20 67 65 6e 65 72 61 74 65 64  ror is generated
1650: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
1660: 54 65 73 74 4d 61 6b 65 50 6f 69 6e 74 65 72 53  TestMakePointerS
1670: 74 72 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  tr(Tcl_Interp *i
1680: 6e 74 65 72 70 2c 20 63 68 61 72 20 2a 7a 50 74  nterp, char *zPt
1690: 72 2c 20 76 6f 69 64 20 2a 70 29 7b 0a 20 20 73  r, void *p){.  s
16a0: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
16b0: 31 30 30 2c 20 7a 50 74 72 2c 20 22 25 70 22 2c  100, zPtr, "%p",
16c0: 20 70 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43   p);.  return TC
16d0: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  L_OK;.}../*.** T
16e0: 68 65 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75 74  he callback rout
16f0: 69 6e 65 20 66 6f 72 20 73 71 6c 69 74 65 33 5f  ine for sqlite3_
1700: 65 78 65 63 5f 70 72 69 6e 74 66 28 29 2e 0a 2a  exec_printf()..*
1710: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 65 78 65  /.static int exe
1720: 63 5f 70 72 69 6e 74 66 5f 63 62 28 76 6f 69 64  c_printf_cb(void
1730: 20 2a 70 41 72 67 2c 20 69 6e 74 20 61 72 67 63   *pArg, int argc
1740: 2c 20 63 68 61 72 20 2a 2a 61 72 67 76 2c 20 63  , char **argv, c
1750: 68 61 72 20 2a 2a 6e 61 6d 65 29 7b 0a 20 20 54  har **name){.  T
1760: 63 6c 5f 44 53 74 72 69 6e 67 20 2a 73 74 72 20  cl_DString *str 
1770: 3d 20 28 54 63 6c 5f 44 53 74 72 69 6e 67 2a 29  = (Tcl_DString*)
1780: 70 41 72 67 3b 0a 20 20 69 6e 74 20 69 3b 0a 0a  pArg;.  int i;..
1790: 20 20 69 66 28 20 54 63 6c 5f 44 53 74 72 69 6e    if( Tcl_DStrin
17a0: 67 4c 65 6e 67 74 68 28 73 74 72 29 3d 3d 30 20  gLength(str)==0 
17b0: 29 7b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  ){.    for(i=0; 
17c0: 69 3c 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20  i<argc; i++){.  
17d0: 20 20 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 41      Tcl_DStringA
17e0: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 73 74 72  ppendElement(str
17f0: 2c 20 6e 61 6d 65 5b 69 5d 20 3f 20 6e 61 6d 65  , name[i] ? name
1800: 5b 69 5d 20 3a 20 22 4e 55 4c 4c 22 29 3b 0a 20  [i] : "NULL");. 
1810: 20 20 20 7d 0a 20 20 7d 0a 20 20 66 6f 72 28 69     }.  }.  for(i
1820: 3d 30 3b 20 69 3c 61 72 67 63 3b 20 69 2b 2b 29  =0; i<argc; i++)
1830: 7b 0a 20 20 20 20 54 63 6c 5f 44 53 74 72 69 6e  {.    Tcl_DStrin
1840: 67 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 73  gAppendElement(s
1850: 74 72 2c 20 61 72 67 76 5b 69 5d 20 3f 20 61 72  tr, argv[i] ? ar
1860: 67 76 5b 69 5d 20 3a 20 22 4e 55 4c 4c 22 29 3b  gv[i] : "NULL");
1870: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b  .  }.  return 0;
1880: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
1890: 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63 5f 70    sqlite3_exec_p
18a0: 72 69 6e 74 66 20 20 44 42 20 20 46 4f 52 4d 41  rintf  DB  FORMA
18b0: 54 20 20 53 54 52 49 4e 47 0a 2a 2a 0a 2a 2a 20  T  STRING.**.** 
18c0: 49 6e 76 6f 6b 65 20 74 68 65 20 73 71 6c 69 74  Invoke the sqlit
18d0: 65 33 5f 65 78 65 63 5f 70 72 69 6e 74 66 28 29  e3_exec_printf()
18e0: 20 69 6e 74 65 72 66 61 63 65 20 75 73 69 6e 67   interface using
18f0: 20 74 68 65 20 6f 70 65 6e 20 64 61 74 61 62 61   the open databa
1900: 73 65 0a 2a 2a 20 44 42 2e 20 20 54 68 65 20 53  se.** DB.  The S
1910: 51 4c 20 69 73 20 74 68 65 20 73 74 72 69 6e 67  QL is the string
1920: 20 46 4f 52 4d 41 54 2e 20 20 54 68 65 20 66 6f   FORMAT.  The fo
1930: 72 6d 61 74 20 73 74 72 69 6e 67 20 73 68 6f 75  rmat string shou
1940: 6c 64 20 63 6f 6e 74 61 69 6e 0a 2a 2a 20 6f 6e  ld contain.** on
1950: 65 20 25 73 20 6f 72 20 25 71 2e 20 20 53 54 52  e %s or %q.  STR
1960: 49 4e 47 20 69 73 20 74 68 65 20 76 61 6c 75 65  ING is the value
1970: 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 25   inserted into %
1980: 73 20 6f 72 20 25 71 2e 0a 2a 2f 0a 73 74 61 74  s or %q..*/.stat
1990: 69 63 20 69 6e 74 20 74 65 73 74 5f 65 78 65 63  ic int test_exec
19a0: 5f 70 72 69 6e 74 66 28 0a 20 20 76 6f 69 64 20  _printf(.  void 
19b0: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f  *NotUsed,.  Tcl_
19c0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
19d0: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
19e0: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
19f0: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
1a00: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67  and */.  int arg
1a10: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
1a20: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
1a30: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72  uments */.  char
1a40: 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20   **argv         
1a50: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61     /* Text of ea
1a60: 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29  ch argument */.)
1a70: 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
1a80: 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 20 73  .  Tcl_DString s
1a90: 74 72 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  tr;.  int rc;.  
1aa0: 63 68 61 72 20 2a 7a 45 72 72 20 3d 20 30 3b 0a  char *zErr = 0;.
1ab0: 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20    char *zSql;.  
1ac0: 63 68 61 72 20 7a 42 75 66 5b 33 30 5d 3b 0a 20  char zBuf[30];. 
1ad0: 20 69 66 28 20 61 72 67 63 21 3d 34 20 29 7b 0a   if( argc!=4 ){.
1ae0: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
1af0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
1b00: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
1b10: 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
1b20: 30 5d 2c 20 0a 20 20 20 20 20 20 20 22 20 44 42  0], .       " DB
1b30: 20 46 4f 52 4d 41 54 20 53 54 52 49 4e 47 22 2c   FORMAT STRING",
1b40: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
1b50: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
1b60: 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
1b70: 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31  r(interp, argv[1
1b80: 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e  ], &db) ) return
1b90: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63   TCL_ERROR;.  Tc
1ba0: 6c 5f 44 53 74 72 69 6e 67 49 6e 69 74 28 26 73  l_DStringInit(&s
1bb0: 74 72 29 3b 0a 20 20 7a 53 71 6c 20 3d 20 73 71  tr);.  zSql = sq
1bc0: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 61 72  lite3_mprintf(ar
1bd0: 67 76 5b 32 5d 2c 20 61 72 67 76 5b 33 5d 29 3b  gv[2], argv[3]);
1be0: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
1bf0: 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20 65  exec(db, zSql, e
1c00: 78 65 63 5f 70 72 69 6e 74 66 5f 63 62 2c 20 26  xec_printf_cb, &
1c10: 73 74 72 2c 20 26 7a 45 72 72 29 3b 0a 20 20 73  str, &zErr);.  s
1c20: 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53 71 6c  qlite3_free(zSql
1c30: 29 3b 0a 20 20 73 70 72 69 6e 74 66 28 7a 42 75  );.  sprintf(zBu
1c40: 66 2c 20 22 25 64 22 2c 20 72 63 29 3b 0a 20 20  f, "%d", rc);.  
1c50: 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e  Tcl_AppendElemen
1c60: 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 29 3b  t(interp, zBuf);
1c70: 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65  .  Tcl_AppendEle
1c80: 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 72 63 3d  ment(interp, rc=
1c90: 3d 53 51 4c 49 54 45 5f 4f 4b 20 3f 20 54 63 6c  =SQLITE_OK ? Tcl
1ca0: 5f 44 53 74 72 69 6e 67 56 61 6c 75 65 28 26 73  _DStringValue(&s
1cb0: 74 72 29 20 3a 20 7a 45 72 72 29 3b 0a 20 20 54  tr) : zErr);.  T
1cc0: 63 6c 5f 44 53 74 72 69 6e 67 46 72 65 65 28 26  cl_DStringFree(&
1cd0: 73 74 72 29 3b 0a 20 20 69 66 28 20 7a 45 72 72  str);.  if( zErr
1ce0: 20 29 20 66 72 65 65 28 7a 45 72 72 29 3b 0a 20   ) free(zErr);. 
1cf0: 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74   if( sqlite3Test
1d00: 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20  ErrCode(interp, 
1d10: 64 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e  db, rc) ) return
1d20: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65   TCL_ERROR;.  re
1d30: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
1d40: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
1d50: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 7a 5f  lite3_mprintf_z_
1d60: 74 65 73 74 20 20 53 45 50 41 52 41 54 4f 52 20  test  SEPARATOR 
1d70: 20 41 52 47 30 20 20 41 52 47 31 20 2e 2e 2e 0a   ARG0  ARG1 ....
1d80: 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 25  **.** Test the %
1d90: 7a 20 66 6f 72 6d 61 74 20 6f 66 20 6d 70 72 69  z format of mpri
1da0: 6e 74 66 28 29 2e 20 20 55 73 65 20 6d 75 6c 74  ntf().  Use mult
1db0: 69 70 6c 65 20 6d 70 72 69 6e 74 66 28 29 20 63  iple mprintf() c
1dc0: 61 6c 6c 73 20 74 6f 20 0a 2a 2a 20 63 6f 6e 63  alls to .** conc
1dd0: 61 74 65 6e 61 74 65 20 61 72 67 30 20 74 68 72  atenate arg0 thr
1de0: 6f 75 67 68 20 61 72 67 6e 20 75 73 69 6e 67 20  ough argn using 
1df0: 73 65 70 61 72 61 74 6f 72 20 61 73 20 74 68 65  separator as the
1e00: 20 73 65 70 61 72 61 74 6f 72 2e 0a 2a 2a 20 52   separator..** R
1e10: 65 74 75 72 6e 20 74 68 65 20 72 65 73 75 6c 74  eturn the result
1e20: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
1e30: 74 65 73 74 5f 6d 70 72 69 6e 74 66 5f 7a 28 0a  test_mprintf_z(.
1e40: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
1e50: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
1e60: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
1e70: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
1e80: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
1e90: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
1ea0: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
1eb0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1ec0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
1ed0: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
1ee0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
1ef0: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
1f00: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20  nt */.){.  char 
1f10: 2a 7a 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20  *zResult = 0;.  
1f20: 69 6e 74 20 69 3b 0a 0a 20 20 66 6f 72 28 69 3d  int i;..  for(i=
1f30: 32 3b 20 69 3c 61 72 67 63 3b 20 69 2b 2b 29 7b  2; i<argc; i++){
1f40: 0a 20 20 20 20 7a 52 65 73 75 6c 74 20 3d 20 73  .    zResult = s
1f50: 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 22 25  qlite3MPrintf("%
1f60: 7a 25 73 25 73 22 2c 20 7a 52 65 73 75 6c 74 2c  z%s%s", zResult,
1f70: 20 61 72 67 76 5b 31 5d 2c 20 61 72 67 76 5b 69   argv[1], argv[i
1f80: 5d 29 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 41 70  ]);.  }.  Tcl_Ap
1f90: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
1fa0: 70 2c 20 7a 52 65 73 75 6c 74 2c 20 30 29 3b 0a  p, zResult, 0);.
1fb0: 20 20 73 71 6c 69 74 65 46 72 65 65 28 7a 52 65    sqliteFree(zRe
1fc0: 73 75 6c 74 29 3b 0a 20 20 72 65 74 75 72 6e 20  sult);.  return 
1fd0: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
1fe0: 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33   Usage:  sqlite3
1ff0: 5f 67 65 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74  _get_table_print
2000: 66 20 20 44 42 20 20 46 4f 52 4d 41 54 20 20 53  f  DB  FORMAT  S
2010: 54 52 49 4e 47 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f  TRING.**.** Invo
2020: 6b 65 20 74 68 65 20 73 71 6c 69 74 65 33 5f 67  ke the sqlite3_g
2030: 65 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74 66 28  et_table_printf(
2040: 29 20 69 6e 74 65 72 66 61 63 65 20 75 73 69 6e  ) interface usin
2050: 67 20 74 68 65 20 6f 70 65 6e 20 64 61 74 61 62  g the open datab
2060: 61 73 65 0a 2a 2a 20 44 42 2e 20 20 54 68 65 20  ase.** DB.  The 
2070: 53 51 4c 20 69 73 20 74 68 65 20 73 74 72 69 6e  SQL is the strin
2080: 67 20 46 4f 52 4d 41 54 2e 20 20 54 68 65 20 66  g FORMAT.  The f
2090: 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 73 68 6f  ormat string sho
20a0: 75 6c 64 20 63 6f 6e 74 61 69 6e 0a 2a 2a 20 6f  uld contain.** o
20b0: 6e 65 20 25 73 20 6f 72 20 25 71 2e 20 20 53 54  ne %s or %q.  ST
20c0: 52 49 4e 47 20 69 73 20 74 68 65 20 76 61 6c 75  RING is the valu
20d0: 65 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20  e inserted into 
20e0: 25 73 20 6f 72 20 25 71 2e 0a 2a 2f 0a 73 74 61  %s or %q..*/.sta
20f0: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 67 65 74  tic int test_get
2100: 5f 74 61 62 6c 65 5f 70 72 69 6e 74 66 28 0a 20  _table_printf(. 
2110: 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a   void *NotUsed,.
2120: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
2130: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
2140: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
2150: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
2160: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
2170: 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20  nt argc,        
2180: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
2190: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
21a0: 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20    char **argv   
21b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
21c0: 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e   of each argumen
21d0: 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65  t */.){.  sqlite
21e0: 33 20 2a 64 62 3b 0a 20 20 54 63 6c 5f 44 53 74  3 *db;.  Tcl_DSt
21f0: 72 69 6e 67 20 73 74 72 3b 0a 20 20 69 6e 74 20  ring str;.  int 
2200: 72 63 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72  rc;.  char *zErr
2210: 20 3d 20 30 3b 0a 20 20 69 6e 74 20 6e 52 6f 77   = 0;.  int nRow
2220: 2c 20 6e 43 6f 6c 3b 0a 20 20 63 68 61 72 20 2a  , nCol;.  char *
2230: 2a 61 52 65 73 75 6c 74 3b 0a 20 20 69 6e 74 20  *aResult;.  int 
2240: 69 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 33  i;.  char zBuf[3
2250: 30 5d 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c  0];.  char *zSql
2260: 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 34 20  ;.  if( argc!=4 
2270: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
2280: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
2290: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
22a0: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72  hould be \"", ar
22b0: 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 22  gv[0], .       "
22c0: 20 44 42 20 46 4f 52 4d 41 54 20 53 54 52 49 4e   DB FORMAT STRIN
22d0: 47 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  G", 0);.    retu
22e0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
22f0: 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  }.  if( getDbPoi
2300: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67  nter(interp, arg
2310: 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74  v[1], &db) ) ret
2320: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
2330: 20 54 63 6c 5f 44 53 74 72 69 6e 67 49 6e 69 74   Tcl_DStringInit
2340: 28 26 73 74 72 29 3b 0a 20 20 7a 53 71 6c 20 3d  (&str);.  zSql =
2350: 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
2360: 28 61 72 67 76 5b 32 5d 2c 61 72 67 76 5b 33 5d  (argv[2],argv[3]
2370: 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
2380: 33 5f 67 65 74 5f 74 61 62 6c 65 28 64 62 2c 20  3_get_table(db, 
2390: 7a 53 71 6c 2c 20 26 61 52 65 73 75 6c 74 2c 20  zSql, &aResult, 
23a0: 26 6e 52 6f 77 2c 20 26 6e 43 6f 6c 2c 20 26 7a  &nRow, &nCol, &z
23b0: 45 72 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  Err);.  sqlite3_
23c0: 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 73 70  free(zSql);.  sp
23d0: 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 25 64 22  rintf(zBuf, "%d"
23e0: 2c 20 72 63 29 3b 0a 20 20 54 63 6c 5f 41 70 70  , rc);.  Tcl_App
23f0: 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72  endElement(inter
2400: 70 2c 20 7a 42 75 66 29 3b 0a 20 20 69 66 28 20  p, zBuf);.  if( 
2410: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
2420: 0a 20 20 20 20 73 70 72 69 6e 74 66 28 7a 42 75  .    sprintf(zBu
2430: 66 2c 20 22 25 64 22 2c 20 6e 52 6f 77 29 3b 0a  f, "%d", nRow);.
2440: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c      Tcl_AppendEl
2450: 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 7a 42  ement(interp, zB
2460: 75 66 29 3b 0a 20 20 20 20 73 70 72 69 6e 74 66  uf);.    sprintf
2470: 28 7a 42 75 66 2c 20 22 25 64 22 2c 20 6e 43 6f  (zBuf, "%d", nCo
2480: 6c 29 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65  l);.    Tcl_Appe
2490: 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70  ndElement(interp
24a0: 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20 66 6f 72  , zBuf);.    for
24b0: 28 69 3d 30 3b 20 69 3c 28 6e 52 6f 77 2b 31 29  (i=0; i<(nRow+1)
24c0: 2a 6e 43 6f 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20  *nCol; i++){.   
24d0: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65     Tcl_AppendEle
24e0: 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 61 52 65  ment(interp, aRe
24f0: 73 75 6c 74 5b 69 5d 20 3f 20 61 52 65 73 75 6c  sult[i] ? aResul
2500: 74 5b 69 5d 20 3a 20 22 4e 55 4c 4c 22 29 3b 0a  t[i] : "NULL");.
2510: 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
2520: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65     Tcl_AppendEle
2530: 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 7a 45 72  ment(interp, zEr
2540: 72 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  r);.  }.  sqlite
2550: 33 5f 66 72 65 65 5f 74 61 62 6c 65 28 61 52 65  3_free_table(aRe
2560: 73 75 6c 74 29 3b 0a 20 20 69 66 28 20 7a 45 72  sult);.  if( zEr
2570: 72 20 29 20 66 72 65 65 28 7a 45 72 72 29 3b 0a  r ) free(zErr);.
2580: 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73    if( sqlite3Tes
2590: 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c  tErrCode(interp,
25a0: 20 64 62 2c 20 72 63 29 20 29 20 72 65 74 75 72   db, rc) ) retur
25b0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72  n TCL_ERROR;.  r
25c0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
25d0: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
25e0: 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73  sqlite3_last_ins
25f0: 65 72 74 5f 72 6f 77 69 64 20 44 42 0a 2a 2a 0a  ert_rowid DB.**.
2600: 2a 2a 20 52 65 74 75 72 6e 73 20 74 68 65 20 69  ** Returns the i
2610: 6e 74 65 67 65 72 20 52 4f 57 49 44 20 6f 66 20  nteger ROWID of 
2620: 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
2630: 69 6e 73 65 72 74 2e 0a 2a 2f 0a 73 74 61 74 69  insert..*/.stati
2640: 63 20 69 6e 74 20 74 65 73 74 5f 6c 61 73 74 5f  c int test_last_
2650: 72 6f 77 69 64 28 0a 20 20 76 6f 69 64 20 2a 4e  rowid(.  void *N
2660: 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e  otUsed,.  Tcl_In
2670: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
2680: 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
2690: 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
26a0: 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
26b0: 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c  d */.  int argc,
26c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
26d0: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
26e0: 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ents */.  char *
26f0: 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20  *argv           
2700: 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68   /* Text of each
2710: 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a   argument */.){.
2720: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
2730: 20 63 68 61 72 20 7a 42 75 66 5b 33 30 5d 3b 0a   char zBuf[30];.
2740: 0a 20 20 69 66 28 20 61 72 67 63 21 3d 32 20 29  .  if( argc!=2 )
2750: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
2760: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
2770: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
2780: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
2790: 76 5b 30 5d 2c 20 22 20 44 42 5c 22 22 2c 20 30  v[0], " DB\"", 0
27a0: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
27b0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
27c0: 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
27d0: 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c  interp, argv[1],
27e0: 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
27f0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 73 70 72 69  CL_ERROR;.  spri
2800: 6e 74 66 28 7a 42 75 66 2c 20 22 25 6c 6c 64 22  ntf(zBuf, "%lld"
2810: 2c 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69  , sqlite3_last_i
2820: 6e 73 65 72 74 5f 72 6f 77 69 64 28 64 62 29 29  nsert_rowid(db))
2830: 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65  ;.  Tcl_AppendRe
2840: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75  sult(interp, zBu
2850: 66 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20  f, 0);.  return 
2860: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  SQLITE_OK;.}../*
2870: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
2880: 74 65 33 5f 6b 65 79 20 44 42 20 4b 45 59 0a 2a  te3_key DB KEY.*
2890: 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 63 6f 64  *.** Set the cod
28a0: 65 63 20 6b 65 79 2e 0a 2a 2f 0a 73 74 61 74 69  ec key..*/.stati
28b0: 63 20 69 6e 74 20 74 65 73 74 5f 6b 65 79 28 0a  c int test_key(.
28c0: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
28d0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
28e0: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
28f0: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
2900: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
2910: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
2920: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
2930: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
2940: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
2950: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
2960: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
2970: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
2980: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74  nt */.){.  sqlit
2990: 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20  e3 *db;.  const 
29a0: 63 68 61 72 20 2a 7a 4b 65 79 3b 0a 20 20 69 6e  char *zKey;.  in
29b0: 74 20 6e 4b 65 79 3b 0a 20 20 69 66 28 20 61 72  t nKey;.  if( ar
29c0: 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=3 ){.    Tcl
29d0: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
29e0: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
29f0: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
2a00: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20  "", argv[0],.   
2a10: 20 20 20 20 22 20 46 49 4c 45 4e 41 4d 45 5c 22      " FILENAME\"
2a20: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
2a30: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
2a40: 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e  .  if( getDbPoin
2a50: 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76  ter(interp, argv
2a60: 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75  [1], &db) ) retu
2a70: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
2a80: 7a 4b 65 79 20 3d 20 61 72 67 76 5b 32 5d 3b 0a  zKey = argv[2];.
2a90: 20 20 6e 4b 65 79 20 3d 20 73 74 72 6c 65 6e 28    nKey = strlen(
2aa0: 7a 4b 65 79 29 3b 0a 23 69 66 64 65 66 20 53 51  zKey);.#ifdef SQ
2ab0: 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20  LITE_HAS_CODEC. 
2ac0: 20 73 71 6c 69 74 65 33 5f 6b 65 79 28 64 62 2c   sqlite3_key(db,
2ad0: 20 7a 4b 65 79 2c 20 6e 4b 65 79 29 3b 0a 23 65   zKey, nKey);.#e
2ae0: 6e 64 69 66 0a 20 20 72 65 74 75 72 6e 20 54 43  ndif.  return TC
2af0: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
2b00: 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 72  sage:  sqlite3_r
2b10: 65 6b 65 79 20 44 42 20 4b 45 59 0a 2a 2a 0a 2a  ekey DB KEY.**.*
2b20: 2a 20 43 68 61 6e 67 65 20 74 68 65 20 63 6f 64  * Change the cod
2b30: 65 63 20 6b 65 79 2e 0a 2a 2f 0a 73 74 61 74 69  ec key..*/.stati
2b40: 63 20 69 6e 74 20 74 65 73 74 5f 72 65 6b 65 79  c int test_rekey
2b50: 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65  (.  void *NotUse
2b60: 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  d,.  Tcl_Interp 
2b70: 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
2b80: 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
2b90: 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
2ba0: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
2bb0: 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20    int argc,     
2bc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
2bd0: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
2be0: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  */.  char **argv
2bf0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
2c00: 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75  ext of each argu
2c10: 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c  ment */.){.  sql
2c20: 69 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73  ite3 *db;.  cons
2c30: 74 20 63 68 61 72 20 2a 7a 4b 65 79 3b 0a 20 20  t char *zKey;.  
2c40: 69 6e 74 20 6e 4b 65 79 3b 0a 20 20 69 66 28 20  int nKey;.  if( 
2c50: 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54  argc!=3 ){.    T
2c60: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
2c70: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
2c80: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
2c90: 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20   \"", argv[0],. 
2ca0: 20 20 20 20 20 20 22 20 46 49 4c 45 4e 41 4d 45        " FILENAME
2cb0: 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  \"", 0);.    ret
2cc0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
2cd0: 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f   }.  if( getDbPo
2ce0: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72  inter(interp, ar
2cf0: 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65  gv[1], &db) ) re
2d00: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
2d10: 20 20 7a 4b 65 79 20 3d 20 61 72 67 76 5b 32 5d    zKey = argv[2]
2d20: 3b 0a 20 20 6e 4b 65 79 20 3d 20 73 74 72 6c 65  ;.  nKey = strle
2d30: 6e 28 7a 4b 65 79 29 3b 0a 23 69 66 64 65 66 20  n(zKey);.#ifdef 
2d40: 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43  SQLITE_HAS_CODEC
2d50: 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 6b 65 79  .  sqlite3_rekey
2d60: 28 64 62 2c 20 7a 4b 65 79 2c 20 6e 4b 65 79 29  (db, zKey, nKey)
2d70: 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72  ;.#endif.  retur
2d80: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
2d90: 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
2da0: 65 33 5f 63 6c 6f 73 65 20 44 42 0a 2a 2a 0a 2a  e3_close DB.**.*
2db0: 2a 20 43 6c 6f 73 65 73 20 74 68 65 20 64 61 74  * Closes the dat
2dc0: 61 62 61 73 65 20 6f 70 65 6e 65 64 20 62 79 20  abase opened by 
2dd0: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 2e 0a 2a 2f  sqlite3_open..*/
2de0: 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69  .static int sqli
2df0: 74 65 5f 74 65 73 74 5f 63 6c 6f 73 65 28 0a 20  te_test_close(. 
2e00: 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a   void *NotUsed,.
2e10: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
2e20: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
2e30: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
2e40: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
2e50: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
2e60: 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20  nt argc,        
2e70: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
2e80: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
2e90: 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20    char **argv   
2ea0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
2eb0: 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e   of each argumen
2ec0: 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65  t */.){.  sqlite
2ed0: 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b  3 *db;.  int rc;
2ee0: 0a 20 20 69 66 28 20 61 72 67 63 21 3d 32 20 29  .  if( argc!=2 )
2ef0: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
2f00: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
2f10: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
2f20: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
2f30: 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46  v[0],.       " F
2f40: 49 4c 45 4e 41 4d 45 5c 22 22 2c 20 30 29 3b 0a  ILENAME\"", 0);.
2f50: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
2f60: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
2f70: 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
2f80: 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64  erp, argv[1], &d
2f90: 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
2fa0: 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71  ERROR;.  rc = sq
2fb0: 6c 69 74 65 33 5f 63 6c 6f 73 65 28 64 62 29 3b  lite3_close(db);
2fc0: 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74  .  Tcl_SetResult
2fd0: 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a  (interp, (char *
2fe0: 29 65 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20  )errorName(rc), 
2ff0: 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20 72  TCL_STATIC);.  r
3000: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
3010: 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c 65 6d 65 6e 74  ./*.** Implement
3020: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 78 5f 63  ation of the x_c
3030: 6f 61 6c 65 73 63 65 28 29 20 66 75 6e 63 74 69  oalesce() functi
3040: 6f 6e 2e 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  on..** Return th
3050: 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  e first argument
3060: 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d 65   non-NULL argume
3070: 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  nt..*/.static vo
3080: 69 64 20 69 66 6e 75 6c 6c 46 75 6e 63 28 73 71  id ifnullFunc(sq
3090: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63  lite3_context *c
30a0: 6f 6e 74 65 78 74 2c 20 69 6e 74 20 61 72 67 63  ontext, int argc
30b0: 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  , sqlite3_value 
30c0: 2a 2a 61 72 67 76 29 7b 0a 20 20 69 6e 74 20 69  **argv){.  int i
30d0: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 61  ;.  for(i=0; i<a
30e0: 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  rgc; i++){.    i
30f0: 66 28 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 21 3d  f( SQLITE_NULL!=
3100: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79  sqlite3_value_ty
3110: 70 65 28 61 72 67 76 5b 69 5d 29 20 29 7b 0a 20  pe(argv[i]) ){. 
3120: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73       sqlite3_res
3130: 75 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65 78 74  ult_text(context
3140: 2c 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33  , (char*)sqlite3
3150: 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67 76  _value_text(argv
3160: 5b 69 5d 29 2c 0a 20 20 20 20 20 20 20 20 20 20  [i]),.          
3170: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79  sqlite3_value_by
3180: 74 65 73 28 61 72 67 76 5b 69 5d 29 2c 20 53 51  tes(argv[i]), SQ
3190: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
31a0: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
31b0: 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a    }.  }.}../*.**
31c0: 20 41 20 73 74 72 75 63 74 75 72 65 20 69 6e 74   A structure int
31d0: 6f 20 77 68 69 63 68 20 74 6f 20 61 63 63 75 6d  o which to accum
31e0: 75 6c 61 74 65 20 74 65 78 74 2e 0a 2a 2f 0a 73  ulate text..*/.s
31f0: 74 72 75 63 74 20 64 73 74 72 20 7b 0a 20 20 69  truct dstr {.  i
3200: 6e 74 20 6e 41 6c 6c 6f 63 3b 20 20 2f 2a 20 53  nt nAlloc;  /* S
3210: 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 2a  pace allocated *
3220: 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20  /.  int nUsed;  
3230: 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20 2a   /* Space used *
3240: 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20  /.  char *z;    
3250: 20 2f 2a 20 54 68 65 20 73 70 61 63 65 20 2a 2f   /* The space */
3260: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 70 70 65 6e  .};../*.** Appen
3270: 64 20 74 65 78 74 20 74 6f 20 61 20 64 73 74 72  d text to a dstr
3280: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
3290: 64 73 74 72 41 70 70 65 6e 64 28 73 74 72 75 63  dstrAppend(struc
32a0: 74 20 64 73 74 72 20 2a 70 2c 20 63 6f 6e 73 74  t dstr *p, const
32b0: 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 64 69   char *z, int di
32c0: 76 69 64 65 72 29 7b 0a 20 20 69 6e 74 20 6e 20  vider){.  int n 
32d0: 3d 20 73 74 72 6c 65 6e 28 7a 29 3b 0a 20 20 69  = strlen(z);.  i
32e0: 66 28 20 70 2d 3e 6e 55 73 65 64 20 2b 20 6e 20  f( p->nUsed + n 
32f0: 2b 20 32 20 3e 20 70 2d 3e 6e 41 6c 6c 6f 63 20  + 2 > p->nAlloc 
3300: 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 65  ){.    char *zNe
3310: 77 3b 0a 20 20 20 20 70 2d 3e 6e 41 6c 6c 6f 63  w;.    p->nAlloc
3320: 20 3d 20 70 2d 3e 6e 41 6c 6c 6f 63 2a 32 20 2b   = p->nAlloc*2 +
3330: 20 6e 20 2b 20 32 30 30 3b 0a 20 20 20 20 7a 4e   n + 200;.    zN
3340: 65 77 20 3d 20 73 71 6c 69 74 65 52 65 61 6c 6c  ew = sqliteReall
3350: 6f 63 28 70 2d 3e 7a 2c 20 70 2d 3e 6e 41 6c 6c  oc(p->z, p->nAll
3360: 6f 63 29 3b 0a 20 20 20 20 69 66 28 20 7a 4e 65  oc);.    if( zNe
3370: 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71  w==0 ){.      sq
3380: 6c 69 74 65 46 72 65 65 28 70 2d 3e 7a 29 3b 0a  liteFree(p->z);.
3390: 20 20 20 20 20 20 6d 65 6d 73 65 74 28 70 2c 20        memset(p, 
33a0: 30 2c 20 73 69 7a 65 6f 66 28 2a 70 29 29 3b 0a  0, sizeof(*p));.
33b0: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20        return;.  
33c0: 20 20 7d 0a 20 20 20 20 70 2d 3e 7a 20 3d 20 7a    }.    p->z = z
33d0: 4e 65 77 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64  New;.  }.  if( d
33e0: 69 76 69 64 65 72 20 26 26 20 70 2d 3e 6e 55 73  ivider && p->nUs
33f0: 65 64 3e 30 20 29 7b 0a 20 20 20 20 70 2d 3e 7a  ed>0 ){.    p->z
3400: 5b 70 2d 3e 6e 55 73 65 64 2b 2b 5d 20 3d 20 64  [p->nUsed++] = d
3410: 69 76 69 64 65 72 3b 0a 20 20 7d 0a 20 20 6d 65  ivider;.  }.  me
3420: 6d 63 70 79 28 26 70 2d 3e 7a 5b 70 2d 3e 6e 55  mcpy(&p->z[p->nU
3430: 73 65 64 5d 2c 20 7a 2c 20 6e 2b 31 29 3b 0a 20  sed], z, n+1);. 
3440: 20 70 2d 3e 6e 55 73 65 64 20 2b 3d 20 6e 3b 0a   p->nUsed += n;.
3450: 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 64  }../*.** Invoked
3460: 20 66 6f 72 20 65 61 63 68 20 63 61 6c 6c 62 61   for each callba
3470: 63 6b 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 45  ck from sqlite3E
3480: 78 65 63 46 75 6e 63 0a 2a 2f 0a 73 74 61 74 69  xecFunc.*/.stati
3490: 63 20 69 6e 74 20 65 78 65 63 46 75 6e 63 43 61  c int execFuncCa
34a0: 6c 6c 62 61 63 6b 28 76 6f 69 64 20 2a 70 44 61  llback(void *pDa
34b0: 74 61 2c 20 69 6e 74 20 61 72 67 63 2c 20 63 68  ta, int argc, ch
34c0: 61 72 20 2a 2a 61 72 67 76 2c 20 63 68 61 72 20  ar **argv, char 
34d0: 2a 2a 4e 6f 74 55 73 65 64 29 7b 0a 20 20 73 74  **NotUsed){.  st
34e0: 72 75 63 74 20 64 73 74 72 20 2a 70 20 3d 20 28  ruct dstr *p = (
34f0: 73 74 72 75 63 74 20 64 73 74 72 2a 29 70 44 61  struct dstr*)pDa
3500: 74 61 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 66  ta;.  int i;.  f
3510: 6f 72 28 69 3d 30 3b 20 69 3c 61 72 67 63 3b 20  or(i=0; i<argc; 
3520: 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 61 72  i++){.    if( ar
3530: 67 76 5b 69 5d 3d 3d 30 20 29 7b 0a 20 20 20 20  gv[i]==0 ){.    
3540: 20 20 64 73 74 72 41 70 70 65 6e 64 28 70 2c 20    dstrAppend(p, 
3550: 22 4e 55 4c 4c 22 2c 20 27 20 27 29 3b 0a 20 20  "NULL", ' ');.  
3560: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64    }else{.      d
3570: 73 74 72 41 70 70 65 6e 64 28 70 2c 20 61 72 67  strAppend(p, arg
3580: 76 5b 69 5d 2c 20 27 20 27 29 3b 0a 20 20 20 20  v[i], ' ');.    
3590: 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30  }.  }.  return 0
35a0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c 65  ;.}../*.** Imple
35b0: 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  mentation of the
35c0: 20 78 5f 73 71 6c 69 74 65 5f 65 78 65 63 28 29   x_sqlite_exec()
35d0: 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 69 73   function.  This
35e0: 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73 0a   function takes.
35f0: 2a 2a 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75  ** a single argu
3600: 6d 65 6e 74 20 61 6e 64 20 61 74 74 65 6d 70 74  ment and attempt
3610: 73 20 74 6f 20 65 78 65 63 75 74 65 20 74 68 61  s to execute tha
3620: 74 20 61 72 67 75 6d 65 6e 74 20 61 73 20 53 51  t argument as SQ
3630: 4c 20 63 6f 64 65 2e 0a 2a 2a 20 54 68 69 73 20  L code..** This 
3640: 69 73 20 69 6c 6c 65 67 61 6c 20 61 6e 64 20 73  is illegal and s
3650: 68 6f 75 6c 64 20 73 65 74 20 74 68 65 20 53 51  hould set the SQ
3660: 4c 49 54 45 5f 4d 49 53 55 53 45 20 66 6c 61 67  LITE_MISUSE flag
3670: 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
3680: 2e 0a 2a 2a 0a 2a 2a 20 32 30 30 34 2d 4a 61 6e  ..**.** 2004-Jan
3690: 2d 30 37 3a 20 20 57 65 20 68 61 76 65 20 63 68  -07:  We have ch
36a0: 61 6e 67 65 64 20 74 68 69 73 20 74 6f 20 6d 61  anged this to ma
36b0: 6b 65 20 69 74 20 6c 65 67 61 6c 20 74 6f 20 63  ke it legal to c
36c0: 61 6c 6c 20 73 71 6c 69 74 65 33 5f 65 78 65 63  all sqlite3_exec
36d0: 28 29 0a 2a 2a 20 66 72 6f 6d 20 77 69 74 68 69  ().** from withi
36e0: 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 63 61 6c  n a function cal
36f0: 6c 2e 20 20 0a 2a 2a 20 0a 2a 2a 20 54 68 69 73  l.  .** .** This
3700: 20 72 6f 75 74 69 6e 65 20 73 69 6d 75 6c 61 74   routine simulat
3710: 65 73 20 74 68 65 20 65 66 66 65 63 74 20 6f 66  es the effect of
3720: 20 68 61 76 69 6e 67 20 74 77 6f 20 74 68 72 65   having two thre
3730: 61 64 73 20 61 74 74 65 6d 70 74 20 74 6f 0a 2a  ads attempt to.*
3740: 2a 20 75 73 65 20 74 68 65 20 73 61 6d 65 20 64  * use the same d
3750: 61 74 61 62 61 73 65 20 61 74 20 74 68 65 20 73  atabase at the s
3760: 61 6d 65 20 74 69 6d 65 2e 0a 2a 2f 0a 73 74 61  ame time..*/.sta
3770: 74 69 63 20 76 6f 69 64 20 73 71 6c 69 74 65 33  tic void sqlite3
3780: 45 78 65 63 46 75 6e 63 28 0a 20 20 73 71 6c 69  ExecFunc(.  sqli
3790: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e  te3_context *con
37a0: 74 65 78 74 2c 20 0a 20 20 69 6e 74 20 61 72 67  text, .  int arg
37b0: 63 2c 20 20 0a 20 20 73 71 6c 69 74 65 33 5f 76  c,  .  sqlite3_v
37c0: 61 6c 75 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20  alue **argv.){. 
37d0: 20 73 74 72 75 63 74 20 64 73 74 72 20 78 3b 0a   struct dstr x;.
37e0: 20 20 6d 65 6d 73 65 74 28 26 78 2c 20 30 2c 20    memset(&x, 0, 
37f0: 73 69 7a 65 6f 66 28 78 29 29 3b 0a 20 20 73 71  sizeof(x));.  sq
3800: 6c 69 74 65 33 5f 65 78 65 63 28 28 73 71 6c 69  lite3_exec((sqli
3810: 74 65 33 2a 29 73 71 6c 69 74 65 33 5f 75 73 65  te3*)sqlite3_use
3820: 72 5f 64 61 74 61 28 63 6f 6e 74 65 78 74 29 2c  r_data(context),
3830: 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 73 71  .      (char*)sq
3840: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
3850: 28 61 72 67 76 5b 30 5d 29 2c 0a 20 20 20 20 20  (argv[0]),.     
3860: 20 65 78 65 63 46 75 6e 63 43 61 6c 6c 62 61 63   execFuncCallbac
3870: 6b 2c 20 26 78 2c 20 30 29 3b 0a 20 20 73 71 6c  k, &x, 0);.  sql
3880: 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74  ite3_result_text
3890: 28 63 6f 6e 74 65 78 74 2c 20 78 2e 7a 2c 20 78  (context, x.z, x
38a0: 2e 6e 55 73 65 64 2c 20 53 51 4c 49 54 45 5f 54  .nUsed, SQLITE_T
38b0: 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 73 71 6c  RANSIENT);.  sql
38c0: 69 74 65 46 72 65 65 28 78 2e 7a 29 3b 0a 7d 0a  iteFree(x.z);.}.
38d0: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
38e0: 71 6c 69 74 65 5f 74 65 73 74 5f 63 72 65 61 74  qlite_test_creat
38f0: 65 5f 66 75 6e 63 74 69 6f 6e 20 44 42 0a 2a 2a  e_function DB.**
3900: 0a 2a 2a 20 43 61 6c 6c 20 74 68 65 20 73 71 6c  .** Call the sql
3910: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
3920: 74 69 6f 6e 20 41 50 49 20 6f 6e 20 74 68 65 20  tion API on the 
3930: 67 69 76 65 6e 20 64 61 74 61 62 61 73 65 20 69  given database i
3940: 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 63 72  n order.** to cr
3950: 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20  eate a function 
3960: 6e 61 6d 65 64 20 22 78 5f 63 6f 61 6c 65 73 63  named "x_coalesc
3970: 65 22 2e 20 20 54 68 69 73 20 66 75 6e 63 74 69  e".  This functi
3980: 6f 6e 20 64 6f 65 73 20 74 68 65 20 73 61 6d 65  on does the same
3990: 20 74 68 69 6e 67 0a 2a 2a 20 61 73 20 74 68 65   thing.** as the
39a0: 20 22 63 6f 61 6c 65 73 63 65 22 20 66 75 6e 63   "coalesce" func
39b0: 74 69 6f 6e 2e 20 20 54 68 69 73 20 66 75 6e 63  tion.  This func
39c0: 74 69 6f 6e 20 61 6c 73 6f 20 72 65 67 69 73 74  tion also regist
39d0: 65 72 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74  ers an SQL funct
39e0: 69 6f 6e 0a 2a 2a 20 6e 61 6d 65 64 20 22 78 5f  ion.** named "x_
39f0: 73 71 6c 69 74 65 5f 65 78 65 63 22 20 74 68 61  sqlite_exec" tha
3a00: 74 20 69 6e 76 6f 6b 65 73 20 73 71 6c 69 74 65  t invokes sqlite
3a10: 33 5f 65 78 65 63 28 29 2e 20 20 49 6e 76 6f 6b  3_exec().  Invok
3a20: 69 6e 67 20 73 71 6c 69 74 65 33 5f 65 78 65 63  ing sqlite3_exec
3a30: 28 29 0a 2a 2a 20 69 6e 20 74 68 69 73 20 77 61  ().** in this wa
3a40: 79 20 69 73 20 69 6c 6c 65 67 61 6c 20 72 65 63  y is illegal rec
3a50: 75 72 73 69 6f 6e 20 61 6e 64 20 73 68 6f 75 6c  ursion and shoul
3a60: 64 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54  d raise an SQLIT
3a70: 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 2e 0a  E_MISUSE error..
3a80: 2a 2a 20 54 68 65 20 65 66 66 65 63 74 20 69 73  ** The effect is
3a90: 20 73 69 6d 69 6c 61 72 20 74 6f 20 74 72 79 69   similar to tryi
3aa0: 6e 67 20 74 6f 20 75 73 65 20 74 68 65 20 73 61  ng to use the sa
3ab0: 6d 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  me database conn
3ac0: 65 63 74 69 6f 6e 20 66 72 6f 6d 0a 2a 2a 20 74  ection from.** t
3ad0: 77 6f 20 74 68 72 65 61 64 73 20 61 74 20 74 68  wo threads at th
3ae0: 65 20 73 61 6d 65 20 74 69 6d 65 2e 0a 2a 2a 0a  e same time..**.
3af0: 2a 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20  ** The original 
3b00: 6d 6f 74 69 76 61 74 69 6f 6e 20 66 6f 72 20 74  motivation for t
3b10: 68 69 73 20 72 6f 75 74 69 6e 65 20 77 61 73 20  his routine was 
3b20: 74 6f 20 62 65 20 61 62 6c 65 20 74 6f 20 63 61  to be able to ca
3b30: 6c 6c 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  ll the.** sqlite
3b40: 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
3b50: 6e 20 66 75 6e 63 74 69 6f 6e 20 77 68 69 6c 65  n function while
3b60: 20 61 20 71 75 65 72 79 20 69 73 20 69 6e 20 70   a query is in p
3b70: 72 6f 67 72 65 73 73 20 69 6e 20 6f 72 64 65 72  rogress in order
3b80: 0a 2a 2a 20 74 6f 20 74 65 73 74 20 74 68 65 20  .** to test the 
3b90: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 64 65  SQLITE_MISUSE de
3ba0: 74 65 63 74 69 6f 6e 20 6c 6f 67 69 63 2e 0a 2a  tection logic..*
3bb0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
3bc0: 74 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  t_create_functio
3bd0: 6e 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73  n(.  void *NotUs
3be0: 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ed,.  Tcl_Interp
3bf0: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
3c00: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
3c10: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
3c20: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
3c30: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20  .  int argc,    
3c40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
3c50: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
3c60: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67   */.  char **arg
3c70: 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  v            /* 
3c80: 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67  Text of each arg
3c90: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e  ument */.){.  in
3ca0: 74 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 20  t rc;.  sqlite3 
3cb0: 2a 64 62 3b 0a 20 20 65 78 74 65 72 6e 20 76 6f  *db;.  extern vo
3cc0: 69 64 20 4d 64 35 5f 52 65 67 69 73 74 65 72 28  id Md5_Register(
3cd0: 73 71 6c 69 74 65 33 2a 29 3b 0a 0a 20 20 69 66  sqlite3*);..  if
3ce0: 28 20 61 72 67 63 21 3d 32 20 29 7b 0a 20 20 20  ( argc!=2 ){.   
3cf0: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
3d00: 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
3d10: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
3d20: 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c  be \"", argv[0],
3d30: 0a 20 20 20 20 20 20 20 22 20 44 42 5c 22 22 2c  .       " DB\"",
3d40: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
3d50: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
3d60: 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
3d70: 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31  r(interp, argv[1
3d80: 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e  ], &db) ) return
3d90: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63   TCL_ERROR;.  rc
3da0: 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74   = sqlite3_creat
3db0: 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22  e_function(db, "
3dc0: 78 5f 63 6f 61 6c 65 73 63 65 22 2c 20 2d 31 2c  x_coalesce", -1,
3dd0: 20 53 51 4c 49 54 45 5f 41 4e 59 2c 20 30 2c 20   SQLITE_ANY, 0, 
3de0: 0a 20 20 20 20 20 20 20 20 69 66 6e 75 6c 6c 46  .        ifnullF
3df0: 75 6e 63 2c 20 30 2c 20 30 29 3b 0a 0a 23 69 66  unc, 0, 0);..#if
3e00: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
3e10: 5f 55 54 46 31 36 0a 20 20 2f 2a 20 55 73 65 20  _UTF16.  /* Use 
3e20: 74 68 65 20 73 71 6c 69 74 65 33 5f 63 72 65 61  the sqlite3_crea
3e30: 74 65 5f 66 75 6e 63 74 69 6f 6e 31 36 28 29 20  te_function16() 
3e40: 41 50 49 20 68 65 72 65 2e 20 4d 61 69 6e 6c 79  API here. Mainly
3e50: 20 66 6f 72 20 66 75 6e 2c 20 62 75 74 20 61 6c   for fun, but al
3e60: 73 6f 20 0a 20 20 2a 2a 20 62 65 63 61 75 73 65  so .  ** because
3e70: 20 69 74 20 69 73 20 6e 6f 74 20 74 65 73 74 65   it is not teste
3e80: 64 20 61 6e 79 77 68 65 72 65 20 65 6c 73 65 2e  d anywhere else.
3e90: 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   */.  if( rc==SQ
3ea0: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73  LITE_OK ){.    s
3eb0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56  qlite3_value *pV
3ec0: 61 6c 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  al;.#ifdef SQLIT
3ed0: 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 20 20 69  E_MEMDEBUG.    i
3ee0: 66 28 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c  f( sqlite3_iMall
3ef0: 6f 63 46 61 69 6c 3e 30 20 29 7b 0a 20 20 20 20  ocFail>0 ){.    
3f00: 20 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f    sqlite3_iMallo
3f10: 63 46 61 69 6c 2b 2b 3b 0a 20 20 20 20 7d 0a 23  cFail++;.    }.#
3f20: 65 6e 64 69 66 20 0a 20 20 20 20 70 56 61 6c 20  endif .    pVal 
3f30: 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65  = sqlite3ValueNe
3f40: 77 28 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  w();.    sqlite3
3f50: 56 61 6c 75 65 53 65 74 53 74 72 28 70 56 61 6c  ValueSetStr(pVal
3f60: 2c 20 2d 31 2c 20 22 78 5f 73 71 6c 69 74 65 5f  , -1, "x_sqlite_
3f70: 65 78 65 63 22 2c 20 53 51 4c 49 54 45 5f 55 54  exec", SQLITE_UT
3f80: 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  F8, SQLITE_STATI
3f90: 43 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  C);.    rc = sql
3fa0: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
3fb0: 74 69 6f 6e 31 36 28 64 62 2c 20 0a 20 20 20 20  tion16(db, .    
3fc0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
3fd0: 33 56 61 6c 75 65 54 65 78 74 28 70 56 61 6c 2c  3ValueText(pVal,
3fe0: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
3ff0: 49 56 45 29 2c 0a 20 20 20 20 20 20 20 20 20 20  IVE),.          
4000: 20 20 20 20 31 2c 20 53 51 4c 49 54 45 5f 55 54      1, SQLITE_UT
4010: 46 31 36 2c 20 64 62 2c 20 73 71 6c 69 74 65 33  F16, db, sqlite3
4020: 45 78 65 63 46 75 6e 63 2c 20 30 2c 20 30 29 3b  ExecFunc, 0, 0);
4030: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75  .    sqlite3Valu
4040: 65 46 72 65 65 28 70 56 61 6c 29 3b 0a 20 20 7d  eFree(pVal);.  }
4050: 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 73  .#endif..  if( s
4060: 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64  qlite3TestErrCod
4070: 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63  e(interp, db, rc
4080: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
4090: 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74 52  RROR;.  Tcl_SetR
40a0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63  esult(interp, (c
40b0: 68 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28  har *)errorName(
40c0: 72 63 29 2c 20 30 29 3b 0a 20 20 72 65 74 75 72  rc), 0);.  retur
40d0: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
40e0: 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f 20 69  ** Routines to i
40f0: 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 78 5f 63  mplement the x_c
4100: 6f 75 6e 74 28 29 20 61 67 67 72 65 67 61 74 65  ount() aggregate
4110: 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 74 79   function..*/.ty
4120: 70 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 75  pedef struct Cou
4130: 6e 74 43 74 78 20 43 6f 75 6e 74 43 74 78 3b 0a  ntCtx CountCtx;.
4140: 73 74 72 75 63 74 20 43 6f 75 6e 74 43 74 78 20  struct CountCtx 
4150: 7b 0a 20 20 69 6e 74 20 6e 3b 0a 7d 3b 0a 73 74  {.  int n;.};.st
4160: 61 74 69 63 20 76 6f 69 64 20 63 6f 75 6e 74 53  atic void countS
4170: 74 65 70 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  tep(sqlite3_cont
4180: 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c 20 69 6e  ext *context, in
4190: 74 20 61 72 67 63 2c 20 73 71 6c 69 74 65 33 5f  t argc, sqlite3_
41a0: 76 61 6c 75 65 20 2a 2a 61 72 67 76 29 7b 0a 20  value **argv){. 
41b0: 20 43 6f 75 6e 74 43 74 78 20 2a 70 3b 0a 20 20   CountCtx *p;.  
41c0: 70 20 3d 20 73 71 6c 69 74 65 33 5f 61 67 67 72  p = sqlite3_aggr
41d0: 65 67 61 74 65 5f 63 6f 6e 74 65 78 74 28 63 6f  egate_context(co
41e0: 6e 74 65 78 74 2c 20 73 69 7a 65 6f 66 28 2a 70  ntext, sizeof(*p
41f0: 29 29 3b 0a 20 20 69 66 28 20 28 61 72 67 63 3d  ));.  if( (argc=
4200: 3d 30 20 7c 7c 20 53 51 4c 49 54 45 5f 4e 55 4c  =0 || SQLITE_NUL
4210: 4c 21 3d 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  L!=sqlite3_value
4220: 5f 74 79 70 65 28 61 72 67 76 5b 30 5d 29 20 29  _type(argv[0]) )
4230: 20 26 26 20 70 20 29 7b 0a 20 20 20 20 70 2d 3e   && p ){.    p->
4240: 6e 2b 2b 3b 0a 20 20 7d 0a 7d 20 20 20 0a 73 74  n++;.  }.}   .st
4250: 61 74 69 63 20 76 6f 69 64 20 63 6f 75 6e 74 46  atic void countF
4260: 69 6e 61 6c 69 7a 65 28 73 71 6c 69 74 65 33 5f  inalize(sqlite3_
4270: 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78 74  context *context
4280: 29 7b 0a 20 20 43 6f 75 6e 74 43 74 78 20 2a 70  ){.  CountCtx *p
4290: 3b 0a 20 20 70 20 3d 20 73 71 6c 69 74 65 33 5f  ;.  p = sqlite3_
42a0: 61 67 67 72 65 67 61 74 65 5f 63 6f 6e 74 65 78  aggregate_contex
42b0: 74 28 63 6f 6e 74 65 78 74 2c 20 73 69 7a 65 6f  t(context, sizeo
42c0: 66 28 2a 70 29 29 3b 0a 20 20 73 71 6c 69 74 65  f(*p));.  sqlite
42d0: 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28 63 6f 6e  3_result_int(con
42e0: 74 65 78 74 2c 20 70 20 3f 20 70 2d 3e 6e 20 3a  text, p ? p->n :
42f0: 20 30 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73   0);.}../*.** Us
4300: 61 67 65 3a 20 20 73 71 6c 69 74 65 5f 74 65 73  age:  sqlite_tes
4310: 74 5f 63 72 65 61 74 65 5f 61 67 67 72 65 67 61  t_create_aggrega
4320: 74 65 20 44 42 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c  te DB.**.** Call
4330: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63 72 65   the sqlite3_cre
4340: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 20 41 50 49  ate_function API
4350: 20 6f 6e 20 74 68 65 20 67 69 76 65 6e 20 64 61   on the given da
4360: 74 61 62 61 73 65 20 69 6e 20 6f 72 64 65 72 0a  tabase in order.
4370: 2a 2a 20 74 6f 20 63 72 65 61 74 65 20 61 20 66  ** to create a f
4380: 75 6e 63 74 69 6f 6e 20 6e 61 6d 65 64 20 22 78  unction named "x
4390: 5f 63 6f 75 6e 74 22 2e 20 20 54 68 69 73 20 66  _count".  This f
43a0: 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 74 68 65  unction does the
43b0: 20 73 61 6d 65 20 74 68 69 6e 67 0a 2a 2a 20 61   same thing.** a
43c0: 73 20 74 68 65 20 22 6d 64 35 73 75 6d 22 20 66  s the "md5sum" f
43d0: 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  unction..**.** T
43e0: 68 65 20 6f 72 69 67 69 6e 61 6c 20 6d 6f 74 69  he original moti
43f0: 76 61 74 69 6f 6e 20 66 6f 72 20 74 68 69 73 20  vation for this 
4400: 72 6f 75 74 69 6e 65 20 77 61 73 20 74 6f 20 62  routine was to b
4410: 65 20 61 62 6c 65 20 74 6f 20 63 61 6c 6c 20 74  e able to call t
4420: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 72  he.** sqlite3_cr
4430: 65 61 74 65 5f 61 67 67 72 65 67 61 74 65 20 66  eate_aggregate f
4440: 75 6e 63 74 69 6f 6e 20 77 68 69 6c 65 20 61 20  unction while a 
4450: 71 75 65 72 79 20 69 73 20 69 6e 20 70 72 6f 67  query is in prog
4460: 72 65 73 73 20 69 6e 20 6f 72 64 65 72 0a 2a 2a  ress in order.**
4470: 20 74 6f 20 74 65 73 74 20 74 68 65 20 53 51 4c   to test the SQL
4480: 49 54 45 5f 4d 49 53 55 53 45 20 64 65 74 65 63  ITE_MISUSE detec
4490: 74 69 6f 6e 20 6c 6f 67 69 63 2e 0a 2a 2f 0a 73  tion logic..*/.s
44a0: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63  tatic int test_c
44b0: 72 65 61 74 65 5f 61 67 67 72 65 67 61 74 65 28  reate_aggregate(
44c0: 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64  .  void *NotUsed
44d0: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
44e0: 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
44f0: 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
4500: 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
4510: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
4520: 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20   int argc,      
4530: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
4540: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
4550: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20  /.  char **argv 
4560: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
4570: 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d  xt of each argum
4580: 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69  ent */.){.  sqli
4590: 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72  te3 *db;.  int r
45a0: 63 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 32  c;.  if( argc!=2
45b0: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
45c0: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
45d0: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
45e0: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61  should be \"", a
45f0: 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22  rgv[0],.       "
4600: 20 46 49 4c 45 4e 41 4d 45 5c 22 22 2c 20 30 29   FILENAME\"", 0)
4610: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
4620: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
4630: 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69  ( getDbPointer(i
4640: 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20  nterp, argv[1], 
4650: 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
4660: 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20  L_ERROR;.  rc = 
4670: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
4680: 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22 78 5f 63  unction(db, "x_c
4690: 6f 75 6e 74 22 2c 20 30 2c 20 53 51 4c 49 54 45  ount", 0, SQLITE
46a0: 5f 55 54 46 38 2c 20 30 2c 20 30 2c 0a 20 20 20  _UTF8, 0, 0,.   
46b0: 20 20 20 63 6f 75 6e 74 53 74 65 70 2c 63 6f 75     countStep,cou
46c0: 6e 74 46 69 6e 61 6c 69 7a 65 29 3b 0a 20 20 69  ntFinalize);.  i
46d0: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
46e0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   ){.    sqlite3_
46f0: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
4700: 64 62 2c 20 22 78 5f 63 6f 75 6e 74 22 2c 20 31  db, "x_count", 1
4710: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30  , SQLITE_UTF8, 0
4720: 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 63 6f 75  , 0,.        cou
4730: 6e 74 53 74 65 70 2c 63 6f 75 6e 74 46 69 6e 61  ntStep,countFina
4740: 6c 69 7a 65 29 3b 0a 20 20 7d 0a 20 20 69 66 28  lize);.  }.  if(
4750: 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43   sqlite3TestErrC
4760: 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20  ode(interp, db, 
4770: 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  rc) ) return TCL
4780: 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74 75 72 6e  _ERROR;.  return
4790: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 0a 2f 2a   TCL_OK;.}..../*
47a0: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
47b0: 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 20  te3_mprintf_int 
47c0: 46 4f 52 4d 41 54 20 49 4e 54 45 47 45 52 20 49  FORMAT INTEGER I
47d0: 4e 54 45 47 45 52 20 49 4e 54 45 47 45 52 0a 2a  NTEGER INTEGER.*
47e0: 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e 74  *.** Call mprint
47f0: 66 20 77 69 74 68 20 74 68 72 65 65 20 69 6e 74  f with three int
4800: 65 67 65 72 20 61 72 67 75 6d 65 6e 74 73 0a 2a  eger arguments.*
4810: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c  /.static int sql
4820: 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74  ite3_mprintf_int
4830: 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65  (.  void *NotUse
4840: 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  d,.  Tcl_Interp 
4850: 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
4860: 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
4870: 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
4880: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
4890: 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20    int argc,     
48a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
48b0: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
48c0: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  */.  char **argv
48d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
48e0: 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75  ext of each argu
48f0: 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  ment */.){.  int
4900: 20 61 5b 33 5d 2c 20 69 3b 0a 20 20 63 68 61 72   a[3], i;.  char
4910: 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72 67 63 21   *z;.  if( argc!
4920: 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =5 ){.    Tcl_Ap
4930: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
4940: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
4950: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
4960: 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20   argv[0],.      
4970: 20 22 20 46 4f 52 4d 41 54 20 49 4e 54 20 49 4e   " FORMAT INT IN
4980: 54 20 49 4e 54 5c 22 22 2c 20 30 29 3b 0a 20 20  T INT\"", 0);.  
4990: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
49a0: 4f 52 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d  OR;.  }.  for(i=
49b0: 32 3b 20 69 3c 35 3b 20 69 2b 2b 29 7b 0a 20 20  2; i<5; i++){.  
49c0: 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
49d0: 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 69 5d  (interp, argv[i]
49e0: 2c 20 26 61 5b 69 2d 32 5d 29 20 29 20 72 65 74  , &a[i-2]) ) ret
49f0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
4a00: 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33   }.  z = sqlite3
4a10: 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b 31 5d  _mprintf(argv[1]
4a20: 2c 20 61 5b 30 5d 2c 20 61 5b 31 5d 2c 20 61 5b  , a[0], a[1], a[
4a30: 32 5d 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e  2]);.  Tcl_Appen
4a40: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
4a50: 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33  z, 0);.  sqlite3
4a60: 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65 74 75  _free(z);.  retu
4a70: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
4a80: 0a 2a 2a 20 49 66 20 7a 4e 75 6d 20 72 65 70 72  .** If zNum repr
4a90: 65 73 65 6e 74 73 20 61 6e 20 69 6e 74 65 67 65  esents an intege
4aa0: 72 20 74 68 61 74 20 77 69 6c 6c 20 66 69 74 20  r that will fit 
4ab0: 69 6e 20 36 34 2d 62 69 74 73 2c 20 74 68 65 6e  in 64-bits, then
4ac0: 20 73 65 74 0a 2a 2a 20 2a 70 56 61 6c 75 65 20   set.** *pValue 
4ad0: 74 6f 20 74 68 61 74 20 69 6e 74 65 67 65 72 20  to that integer 
4ae0: 61 6e 64 20 72 65 74 75 72 6e 20 74 72 75 65 2e  and return true.
4af0: 20 20 4f 74 68 65 72 77 69 73 65 20 72 65 74 75    Otherwise retu
4b00: 72 6e 20 66 61 6c 73 65 2e 0a 2a 2f 0a 73 74 61  rn false..*/.sta
4b10: 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33 47  tic int sqlite3G
4b20: 65 74 49 6e 74 36 34 28 63 6f 6e 73 74 20 63 68  etInt64(const ch
4b30: 61 72 20 2a 7a 4e 75 6d 2c 20 69 36 34 20 2a 70  ar *zNum, i64 *p
4b40: 56 61 6c 75 65 29 7b 0a 20 20 69 66 28 20 73 71  Value){.  if( sq
4b50: 6c 69 74 65 33 46 69 74 73 49 6e 36 34 42 69 74  lite3FitsIn64Bit
4b60: 73 28 7a 4e 75 6d 29 20 29 7b 0a 20 20 20 20 73  s(zNum) ){.    s
4b70: 71 6c 69 74 65 33 61 74 6f 69 36 34 28 7a 4e 75  qlite3atoi64(zNu
4b80: 6d 2c 20 70 56 61 6c 75 65 29 3b 0a 20 20 20 20  m, pValue);.    
4b90: 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20  return 1;.  }.  
4ba0: 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a  return 0;.}../*.
4bb0: 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
4bc0: 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 36 34  e3_mprintf_int64
4bd0: 20 46 4f 52 4d 41 54 20 49 4e 54 45 47 45 52 20   FORMAT INTEGER 
4be0: 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45 52 0a  INTEGER INTEGER.
4bf0: 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e  **.** Call mprin
4c00: 74 66 20 77 69 74 68 20 74 68 72 65 65 20 36 34  tf with three 64
4c10: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 61 72 67  -bit integer arg
4c20: 75 6d 65 6e 74 73 0a 2a 2f 0a 73 74 61 74 69 63  uments.*/.static
4c30: 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 70 72   int sqlite3_mpr
4c40: 69 6e 74 66 5f 69 6e 74 36 34 28 0a 20 20 76 6f  intf_int64(.  vo
4c50: 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54  id *NotUsed,.  T
4c60: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
4c70: 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c  p,    /* The TCL
4c80: 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61   interpreter tha
4c90: 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63  t invoked this c
4ca0: 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  ommand */.  int 
4cb0: 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20  argc,           
4cc0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
4cd0: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63  arguments */.  c
4ce0: 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20  har **argv      
4cf0: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
4d00: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a   each argument *
4d10: 2f 0a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  /.){.  int i;.  
4d20: 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 61 5b 33  sqlite_int64 a[3
4d30: 5d 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20  ];.  char *z;.  
4d40: 69 66 28 20 61 72 67 63 21 3d 35 20 29 7b 0a 20  if( argc!=5 ){. 
4d50: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
4d60: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
4d70: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
4d80: 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30  d be \"", argv[0
4d90: 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 4f 52 4d  ],.       " FORM
4da0: 41 54 20 49 4e 54 20 49 4e 54 20 49 4e 54 5c 22  AT INT INT INT\"
4db0: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
4dc0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
4dd0: 0a 20 20 66 6f 72 28 69 3d 32 3b 20 69 3c 35 3b  .  for(i=2; i<5;
4de0: 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 21   i++){.    if( !
4df0: 73 71 6c 69 74 65 33 47 65 74 49 6e 74 36 34 28  sqlite3GetInt64(
4e00: 61 72 67 76 5b 69 5d 2c 20 26 61 5b 69 2d 32 5d  argv[i], &a[i-2]
4e10: 29 20 29 7b 0a 20 20 20 20 20 20 54 63 6c 5f 41  ) ){.      Tcl_A
4e20: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
4e30: 72 70 2c 20 22 61 72 67 75 6d 65 6e 74 20 69 73  rp, "argument is
4e40: 20 6e 6f 74 20 61 20 76 61 6c 69 64 20 36 34 2d   not a valid 64-
4e50: 62 69 74 20 69 6e 74 65 67 65 72 22 2c 20 30 29  bit integer", 0)
4e60: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 54  ;.      return T
4e70: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a  CL_ERROR;.    }.
4e80: 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65    }.  z = sqlite
4e90: 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b 31  3_mprintf(argv[1
4ea0: 5d 2c 20 61 5b 30 5d 2c 20 61 5b 31 5d 2c 20 61  ], a[0], a[1], a
4eb0: 5b 32 5d 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65  [2]);.  Tcl_Appe
4ec0: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
4ed0: 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65   z, 0);.  sqlite
4ee0: 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65 74  3_free(z);.  ret
4ef0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
4f00: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
4f10: 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72  ite3_mprintf_str
4f20: 20 46 4f 52 4d 41 54 20 49 4e 54 45 47 45 52 20   FORMAT INTEGER 
4f30: 49 4e 54 45 47 45 52 20 53 54 52 49 4e 47 0a 2a  INTEGER STRING.*
4f40: 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e 74  *.** Call mprint
4f50: 66 20 77 69 74 68 20 74 77 6f 20 69 6e 74 65 67  f with two integ
4f60: 65 72 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64  er arguments and
4f70: 20 6f 6e 65 20 73 74 72 69 6e 67 20 61 72 67 75   one string argu
4f80: 6d 65 6e 74 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ment.*/.static i
4f90: 6e 74 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  nt sqlite3_mprin
4fa0: 74 66 5f 73 74 72 28 0a 20 20 76 6f 69 64 20 2a  tf_str(.  void *
4fb0: 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49  NotUsed,.  Tcl_I
4fc0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20  nterp *interp,  
4fd0: 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74    /* The TCL int
4fe0: 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e  erpreter that in
4ff0: 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61  voked this comma
5000: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63  nd */.  int argc
5010: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
5020: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
5030: 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20  ments */.  char 
5040: 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20  **argv          
5050: 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63    /* Text of eac
5060: 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b  h argument */.){
5070: 0a 20 20 69 6e 74 20 61 5b 33 5d 2c 20 69 3b 0a  .  int a[3], i;.
5080: 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69 66 28    char *z;.  if(
5090: 20 61 72 67 63 3c 34 20 7c 7c 20 61 72 67 63 3e   argc<4 || argc>
50a0: 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  5 ){.    Tcl_App
50b0: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
50c0: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
50d0: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
50e0: 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20  argv[0],.       
50f0: 22 20 46 4f 52 4d 41 54 20 49 4e 54 20 49 4e 54  " FORMAT INT INT
5100: 20 3f 53 54 52 49 4e 47 3f 5c 22 22 2c 20 30 29   ?STRING?\"", 0)
5110: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
5120: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 66 6f  _ERROR;.  }.  fo
5130: 72 28 69 3d 32 3b 20 69 3c 34 3b 20 69 2b 2b 29  r(i=2; i<4; i++)
5140: 7b 0a 20 20 20 20 69 66 28 20 54 63 6c 5f 47 65  {.    if( Tcl_Ge
5150: 74 49 6e 74 28 69 6e 74 65 72 70 2c 20 61 72 67  tInt(interp, arg
5160: 76 5b 69 5d 2c 20 26 61 5b 69 2d 32 5d 29 20 29  v[i], &a[i-2]) )
5170: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
5180: 52 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c  R;.  }.  z = sql
5190: 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 61 72 67  ite3_mprintf(arg
51a0: 76 5b 31 5d 2c 20 61 5b 30 5d 2c 20 61 5b 31 5d  v[1], a[0], a[1]
51b0: 2c 20 61 72 67 63 3e 34 20 3f 20 61 72 67 76 5b  , argc>4 ? argv[
51c0: 34 5d 20 3a 20 4e 55 4c 4c 29 3b 0a 20 20 54 63  4] : NULL);.  Tc
51d0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
51e0: 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a 20 20  nterp, z, 0);.  
51f0: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 29 3b  sqlite3_free(z);
5200: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
5210: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
5220: 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  :  sqlite3_mprin
5230: 74 66 5f 64 6f 75 62 6c 65 20 46 4f 52 4d 41 54  tf_double FORMAT
5240: 20 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45 52   INTEGER INTEGER
5250: 20 44 4f 55 42 4c 45 0a 2a 2a 0a 2a 2a 20 43 61   DOUBLE.**.** Ca
5260: 6c 6c 20 6d 70 72 69 6e 74 66 20 77 69 74 68 20  ll mprintf with 
5270: 74 77 6f 20 69 6e 74 65 67 65 72 20 61 72 67 75  two integer argu
5280: 6d 65 6e 74 73 20 61 6e 64 20 6f 6e 65 20 64 6f  ments and one do
5290: 75 62 6c 65 20 61 72 67 75 6d 65 6e 74 0a 2a 2f  uble argument.*/
52a0: 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69  .static int sqli
52b0: 74 65 33 5f 6d 70 72 69 6e 74 66 5f 64 6f 75 62  te3_mprintf_doub
52c0: 6c 65 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55  le(.  void *NotU
52d0: 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  sed,.  Tcl_Inter
52e0: 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
52f0: 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
5300: 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
5310: 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
5320: 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20  /.  int argc,   
5330: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
5340: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
5350: 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72  s */.  char **ar
5360: 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  gv            /*
5370: 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72   Text of each ar
5380: 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69  gument */.){.  i
5390: 6e 74 20 61 5b 33 5d 2c 20 69 3b 0a 20 20 64 6f  nt a[3], i;.  do
53a0: 75 62 6c 65 20 72 3b 0a 20 20 63 68 61 72 20 2a  uble r;.  char *
53b0: 7a 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 35  z;.  if( argc!=5
53c0: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
53d0: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
53e0: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
53f0: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61  should be \"", a
5400: 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22  rgv[0],.       "
5410: 20 46 4f 52 4d 41 54 20 49 4e 54 20 49 4e 54 20   FORMAT INT INT 
5420: 44 4f 55 42 4c 45 5c 22 22 2c 20 30 29 3b 0a 20  DOUBLE\"", 0);. 
5430: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
5440: 52 4f 52 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69  ROR;.  }.  for(i
5450: 3d 32 3b 20 69 3c 34 3b 20 69 2b 2b 29 7b 0a 20  =2; i<4; i++){. 
5460: 20 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e     if( Tcl_GetIn
5470: 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 69  t(interp, argv[i
5480: 5d 2c 20 26 61 5b 69 2d 32 5d 29 20 29 20 72 65  ], &a[i-2]) ) re
5490: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
54a0: 20 20 7d 0a 20 20 69 66 28 20 54 63 6c 5f 47 65    }.  if( Tcl_Ge
54b0: 74 44 6f 75 62 6c 65 28 69 6e 74 65 72 70 2c 20  tDouble(interp, 
54c0: 61 72 67 76 5b 34 5d 2c 20 26 72 29 20 29 20 72  argv[4], &r) ) r
54d0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
54e0: 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 6d  .  z = sqlite3_m
54f0: 70 72 69 6e 74 66 28 61 72 67 76 5b 31 5d 2c 20  printf(argv[1], 
5500: 61 5b 30 5d 2c 20 61 5b 31 5d 2c 20 72 29 3b 0a  a[0], a[1], r);.
5510: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
5520: 6c 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29  lt(interp, z, 0)
5530: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65  ;.  sqlite3_free
5540: 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  (z);.  return TC
5550: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
5560: 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d  sage:  sqlite3_m
5570: 70 72 69 6e 74 66 5f 73 63 61 6c 65 64 20 46 4f  printf_scaled FO
5580: 52 4d 41 54 20 44 4f 55 42 4c 45 20 44 4f 55 42  RMAT DOUBLE DOUB
5590: 4c 45 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70  LE.**.** Call mp
55a0: 72 69 6e 74 66 20 77 69 74 68 20 61 20 73 69 6e  rintf with a sin
55b0: 67 6c 65 20 64 6f 75 62 6c 65 20 61 72 67 75 6d  gle double argum
55c0: 65 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65  ent which is the
55d0: 20 70 72 6f 64 75 63 74 20 6f 66 20 74 68 65 0a   product of the.
55e0: 2a 2a 20 74 77 6f 20 61 72 67 75 6d 65 6e 74 73  ** two arguments
55f0: 20 67 69 76 65 6e 20 61 62 6f 76 65 2e 20 20 54   given above.  T
5600: 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20 67  his is used to g
5610: 65 6e 65 72 61 74 65 20 6f 76 65 72 66 6c 6f 77  enerate overflow
5620: 20 61 6e 64 20 75 6e 64 65 72 66 6c 6f 77 0a 2a   and underflow.*
5630: 2a 20 64 6f 75 62 6c 65 73 20 74 6f 20 74 65 73  * doubles to tes
5640: 74 20 74 68 61 74 20 74 68 65 79 20 61 72 65 20  t that they are 
5650: 63 6f 6e 76 65 72 74 65 64 20 70 72 6f 70 65 72  converted proper
5660: 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ly..*/.static in
5670: 74 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  t sqlite3_mprint
5680: 66 5f 73 63 61 6c 65 64 28 0a 20 20 76 6f 69 64  f_scaled(.  void
5690: 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c   *NotUsed,.  Tcl
56a0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
56b0: 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69      /* The TCL i
56c0: 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20  nterpreter that 
56d0: 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d  invoked this com
56e0: 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72  mand */.  int ar
56f0: 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  gc,             
5700: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
5710: 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61  guments */.  cha
5720: 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20  r **argv        
5730: 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65      /* Text of e
5740: 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  ach argument */.
5750: 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 64 6f  ){.  int i;.  do
5760: 75 62 6c 65 20 72 5b 32 5d 3b 0a 20 20 63 68 61  uble r[2];.  cha
5770: 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72 67 63  r *z;.  if( argc
5780: 21 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=4 ){.    Tcl_A
5790: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
57a0: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
57b0: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
57c0: 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20  , argv[0],.     
57d0: 20 20 22 20 46 4f 52 4d 41 54 20 44 4f 55 42 4c    " FORMAT DOUBL
57e0: 45 20 44 4f 55 42 4c 45 5c 22 22 2c 20 30 29 3b  E DOUBLE\"", 0);
57f0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
5800: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 66 6f 72  ERROR;.  }.  for
5810: 28 69 3d 32 3b 20 69 3c 34 3b 20 69 2b 2b 29 7b  (i=2; i<4; i++){
5820: 0a 20 20 20 20 69 66 28 20 54 63 6c 5f 47 65 74  .    if( Tcl_Get
5830: 44 6f 75 62 6c 65 28 69 6e 74 65 72 70 2c 20 61  Double(interp, a
5840: 72 67 76 5b 69 5d 2c 20 26 72 5b 69 2d 32 5d 29  rgv[i], &r[i-2])
5850: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
5860: 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 73  ROR;.  }.  z = s
5870: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 61  qlite3_mprintf(a
5880: 72 67 76 5b 31 5d 2c 20 72 5b 30 5d 2a 72 5b 31  rgv[1], r[0]*r[1
5890: 5d 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64  ]);.  Tcl_Append
58a0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a  Result(interp, z
58b0: 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  , 0);.  sqlite3_
58c0: 66 72 65 65 28 7a 29 3b 0a 20 20 72 65 74 75 72  free(z);.  retur
58d0: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
58e0: 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
58f0: 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72 6f 6e  e3_mprintf_stron
5900: 6c 79 20 46 4f 52 4d 41 54 20 53 54 52 49 4e 47  ly FORMAT STRING
5910: 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69  .**.** Call mpri
5920: 6e 74 66 20 77 69 74 68 20 61 20 73 69 6e 67 6c  ntf with a singl
5930: 65 20 64 6f 75 62 6c 65 20 61 72 67 75 6d 65 6e  e double argumen
5940: 74 20 77 68 69 63 68 20 69 73 20 74 68 65 20 70  t which is the p
5950: 72 6f 64 75 63 74 20 6f 66 20 74 68 65 0a 2a 2a  roduct of the.**
5960: 20 74 77 6f 20 61 72 67 75 6d 65 6e 74 73 20 67   two arguments g
5970: 69 76 65 6e 20 61 62 6f 76 65 2e 20 20 54 68 69  iven above.  Thi
5980: 73 20 69 73 20 75 73 65 64 20 74 6f 20 67 65 6e  s is used to gen
5990: 65 72 61 74 65 20 6f 76 65 72 66 6c 6f 77 20 61  erate overflow a
59a0: 6e 64 20 75 6e 64 65 72 66 6c 6f 77 0a 2a 2a 20  nd underflow.** 
59b0: 64 6f 75 62 6c 65 73 20 74 6f 20 74 65 73 74 20  doubles to test 
59c0: 74 68 61 74 20 74 68 65 79 20 61 72 65 20 63 6f  that they are co
59d0: 6e 76 65 72 74 65 64 20 70 72 6f 70 65 72 6c 79  nverted properly
59e0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
59f0: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
5a00: 73 74 72 6f 6e 6c 79 28 0a 20 20 76 6f 69 64 20  stronly(.  void 
5a10: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f  *NotUsed,.  Tcl_
5a20: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
5a30: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
5a40: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
5a50: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
5a60: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67  and */.  int arg
5a70: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
5a80: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
5a90: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72  uments */.  char
5aa0: 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20   **argv         
5ab0: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61     /* Text of ea
5ac0: 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29  ch argument */.)
5ad0: 7b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69  {.  char *z;.  i
5ae0: 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20  f( argc!=3 ){.  
5af0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
5b00: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
5b10: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
5b20: 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
5b30: 2c 0a 20 20 20 20 20 20 20 22 20 46 4f 52 4d 41  ,.       " FORMA
5b40: 54 20 53 54 52 49 4e 47 5c 22 22 2c 20 30 29 3b  T STRING\"", 0);
5b50: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
5b60: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a 20 3d  ERROR;.  }.  z =
5b70: 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
5b80: 28 61 72 67 76 5b 31 5d 2c 20 61 72 67 76 5b 32  (argv[1], argv[2
5b90: 5d 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64  ]);.  Tcl_Append
5ba0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a  Result(interp, z
5bb0: 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  , 0);.  sqlite3_
5bc0: 66 72 65 65 28 7a 29 3b 0a 20 20 72 65 74 75 72  free(z);.  retur
5bd0: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
5be0: 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
5bf0: 65 33 5f 6d 70 72 69 6e 74 66 5f 68 65 78 64 6f  e3_mprintf_hexdo
5c00: 75 62 6c 65 20 46 4f 52 4d 41 54 20 48 45 58 0a  uble FORMAT HEX.
5c10: 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e  **.** Call mprin
5c20: 74 66 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65  tf with a single
5c30: 20 64 6f 75 62 6c 65 20 61 72 67 75 6d 65 6e 74   double argument
5c40: 20 77 68 69 63 68 20 69 73 20 64 65 72 69 76 65   which is derive
5c50: 64 20 66 72 6f 6d 20 74 68 65 0a 2a 2a 20 68 65  d from the.** he
5c60: 78 61 64 65 63 69 6d 61 6c 20 65 6e 63 6f 64 69  xadecimal encodi
5c70: 6e 67 20 6f 66 20 61 6e 20 49 45 45 45 20 64 6f  ng of an IEEE do
5c80: 75 62 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  uble..*/.static 
5c90: 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  int sqlite3_mpri
5ca0: 6e 74 66 5f 68 65 78 64 6f 75 62 6c 65 28 0a 20  ntf_hexdouble(. 
5cb0: 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a   void *NotUsed,.
5cc0: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
5cd0: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
5ce0: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
5cf0: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
5d00: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
5d10: 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20  nt argc,        
5d20: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
5d30: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
5d40: 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20    char **argv   
5d50: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
5d60: 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e   of each argumen
5d70: 74 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20 2a  t */.){.  char *
5d80: 7a 3b 0a 20 20 64 6f 75 62 6c 65 20 72 3b 0a 20  z;.  double r;. 
5d90: 20 75 6e 73 69 67 6e 65 64 20 20 78 31 2c 20 78   unsigned  x1, x
5da0: 32 3b 0a 20 20 6c 6f 6e 67 20 6c 6f 6e 67 20 75  2;.  long long u
5db0: 6e 73 69 67 6e 65 64 20 64 3b 0a 20 20 69 66 28  nsigned d;.  if(
5dc0: 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20   argc!=3 ){.    
5dd0: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
5de0: 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
5df0: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
5e00: 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a  e \"", argv[0],.
5e10: 20 20 20 20 20 20 20 22 20 46 4f 52 4d 41 54 20         " FORMAT 
5e20: 53 54 52 49 4e 47 5c 22 22 2c 20 30 29 3b 0a 20  STRING\"", 0);. 
5e30: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
5e40: 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73  ROR;.  }.  if( s
5e50: 73 63 61 6e 66 28 61 72 67 76 5b 32 5d 2c 20 22  scanf(argv[2], "
5e60: 25 30 38 78 25 30 38 78 22 2c 20 26 78 32 2c 20  %08x%08x", &x2, 
5e70: 26 78 31 29 21 3d 32 20 29 7b 0a 20 20 20 20 54  &x1)!=2 ){.    T
5e80: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
5e90: 69 6e 74 65 72 70 2c 20 22 32 6e 64 20 61 72 67  interp, "2nd arg
5ea0: 75 6d 65 6e 74 20 73 68 6f 75 6c 64 20 62 65 20  ument should be 
5eb0: 31 36 2d 63 68 61 72 61 63 74 65 72 73 20 6f 66  16-characters of
5ec0: 20 68 65 78 22 2c 20 30 29 3b 0a 20 20 20 20 72   hex", 0);.    r
5ed0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
5ee0: 0a 20 20 7d 0a 20 20 64 20 3d 20 78 32 3b 0a 20  .  }.  d = x2;. 
5ef0: 20 64 20 3d 20 28 64 3c 3c 33 32 29 20 2b 20 78   d = (d<<32) + x
5f00: 31 3b 0a 20 20 6d 65 6d 63 70 79 28 26 72 2c 20  1;.  memcpy(&r, 
5f10: 26 64 2c 20 73 69 7a 65 6f 66 28 72 29 29 3b 0a  &d, sizeof(r));.
5f20: 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70    z = sqlite3_mp
5f30: 72 69 6e 74 66 28 61 72 67 76 5b 31 5d 2c 20 72  rintf(argv[1], r
5f40: 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  );.  Tcl_AppendR
5f50: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 2c  esult(interp, z,
5f60: 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66   0);.  sqlite3_f
5f70: 72 65 65 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e  ree(z);.  return
5f80: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
5f90: 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 5f  * Usage: sqlite_
5fa0: 6d 61 6c 6c 6f 63 5f 66 61 69 6c 20 4e 20 20 3f  malloc_fail N  ?
5fb0: 52 45 50 45 41 54 2d 49 4e 54 45 52 56 41 4c 3f  REPEAT-INTERVAL?
5fc0: 0a 2a 2a 0a 2a 2a 20 52 69 67 20 73 71 6c 69 74  .**.** Rig sqlit
5fd0: 65 4d 61 6c 6c 6f 63 28 29 20 74 6f 20 66 61 69  eMalloc() to fai
5fe0: 6c 20 6f 6e 20 74 68 65 20 4e 2d 74 68 20 63 61  l on the N-th ca
5ff0: 6c 6c 20 61 6e 64 20 65 76 65 72 79 20 52 45 50  ll and every REP
6000: 45 41 54 2d 49 4e 54 45 52 56 41 4c 20 63 61 6c  EAT-INTERVAL cal
6010: 6c 0a 2a 2a 20 61 66 74 65 72 20 74 68 61 74 2e  l.** after that.
6020: 20 20 49 66 20 52 45 50 45 41 54 2d 49 4e 54 45    If REPEAT-INTE
6030: 52 56 41 4c 20 69 73 20 30 20 6f 72 20 69 73 20  RVAL is 0 or is 
6040: 6f 6d 69 74 74 65 64 2c 20 74 68 65 6e 20 6f 6e  omitted, then on
6050: 6c 79 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 6d  ly a single.** m
6060: 61 6c 6c 6f 63 20 77 69 6c 6c 20 66 61 69 6c 2e  alloc will fail.
6070: 20 20 49 66 20 52 45 50 45 41 54 2d 49 4e 54 45    If REPEAT-INTE
6080: 52 56 41 4c 20 69 73 20 31 20 74 68 65 6e 20 61  RVAL is 1 then a
6090: 6c 6c 20 6d 61 6c 6c 6f 63 73 20 61 66 74 65 72  ll mallocs after
60a0: 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 66 61   the.** first fa
60b0: 69 6c 75 72 65 20 77 69 6c 6c 20 63 6f 6e 74 69  ilure will conti
60c0: 6e 75 65 20 74 6f 20 66 61 69 6c 20 6f 6e 20 65  nue to fail on e
60d0: 76 65 72 79 20 63 61 6c 6c 2e 20 20 49 66 20 52  very call.  If R
60e0: 45 50 45 41 54 2d 49 4e 54 45 52 56 41 4c 20 69  EPEAT-INTERVAL i
60f0: 73 0a 2a 2a 20 32 20 74 68 65 6e 20 65 76 65 72  s.** 2 then ever
6100: 79 20 6f 74 68 65 72 20 6d 61 6c 6c 6f 63 20 77  y other malloc w
6110: 69 6c 6c 20 66 61 69 6c 2e 20 20 41 6e 64 20 73  ill fail.  And s
6120: 6f 20 66 6f 72 74 68 2e 0a 2a 2a 0a 2a 2a 20 54  o forth..**.** T
6130: 75 72 6e 20 6f 66 66 20 74 68 69 73 20 6d 65 63  urn off this mec
6140: 68 61 6e 69 73 6d 20 61 6e 64 20 72 65 73 65 74  hanism and reset
6150: 20 74 68 65 20 73 71 6c 69 74 65 33 54 68 72 65   the sqlite3Thre
6160: 61 64 44 61 74 61 28 29 2d 3e 6d 61 6c 6c 6f 63  adData()->malloc
6170: 46 61 69 6c 65 64 20 76 61 72 69 61 62 6c 65 20  Failed variable 
6180: 69 73 20 4e 3d 3d 30 2e 0a 2a 2f 0a 23 69 66 64  is N==0..*/.#ifd
6190: 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ef SQLITE_MEMDEB
61a0: 55 47 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71  UG.static int sq
61b0: 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c  lite_malloc_fail
61c0: 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65  (.  void *NotUse
61d0: 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  d,.  Tcl_Interp 
61e0: 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
61f0: 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
6200: 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
6210: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
6220: 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20    int argc,     
6230: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
6240: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
6250: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  */.  char **argv
6260: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
6270: 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75  ext of each argu
6280: 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  ment */.){.  int
6290: 20 6e 3b 0a 20 20 69 6e 74 20 72 65 70 3b 0a 20   n;.  int rep;. 
62a0: 20 69 66 28 20 61 72 67 63 21 3d 32 20 26 26 20   if( argc!=2 && 
62b0: 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54  argc!=3 ){.    T
62c0: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
62d0: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
62e0: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
62f0: 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 22   \"", argv[0], "
6300: 20 4e 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72   N\"", 0);.    r
6310: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
6320: 0a 20 20 7d 0a 20 20 69 66 28 20 54 63 6c 5f 47  .  }.  if( Tcl_G
6330: 65 74 49 6e 74 28 69 6e 74 65 72 70 2c 20 61 72  etInt(interp, ar
6340: 67 76 5b 31 5d 2c 20 26 6e 29 20 29 20 72 65 74  gv[1], &n) ) ret
6350: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
6360: 20 69 66 28 20 61 72 67 63 3d 3d 33 20 29 7b 0a   if( argc==3 ){.
6370: 20 20 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49      if( Tcl_GetI
6380: 6e 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  nt(interp, argv[
6390: 32 5d 2c 20 26 72 65 70 29 20 29 20 72 65 74 75  2], &rep) ) retu
63a0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
63b0: 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 70 20 3d  }else{.    rep =
63c0: 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65   0;.  }.  sqlite
63d0: 33 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c 20 3d 20  3_iMallocFail = 
63e0: 6e 3b 0a 20 20 73 71 6c 69 74 65 33 5f 69 4d 61  n;.  sqlite3_iMa
63f0: 6c 6c 6f 63 52 65 73 65 74 20 3d 20 72 65 70 3b  llocReset = rep;
6400: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
6410: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ;.}.#endif../*.*
6420: 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 5f  * Usage: sqlite_
6430: 6d 61 6c 6c 6f 63 5f 73 74 61 74 0a 2a 2a 0a 2a  malloc_stat.**.*
6440: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d  * Return the num
6450: 62 65 72 20 6f 66 20 70 72 69 6f 72 20 63 61 6c  ber of prior cal
6460: 6c 73 20 74 6f 20 73 71 6c 69 74 65 4d 61 6c 6c  ls to sqliteMall
6470: 6f 63 28 29 20 61 6e 64 20 73 71 6c 69 74 65 46  oc() and sqliteF
6480: 72 65 65 28 29 2e 0a 2a 2f 0a 23 69 66 64 65 66  ree()..*/.#ifdef
6490: 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
64a0: 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69  .static int sqli
64b0: 74 65 5f 6d 61 6c 6c 6f 63 5f 73 74 61 74 28 0a  te_malloc_stat(.
64c0: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
64d0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
64e0: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
64f0: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
6500: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
6510: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
6520: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
6530: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
6540: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
6550: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
6560: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
6570: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
6580: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20  nt */.){.  char 
6590: 7a 42 75 66 5b 32 30 30 5d 3b 0a 20 20 73 70 72  zBuf[200];.  spr
65a0: 69 6e 74 66 28 7a 42 75 66 2c 20 22 25 64 20 25  intf(zBuf, "%d %
65b0: 64 20 25 64 22 2c 20 73 71 6c 69 74 65 33 5f 6e  d %d", sqlite3_n
65c0: 4d 61 6c 6c 6f 63 2c 73 71 6c 69 74 65 33 5f 6e  Malloc,sqlite3_n
65d0: 46 72 65 65 2c 73 71 6c 69 74 65 33 5f 69 4d 61  Free,sqlite3_iMa
65e0: 6c 6c 6f 63 46 61 69 6c 29 3b 0a 20 20 54 63 6c  llocFail);.  Tcl
65f0: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
6600: 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a  terp, zBuf, 0);.
6610: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
6620: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66  .}../*.** This f
6630: 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  unction implemen
6640: 74 73 20 61 20 54 63 6c 20 63 6f 6d 6d 61 6e 64  ts a Tcl command
6650: 20 74 68 61 74 20 6d 61 79 20 62 65 20 69 6e 76   that may be inv
6660: 6f 6b 65 64 20 75 73 69 6e 67 20 61 6e 79 20 6f  oked using any o
6670: 66 0a 2a 2a 20 74 68 65 20 66 6f 75 72 20 66 6f  f.** the four fo
6680: 72 6d 73 20 65 6e 75 6d 65 72 61 74 65 64 20 62  rms enumerated b
6690: 65 6c 6f 77 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69  elow..**.** sqli
66a0: 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74 61  te_malloc_outsta
66b0: 6e 64 69 6e 67 0a 2a 2a 20 20 20 20 20 52 65 74  nding.**     Ret
66c0: 75 72 6e 20 61 20 73 75 6d 6d 61 72 79 20 6f 66  urn a summary of
66d0: 20 61 6c 6c 20 75 6e 66 72 65 65 64 20 62 6c 6f   all unfreed blo
66e0: 63 6b 73 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c  cks of memory al
66f0: 6c 6f 63 61 74 65 64 20 62 79 20 74 68 65 0a 2a  located by the.*
6700: 2a 20 20 20 20 20 63 75 72 72 65 6e 74 20 74 68  *     current th
6710: 72 65 61 64 2e 20 53 65 65 20 63 6f 6d 6d 65 6e  read. See commen
6720: 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f  ts above functio
6730: 6e 20 73 71 6c 69 74 65 33 4f 75 74 73 74 61 6e  n sqlite3Outstan
6740: 64 69 6e 67 4d 61 6c 6c 6f 63 73 28 29 20 0a 2a  dingMallocs() .*
6750: 2a 20 20 20 20 20 69 6e 20 75 74 69 6c 2e 63 20  *     in util.c 
6760: 66 6f 72 20 61 20 64 65 73 63 72 69 70 74 69 6f  for a descriptio
6770: 6e 20 6f 66 20 74 68 65 20 72 65 74 75 72 6e 65  n of the returne
6780: 64 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 73  d value..**.** s
6790: 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74  qlite_malloc_out
67a0: 73 74 61 6e 64 69 6e 67 20 2d 62 79 74 65 73 0a  standing -bytes.
67b0: 2a 2a 20 20 20 20 20 52 65 74 75 72 6e 20 74 68  **     Return th
67c0: 65 20 74 6f 74 61 6c 20 61 6d 6f 75 6e 74 20 6f  e total amount o
67d0: 66 20 75 6e 66 72 65 65 64 20 6d 65 6d 6f 72 79  f unfreed memory
67e0: 20 28 69 6e 20 62 79 74 65 73 29 20 61 6c 6c 6f   (in bytes) allo
67f0: 63 61 74 65 64 20 62 79 20 0a 2a 2a 20 20 20 20  cated by .**    
6800: 20 74 68 69 73 20 74 68 72 65 61 64 2e 0a 2a 2a   this thread..**
6810: 0a 2a 2a 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f  .** sqlite_mallo
6820: 63 5f 6f 75 74 73 74 61 6e 64 69 6e 67 20 2d 6d  c_outstanding -m
6830: 61 78 62 79 74 65 73 0a 2a 2a 20 20 20 20 20 52  axbytes.**     R
6840: 65 74 75 72 6e 20 74 68 65 20 6d 61 78 69 6d 75  eturn the maximu
6850: 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 64 79 6e 61  m amount of dyna
6860: 6d 69 63 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73  mic memory in us
6870: 65 20 61 74 20 6f 6e 65 20 74 69 6d 65 20 0a 2a  e at one time .*
6880: 2a 20 20 20 20 20 62 79 20 74 68 69 73 20 74 68  *     by this th
6890: 72 65 61 64 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69  read..**.** sqli
68a0: 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74 61  te_malloc_outsta
68b0: 6e 64 69 6e 67 20 2d 63 6c 65 61 72 6d 61 78 62  nding -clearmaxb
68c0: 79 74 65 73 0a 2a 2a 20 20 20 20 20 53 65 74 20  ytes.**     Set 
68d0: 74 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e  the value return
68e0: 65 64 20 62 79 20 5b 73 71 6c 69 74 65 5f 6d 61  ed by [sqlite_ma
68f0: 6c 6c 6f 63 5f 6f 75 74 73 74 61 6e 64 69 6e 67  lloc_outstanding
6900: 20 2d 6d 61 78 62 79 74 65 73 5d 0a 2a 2a 20 20   -maxbytes].**  
6910: 20 20 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e     to the curren
6920: 74 20 76 61 6c 75 65 20 6f 66 20 5b 73 71 6c 69  t value of [sqli
6930: 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74 61  te_malloc_outsta
6940: 6e 64 69 6e 67 20 2d 62 79 74 65 73 5d 2e 20 0a  nding -bytes]. .
6950: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71  */.static int sq
6960: 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73  lite_malloc_outs
6970: 74 61 6e 64 69 6e 67 28 0a 20 20 43 6c 69 65 6e  tanding(.  Clien
6980: 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61  tData clientData
6990: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
69a0: 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
69b0: 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
69c0: 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
69d0: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
69e0: 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20   int objc,      
69f0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
6a00: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
6a10: 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  /.  Tcl_Obj *CON
6a20: 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f  ST objv[]  /* Co
6a30: 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20  mmand arguments 
6a40: 2a 2f 0a 29 7b 0a 20 20 65 78 74 65 72 6e 20 69  */.){.  extern i
6a50: 6e 74 20 73 71 6c 69 74 65 33 4f 75 74 73 74 61  nt sqlite3Outsta
6a60: 6e 64 69 6e 67 4d 61 6c 6c 6f 63 73 28 54 63 6c  ndingMallocs(Tcl
6a70: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 29  _Interp *interp)
6a80: 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
6a90: 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d  _ENABLE_MEMORY_M
6aa0: 41 4e 41 47 45 4d 45 4e 54 0a 20 20 69 66 28 20  ANAGEMENT.  if( 
6ab0: 6f 62 6a 63 3d 3d 32 20 29 7b 0a 20 20 20 20 54  objc==2 ){.    T
6ac0: 68 72 65 61 64 44 61 74 61 20 2a 70 54 64 20 3d  hreadData *pTd =
6ad0: 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 44 61   sqlite3ThreadDa
6ae0: 74 61 28 29 3b 0a 20 20 20 20 63 6f 6e 73 74 20  ta();.    const 
6af0: 63 68 61 72 20 2a 7a 41 72 67 20 3d 20 54 63 6c  char *zArg = Tcl
6b00: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
6b10: 31 5d 29 3b 0a 20 20 20 20 69 66 28 20 30 3d 3d  1]);.    if( 0==
6b20: 73 74 72 63 6d 70 28 7a 41 72 67 2c 20 22 2d 62  strcmp(zArg, "-b
6b30: 79 74 65 73 22 29 20 29 7b 0a 20 20 20 20 20 20  ytes") ){.      
6b40: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
6b50: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
6b60: 49 6e 74 4f 62 6a 28 70 54 64 2d 3e 6e 41 6c 6c  IntObj(pTd->nAll
6b70: 6f 63 29 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  oc));.    }else 
6b80: 69 66 28 20 30 3d 3d 73 74 72 63 6d 70 28 7a 41  if( 0==strcmp(zA
6b90: 72 67 2c 20 22 2d 6d 61 78 62 79 74 65 73 22 29  rg, "-maxbytes")
6ba0: 20 29 7b 0a 20 20 20 20 20 20 54 63 6c 5f 53 65   ){.      Tcl_Se
6bb0: 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
6bc0: 70 2c 20 54 63 6c 5f 4e 65 77 57 69 64 65 49 6e  p, Tcl_NewWideIn
6bd0: 74 4f 62 6a 28 70 54 64 2d 3e 6e 4d 61 78 41 6c  tObj(pTd->nMaxAl
6be0: 6c 6f 63 29 29 3b 0a 20 20 20 20 7d 65 6c 73 65  loc));.    }else
6bf0: 20 69 66 28 20 30 3d 3d 73 74 72 63 6d 70 28 7a   if( 0==strcmp(z
6c00: 41 72 67 2c 20 22 2d 63 6c 65 61 72 6d 61 78 62  Arg, "-clearmaxb
6c10: 79 74 65 73 22 29 20 29 7b 0a 20 20 20 20 20 20  ytes") ){.      
6c20: 70 54 64 2d 3e 6e 4d 61 78 41 6c 6c 6f 63 20 3d  pTd->nMaxAlloc =
6c30: 20 70 54 64 2d 3e 6e 41 6c 6c 6f 63 3b 0a 20 20   pTd->nAlloc;.  
6c40: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 54    }else{.      T
6c50: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
6c60: 69 6e 74 65 72 70 2c 20 22 62 61 64 20 6f 70 74  interp, "bad opt
6c70: 69 6f 6e 20 5c 22 22 2c 20 7a 41 72 67 2c 20 0a  ion \"", zArg, .
6c80: 20 20 20 20 20 20 20 20 22 5c 22 3a 20 6d 75 73          "\": mus
6c90: 74 20 62 65 20 2d 62 79 74 65 73 2c 20 2d 6d 61  t be -bytes, -ma
6ca0: 78 62 79 74 65 73 20 6f 72 20 2d 63 6c 65 61 72  xbytes or -clear
6cb0: 6d 61 78 62 79 74 65 73 22 2c 20 30 0a 20 20 20  maxbytes", 0.   
6cc0: 20 20 20 29 3b 0a 20 20 20 20 20 20 72 65 74 75     );.      retu
6cd0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
6ce0: 20 20 7d 0a 0a 20 20 20 20 72 65 74 75 72 6e 20    }..    return 
6cf0: 54 43 4c 5f 4f 4b 3b 0a 20 20 7d 0a 23 65 6e 64  TCL_OK;.  }.#end
6d00: 69 66 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  if..  if( objc!=
6d10: 31 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f  1 ){.    Tcl_Wro
6d20: 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
6d30: 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 3f 2d 62 79  , 1, objv, "?-by
6d40: 74 65 73 3f 22 29 3b 0a 20 20 20 20 72 65 74 75  tes?");.    retu
6d50: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
6d60: 7d 0a 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69  }..  return sqli
6d70: 74 65 33 4f 75 74 73 74 61 6e 64 69 6e 67 4d 61  te3OutstandingMa
6d80: 6c 6c 6f 63 73 28 69 6e 74 65 72 70 29 3b 0a 7d  llocs(interp);.}
6d90: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 55  .#endif../*.** U
6da0: 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 65 6e  sage: sqlite3_en
6db0: 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68  able_shared_cach
6dc0: 65 20 20 20 20 20 20 42 4f 4f 4c 45 41 4e 0a 2a  e      BOOLEAN.*
6dd0: 2a 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  *.*/.#if !define
6de0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  d(SQLITE_OMIT_SH
6df0: 41 52 45 44 5f 43 41 43 48 45 29 0a 73 74 61 74  ARED_CACHE).stat
6e00: 69 63 20 69 6e 74 20 74 65 73 74 5f 65 6e 61 62  ic int test_enab
6e10: 6c 65 5f 73 68 61 72 65 64 28 0a 20 20 43 6c 69  le_shared(.  Cli
6e20: 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61  entData clientDa
6e30: 74 61 2c 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74  ta, /* Pointer t
6e40: 6f 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65  o sqlite3_enable
6e50: 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  _XXX function */
6e60: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
6e70: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
6e80: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
6e90: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
6ea0: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
6eb0: 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20 20  int objc,       
6ec0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
6ed0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
6ee0: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
6ef0: 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d  T objv[]  /* Com
6f00: 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20 2a  mand arguments *
6f10: 2f 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  /.){.  int rc;. 
6f20: 20 69 6e 74 20 65 6e 61 62 6c 65 3b 0a 20 20 69   int enable;.  i
6f30: 6e 74 20 72 65 74 20 3d 20 30 3b 0a 0a 20 20 69  nt ret = 0;..  i
6f40: 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20  f( objc!=2 ){.  
6f50: 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72    Tcl_WrongNumAr
6f60: 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62  gs(interp, 1, ob
6f70: 6a 76 2c 20 22 42 4f 4f 4c 45 41 4e 22 29 3b 0a  jv, "BOOLEAN");.
6f80: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
6f90: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
6fa0: 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72  Tcl_GetBooleanFr
6fb0: 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
6fc0: 6a 76 5b 31 5d 2c 20 26 65 6e 61 62 6c 65 29 20  jv[1], &enable) 
6fd0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  ){.    return TC
6fe0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72  L_ERROR;.  }.  r
6ff0: 65 74 20 3d 20 73 71 6c 69 74 65 33 54 68 72 65  et = sqlite3Thre
7000: 61 64 44 61 74 61 52 65 61 64 4f 6e 6c 79 28 29  adDataReadOnly()
7010: 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74 61 3b  ->useSharedData;
7020: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
7030: 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61  enable_shared_ca
7040: 63 68 65 28 65 6e 61 62 6c 65 29 3b 0a 20 20 69  che(enable);.  i
7050: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
7060: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 52   ){.    Tcl_SetR
7070: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63  esult(interp, (c
7080: 68 61 72 20 2a 29 73 71 6c 69 74 65 33 45 72 72  har *)sqlite3Err
7090: 53 74 72 28 72 63 29 2c 20 54 43 4c 5f 53 54 41  Str(rc), TCL_STA
70a0: 54 49 43 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  TIC);.    return
70b0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
70c0: 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
70d0: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
70e0: 65 77 42 6f 6f 6c 65 61 6e 4f 62 6a 28 72 65 74  ewBooleanObj(ret
70f0: 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ));.  return TCL
7100: 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  _OK;.}.#endif../
7110: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
7120: 69 74 65 5f 61 62 6f 72 74 0a 2a 2a 0a 2a 2a 20  ite_abort.**.** 
7130: 53 68 75 74 64 6f 77 6e 20 74 68 65 20 70 72 6f  Shutdown the pro
7140: 63 65 73 73 20 69 6d 6d 65 64 69 61 74 65 6c 79  cess immediately
7150: 2e 20 20 54 68 69 73 20 69 73 20 6e 6f 74 20 61  .  This is not a
7160: 20 63 6c 65 61 6e 20 73 68 75 74 64 6f 77 6e 2e   clean shutdown.
7170: 0a 2a 2a 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64  .** This command
7180: 20 69 73 20 75 73 65 64 20 74 6f 20 74 65 73 74   is used to test
7190: 20 74 68 65 20 72 65 63 6f 76 65 72 61 62 69 6c   the recoverabil
71a0: 69 74 79 20 6f 66 20 61 20 64 61 74 61 62 61 73  ity of a databas
71b0: 65 20 69 6e 0a 2a 2a 20 74 68 65 20 65 76 65 6e  e in.** the even
71c0: 74 20 6f 66 20 61 20 70 72 6f 67 72 61 6d 20 63  t of a program c
71d0: 72 61 73 68 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  rash..*/.static 
71e0: 69 6e 74 20 73 71 6c 69 74 65 5f 61 62 6f 72 74  int sqlite_abort
71f0: 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65  (.  void *NotUse
7200: 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  d,.  Tcl_Interp 
7210: 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
7220: 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
7230: 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
7240: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
7250: 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20    int argc,     
7260: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
7270: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
7280: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  */.  char **argv
7290: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
72a0: 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75  ext of each argu
72b0: 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 61 73 73  ment */.){.  ass
72c0: 65 72 74 28 20 69 6e 74 65 72 70 3d 3d 30 20 29  ert( interp==0 )
72d0: 3b 20 20 20 2f 2a 20 54 68 69 73 20 77 69 6c 6c  ;   /* This will
72e0: 20 61 6c 77 61 79 73 20 66 61 69 6c 20 2a 2f 0a   always fail */.
72f0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
7300: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  .}../*.** The fo
7310: 6c 6c 6f 77 69 6e 67 20 72 6f 75 74 69 6e 65 20  llowing routine 
7320: 69 73 20 61 20 75 73 65 72 2d 64 65 66 69 6e 65  is a user-define
7330: 64 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 77  d SQL function w
7340: 68 6f 73 65 20 70 75 72 70 6f 73 65 0a 2a 2a 20  hose purpose.** 
7350: 69 73 20 74 6f 20 74 65 73 74 20 74 68 65 20 73  is to test the s
7360: 71 6c 69 74 65 5f 73 65 74 5f 72 65 73 75 6c 74  qlite_set_result
7370: 28 29 20 41 50 49 2e 0a 2a 2f 0a 73 74 61 74 69  () API..*/.stati
7380: 63 20 76 6f 69 64 20 74 65 73 74 46 75 6e 63 28  c void testFunc(
7390: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
73a0: 2a 63 6f 6e 74 65 78 74 2c 20 69 6e 74 20 61 72  *context, int ar
73b0: 67 63 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  gc, sqlite3_valu
73c0: 65 20 2a 2a 61 72 67 76 29 7b 0a 20 20 77 68 69  e **argv){.  whi
73d0: 6c 65 28 20 61 72 67 63 3e 3d 32 20 29 7b 0a 20  le( argc>=2 ){. 
73e0: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
73f0: 41 72 67 30 20 3d 20 28 63 68 61 72 2a 29 73 71  Arg0 = (char*)sq
7400: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
7410: 28 61 72 67 76 5b 30 5d 29 3b 0a 20 20 20 20 69  (argv[0]);.    i
7420: 66 28 20 7a 41 72 67 30 20 29 7b 0a 20 20 20 20  f( zArg0 ){.    
7430: 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33    if( 0==sqlite3
7440: 53 74 72 49 43 6d 70 28 7a 41 72 67 30 2c 20 22  StrICmp(zArg0, "
7450: 69 6e 74 22 29 20 29 7b 0a 20 20 20 20 20 20 20  int") ){.       
7460: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
7470: 69 6e 74 28 63 6f 6e 74 65 78 74 2c 20 73 71 6c  int(context, sql
7480: 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28 61  ite3_value_int(a
7490: 72 67 76 5b 31 5d 29 29 3b 0a 20 20 20 20 20 20  rgv[1]));.      
74a0: 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65  }else if( sqlite
74b0: 33 53 74 72 49 43 6d 70 28 7a 41 72 67 30 2c 22  3StrICmp(zArg0,"
74c0: 69 6e 74 36 34 22 29 3d 3d 30 20 29 7b 0a 20 20  int64")==0 ){.  
74d0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65        sqlite3_re
74e0: 73 75 6c 74 5f 69 6e 74 36 34 28 63 6f 6e 74 65  sult_int64(conte
74f0: 78 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  xt, sqlite3_valu
7500: 65 5f 69 6e 74 36 34 28 61 72 67 76 5b 31 5d 29  e_int64(argv[1])
7510: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  );.      }else i
7520: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
7530: 70 28 7a 41 72 67 30 2c 22 73 74 72 69 6e 67 22  p(zArg0,"string"
7540: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
7550: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74  sqlite3_result_t
7560: 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 28 63 68  ext(context, (ch
7570: 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75  ar*)sqlite3_valu
7580: 65 5f 74 65 78 74 28 61 72 67 76 5b 31 5d 29 2c  e_text(argv[1]),
7590: 20 2d 31 2c 0a 20 20 20 20 20 20 20 20 20 20 20   -1,.           
75a0: 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
75b0: 54 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  T);.      }else 
75c0: 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43  if( sqlite3StrIC
75d0: 6d 70 28 7a 41 72 67 30 2c 22 64 6f 75 62 6c 65  mp(zArg0,"double
75e0: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ")==0 ){.       
75f0: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
7600: 64 6f 75 62 6c 65 28 63 6f 6e 74 65 78 74 2c 20  double(context, 
7610: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f  sqlite3_value_do
7620: 75 62 6c 65 28 61 72 67 76 5b 31 5d 29 29 3b 0a  uble(argv[1]));.
7630: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
7640: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
7650: 41 72 67 30 2c 22 6e 75 6c 6c 22 29 3d 3d 30 20  Arg0,"null")==0 
7660: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
7670: 65 33 5f 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 63  e3_result_null(c
7680: 6f 6e 74 65 78 74 29 3b 0a 20 20 20 20 20 20 7d  ontext);.      }
7690: 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33  else if( sqlite3
76a0: 53 74 72 49 43 6d 70 28 7a 41 72 67 30 2c 22 76  StrICmp(zArg0,"v
76b0: 61 6c 75 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20  alue")==0 ){.   
76c0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73       sqlite3_res
76d0: 75 6c 74 5f 76 61 6c 75 65 28 63 6f 6e 74 65 78  ult_value(contex
76e0: 74 2c 20 61 72 67 76 5b 73 71 6c 69 74 65 33 5f  t, argv[sqlite3_
76f0: 76 61 6c 75 65 5f 69 6e 74 28 61 72 67 76 5b 31  value_int(argv[1
7700: 5d 29 5d 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ])]);.      }els
7710: 65 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  e{.        goto 
7720: 65 72 72 6f 72 5f 6f 75 74 3b 0a 20 20 20 20 20  error_out;.     
7730: 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
7740: 20 20 20 20 67 6f 74 6f 20 65 72 72 6f 72 5f 6f      goto error_o
7750: 75 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 72  ut;.    }.    ar
7760: 67 63 20 2d 3d 20 32 3b 0a 20 20 20 20 61 72 67  gc -= 2;.    arg
7770: 76 20 2b 3d 20 32 3b 0a 20 20 7d 0a 20 20 72 65  v += 2;.  }.  re
7780: 74 75 72 6e 3b 0a 0a 65 72 72 6f 72 5f 6f 75 74  turn;..error_out
7790: 3a 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75  :.  sqlite3_resu
77a0: 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78 74  lt_error(context
77b0: 2c 22 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  ,"first argument
77c0: 20 73 68 6f 75 6c 64 20 62 65 20 6f 6e 65 20 6f   should be one o
77d0: 66 3a 20 22 0a 20 20 20 20 20 20 22 69 6e 74 20  f: ".      "int 
77e0: 69 6e 74 36 34 20 73 74 72 69 6e 67 20 64 6f 75  int64 string dou
77f0: 62 6c 65 20 6e 75 6c 6c 20 76 61 6c 75 65 22 2c  ble null value",
7800: 20 2d 31 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55   -1);.}../*.** U
7810: 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 5f 72  sage:   sqlite_r
7820: 65 67 69 73 74 65 72 5f 74 65 73 74 5f 66 75 6e  egister_test_fun
7830: 63 74 69 6f 6e 20 20 44 42 20 20 4e 41 4d 45 0a  ction  DB  NAME.
7840: 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 74  **.** Register t
7850: 68 65 20 74 65 73 74 20 53 51 4c 20 66 75 6e 63  he test SQL func
7860: 74 69 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74 61  tion on the data
7870: 62 61 73 65 20 44 42 20 75 6e 64 65 72 20 74 68  base DB under th
7880: 65 20 6e 61 6d 65 20 4e 41 4d 45 2e 0a 2a 2f 0a  e name NAME..*/.
7890: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
78a0: 72 65 67 69 73 74 65 72 5f 66 75 6e 63 28 0a 20  register_func(. 
78b0: 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a   void *NotUsed,.
78c0: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
78d0: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
78e0: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
78f0: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
7900: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
7910: 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20  nt argc,        
7920: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
7930: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
7940: 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20    char **argv   
7950: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
7960: 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e   of each argumen
7970: 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65  t */.){.  sqlite
7980: 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b  3 *db;.  int rc;
7990: 0a 20 20 69 66 28 20 61 72 67 63 21 3d 33 20 29  .  if( argc!=3 )
79a0: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
79b0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
79c0: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
79d0: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
79e0: 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 22 20  v[0], .       " 
79f0: 44 42 20 46 55 4e 43 54 49 4f 4e 2d 4e 41 4d 45  DB FUNCTION-NAME
7a00: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
7a10: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
7a20: 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e  .  if( getDbPoin
7a30: 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76  ter(interp, argv
7a40: 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75  [1], &db) ) retu
7a50: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
7a60: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65  rc = sqlite3_cre
7a70: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c  ate_function(db,
7a80: 20 61 72 67 76 5b 32 5d 2c 20 2d 31 2c 20 53 51   argv[2], -1, SQ
7a90: 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 20 0a 20  LITE_UTF8, 0, . 
7aa0: 20 20 20 20 20 74 65 73 74 46 75 6e 63 2c 20 30       testFunc, 0
7ab0: 2c 20 30 29 3b 0a 20 20 69 66 28 20 72 63 21 3d  , 0);.  if( rc!=
7ac0: 30 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  0 ){.    Tcl_App
7ad0: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
7ae0: 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28  , sqlite3ErrStr(
7af0: 72 63 29 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  rc), 0);.    ret
7b00: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
7b10: 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33   }.  if( sqlite3
7b20: 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65  TestErrCode(inte
7b30: 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65  rp, db, rc) ) re
7b40: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
7b50: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
7b60: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
7b70: 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
7b80: 7a 65 20 20 53 54 4d 54 20 0a 2a 2a 0a 2a 2a 20  ze  STMT .**.** 
7b90: 46 69 6e 61 6c 69 7a 65 20 61 20 73 74 61 74 65  Finalize a state
7ba0: 6d 65 6e 74 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a  ment handle..*/.
7bb0: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
7bc0: 66 69 6e 61 6c 69 7a 65 28 0a 20 20 76 6f 69 64  finalize(.  void
7bd0: 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
7be0: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
7bf0: 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
7c00: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
7c10: 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
7c20: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
7c30: 74 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 73  t;.  int rc;.  s
7c40: 71 6c 69 74 65 33 20 2a 64 62 3b 0a 0a 20 20 69  qlite3 *db;..  i
7c50: 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20  f( objc!=2 ){.  
7c60: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
7c70: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
7c80: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
7c90: 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20   be \"",.       
7ca0: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72   Tcl_GetStringFr
7cb0: 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30  omObj(objv[0], 0
7cc0: 29 2c 20 22 20 3c 53 54 4d 54 3e 22 2c 20 30 29  ), " <STMT>", 0)
7cd0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
7ce0: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69  _ERROR;.  }..  i
7cf0: 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
7d00: 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
7d10: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
7d20: 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
7d30: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20  rn TCL_ERROR;.. 
7d40: 20 69 66 28 20 70 53 74 6d 74 20 29 7b 0a 20 20   if( pStmt ){.  
7d50: 20 20 64 62 20 3d 20 53 74 6d 74 54 6f 44 62 28    db = StmtToDb(
7d60: 70 53 74 6d 74 29 3b 0a 20 20 7d 0a 20 20 72 63  pStmt);.  }.  rc
7d70: 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c   = sqlite3_final
7d80: 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 54 63  ize(pStmt);.  Tc
7d90: 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65  l_SetResult(inte
7da0: 72 70 2c 20 28 63 68 61 72 20 2a 29 65 72 72 6f  rp, (char *)erro
7db0: 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53  rName(rc), TCL_S
7dc0: 54 41 54 49 43 29 3b 0a 20 20 69 66 28 20 64 62  TATIC);.  if( db
7dd0: 20 26 26 20 73 71 6c 69 74 65 33 54 65 73 74 45   && sqlite3TestE
7de0: 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64  rrCode(interp, d
7df0: 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20  b, rc) ) return 
7e00: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74  TCL_ERROR;.  ret
7e10: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
7e20: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
7e30: 69 74 65 33 5f 72 65 73 65 74 20 20 53 54 4d 54  ite3_reset  STMT
7e40: 20 0a 2a 2a 0a 2a 2a 20 52 65 73 65 74 20 61 20   .**.** Reset a 
7e50: 73 74 61 74 65 6d 65 6e 74 20 68 61 6e 64 6c 65  statement handle
7e60: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
7e70: 74 65 73 74 5f 72 65 73 65 74 28 0a 20 20 76 6f  test_reset(.  vo
7e80: 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
7e90: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
7ea0: 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
7eb0: 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
7ec0: 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
7ed0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
7ee0: 74 6d 74 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  tmt;.  int rc;..
7ef0: 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b    if( objc!=2 ){
7f00: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
7f10: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
7f20: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
7f30: 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20  uld be \"",.    
7f40: 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
7f50: 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d  gFromObj(objv[0]
7f60: 2c 20 30 29 2c 20 22 20 3c 53 54 4d 54 3e 22 2c  , 0), " <STMT>",
7f70: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
7f80: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
7f90: 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
7fa0: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
7fb0: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
7fc0: 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72  1]), &pStmt) ) r
7fd0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
7fe0: 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ..  rc = sqlite3
7ff0: 5f 72 65 73 65 74 28 70 53 74 6d 74 29 3b 0a 20  _reset(pStmt);. 
8000: 20 69 66 28 20 70 53 74 6d 74 20 26 26 20 73 71   if( pStmt && sq
8010: 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65  lite3TestErrCode
8020: 28 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f 44  (interp, StmtToD
8030: 62 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29 7b  b(pStmt), rc) ){
8040: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
8050: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 54 63 6c  ERROR;.  }.  Tcl
8060: 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
8070: 70 2c 20 28 63 68 61 72 20 2a 29 65 72 72 6f 72  p, (char *)error
8080: 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54  Name(rc), TCL_ST
8090: 41 54 49 43 29 3b 0a 2f 2a 0a 20 20 69 66 28 20  ATIC);./*.  if( 
80a0: 72 63 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  rc ){.    return
80b0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
80c0: 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  */.  return TCL_
80d0: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
80e0: 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 65 78 70  ge:  sqlite3_exp
80f0: 69 72 65 64 20 53 54 4d 54 20 0a 2a 2a 0a 2a 2a  ired STMT .**.**
8100: 20 52 65 74 75 72 6e 20 54 52 55 45 20 69 66 20   Return TRUE if 
8110: 61 20 72 65 63 6f 6d 70 69 6c 61 74 69 6f 6e 20  a recompilation 
8120: 6f 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  of the statement
8130: 20 69 73 20 72 65 63 6f 6d 6d 65 6e 64 65 64 2e   is recommended.
8140: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
8150: 65 73 74 5f 65 78 70 69 72 65 64 28 0a 20 20 76  est_expired(.  v
8160: 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
8170: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
8180: 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
8190: 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
81a0: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
81b0: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
81c0: 53 74 6d 74 3b 0a 20 20 69 66 28 20 6f 62 6a 63  Stmt;.  if( objc
81d0: 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=2 ){.    Tcl_A
81e0: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
81f0: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
8200: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
8210: 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65  ,.        Tcl_Ge
8220: 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f  tStringFromObj(o
8230: 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 3c 53  bjv[0], 0), " <S
8240: 54 4d 54 3e 22 2c 20 30 29 3b 0a 20 20 20 20 72  TMT>", 0);.    r
8250: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
8260: 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 53 74  .  }.  if( getSt
8270: 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  mtPointer(interp
8280: 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
8290: 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74  objv[1]), &pStmt
82a0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
82b0: 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74 4f  RROR;.  Tcl_SetO
82c0: 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
82d0: 20 54 63 6c 5f 4e 65 77 42 6f 6f 6c 65 61 6e 4f   Tcl_NewBooleanO
82e0: 62 6a 28 73 71 6c 69 74 65 33 5f 65 78 70 69 72  bj(sqlite3_expir
82f0: 65 64 28 70 53 74 6d 74 29 29 29 3b 0a 20 20 72  ed(pStmt)));.  r
8300: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
8310: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
8320: 71 6c 69 74 65 33 5f 74 72 61 6e 73 66 65 72 5f  qlite3_transfer_
8330: 62 69 6e 64 69 6e 67 73 20 46 52 4f 4d 53 54 4d  bindings FROMSTM
8340: 54 20 54 4f 53 54 4d 54 0a 2a 2a 0a 2a 2a 20 54  T TOSTMT.**.** T
8350: 72 61 6e 73 66 65 72 20 61 6c 6c 20 62 69 6e 64  ransfer all bind
8360: 69 6e 67 73 20 66 72 6f 6d 20 46 52 4f 4d 53 54  ings from FROMST
8370: 4d 54 20 6f 76 65 72 20 74 6f 20 54 4f 53 54 4d  MT over to TOSTM
8380: 54 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  T.*/.static int 
8390: 74 65 73 74 5f 74 72 61 6e 73 66 65 72 5f 62 69  test_transfer_bi
83a0: 6e 64 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  nd(.  void * cli
83b0: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
83c0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
83d0: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
83e0: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
83f0: 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  [].){.  sqlite3_
8400: 73 74 6d 74 20 2a 70 53 74 6d 74 31 2c 20 2a 70  stmt *pStmt1, *p
8410: 53 74 6d 74 32 3b 0a 20 20 69 66 28 20 6f 62 6a  Stmt2;.  if( obj
8420: 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
8430: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
8440: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
8450: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
8460: 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47  ",.        Tcl_G
8470: 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28  etStringFromObj(
8480: 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 46  objv[0], 0), " F
8490: 52 4f 4d 2d 53 54 4d 54 20 54 4f 2d 53 54 4d 54  ROM-STMT TO-STMT
84a0: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
84b0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
84c0: 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f  .  if( getStmtPo
84d0: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
84e0: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
84f0: 5b 31 5d 29 2c 20 26 70 53 74 6d 74 31 29 29 20  [1]), &pStmt1)) 
8500: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
8510: 3b 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  ;.  if( getStmtP
8520: 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
8530: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
8540: 76 5b 32 5d 29 2c 20 26 70 53 74 6d 74 32 29 29  v[2]), &pStmt2))
8550: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
8560: 52 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52  R;.  Tcl_SetObjR
8570: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 0a 20  esult(interp, . 
8580: 20 20 20 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62      Tcl_NewIntOb
8590: 6a 28 73 71 6c 69 74 65 33 5f 74 72 61 6e 73 66  j(sqlite3_transf
85a0: 65 72 5f 62 69 6e 64 69 6e 67 73 28 70 53 74 6d  er_bindings(pStm
85b0: 74 31 2c 70 53 74 6d 74 32 29 29 29 3b 0a 20 20  t1,pStmt2)));.  
85c0: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
85d0: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
85e0: 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 20  sqlite3_changes 
85f0: 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  DB.**.** Return 
8600: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 68  the number of ch
8610: 61 6e 67 65 73 20 6d 61 64 65 20 74 6f 20 74 68  anges made to th
8620: 65 20 64 61 74 61 62 61 73 65 20 62 79 20 74 68  e database by th
8630: 65 20 6c 61 73 74 20 53 51 4c 0a 2a 2a 20 65 78  e last SQL.** ex
8640: 65 63 75 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61 74  ecution..*/.stat
8650: 69 63 20 69 6e 74 20 74 65 73 74 5f 63 68 61 6e  ic int test_chan
8660: 67 65 73 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  ges(.  void * cl
8670: 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
8680: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
8690: 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
86a0: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
86b0: 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
86c0: 20 2a 64 62 3b 0a 20 20 69 66 28 20 6f 62 6a 63   *db;.  if( objc
86d0: 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=2 ){.    Tcl_A
86e0: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
86f0: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
8700: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
8710: 2c 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74  ,.       Tcl_Get
8720: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c  String(objv[0]),
8730: 20 22 20 44 42 22 2c 20 30 29 3b 0a 20 20 20 20   " DB", 0);.    
8740: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
8750: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44  ;.  }.  if( getD
8760: 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  bPointer(interp,
8770: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
8780: 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20  bjv[1]), &db) ) 
8790: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
87a0: 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65  ;.  Tcl_SetObjRe
87b0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
87c0: 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74  _NewIntObj(sqlit
87d0: 65 33 5f 63 68 61 6e 67 65 73 28 64 62 29 29 29  e3_changes(db)))
87e0: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
87f0: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  K;.}../*.** This
8800: 20 69 73 20 74 68 65 20 22 73 74 61 74 69 63 5f   is the "static_
8810: 62 69 6e 64 5f 76 61 6c 75 65 22 20 74 68 61 74  bind_value" that
8820: 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 62   variables are b
8830: 6f 75 6e 64 20 74 6f 20 77 68 65 6e 0a 2a 2a 20  ound to when.** 
8840: 74 68 65 20 46 4c 41 47 20 6f 70 74 69 6f 6e 20  the FLAG option 
8850: 6f 66 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 20  of sqlite3_bind 
8860: 69 73 20 22 73 74 61 74 69 63 22 0a 2a 2f 0a 73  is "static".*/.s
8870: 74 61 74 69 63 20 63 68 61 72 20 2a 73 71 6c 69  tatic char *sqli
8880: 74 65 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f 76  te_static_bind_v
8890: 61 6c 75 65 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a  alue = 0;../*.**
88a0: 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33   Usage:  sqlite3
88b0: 5f 62 69 6e 64 20 20 56 4d 20 20 49 44 58 20 20  _bind  VM  IDX  
88c0: 56 41 4c 55 45 20 20 46 4c 41 47 53 0a 2a 2a 0a  VALUE  FLAGS.**.
88d0: 2a 2a 20 53 65 74 73 20 74 68 65 20 76 61 6c 75  ** Sets the valu
88e0: 65 20 6f 66 20 74 68 65 20 49 44 58 2d 74 68 20  e of the IDX-th 
88f0: 6f 63 63 75 72 61 6e 63 65 20 6f 66 20 22 3f 22  occurance of "?"
8900: 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   in the original
8910: 20 53 51 4c 0a 2a 2a 20 73 74 72 69 6e 67 2e 20   SQL.** string. 
8920: 20 56 41 4c 55 45 20 69 73 20 74 68 65 20 6e 65   VALUE is the ne
8930: 77 20 76 61 6c 75 65 2e 20 20 49 66 20 46 4c 41  w value.  If FLA
8940: 47 53 3d 3d 22 6e 75 6c 6c 22 20 74 68 65 6e 20  GS=="null" then 
8950: 56 41 4c 55 45 20 69 73 0a 2a 2a 20 69 67 6e 6f  VALUE is.** igno
8960: 72 65 64 20 61 6e 64 20 74 68 65 20 76 61 6c 75  red and the valu
8970: 65 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c  e is set to NULL
8980: 2e 20 20 49 66 20 46 4c 41 47 53 3d 3d 22 73 74  .  If FLAGS=="st
8990: 61 74 69 63 22 20 74 68 65 6e 0a 2a 2a 20 74 68  atic" then.** th
89a0: 65 20 76 61 6c 75 65 20 69 73 20 73 65 74 20 74  e value is set t
89b0: 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61  o the value of a
89c0: 20 73 74 61 74 69 63 20 76 61 72 69 61 62 6c 65   static variable
89d0: 20 6e 61 6d 65 64 0a 2a 2a 20 22 73 71 6c 69 74   named.** "sqlit
89e0: 65 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f 76 61  e_static_bind_va
89f0: 6c 75 65 22 2e 20 20 49 66 20 46 4c 41 47 53 3d  lue".  If FLAGS=
8a00: 3d 22 6e 6f 72 6d 61 6c 22 20 74 68 65 6e 20 61  ="normal" then a
8a10: 20 63 6f 70 79 0a 2a 2a 20 6f 66 20 74 68 65 20   copy.** of the 
8a20: 56 41 4c 55 45 20 69 73 20 6d 61 64 65 2e 20 20  VALUE is made.  
8a30: 49 66 20 46 4c 41 47 53 3d 3d 22 62 6c 6f 62 31  If FLAGS=="blob1
8a40: 30 22 20 74 68 65 6e 20 61 20 56 41 4c 55 45 20  0" then a VALUE 
8a50: 69 73 20 69 67 6e 6f 72 65 64 0a 2a 2a 20 61 6e  is ignored.** an
8a60: 20 61 20 31 30 2d 62 79 74 65 20 62 6c 6f 62 20   a 10-byte blob 
8a70: 22 61 62 63 5c 30 30 30 78 79 7a 5c 30 30 30 70  "abc\000xyz\000p
8a80: 71 22 20 69 73 20 69 6e 73 65 72 74 65 64 2e 0a  q" is inserted..
8a90: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
8aa0: 73 74 5f 62 69 6e 64 28 0a 20 20 76 6f 69 64 20  st_bind(.  void 
8ab0: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f  *NotUsed,.  Tcl_
8ac0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
8ad0: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
8ae0: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
8af0: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
8b00: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67  and */.  int arg
8b10: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
8b20: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
8b30: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72  uments */.  char
8b40: 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20   **argv         
8b50: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61     /* Text of ea
8b60: 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29  ch argument */.)
8b70: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  {.  sqlite3_stmt
8b80: 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 72   *pStmt;.  int r
8b90: 63 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20  c;.  int idx;.  
8ba0: 69 66 28 20 61 72 67 63 21 3d 35 20 29 7b 0a 20  if( argc!=5 ){. 
8bb0: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
8bc0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
8bd0: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
8be0: 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30  d be \"", argv[0
8bf0: 5d 2c 20 0a 20 20 20 20 20 20 20 22 20 56 4d 20  ], .       " VM 
8c00: 49 44 58 20 56 41 4c 55 45 20 28 6e 75 6c 6c 7c  IDX VALUE (null|
8c10: 73 74 61 74 69 63 7c 6e 6f 72 6d 61 6c 29 5c 22  static|normal)\"
8c20: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
8c30: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
8c40: 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f  .  if( getStmtPo
8c50: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72  inter(interp, ar
8c60: 67 76 5b 31 5d 2c 20 26 70 53 74 6d 74 29 20 29  gv[1], &pStmt) )
8c70: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
8c80: 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  R;.  if( Tcl_Get
8c90: 49 6e 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76  Int(interp, argv
8ca0: 5b 32 5d 2c 20 26 69 64 78 29 20 29 20 72 65 74  [2], &idx) ) ret
8cb0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
8cc0: 20 69 66 28 20 73 74 72 63 6d 70 28 61 72 67 76   if( strcmp(argv
8cd0: 5b 34 5d 2c 22 6e 75 6c 6c 22 29 3d 3d 30 20 29  [4],"null")==0 )
8ce0: 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
8cf0: 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 70 53 74  e3_bind_null(pSt
8d00: 6d 74 2c 20 69 64 78 29 3b 0a 20 20 7d 65 6c 73  mt, idx);.  }els
8d10: 65 20 69 66 28 20 73 74 72 63 6d 70 28 61 72 67  e if( strcmp(arg
8d20: 76 5b 34 5d 2c 22 73 74 61 74 69 63 22 29 3d 3d  v[4],"static")==
8d30: 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  0 ){.    rc = sq
8d40: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28  lite3_bind_text(
8d50: 70 53 74 6d 74 2c 20 69 64 78 2c 20 73 71 6c 69  pStmt, idx, sqli
8d60: 74 65 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f 76  te_static_bind_v
8d70: 61 6c 75 65 2c 20 2d 31 2c 20 30 29 3b 0a 20 20  alue, -1, 0);.  
8d80: 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
8d90: 28 61 72 67 76 5b 34 5d 2c 22 6e 6f 72 6d 61 6c  (argv[4],"normal
8da0: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20  ")==0 ){.    rc 
8db0: 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74  = sqlite3_bind_t
8dc0: 65 78 74 28 70 53 74 6d 74 2c 20 69 64 78 2c 20  ext(pStmt, idx, 
8dd0: 61 72 67 76 5b 33 5d 2c 20 2d 31 2c 20 53 51 4c  argv[3], -1, SQL
8de0: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a  ITE_TRANSIENT);.
8df0: 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
8e00: 6d 70 28 61 72 67 76 5b 34 5d 2c 22 62 6c 6f 62  mp(argv[4],"blob
8e10: 31 30 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72  10")==0 ){.    r
8e20: 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  c = sqlite3_bind
8e30: 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 69 64 78  _text(pStmt, idx
8e40: 2c 20 22 61 62 63 5c 30 30 30 78 79 7a 5c 30 30  , "abc\000xyz\00
8e50: 30 70 71 22 2c 20 31 30 2c 20 53 51 4c 49 54 45  0pq", 10, SQLITE
8e60: 5f 53 54 41 54 49 43 29 3b 0a 20 20 7d 65 6c 73  _STATIC);.  }els
8e70: 65 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  e{.    Tcl_Appen
8e80: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
8e90: 22 34 74 68 20 61 72 67 75 6d 65 6e 74 20 73 68  "4th argument sh
8ea0: 6f 75 6c 64 20 62 65 20 22 0a 20 20 20 20 20 20  ould be ".      
8eb0: 20 20 22 5c 22 6e 75 6c 6c 5c 22 20 6f 72 20 5c    "\"null\" or \
8ec0: 22 73 74 61 74 69 63 5c 22 20 6f 72 20 5c 22 6e  "static\" or \"n
8ed0: 6f 72 6d 61 6c 5c 22 22 2c 20 30 29 3b 0a 20 20  ormal\"", 0);.  
8ee0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
8ef0: 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71  OR;.  }.  if( sq
8f00: 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65  lite3TestErrCode
8f10: 28 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f 44  (interp, StmtToD
8f20: 62 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29 20  b(pStmt), rc) ) 
8f30: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
8f40: 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20  ;.  if( rc ){.  
8f50: 20 20 63 68 61 72 20 7a 42 75 66 5b 35 30 5d 3b    char zBuf[50];
8f60: 0a 20 20 20 20 73 70 72 69 6e 74 66 28 7a 42 75  .    sprintf(zBu
8f70: 66 2c 20 22 28 25 64 29 20 22 2c 20 72 63 29 3b  f, "(%d) ", rc);
8f80: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
8f90: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42  esult(interp, zB
8fa0: 75 66 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74  uf, sqlite3ErrSt
8fb0: 72 28 72 63 29 2c 20 30 29 3b 0a 20 20 20 20 72  r(rc), 0);.    r
8fc0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
8fd0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43  .  }.  return TC
8fe0: 4c 5f 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  L_OK;.}..#ifndef
8ff0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
9000: 31 36 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  16./*.** Usage: 
9010: 61 64 64 5f 74 65 73 74 5f 63 6f 6c 6c 61 74 65  add_test_collate
9020: 20 3c 64 62 20 70 74 72 3e 20 3c 75 74 66 38 3e   <db ptr> <utf8>
9030: 20 3c 75 74 66 31 36 6c 65 3e 20 3c 75 74 66 31   <utf16le> <utf1
9040: 36 62 65 3e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  6be>.**.** This 
9050: 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64  function is used
9060: 20 74 6f 20 74 65 73 74 20 74 68 61 74 20 53 51   to test that SQ
9070: 4c 69 74 65 20 73 65 6c 65 63 74 73 20 74 68 65  Lite selects the
9080: 20 63 6f 72 72 65 63 74 20 63 6f 6c 6c 61 74 69   correct collati
9090: 6f 6e 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 63  on.** sequence c
90a0: 61 6c 6c 62 61 63 6b 20 77 68 65 6e 20 6d 75 6c  allback when mul
90b0: 74 69 70 6c 65 20 76 65 72 73 69 6f 6e 73 20 28  tiple versions (
90c0: 66 6f 72 20 64 69 66 66 65 72 65 6e 74 20 74 65  for different te
90d0: 78 74 20 65 6e 63 6f 64 69 6e 67 73 29 0a 2a 2a  xt encodings).**
90e0: 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 2e 0a   are available..
90f0: 2a 2a 0a 2a 2a 20 43 61 6c 6c 69 6e 67 20 74 68  **.** Calling th
9100: 69 73 20 72 6f 75 74 69 6e 65 20 72 65 67 69 73  is routine regis
9110: 74 65 72 73 20 74 68 65 20 63 6f 6c 6c 61 74 69  ters the collati
9120: 6f 6e 20 73 65 71 75 65 6e 63 65 20 22 74 65 73  on sequence "tes
9130: 74 5f 63 6f 6c 6c 61 74 65 22 0a 2a 2a 20 77 69  t_collate".** wi
9140: 74 68 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  th database hand
9150: 6c 65 20 3c 64 62 3e 2e 20 54 68 65 20 73 65 63  le <db>. The sec
9160: 6f 6e 64 20 61 72 67 75 6d 65 6e 74 20 6d 75 73  ond argument mus
9170: 74 20 62 65 20 61 20 6c 69 73 74 20 6f 66 20 74  t be a list of t
9180: 68 72 65 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20  hree.** boolean 
9190: 76 61 6c 75 65 73 2e 20 49 66 20 74 68 65 20 66  values. If the f
91a0: 69 72 73 74 20 69 73 20 74 72 75 65 2c 20 74 68  irst is true, th
91b0: 65 6e 20 61 20 76 65 72 73 69 6f 6e 20 6f 66 20  en a version of 
91c0: 74 65 73 74 5f 63 6f 6c 6c 61 74 65 20 69 73 0a  test_collate is.
91d0: 2a 2a 20 72 65 67 69 73 74 65 72 65 64 20 66 6f  ** registered fo
91e0: 72 20 55 54 46 2d 38 2c 20 69 66 20 74 68 65 20  r UTF-8, if the 
91f0: 73 65 63 6f 6e 64 20 69 73 20 74 72 75 65 2c 20  second is true, 
9200: 61 20 76 65 72 73 69 6f 6e 20 69 73 20 72 65 67  a version is reg
9210: 69 73 74 65 72 65 64 20 66 6f 72 0a 2a 2a 20 55  istered for.** U
9220: 54 46 2d 31 36 6c 65 2c 20 69 66 20 74 68 65 20  TF-16le, if the 
9230: 74 68 69 72 64 20 69 73 20 74 72 75 65 2c 20 61  third is true, a
9240: 20 55 54 46 2d 31 36 62 65 20 76 65 72 73 69 6f   UTF-16be versio
9250: 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0a  n is available..
9260: 2a 2a 20 50 72 65 76 69 6f 75 73 20 76 65 72 73  ** Previous vers
9270: 69 6f 6e 73 20 6f 66 20 74 65 73 74 5f 63 6f 6c  ions of test_col
9280: 6c 61 74 65 20 61 72 65 20 64 65 6c 65 74 65 64  late are deleted
9290: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 6c  ..**.** The coll
92a0: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 74  ation sequence t
92b0: 65 73 74 5f 63 6f 6c 6c 61 74 65 20 69 73 20 69  est_collate is i
92c0: 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 61  mplemented by ca
92d0: 6c 6c 69 6e 67 20 74 68 65 0a 2a 2a 20 66 6f 6c  lling the.** fol
92e0: 6c 6f 77 69 6e 67 20 54 43 4c 20 73 63 72 69 70  lowing TCL scrip
92f0: 74 3a 0a 2a 2a 0a 2a 2a 20 20 20 22 74 65 73 74  t:.**.**   "test
9300: 5f 63 6f 6c 6c 61 74 65 20 3c 65 6e 63 3e 20 3c  _collate <enc> <
9310: 6c 68 73 3e 20 3c 72 68 73 3e 22 0a 2a 2a 0a 2a  lhs> <rhs>".**.*
9320: 2a 20 54 68 65 20 3c 6c 68 73 3e 20 61 6e 64 20  * The <lhs> and 
9330: 3c 72 68 73 3e 20 61 72 65 20 74 68 65 20 74 77  <rhs> are the tw
9340: 6f 20 76 61 6c 75 65 73 20 62 65 69 6e 67 20 63  o values being c
9350: 6f 6d 70 61 72 65 64 2c 20 65 6e 63 6f 64 65 64  ompared, encoded
9360: 20 69 6e 20 55 54 46 2d 38 2e 0a 2a 2a 20 54 68   in UTF-8..** Th
9370: 65 20 3c 65 6e 63 3e 20 70 61 72 61 6d 65 74 65  e <enc> paramete
9380: 72 20 69 73 20 74 68 65 20 65 6e 63 6f 64 69 6e  r is the encodin
9390: 67 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69  g of the collati
93a0: 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 74 68 61 74  on function that
93b0: 0a 2a 2a 20 53 51 4c 69 74 65 20 73 65 6c 65 63  .** SQLite selec
93c0: 74 65 64 20 74 6f 20 63 61 6c 6c 2e 20 54 68 65  ted to call. The
93d0: 20 54 43 4c 20 74 65 73 74 20 73 63 72 69 70 74   TCL test script
93e0: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 0a   implements the.
93f0: 2a 2a 20 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65  ** "test_collate
9400: 22 20 70 72 6f 63 2e 0a 2a 2a 0a 2a 2a 20 4e 6f  " proc..**.** No
9410: 74 65 20 74 68 61 74 20 74 68 69 73 20 77 69 6c  te that this wil
9420: 6c 20 6f 6e 6c 79 20 77 6f 72 6b 20 77 69 74 68  l only work with
9430: 20 6f 6e 65 20 69 6e 74 65 70 72 65 74 65 72 20   one intepreter 
9440: 61 74 20 61 20 74 69 6d 65 2c 20 61 73 20 74 68  at a time, as th
9450: 65 0a 2a 2a 20 69 6e 74 65 72 70 20 70 6f 69 6e  e.** interp poin
9460: 74 65 72 20 74 6f 20 75 73 65 20 77 68 65 6e 20  ter to use when 
9470: 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 54  evaluating the T
9480: 43 4c 20 73 63 72 69 70 74 20 69 73 20 73 74 6f  CL script is sto
9490: 72 65 64 20 69 6e 0a 2a 2a 20 70 54 65 73 74 43  red in.** pTestC
94a0: 6f 6c 6c 61 74 65 49 6e 74 65 72 70 2e 0a 2a 2f  ollateInterp..*/
94b0: 0a 73 74 61 74 69 63 20 54 63 6c 5f 49 6e 74 65  .static Tcl_Inte
94c0: 72 70 2a 20 70 54 65 73 74 43 6f 6c 6c 61 74 65  rp* pTestCollate
94d0: 49 6e 74 65 72 70 3b 0a 73 74 61 74 69 63 20 69  Interp;.static i
94e0: 6e 74 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f  nt test_collate_
94f0: 66 75 6e 63 28 0a 20 20 76 6f 69 64 20 2a 70 43  func(.  void *pC
9500: 74 78 2c 20 0a 20 20 69 6e 74 20 6e 41 2c 20 63  tx, .  int nA, c
9510: 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 41 2c 0a 20  onst void *zA,. 
9520: 20 69 6e 74 20 6e 42 2c 20 63 6f 6e 73 74 20 76   int nB, const v
9530: 6f 69 64 20 2a 7a 42 0a 29 7b 0a 20 20 54 63 6c  oid *zB.){.  Tcl
9540: 5f 49 6e 74 65 72 70 20 2a 69 20 3d 20 70 54 65  _Interp *i = pTe
9550: 73 74 43 6f 6c 6c 61 74 65 49 6e 74 65 72 70 3b  stCollateInterp;
9560: 0a 20 20 69 6e 74 20 65 6e 63 69 6e 20 3d 20 28  .  int encin = (
9570: 69 6e 74 29 70 43 74 78 3b 0a 20 20 69 6e 74 20  int)pCtx;.  int 
9580: 72 65 73 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20  res;.  int n;.. 
9590: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
95a0: 70 56 61 6c 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20  pVal;.  Tcl_Obj 
95b0: 2a 70 58 3b 0a 0a 20 20 70 58 20 3d 20 54 63 6c  *pX;..  pX = Tcl
95c0: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 74  _NewStringObj("t
95d0: 65 73 74 5f 63 6f 6c 6c 61 74 65 22 2c 20 2d 31  est_collate", -1
95e0: 29 3b 0a 20 20 54 63 6c 5f 49 6e 63 72 52 65 66  );.  Tcl_IncrRef
95f0: 43 6f 75 6e 74 28 70 58 29 3b 0a 0a 20 20 73 77  Count(pX);..  sw
9600: 69 74 63 68 28 20 65 6e 63 69 6e 20 29 7b 0a 20  itch( encin ){. 
9610: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 55     case SQLITE_U
9620: 54 46 38 3a 0a 20 20 20 20 20 20 54 63 6c 5f 4c  TF8:.      Tcl_L
9630: 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d  istObjAppendElem
9640: 65 6e 74 28 69 2c 70 58 2c 54 63 6c 5f 4e 65 77  ent(i,pX,Tcl_New
9650: 53 74 72 69 6e 67 4f 62 6a 28 22 55 54 46 2d 38  StringObj("UTF-8
9660: 22 2c 2d 31 29 29 3b 0a 20 20 20 20 20 20 62 72  ",-1));.      br
9670: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
9680: 4c 49 54 45 5f 55 54 46 31 36 4c 45 3a 0a 20 20  LITE_UTF16LE:.  
9690: 20 20 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41      Tcl_ListObjA
96a0: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 2c 70  ppendElement(i,p
96b0: 58 2c 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  X,Tcl_NewStringO
96c0: 62 6a 28 22 55 54 46 2d 31 36 4c 45 22 2c 2d 31  bj("UTF-16LE",-1
96d0: 29 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  ));.      break;
96e0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
96f0: 5f 55 54 46 31 36 42 45 3a 0a 20 20 20 20 20 20  _UTF16BE:.      
9700: 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e  Tcl_ListObjAppen
9710: 64 45 6c 65 6d 65 6e 74 28 69 2c 70 58 2c 54 63  dElement(i,pX,Tc
9720: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22  l_NewStringObj("
9730: 55 54 46 2d 31 36 42 45 22 2c 2d 31 29 29 3b 0a  UTF-16BE",-1));.
9740: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
9750: 20 64 65 66 61 75 6c 74 3a 0a 20 20 20 20 20 20   default:.      
9760: 61 73 73 65 72 74 28 30 29 3b 0a 20 20 7d 0a 0a  assert(0);.  }..
9770: 20 20 70 56 61 6c 20 3d 20 73 71 6c 69 74 65 33    pVal = sqlite3
9780: 56 61 6c 75 65 4e 65 77 28 29 3b 0a 20 20 73 71  ValueNew();.  sq
9790: 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72  lite3ValueSetStr
97a0: 28 70 56 61 6c 2c 20 6e 41 2c 20 7a 41 2c 20 65  (pVal, nA, zA, e
97b0: 6e 63 69 6e 2c 20 53 51 4c 49 54 45 5f 53 54 41  ncin, SQLITE_STA
97c0: 54 49 43 29 3b 0a 20 20 6e 20 3d 20 73 71 6c 69  TIC);.  n = sqli
97d0: 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 28  te3_value_bytes(
97e0: 70 56 61 6c 29 3b 0a 20 20 54 63 6c 5f 4c 69 73  pVal);.  Tcl_Lis
97f0: 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e  tObjAppendElemen
9800: 74 28 69 2c 70 58 2c 0a 20 20 20 20 20 20 54 63  t(i,pX,.      Tc
9810: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 28  l_NewStringObj((
9820: 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61  char*)sqlite3_va
9830: 6c 75 65 5f 74 65 78 74 28 70 56 61 6c 29 2c 6e  lue_text(pVal),n
9840: 29 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c  ));.  sqlite3Val
9850: 75 65 53 65 74 53 74 72 28 70 56 61 6c 2c 20 6e  ueSetStr(pVal, n
9860: 42 2c 20 7a 42 2c 20 65 6e 63 69 6e 2c 20 53 51  B, zB, encin, SQ
9870: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
9880: 6e 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  n = sqlite3_valu
9890: 65 5f 62 79 74 65 73 28 70 56 61 6c 29 3b 0a 20  e_bytes(pVal);. 
98a0: 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65   Tcl_ListObjAppe
98b0: 6e 64 45 6c 65 6d 65 6e 74 28 69 2c 70 58 2c 0a  ndElement(i,pX,.
98c0: 20 20 20 20 20 20 54 63 6c 5f 4e 65 77 53 74 72        Tcl_NewStr
98d0: 69 6e 67 4f 62 6a 28 28 63 68 61 72 2a 29 73 71  ingObj((char*)sq
98e0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
98f0: 28 70 56 61 6c 29 2c 6e 29 29 3b 0a 20 20 73 71  (pVal),n));.  sq
9900: 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 70  lite3ValueFree(p
9910: 56 61 6c 29 3b 0a 0a 20 20 54 63 6c 5f 45 76 61  Val);..  Tcl_Eva
9920: 6c 4f 62 6a 45 78 28 69 2c 20 70 58 2c 20 30 29  lObjEx(i, pX, 0)
9930: 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52 65 66 43  ;.  Tcl_DecrRefC
9940: 6f 75 6e 74 28 70 58 29 3b 0a 20 20 54 63 6c 5f  ount(pX);.  Tcl_
9950: 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 2c  GetIntFromObj(i,
9960: 20 54 63 6c 5f 47 65 74 4f 62 6a 52 65 73 75 6c   Tcl_GetObjResul
9970: 74 28 69 29 2c 20 26 72 65 73 29 3b 0a 20 20 72  t(i), &res);.  r
9980: 65 74 75 72 6e 20 72 65 73 3b 0a 7d 0a 73 74 61  eturn res;.}.sta
9990: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c  tic int test_col
99a0: 6c 61 74 65 28 0a 20 20 76 6f 69 64 20 2a 20 63  late(.  void * c
99b0: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
99c0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
99d0: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
99e0: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
99f0: 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
9a00: 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 76 61 6c  3 *db;.  int val
9a10: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  ;.  sqlite3_valu
9a20: 65 20 2a 70 56 61 6c 3b 0a 20 20 69 6e 74 20 72  e *pVal;.  int r
9a30: 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  c;..  if( objc!=
9a40: 35 20 29 20 67 6f 74 6f 20 62 61 64 5f 61 72 67  5 ) goto bad_arg
9a50: 73 3b 0a 20 20 70 54 65 73 74 43 6f 6c 6c 61 74  s;.  pTestCollat
9a60: 65 49 6e 74 65 72 70 20 3d 20 69 6e 74 65 72 70  eInterp = interp
9a70: 3b 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  ;.  if( getDbPoi
9a80: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
9a90: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
9aa0: 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74 75  1]), &db) ) retu
9ab0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20  rn TCL_ERROR;.. 
9ac0: 20 69 66 28 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c   if( TCL_OK!=Tcl
9ad0: 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f  _GetBooleanFromO
9ae0: 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
9af0: 32 5d 2c 20 26 76 61 6c 29 20 29 20 72 65 74 75  2], &val) ) retu
9b00: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
9b10: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65  rc = sqlite3_cre
9b20: 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62  ate_collation(db
9b30: 2c 20 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22  , "test_collate"
9b40: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 0a  , SQLITE_UTF8, .
9b50: 20 20 20 20 20 20 20 20 20 20 28 76 6f 69 64 20            (void 
9b60: 2a 29 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 76  *)SQLITE_UTF8, v
9b70: 61 6c 3f 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f  al?test_collate_
9b80: 66 75 6e 63 3a 30 29 3b 0a 20 20 69 66 28 20 72  func:0);.  if( r
9b90: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
9ba0: 20 20 20 20 69 66 28 20 54 43 4c 5f 4f 4b 21 3d      if( TCL_OK!=
9bb0: 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72  Tcl_GetBooleanFr
9bc0: 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
9bd0: 6a 76 5b 33 5d 2c 20 26 76 61 6c 29 20 29 20 72  jv[3], &val) ) r
9be0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
9bf0: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
9c00: 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69  3_create_collati
9c10: 6f 6e 28 64 62 2c 20 22 74 65 73 74 5f 63 6f 6c  on(db, "test_col
9c20: 6c 61 74 65 22 2c 20 53 51 4c 49 54 45 5f 55 54  late", SQLITE_UT
9c30: 46 31 36 4c 45 2c 20 0a 20 20 20 20 20 20 20 20  F16LE, .        
9c40: 20 20 20 20 28 76 6f 69 64 20 2a 29 53 51 4c 49      (void *)SQLI
9c50: 54 45 5f 55 54 46 31 36 4c 45 2c 20 76 61 6c 3f  TE_UTF16LE, val?
9c60: 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 66 75 6e  test_collate_fun
9c70: 63 3a 30 29 3b 0a 20 20 20 20 69 66 28 20 54 43  c:0);.    if( TC
9c80: 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 42 6f 6f  L_OK!=Tcl_GetBoo
9c90: 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74 65  leanFromObj(inte
9ca0: 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 26 76 61  rp, objv[4], &va
9cb0: 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  l) ) return TCL_
9cc0: 45 52 52 4f 52 3b 0a 0a 23 69 66 64 65 66 20 53  ERROR;..#ifdef S
9cd0: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20  QLITE_MEMDEBUG. 
9ce0: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69     if( sqlite3_i
9cf0: 4d 61 6c 6c 6f 63 46 61 69 6c 3e 30 20 29 7b 0a  MallocFail>0 ){.
9d00: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 4d        sqlite3_iM
9d10: 61 6c 6c 6f 63 46 61 69 6c 2b 2b 3b 0a 20 20 20  allocFail++;.   
9d20: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 70 56   }.#endif.    pV
9d30: 61 6c 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75  al = sqlite3Valu
9d40: 65 4e 65 77 28 29 3b 0a 20 20 20 20 73 71 6c 69  eNew();.    sqli
9d50: 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 70  te3ValueSetStr(p
9d60: 56 61 6c 2c 20 2d 31 2c 20 22 74 65 73 74 5f 63  Val, -1, "test_c
9d70: 6f 6c 6c 61 74 65 22 2c 20 53 51 4c 49 54 45 5f  ollate", SQLITE_
9d80: 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41  UTF8, SQLITE_STA
9d90: 54 49 43 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  TIC);.    rc = s
9da0: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f  qlite3_create_co
9db0: 6c 6c 61 74 69 6f 6e 31 36 28 64 62 2c 20 0a 20  llation16(db, . 
9dc0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
9dd0: 56 61 6c 75 65 54 65 78 74 28 70 56 61 6c 2c 20  ValueText(pVal, 
9de0: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
9df0: 56 45 29 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  VE), SQLITE_UTF1
9e00: 36 42 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20  6BE, .          
9e10: 28 76 6f 69 64 20 2a 29 53 51 4c 49 54 45 5f 55  (void *)SQLITE_U
9e20: 54 46 31 36 42 45 2c 20 76 61 6c 3f 74 65 73 74  TF16BE, val?test
9e30: 5f 63 6f 6c 6c 61 74 65 5f 66 75 6e 63 3a 30 29  _collate_func:0)
9e40: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c  ;.    sqlite3Val
9e50: 75 65 46 72 65 65 28 70 56 61 6c 29 3b 0a 20 20  ueFree(pVal);.  
9e60: 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54  }.  if( sqlite3T
9e70: 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72  estErrCode(inter
9e80: 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65 74  p, db, rc) ) ret
9e90: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
9ea0: 20 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49   .  if( rc!=SQLI
9eb0: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c  TE_OK ){.    Tcl
9ec0: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
9ed0: 74 65 72 70 2c 20 73 71 6c 69 74 65 33 54 65 73  terp, sqlite3Tes
9ee0: 74 45 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20  tErrorName(rc), 
9ef0: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
9f00: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
9f10: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 0a  return TCL_OK;..
9f20: 62 61 64 5f 61 72 67 73 3a 0a 20 20 54 63 6c 5f  bad_args:.  Tcl_
9f30: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
9f40: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
9f50: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
9f60: 22 2c 0a 20 20 20 20 20 20 54 63 6c 5f 47 65 74  ",.      Tcl_Get
9f70: 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62  StringFromObj(ob
9f80: 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 3c 44 42  jv[0], 0), " <DB
9f90: 3e 20 3c 75 74 66 38 3e 20 3c 75 74 66 31 36 6c  > <utf8> <utf16l
9fa0: 65 3e 20 3c 75 74 66 31 36 62 65 3e 22 2c 20 30  e> <utf16be>", 0
9fb0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
9fc0: 45 52 52 4f 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  ERROR;.}../*.** 
9fd0: 57 68 65 6e 20 74 68 65 20 63 6f 6c 6c 61 74 69  When the collati
9fe0: 6f 6e 20 6e 65 65 64 65 64 20 63 61 6c 6c 62 61  on needed callba
9ff0: 63 6b 20 69 73 20 69 6e 76 6f 6b 65 64 2c 20 72  ck is invoked, r
a000: 65 63 6f 72 64 20 74 68 65 20 6e 61 6d 65 20 6f  ecord the name o
a010: 66 20 0a 2a 2a 20 74 68 65 20 72 65 71 75 65 73  f .** the reques
a020: 74 65 64 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  ted collating fu
a030: 6e 63 74 69 6f 6e 20 68 65 72 65 2e 20 20 54 68  nction here.  Th
a040: 65 20 72 65 63 6f 72 64 65 64 20 6e 61 6d 65 20  e recorded name 
a050: 69 73 20 6c 69 6e 6b 65 64 0a 2a 2a 20 74 6f 20  is linked.** to 
a060: 61 20 54 43 4c 20 76 61 72 69 61 62 6c 65 20 61  a TCL variable a
a070: 6e 64 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20  nd used to make 
a080: 73 75 72 65 20 74 68 61 74 20 74 68 65 20 72 65  sure that the re
a090: 71 75 65 73 74 65 64 20 63 6f 6c 6c 61 74 69 6f  quested collatio
a0a0: 6e 0a 2a 2a 20 6e 61 6d 65 20 69 73 20 63 6f 72  n.** name is cor
a0b0: 72 65 63 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  rect..*/.static 
a0c0: 63 68 61 72 20 7a 4e 65 65 64 65 64 43 6f 6c 6c  char zNeededColl
a0d0: 61 74 69 6f 6e 5b 32 30 30 5d 3b 0a 73 74 61 74  ation[200];.stat
a0e0: 69 63 20 63 68 61 72 20 2a 70 7a 4e 65 65 64 65  ic char *pzNeede
a0f0: 64 43 6f 6c 6c 61 74 69 6f 6e 20 3d 20 7a 4e 65  dCollation = zNe
a100: 65 64 65 64 43 6f 6c 6c 61 74 69 6f 6e 3b 0a 0a  ededCollation;..
a110: 0a 2f 2a 0a 2a 2a 20 43 61 6c 6c 65 64 20 77 68  ./*.** Called wh
a120: 65 6e 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73  en a collating s
a130: 65 71 75 65 6e 63 65 20 69 73 20 6e 65 65 64 65  equence is neede
a140: 64 2e 20 20 52 65 67 69 73 74 65 72 65 64 20 75  d.  Registered u
a150: 73 69 6e 67 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  sing.** sqlite3_
a160: 63 6f 6c 6c 61 74 69 6f 6e 5f 6e 65 65 64 65 64  collation_needed
a170: 31 36 28 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  16()..*/.static 
a180: 76 6f 69 64 20 74 65 73 74 5f 63 6f 6c 6c 61 74  void test_collat
a190: 65 5f 6e 65 65 64 65 64 5f 63 62 28 0a 20 20 76  e_needed_cb(.  v
a1a0: 6f 69 64 20 2a 70 43 74 78 2c 20 0a 20 20 73 71  oid *pCtx, .  sq
a1b0: 6c 69 74 65 33 20 2a 64 62 2c 0a 20 20 69 6e 74  lite3 *db,.  int
a1c0: 20 65 54 65 78 74 52 65 70 2c 0a 20 20 63 6f 6e   eTextRep,.  con
a1d0: 73 74 20 76 6f 69 64 20 2a 70 4e 61 6d 65 0a 29  st void *pName.)
a1e0: 7b 0a 20 20 69 6e 74 20 65 6e 63 20 3d 20 45 4e  {.  int enc = EN
a1f0: 43 28 64 62 29 3b 0a 20 20 69 6e 74 20 69 3b 0a  C(db);.  int i;.
a200: 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 66 6f 72    char *z;.  for
a210: 28 7a 20 3d 20 28 63 68 61 72 2a 29 70 4e 61 6d  (z = (char*)pNam
a220: 65 2c 20 69 3d 30 3b 20 2a 7a 20 7c 7c 20 7a 5b  e, i=0; *z || z[
a230: 31 5d 3b 20 7a 2b 2b 29 7b 0a 20 20 20 20 69 66  1]; z++){.    if
a240: 28 20 2a 7a 20 29 20 7a 4e 65 65 64 65 64 43 6f  ( *z ) zNeededCo
a250: 6c 6c 61 74 69 6f 6e 5b 69 2b 2b 5d 20 3d 20 2a  llation[i++] = *
a260: 7a 3b 0a 20 20 7d 0a 20 20 7a 4e 65 65 64 65 64  z;.  }.  zNeeded
a270: 43 6f 6c 6c 61 74 69 6f 6e 5b 69 5d 20 3d 20 30  Collation[i] = 0
a280: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61  ;.  sqlite3_crea
a290: 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 0a 20 20  te_collation(.  
a2a0: 20 20 20 20 64 62 2c 20 22 74 65 73 74 5f 63 6f      db, "test_co
a2b0: 6c 6c 61 74 65 22 2c 20 45 4e 43 28 64 62 29 2c  llate", ENC(db),
a2c0: 20 28 76 6f 69 64 20 2a 29 65 6e 63 2c 20 74 65   (void *)enc, te
a2d0: 73 74 5f 63 6f 6c 6c 61 74 65 5f 66 75 6e 63 29  st_collate_func)
a2e0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
a2f0: 3a 20 61 64 64 5f 74 65 73 74 5f 63 6f 6c 6c 61  : add_test_colla
a300: 74 65 5f 6e 65 65 64 65 64 20 44 42 0a 2a 2f 0a  te_needed DB.*/.
a310: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
a320: 63 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64 28 0a  collate_needed(.
a330: 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
a340: 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
a350: 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
a360: 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
a370: 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
a380: 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
a390: 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66  .  int rc;..  if
a3a0: 28 20 6f 62 6a 63 21 3d 32 20 29 20 67 6f 74 6f  ( objc!=2 ) goto
a3b0: 20 62 61 64 5f 61 72 67 73 3b 0a 20 20 69 66 28   bad_args;.  if(
a3c0: 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e   getDbPointer(in
a3d0: 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
a3e0: 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64  ing(objv[1]), &d
a3f0: 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
a400: 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71  ERROR;.  rc = sq
a410: 6c 69 74 65 33 5f 63 6f 6c 6c 61 74 69 6f 6e 5f  lite3_collation_
a420: 6e 65 65 64 65 64 31 36 28 64 62 2c 20 30 2c 20  needed16(db, 0, 
a430: 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65  test_collate_nee
a440: 64 65 64 5f 63 62 29 3b 0a 20 20 7a 4e 65 65 64  ded_cb);.  zNeed
a450: 65 64 43 6f 6c 6c 61 74 69 6f 6e 5b 30 5d 20 3d  edCollation[0] =
a460: 20 30 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65   0;.  if( sqlite
a470: 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74  3TestErrCode(int
a480: 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72  erp, db, rc) ) r
a490: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
a4a0: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
a4b0: 3b 0a 0a 62 61 64 5f 61 72 67 73 3a 0a 20 20 54  ;..bad_args:.  T
a4c0: 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28  cl_WrongNumArgs(
a4d0: 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c  interp, 1, objv,
a4e0: 20 22 44 42 22 29 3b 0a 20 20 72 65 74 75 72 6e   "DB");.  return
a4f0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 7d 0a 23 65   TCL_ERROR;.}.#e
a500: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
a510: 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 2f 2a  MIT_UTF16 */../*
a520: 0a 2a 2a 20 55 73 61 67 65 3a 20 61 64 64 5f 74  .** Usage: add_t
a530: 65 73 74 5f 66 75 6e 63 74 69 6f 6e 20 3c 64 62  est_function <db
a540: 20 70 74 72 3e 20 3c 75 74 66 38 3e 20 3c 75 74   ptr> <utf8> <ut
a550: 66 31 36 6c 65 3e 20 3c 75 74 66 31 36 62 65 3e  f16le> <utf16be>
a560: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63  .**.** This func
a570: 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20  tion is used to 
a580: 74 65 73 74 20 74 68 61 74 20 53 51 4c 69 74 65  test that SQLite
a590: 20 73 65 6c 65 63 74 73 20 74 68 65 20 63 6f 72   selects the cor
a5a0: 72 65 63 74 20 75 73 65 72 0a 2a 2a 20 66 75 6e  rect user.** fun
a5b0: 63 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 77  ction callback w
a5c0: 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 76 65 72  hen multiple ver
a5d0: 73 69 6f 6e 73 20 28 66 6f 72 20 64 69 66 66 65  sions (for diffe
a5e0: 72 65 6e 74 20 74 65 78 74 20 65 6e 63 6f 64 69  rent text encodi
a5f0: 6e 67 73 29 0a 2a 2a 20 61 72 65 20 61 76 61 69  ngs).** are avai
a600: 6c 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 43 61 6c  lable..**.** Cal
a610: 6c 69 6e 67 20 74 68 69 73 20 72 6f 75 74 69 6e  ling this routin
a620: 65 20 72 65 67 69 73 74 65 72 73 20 75 70 20 74  e registers up t
a630: 6f 20 74 68 72 65 65 20 76 65 72 73 69 6f 6e 73  o three versions
a640: 20 6f 66 20 74 68 65 20 75 73 65 72 20 66 75 6e   of the user fun
a650: 63 74 69 6f 6e 0a 2a 2a 20 22 74 65 73 74 5f 66  ction.** "test_f
a660: 75 6e 63 74 69 6f 6e 22 20 77 69 74 68 20 64 61  unction" with da
a670: 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 3c 64  tabase handle <d
a680: 62 3e 2e 20 20 49 66 20 74 68 65 20 73 65 63 6f  b>.  If the seco
a690: 6e 64 20 61 72 67 75 6d 65 6e 74 20 69 73 0a 2a  nd argument is.*
a6a0: 2a 20 74 72 75 65 2c 20 74 68 65 6e 20 61 20 76  * true, then a v
a6b0: 65 72 73 69 6f 6e 20 6f 66 20 74 65 73 74 5f 66  ersion of test_f
a6c0: 75 6e 63 74 69 6f 6e 20 69 73 20 72 65 67 69 73  unction is regis
a6d0: 74 65 72 65 64 20 66 6f 72 20 55 54 46 2d 38 2c  tered for UTF-8,
a6e0: 20 69 66 20 74 68 65 0a 2a 2a 20 74 68 69 72 64   if the.** third
a6f0: 20 69 73 20 74 72 75 65 2c 20 61 20 76 65 72 73   is true, a vers
a700: 69 6f 6e 20 69 73 20 72 65 67 69 73 74 65 72 65  ion is registere
a710: 64 20 66 6f 72 20 55 54 46 2d 31 36 6c 65 2c 20  d for UTF-16le, 
a720: 69 66 20 74 68 65 20 66 6f 75 72 74 68 20 69 73  if the fourth is
a730: 0a 2a 2a 20 74 72 75 65 2c 20 61 20 55 54 46 2d  .** true, a UTF-
a740: 31 36 62 65 20 76 65 72 73 69 6f 6e 20 69 73 20  16be version is 
a750: 61 76 61 69 6c 61 62 6c 65 2e 20 20 50 72 65 76  available.  Prev
a760: 69 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f 66  ious versions of
a770: 0a 2a 2a 20 74 65 73 74 5f 66 75 6e 63 74 69 6f  .** test_functio
a780: 6e 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 2a  n are deleted..*
a790: 2a 0a 2a 2a 20 54 68 65 20 75 73 65 72 20 66 75  *.** The user fu
a7a0: 6e 63 74 69 6f 6e 20 69 73 20 69 6d 70 6c 65 6d  nction is implem
a7b0: 65 6e 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67  ented by calling
a7c0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 54   the following T
a7d0: 43 4c 20 73 63 72 69 70 74 3a 0a 2a 2a 0a 2a 2a  CL script:.**.**
a7e0: 20 20 20 22 74 65 73 74 5f 66 75 6e 63 74 69 6f     "test_functio
a7f0: 6e 20 3c 65 6e 63 3e 20 3c 61 72 67 3e 22 0a 2a  n <enc> <arg>".*
a800: 2a 0a 2a 2a 20 57 68 65 72 65 20 3c 65 6e 63 3e  *.** Where <enc>
a810: 20 69 73 20 6f 6e 65 20 6f 66 20 55 54 46 2d 38   is one of UTF-8
a820: 2c 20 55 54 46 2d 31 36 4c 45 20 6f 72 20 55 54  , UTF-16LE or UT
a830: 46 31 36 42 45 2c 20 61 6e 64 20 3c 61 72 67 3e  F16BE, and <arg>
a840: 20 69 73 20 74 68 65 0a 2a 2a 20 73 69 6e 67 6c   is the.** singl
a850: 65 20 61 72 67 75 6d 65 6e 74 20 70 61 73 73 65  e argument passe
a860: 64 20 74 6f 20 74 68 65 20 53 51 4c 20 66 75 6e  d to the SQL fun
a870: 63 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65  ction. The value
a880: 20 72 65 74 75 72 6e 65 64 20 62 79 0a 2a 2a 20   returned by.** 
a890: 74 68 65 20 54 43 4c 20 73 63 72 69 70 74 20 69  the TCL script i
a8a0: 73 20 75 73 65 64 20 61 73 20 74 68 65 20 72 65  s used as the re
a8b0: 74 75 72 6e 20 76 61 6c 75 65 20 6f 66 20 74 68  turn value of th
a8c0: 65 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2e 20  e SQL function. 
a8d0: 49 74 0a 2a 2a 20 69 73 20 70 61 73 73 65 64 20  It.** is passed 
a8e0: 74 6f 20 53 51 4c 69 74 65 20 75 73 69 6e 67 20  to SQLite using 
a8f0: 55 54 46 2d 31 36 42 45 20 66 6f 72 20 61 20 55  UTF-16BE for a U
a900: 54 46 2d 38 20 74 65 73 74 5f 66 75 6e 63 74 69  TF-8 test_functi
a910: 6f 6e 28 29 2c 20 55 54 46 2d 38 0a 2a 2a 20 66  on(), UTF-8.** f
a920: 6f 72 20 61 20 55 54 46 2d 31 36 4c 45 20 74 65  or a UTF-16LE te
a930: 73 74 5f 66 75 6e 63 74 69 6f 6e 28 29 2c 20 61  st_function(), a
a940: 6e 64 20 55 54 46 2d 31 36 4c 45 20 66 6f 72 20  nd UTF-16LE for 
a950: 61 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  an implementatio
a960: 6e 20 74 68 61 74 0a 2a 2a 20 70 72 65 66 65 72  n that.** prefer
a970: 73 20 55 54 46 2d 31 36 42 45 2e 0a 2a 2f 0a 23  s UTF-16BE..*/.#
a980: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
a990: 49 54 5f 55 54 46 31 36 0a 73 74 61 74 69 63 20  IT_UTF16.static 
a9a0: 76 6f 69 64 20 74 65 73 74 5f 66 75 6e 63 74 69  void test_functi
a9b0: 6f 6e 5f 75 74 66 38 28 0a 20 20 73 71 6c 69 74  on_utf8(.  sqlit
a9c0: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78  e3_context *pCtx
a9d0: 2c 20 0a 20 20 69 6e 74 20 6e 41 72 67 2c 0a 20  , .  int nArg,. 
a9e0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
a9f0: 2a 61 72 67 76 0a 29 7b 0a 20 20 54 63 6c 5f 49  *argv.){.  Tcl_I
aa00: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 3b 0a 20  nterp *interp;. 
aa10: 20 54 63 6c 5f 4f 62 6a 20 2a 70 58 3b 0a 20 20   Tcl_Obj *pX;.  
aa20: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
aa30: 56 61 6c 3b 0a 20 20 69 6e 74 65 72 70 20 3d 20  Val;.  interp = 
aa40: 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 29 73 71  (Tcl_Interp *)sq
aa50: 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28  lite3_user_data(
aa60: 70 43 74 78 29 3b 0a 20 20 70 58 20 3d 20 54 63  pCtx);.  pX = Tc
aa70: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22  l_NewStringObj("
aa80: 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20  test_function", 
aa90: 2d 31 29 3b 0a 20 20 54 63 6c 5f 49 6e 63 72 52  -1);.  Tcl_IncrR
aaa0: 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a 20 20 54  efCount(pX);.  T
aab0: 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64  cl_ListObjAppend
aac0: 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20  Element(interp, 
aad0: 70 58 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  pX, Tcl_NewStrin
aae0: 67 4f 62 6a 28 22 55 54 46 2d 38 22 2c 20 2d 31  gObj("UTF-8", -1
aaf0: 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62  ));.  Tcl_ListOb
ab00: 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  jAppendElement(i
ab10: 6e 74 65 72 70 2c 20 70 58 2c 20 0a 20 20 20 20  nterp, pX, .    
ab20: 20 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f    Tcl_NewStringO
ab30: 62 6a 28 28 63 68 61 72 2a 29 73 71 6c 69 74 65  bj((char*)sqlite
ab40: 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67  3_value_text(arg
ab50: 76 5b 30 5d 29 2c 20 2d 31 29 29 3b 0a 20 20 54  v[0]), -1));.  T
ab60: 63 6c 5f 45 76 61 6c 4f 62 6a 45 78 28 69 6e 74  cl_EvalObjEx(int
ab70: 65 72 70 2c 20 70 58 2c 20 30 29 3b 0a 20 20 54  erp, pX, 0);.  T
ab80: 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28  cl_DecrRefCount(
ab90: 70 58 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72  pX);.  sqlite3_r
aba0: 65 73 75 6c 74 5f 74 65 78 74 28 70 43 74 78 2c  esult_text(pCtx,
abb0: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 52 65   Tcl_GetStringRe
abc0: 73 75 6c 74 28 69 6e 74 65 72 70 29 2c 20 2d 31  sult(interp), -1
abd0: 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  , SQLITE_TRANSIE
abe0: 4e 54 29 3b 0a 20 20 70 56 61 6c 20 3d 20 73 71  NT);.  pVal = sq
abf0: 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 29 3b  lite3ValueNew();
ac00: 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53  .  sqlite3ValueS
ac10: 65 74 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c 20  etStr(pVal, -1, 
ac20: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 52 65 73  Tcl_GetStringRes
ac30: 75 6c 74 28 69 6e 74 65 72 70 29 2c 20 0a 20 20  ult(interp), .  
ac40: 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38 2c      SQLITE_UTF8,
ac50: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
ac60: 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  .  sqlite3_resul
ac70: 74 5f 74 65 78 74 31 36 62 65 28 70 43 74 78 2c  t_text16be(pCtx,
ac80: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
ac90: 65 78 74 31 36 62 65 28 70 56 61 6c 29 2c 0a 20  ext16be(pVal),. 
aca0: 20 20 20 20 20 2d 31 2c 20 53 51 4c 49 54 45 5f       -1, SQLITE_
acb0: 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 73 71  TRANSIENT);.  sq
acc0: 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 70  lite3ValueFree(p
acd0: 56 61 6c 29 3b 0a 7d 0a 73 74 61 74 69 63 20 76  Val);.}.static v
ace0: 6f 69 64 20 74 65 73 74 5f 66 75 6e 63 74 69 6f  oid test_functio
acf0: 6e 5f 75 74 66 31 36 6c 65 28 0a 20 20 73 71 6c  n_utf16le(.  sql
ad00: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43  ite3_context *pC
ad10: 74 78 2c 20 0a 20 20 69 6e 74 20 6e 41 72 67 2c  tx, .  int nArg,
ad20: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
ad30: 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 54 63 6c   **argv.){.  Tcl
ad40: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 3b  _Interp *interp;
ad50: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 58 3b 0a  .  Tcl_Obj *pX;.
ad60: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
ad70: 2a 70 56 61 6c 3b 0a 20 20 69 6e 74 65 72 70 20  *pVal;.  interp 
ad80: 3d 20 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 29  = (Tcl_Interp *)
ad90: 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74  sqlite3_user_dat
ada0: 61 28 70 43 74 78 29 3b 0a 20 20 70 58 20 3d 20  a(pCtx);.  pX = 
adb0: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
adc0: 28 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22  ("test_function"
add0: 2c 20 2d 31 29 3b 0a 20 20 54 63 6c 5f 49 6e 63  , -1);.  Tcl_Inc
ade0: 72 52 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a 20  rRefCount(pX);. 
adf0: 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65   Tcl_ListObjAppe
ae00: 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70  ndElement(interp
ae10: 2c 20 70 58 2c 20 54 63 6c 5f 4e 65 77 53 74 72  , pX, Tcl_NewStr
ae20: 69 6e 67 4f 62 6a 28 22 55 54 46 2d 31 36 4c 45  ingObj("UTF-16LE
ae30: 22 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 4c  ", -1));.  Tcl_L
ae40: 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d  istObjAppendElem
ae50: 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 58 2c 20  ent(interp, pX, 
ae60: 0a 20 20 20 20 20 20 54 63 6c 5f 4e 65 77 53 74  .      Tcl_NewSt
ae70: 72 69 6e 67 4f 62 6a 28 28 63 68 61 72 2a 29 73  ringObj((char*)s
ae80: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
ae90: 74 28 61 72 67 76 5b 30 5d 29 2c 20 2d 31 29 29  t(argv[0]), -1))
aea0: 3b 0a 20 20 54 63 6c 5f 45 76 61 6c 4f 62 6a 45  ;.  Tcl_EvalObjE
aeb0: 78 28 69 6e 74 65 72 70 2c 20 70 58 2c 20 30 29  x(interp, pX, 0)
aec0: 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52 65 66 43  ;.  Tcl_DecrRefC
aed0: 6f 75 6e 74 28 70 58 29 3b 0a 20 20 70 56 61 6c  ount(pX);.  pVal
aee0: 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65 4e   = sqlite3ValueN
aef0: 65 77 28 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  ew();.  sqlite3V
af00: 61 6c 75 65 53 65 74 53 74 72 28 70 56 61 6c 2c  alueSetStr(pVal,
af10: 20 2d 31 2c 20 54 63 6c 5f 47 65 74 53 74 72 69   -1, Tcl_GetStri
af20: 6e 67 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29  ngResult(interp)
af30: 2c 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  , .      SQLITE_
af40: 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41  UTF8, SQLITE_STA
af50: 54 49 43 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  TIC);.  sqlite3_
af60: 72 65 73 75 6c 74 5f 74 65 78 74 28 70 43 74 78  result_text(pCtx
af70: 2c 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f  ,(char*)sqlite3_
af80: 76 61 6c 75 65 5f 74 65 78 74 28 70 56 61 6c 29  value_text(pVal)
af90: 2c 2d 31 2c 53 51 4c 49 54 45 5f 54 52 41 4e 53  ,-1,SQLITE_TRANS
afa0: 49 45 4e 54 29 3b 0a 20 20 73 71 6c 69 74 65 33  IENT);.  sqlite3
afb0: 56 61 6c 75 65 46 72 65 65 28 70 56 61 6c 29 3b  ValueFree(pVal);
afc0: 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74  .}.static void t
afd0: 65 73 74 5f 66 75 6e 63 74 69 6f 6e 5f 75 74 66  est_function_utf
afe0: 31 36 62 65 28 0a 20 20 73 71 6c 69 74 65 33 5f  16be(.  sqlite3_
aff0: 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 0a  context *pCtx, .
b000: 20 20 69 6e 74 20 6e 41 72 67 2c 0a 20 20 73 71    int nArg,.  sq
b010: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72  lite3_value **ar
b020: 67 76 0a 29 7b 0a 20 20 54 63 6c 5f 49 6e 74 65  gv.){.  Tcl_Inte
b030: 72 70 20 2a 69 6e 74 65 72 70 3b 0a 20 20 54 63  rp *interp;.  Tc
b040: 6c 5f 4f 62 6a 20 2a 70 58 3b 0a 20 20 73 71 6c  l_Obj *pX;.  sql
b050: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c  ite3_value *pVal
b060: 3b 0a 20 20 69 6e 74 65 72 70 20 3d 20 28 54 63  ;.  interp = (Tc
b070: 6c 5f 49 6e 74 65 72 70 20 2a 29 73 71 6c 69 74  l_Interp *)sqlit
b080: 65 33 5f 75 73 65 72 5f 64 61 74 61 28 70 43 74  e3_user_data(pCt
b090: 78 29 3b 0a 20 20 70 58 20 3d 20 54 63 6c 5f 4e  x);.  pX = Tcl_N
b0a0: 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 74 65 73  ewStringObj("tes
b0b0: 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 2d 31 29  t_function", -1)
b0c0: 3b 0a 20 20 54 63 6c 5f 49 6e 63 72 52 65 66 43  ;.  Tcl_IncrRefC
b0d0: 6f 75 6e 74 28 70 58 29 3b 0a 20 20 54 63 6c 5f  ount(pX);.  Tcl_
b0e0: 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65  ListObjAppendEle
b0f0: 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 58 2c  ment(interp, pX,
b100: 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
b110: 6a 28 22 55 54 46 2d 31 36 42 45 22 2c 20 2d 31  j("UTF-16BE", -1
b120: 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62  ));.  Tcl_ListOb
b130: 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  jAppendElement(i
b140: 6e 74 65 72 70 2c 20 70 58 2c 20 0a 20 20 20 20  nterp, pX, .    
b150: 20 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f    Tcl_NewStringO
b160: 62 6a 28 28 63 68 61 72 2a 29 73 71 6c 69 74 65  bj((char*)sqlite
b170: 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67  3_value_text(arg
b180: 76 5b 30 5d 29 2c 20 2d 31 29 29 3b 0a 20 20 54  v[0]), -1));.  T
b190: 63 6c 5f 45 76 61 6c 4f 62 6a 45 78 28 69 6e 74  cl_EvalObjEx(int
b1a0: 65 72 70 2c 20 70 58 2c 20 30 29 3b 0a 20 20 54  erp, pX, 0);.  T
b1b0: 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28  cl_DecrRefCount(
b1c0: 70 58 29 3b 0a 20 20 70 56 61 6c 20 3d 20 73 71  pX);.  pVal = sq
b1d0: 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 29 3b  lite3ValueNew();
b1e0: 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53  .  sqlite3ValueS
b1f0: 65 74 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c 20  etStr(pVal, -1, 
b200: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 52 65 73  Tcl_GetStringRes
b210: 75 6c 74 28 69 6e 74 65 72 70 29 2c 20 0a 20 20  ult(interp), .  
b220: 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38 2c      SQLITE_UTF8,
b230: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
b240: 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  .  sqlite3_resul
b250: 74 5f 74 65 78 74 31 36 6c 65 28 70 43 74 78 2c  t_text16le(pCtx,
b260: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
b270: 65 78 74 31 36 6c 65 28 70 56 61 6c 29 2c 0a 20  ext16le(pVal),. 
b280: 20 20 20 20 20 2d 31 2c 20 53 51 4c 49 54 45 5f       -1, SQLITE_
b290: 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 73 71  TRANSIENT);.  sq
b2a0: 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 70  lite3ValueFree(p
b2b0: 56 61 6c 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  Val);.}.#endif /
b2c0: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  * SQLITE_OMIT_UT
b2d0: 46 31 36 20 2a 2f 0a 73 74 61 74 69 63 20 69 6e  F16 */.static in
b2e0: 74 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 28  t test_function(
b2f0: 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
b300: 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
b310: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
b320: 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
b330: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
b340: 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ){.#ifndef SQLIT
b350: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 73  E_OMIT_UTF16.  s
b360: 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e  qlite3 *db;.  in
b370: 74 20 76 61 6c 3b 0a 0a 20 20 69 66 28 20 6f 62  t val;..  if( ob
b380: 6a 63 21 3d 35 20 29 20 67 6f 74 6f 20 62 61 64  jc!=5 ) goto bad
b390: 5f 61 72 67 73 3b 0a 20 20 69 66 28 20 67 65 74  _args;.  if( get
b3a0: 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  DbPointer(interp
b3b0: 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
b3c0: 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29  objv[1]), &db) )
b3d0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
b3e0: 52 3b 0a 0a 20 20 69 66 28 20 54 43 4c 5f 4f 4b  R;..  if( TCL_OK
b3f0: 21 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e  !=Tcl_GetBoolean
b400: 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
b410: 6f 62 6a 76 5b 32 5d 2c 20 26 76 61 6c 29 20 29  objv[2], &val) )
b420: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
b430: 52 3b 0a 20 20 69 66 28 20 76 61 6c 20 29 7b 0a  R;.  if( val ){.
b440: 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61      sqlite3_crea
b450: 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20  te_function(db, 
b460: 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c  "test_function",
b470: 20 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c   1, SQLITE_UTF8,
b480: 20 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 70   .        interp
b490: 2c 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 5f  , test_function_
b4a0: 75 74 66 38 2c 20 30 2c 20 30 29 3b 0a 20 20 7d  utf8, 0, 0);.  }
b4b0: 0a 20 20 69 66 28 20 54 43 4c 5f 4f 4b 21 3d 54  .  if( TCL_OK!=T
b4c0: 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f  cl_GetBooleanFro
b4d0: 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
b4e0: 76 5b 33 5d 2c 20 26 76 61 6c 29 20 29 20 72 65  v[3], &val) ) re
b4f0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
b500: 20 20 69 66 28 20 76 61 6c 20 29 7b 0a 20 20 20    if( val ){.   
b510: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
b520: 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22 74 65  function(db, "te
b530: 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 31 2c  st_function", 1,
b540: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 2c   SQLITE_UTF16LE,
b550: 20 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 70   .        interp
b560: 2c 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 5f  , test_function_
b570: 75 74 66 31 36 6c 65 2c 20 30 2c 20 30 29 3b 0a  utf16le, 0, 0);.
b580: 20 20 7d 0a 20 20 69 66 28 20 54 43 4c 5f 4f 4b    }.  if( TCL_OK
b590: 21 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e  !=Tcl_GetBoolean
b5a0: 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
b5b0: 6f 62 6a 76 5b 34 5d 2c 20 26 76 61 6c 29 20 29  objv[4], &val) )
b5c0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
b5d0: 52 3b 0a 20 20 69 66 28 20 76 61 6c 20 29 7b 0a  R;.  if( val ){.
b5e0: 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61      sqlite3_crea
b5f0: 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20  te_function(db, 
b600: 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c  "test_function",
b610: 20 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36   1, SQLITE_UTF16
b620: 42 45 2c 20 0a 20 20 20 20 20 20 20 20 69 6e 74  BE, .        int
b630: 65 72 70 2c 20 74 65 73 74 5f 66 75 6e 63 74 69  erp, test_functi
b640: 6f 6e 5f 75 74 66 31 36 62 65 2c 20 30 2c 20 30  on_utf16be, 0, 0
b650: 29 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e  );.  }..  return
b660: 20 54 43 4c 5f 4f 4b 3b 0a 62 61 64 5f 61 72 67   TCL_OK;.bad_arg
b670: 73 3a 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  s:.  Tcl_AppendR
b680: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
b690: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
b6a0: 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20  uld be \"",.    
b6b0: 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46    Tcl_GetStringF
b6c0: 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20  romObj(objv[0], 
b6d0: 30 29 2c 20 22 20 3c 44 42 3e 20 3c 75 74 66 38  0), " <DB> <utf8
b6e0: 3e 20 3c 75 74 66 31 36 6c 65 3e 20 3c 75 74 66  > <utf16le> <utf
b6f0: 31 36 62 65 3e 22 2c 20 30 29 3b 0a 23 65 6e 64  16be>", 0);.#end
b700: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
b710: 54 5f 55 54 46 31 36 20 2a 2f 0a 20 20 72 65 74  T_UTF16 */.  ret
b720: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 7d  urn TCL_ERROR;.}
b730: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
b740: 20 20 20 20 20 20 20 74 65 73 74 5f 65 72 72 73         test_errs
b750: 74 72 20 3c 65 72 72 20 63 6f 64 65 3e 0a 2a 2a  tr <err code>.**
b760: 0a 2a 2a 20 54 65 73 74 20 74 68 61 74 20 74 68  .** Test that th
b770: 65 20 65 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61  e english langua
b780: 67 65 20 73 74 72 69 6e 67 20 65 71 75 69 76 61  ge string equiva
b790: 6c 65 6e 74 73 20 66 6f 72 20 73 71 6c 69 74 65  lents for sqlite
b7a0: 20 65 72 72 6f 72 20 63 6f 64 65 73 0a 2a 2a 20   error codes.** 
b7b0: 61 72 65 20 73 61 6e 65 2e 20 54 68 65 20 70 61  are sane. The pa
b7c0: 72 61 6d 65 74 65 72 20 69 73 20 61 6e 20 69 6e  rameter is an in
b7d0: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 69  teger representi
b7e0: 6e 67 20 61 6e 20 73 71 6c 69 74 65 20 65 72 72  ng an sqlite err
b7f0: 6f 72 20 63 6f 64 65 2e 0a 2a 2a 20 54 68 65 20  or code..** The 
b800: 72 65 73 75 6c 74 20 69 73 20 61 20 6c 69 73 74  result is a list
b810: 20 6f 66 20 74 77 6f 20 65 6c 65 6d 65 6e 74 73   of two elements
b820: 2c 20 74 68 65 20 73 74 72 69 6e 67 20 72 65 70  , the string rep
b830: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
b840: 68 65 0a 2a 2a 20 65 72 72 6f 72 20 63 6f 64 65  he.** error code
b850: 20 61 6e 64 20 74 68 65 20 65 6e 67 6c 69 73 68   and the english
b860: 20 6c 61 6e 67 75 61 67 65 20 65 78 70 6c 61 6e   language explan
b870: 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63  ation..*/.static
b880: 20 69 6e 74 20 74 65 73 74 5f 65 72 72 73 74 72   int test_errstr
b890: 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
b8a0: 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
b8b0: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
b8c0: 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
b8d0: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
b8e0: 0a 29 7b 0a 20 20 63 68 61 72 20 2a 7a 43 6f 64  .){.  char *zCod
b8f0: 65 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 66  e;.  int i;.  if
b900: 28 20 6f 62 6a 63 21 3d 31 20 29 7b 0a 20 20 20  ( objc!=1 ){.   
b910: 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67   Tcl_WrongNumArg
b920: 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a  s(interp, 1, obj
b930: 76 2c 20 22 3c 65 72 72 6f 72 20 63 6f 64 65 3e  v, "<error code>
b940: 22 29 3b 0a 20 20 7d 0a 0a 20 20 7a 43 6f 64 65  ");.  }..  zCode
b950: 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67   = Tcl_GetString
b960: 28 6f 62 6a 76 5b 31 5d 29 3b 0a 20 20 66 6f 72  (objv[1]);.  for
b970: 28 69 3d 30 3b 20 69 3c 32 30 30 3b 20 69 2b 2b  (i=0; i<200; i++
b980: 29 7b 0a 20 20 20 20 69 66 28 20 30 3d 3d 73 74  ){.    if( 0==st
b990: 72 63 6d 70 28 65 72 72 6f 72 4e 61 6d 65 28 69  rcmp(errorName(i
b9a0: 29 2c 20 7a 43 6f 64 65 29 20 29 20 62 72 65 61  ), zCode) ) brea
b9b0: 6b 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 53 65 74  k;.  }.  Tcl_Set
b9c0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28  Result(interp, (
b9d0: 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 45 72  char *)sqlite3Er
b9e0: 72 53 74 72 28 69 29 2c 20 30 29 3b 0a 20 20 72  rStr(i), 0);.  r
b9f0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
ba00: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20  ./*.** Usage:   
ba10: 20 62 72 65 61 6b 70 6f 69 6e 74 0a 2a 2a 0a 2a   breakpoint.**.*
ba20: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 65  * This routine e
ba30: 78 69 73 74 73 20 66 6f 72 20 6f 6e 65 20 70 75  xists for one pu
ba40: 72 70 6f 73 65 20 2d 20 74 6f 20 70 72 6f 76 69  rpose - to provi
ba50: 64 65 20 61 20 70 6c 61 63 65 20 74 6f 20 70 75  de a place to pu
ba60: 74 20 61 0a 2a 2a 20 62 72 65 61 6b 70 6f 69 6e  t a.** breakpoin
ba70: 74 20 77 69 74 68 20 47 44 42 20 74 68 61 74 20  t with GDB that 
ba80: 63 61 6e 20 62 65 20 74 72 69 67 67 65 72 65 64  can be triggered
ba90: 20 75 73 69 6e 67 20 54 43 4c 20 63 6f 64 65 2e   using TCL code.
baa0: 20 20 54 68 65 20 75 73 65 0a 2a 2a 20 66 6f 72    The use.** for
bab0: 20 74 68 69 73 20 69 73 20 77 68 65 6e 20 61 20   this is when a 
bac0: 70 61 72 74 69 63 75 6c 61 72 20 74 65 73 74 20  particular test 
bad0: 66 61 69 6c 73 20 6f 6e 20 28 73 61 79 29 20 74  fails on (say) t
bae0: 68 65 20 31 34 38 35 74 68 20 69 74 65 72 61 74  he 1485th iterat
baf0: 69 6f 6e 2e 0a 2a 2a 20 49 6e 20 74 68 65 20 54  ion..** In the T
bb00: 43 4c 20 74 65 73 74 20 73 63 72 69 70 74 2c 20  CL test script, 
bb10: 77 65 20 63 61 6e 20 61 64 64 20 63 6f 64 65 20  we can add code 
bb20: 6c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a  like this:.**.**
bb30: 20 20 20 20 20 69 66 20 7b 24 69 3d 3d 31 34 38       if {$i==148
bb40: 35 7d 20 62 72 65 61 6b 70 6f 69 6e 74 0a 2a 2a  5} breakpoint.**
bb50: 0a 2a 2a 20 54 68 65 6e 20 72 75 6e 20 74 65 73  .** Then run tes
bb60: 74 66 69 78 74 75 72 65 20 69 6e 20 74 68 65 20  tfixture in the 
bb70: 64 65 62 75 67 67 65 72 20 61 6e 64 20 77 61 69  debugger and wai
bb80: 74 20 66 6f 72 20 74 68 65 20 62 72 65 61 6b 70  t for the breakp
bb90: 6f 69 6e 74 20 74 6f 0a 2a 2a 20 66 69 72 65 2e  oint to.** fire.
bba0: 20 20 54 68 65 6e 20 61 64 64 69 74 69 6f 6e 61    Then additiona
bbb0: 6c 20 62 72 65 61 6b 70 6f 69 6e 74 73 20 63 61  l breakpoints ca
bbc0: 6e 20 62 65 20 73 65 74 20 74 6f 20 74 72 61 63  n be set to trac
bbd0: 65 20 64 6f 77 6e 20 74 68 65 20 62 75 67 2e 0a  e down the bug..
bbe0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
bbf0: 73 74 5f 62 72 65 61 6b 70 6f 69 6e 74 28 0a 20  st_breakpoint(. 
bc00: 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a   void *NotUsed,.
bc10: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
bc20: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
bc30: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
bc40: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
bc50: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
bc60: 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20  nt argc,        
bc70: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
bc80: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
bc90: 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20    char **argv   
bca0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
bcb0: 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e   of each argumen
bcc0: 74 20 2a 2f 0a 29 7b 0a 20 20 72 65 74 75 72 6e  t */.){.  return
bcd0: 20 54 43 4c 5f 4f 4b 3b 20 20 20 20 20 20 20 20   TCL_OK;        
bce0: 20 2f 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 20 2a   /* Do nothing *
bcf0: 2f 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  /.}../*.** Usage
bd00: 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  :   sqlite3_bind
bd10: 5f 69 6e 74 20 20 53 54 4d 54 20 4e 20 56 41 4c  _int  STMT N VAL
bd20: 55 45 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68  UE.**.** Test th
bd30: 65 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  e sqlite3_bind_i
bd40: 6e 74 20 69 6e 74 65 72 66 61 63 65 2e 20 20 53  nt interface.  S
bd50: 54 4d 54 20 69 73 20 61 20 70 72 65 70 61 72 65  TMT is a prepare
bd60: 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20  d statement..** 
bd70: 4e 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  N is the index o
bd80: 66 20 61 20 77 69 6c 64 63 61 72 64 20 69 6e 20  f a wildcard in 
bd90: 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
bda0: 74 65 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 6f  tement.  This co
bdb0: 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64 73 20 61  mmand.** binds a
bdc0: 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20   32-bit integer 
bdd0: 56 41 4c 55 45 20 74 6f 20 74 68 61 74 20 77 69  VALUE to that wi
bde0: 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73 74 61 74 69  ldcard..*/.stati
bdf0: 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f  c int test_bind_
be00: 69 6e 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  int(.  void * cl
be10: 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
be20: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
be30: 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
be40: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
be50: 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
be60: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20  _stmt *pStmt;.  
be70: 69 6e 74 20 69 64 78 3b 0a 20 20 69 6e 74 20 76  int idx;.  int v
be80: 61 6c 75 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a  alue;.  int rc;.
be90: 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 34 20 29  .  if( objc!=4 )
bea0: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
beb0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
bec0: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
bed0: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20  ould be \"",.   
bee0: 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
bef0: 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30  ngFromObj(objv[0
bf00: 5d 2c 20 30 29 2c 20 22 20 53 54 4d 54 20 4e 20  ], 0), " STMT N 
bf10: 56 41 4c 55 45 22 2c 20 30 29 3b 0a 20 20 20 20  VALUE", 0);.    
bf20: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
bf30: 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
bf40: 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
bf50: 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
bf60: 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
bf70: 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
bf80: 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63  _ERROR;.  if( Tc
bf90: 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
bfa0: 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c  interp, objv[2],
bfb0: 20 26 69 64 78 29 20 29 20 72 65 74 75 72 6e 20   &idx) ) return 
bfc0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  TCL_ERROR;.  if(
bfd0: 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f   Tcl_GetIntFromO
bfe0: 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
bff0: 33 5d 2c 20 26 76 61 6c 75 65 29 20 29 20 72 65  3], &value) ) re
c000: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
c010: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
c020: 62 69 6e 64 5f 69 6e 74 28 70 53 74 6d 74 2c 20  bind_int(pStmt, 
c030: 69 64 78 2c 20 76 61 6c 75 65 29 3b 0a 20 20 69  idx, value);.  i
c040: 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72  f( sqlite3TestEr
c050: 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 53 74  rCode(interp, St
c060: 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 2c 20 72  mtToDb(pStmt), r
c070: 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  c) ) return TCL_
c080: 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 63 21  ERROR;.  if( rc!
c090: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
c0a0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
c0b0: 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72  OR;.  }..  retur
c0c0: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a  n TCL_OK;.}.../*
c0d0: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c  .** Usage:   sql
c0e0: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 20  ite3_bind_int64 
c0f0: 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 0a 2a 2a   STMT N VALUE.**
c100: 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 73 71 6c  .** Test the sql
c110: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 20  ite3_bind_int64 
c120: 69 6e 74 65 72 66 61 63 65 2e 20 20 53 54 4d 54  interface.  STMT
c130: 20 69 73 20 61 20 70 72 65 70 61 72 65 64 20 73   is a prepared s
c140: 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69  tatement..** N i
c150: 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61  s the index of a
c160: 20 77 69 6c 64 63 61 72 64 20 69 6e 20 74 68 65   wildcard in the
c170: 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
c180: 65 6e 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d 61  ent.  This comma
c190: 6e 64 0a 2a 2a 20 62 69 6e 64 73 20 61 20 36 34  nd.** binds a 64
c1a0: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 56 41 4c  -bit integer VAL
c1b0: 55 45 20 74 6f 20 74 68 61 74 20 77 69 6c 64 63  UE to that wildc
c1c0: 61 72 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ard..*/.static i
c1d0: 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f 69 6e 74  nt test_bind_int
c1e0: 36 34 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  64(.  void * cli
c1f0: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
c200: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
c210: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
c220: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
c230: 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  [].){.  sqlite3_
c240: 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69  stmt *pStmt;.  i
c250: 6e 74 20 69 64 78 3b 0a 20 20 69 36 34 20 76 61  nt idx;.  i64 va
c260: 6c 75 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  lue;.  int rc;..
c270: 20 20 69 66 28 20 6f 62 6a 63 21 3d 34 20 29 7b    if( objc!=4 ){
c280: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
c290: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
c2a0: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
c2b0: 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20  uld be \"",.    
c2c0: 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
c2d0: 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d  gFromObj(objv[0]
c2e0: 2c 20 30 29 2c 20 22 20 53 54 4d 54 20 4e 20 56  , 0), " STMT N V
c2f0: 41 4c 55 45 22 2c 20 30 29 3b 0a 20 20 20 20 72  ALUE", 0);.    r
c300: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
c310: 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53  .  }..  if( getS
c320: 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tmtPointer(inter
c330: 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
c340: 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d  (objv[1]), &pStm
c350: 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  t) ) return TCL_
c360: 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c  ERROR;.  if( Tcl
c370: 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
c380: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20  nterp, objv[2], 
c390: 26 69 64 78 29 20 29 20 72 65 74 75 72 6e 20 54  &idx) ) return T
c3a0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
c3b0: 54 63 6c 5f 47 65 74 57 69 64 65 49 6e 74 46 72  Tcl_GetWideIntFr
c3c0: 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
c3d0: 6a 76 5b 33 5d 2c 20 26 76 61 6c 75 65 29 20 29  jv[3], &value) )
c3e0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
c3f0: 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  R;..  rc = sqlit
c400: 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 70 53  e3_bind_int64(pS
c410: 74 6d 74 2c 20 69 64 78 2c 20 76 61 6c 75 65 29  tmt, idx, value)
c420: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54  ;.  if( sqlite3T
c430: 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72  estErrCode(inter
c440: 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74 6d  p, StmtToDb(pStm
c450: 74 29 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e  t), rc) ) return
c460: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
c470: 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
c480: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  ){.    return TC
c490: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
c4a0: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
c4b0: 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  .../*.** Usage: 
c4c0: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64    sqlite3_bind_d
c4d0: 6f 75 62 6c 65 20 20 53 54 4d 54 20 4e 20 56 41  ouble  STMT N VA
c4e0: 4c 55 45 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74  LUE.**.** Test t
c4f0: 68 65 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  he sqlite3_bind_
c500: 64 6f 75 62 6c 65 20 69 6e 74 65 72 66 61 63 65  double interface
c510: 2e 20 20 53 54 4d 54 20 69 73 20 61 20 70 72 65  .  STMT is a pre
c520: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e  pared statement.
c530: 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20 69 6e 64  .** N is the ind
c540: 65 78 20 6f 66 20 61 20 77 69 6c 64 63 61 72 64  ex of a wildcard
c550: 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
c560: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 69   statement.  Thi
c570: 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e  s command.** bin
c580: 64 73 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65  ds a 64-bit inte
c590: 67 65 72 20 56 41 4c 55 45 20 74 6f 20 74 68 61  ger VALUE to tha
c5a0: 74 20 77 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73  t wildcard..*/.s
c5b0: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62  tatic int test_b
c5c0: 69 6e 64 5f 64 6f 75 62 6c 65 28 0a 20 20 76 6f  ind_double(.  vo
c5d0: 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
c5e0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
c5f0: 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
c600: 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
c610: 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
c620: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
c630: 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a  tmt;.  int idx;.
c640: 20 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 3b 0a    double value;.
c650: 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28    int rc;..  if(
c660: 20 6f 62 6a 63 21 3d 34 20 29 7b 0a 20 20 20 20   objc!=4 ){.    
c670: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
c680: 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
c690: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
c6a0: 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54  e \"",.        T
c6b0: 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d  cl_GetStringFrom
c6c0: 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c  Obj(objv[0], 0),
c6d0: 20 22 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 22   " STMT N VALUE"
c6e0: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
c6f0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
c700: 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f  .  if( getStmtPo
c710: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
c720: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
c730: 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20  [1]), &pStmt) ) 
c740: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
c750: 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49  ;.  if( Tcl_GetI
c760: 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  ntFromObj(interp
c770: 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 69 64 78 29  , objv[2], &idx)
c780: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
c790: 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47  ROR;.  if( Tcl_G
c7a0: 65 74 44 6f 75 62 6c 65 46 72 6f 6d 4f 62 6a 28  etDoubleFromObj(
c7b0: 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c  interp, objv[3],
c7c0: 20 26 76 61 6c 75 65 29 20 29 20 72 65 74 75 72   &value) ) retur
c7d0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
c7e0: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e  rc = sqlite3_bin
c7f0: 64 5f 64 6f 75 62 6c 65 28 70 53 74 6d 74 2c 20  d_double(pStmt, 
c800: 69 64 78 2c 20 76 61 6c 75 65 29 3b 0a 20 20 69  idx, value);.  i
c810: 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72  f( sqlite3TestEr
c820: 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 53 74  rCode(interp, St
c830: 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 2c 20 72  mtToDb(pStmt), r
c840: 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  c) ) return TCL_
c850: 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 63 21  ERROR;.  if( rc!
c860: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
c870: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
c880: 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72  OR;.  }..  retur
c890: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
c8a0: 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69  ** Usage:   sqli
c8b0: 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 20 20 53  te3_bind_null  S
c8c0: 54 4d 54 20 4e 0a 2a 2a 0a 2a 2a 20 54 65 73 74  TMT N.**.** Test
c8d0: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 62 69 6e   the sqlite3_bin
c8e0: 64 5f 6e 75 6c 6c 20 69 6e 74 65 72 66 61 63 65  d_null interface
c8f0: 2e 20 20 53 54 4d 54 20 69 73 20 61 20 70 72 65  .  STMT is a pre
c900: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e  pared statement.
c910: 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20 69 6e 64  .** N is the ind
c920: 65 78 20 6f 66 20 61 20 77 69 6c 64 63 61 72 64  ex of a wildcard
c930: 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
c940: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 69   statement.  Thi
c950: 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e  s command.** bin
c960: 64 73 20 61 20 4e 55 4c 4c 20 74 6f 20 74 68 65  ds a NULL to the
c970: 20 77 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73 74   wildcard..*/.st
c980: 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69  atic int test_bi
c990: 6e 64 5f 6e 75 6c 6c 28 0a 20 20 76 6f 69 64 20  nd_null(.  void 
c9a0: 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
c9b0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
c9c0: 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
c9d0: 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
c9e0: 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
c9f0: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
ca00: 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 69  ;.  int idx;.  i
ca10: 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62  nt rc;..  if( ob
ca20: 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=3 ){.    Tcl
ca30: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
ca40: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
ca50: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
ca60: 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f  "",.        Tcl_
ca70: 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a  GetStringFromObj
ca80: 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20  (objv[0], 0), " 
ca90: 53 54 4d 54 20 4e 22 2c 20 30 29 3b 0a 20 20 20  STMT N", 0);.   
caa0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
cab0: 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65  R;.  }..  if( ge
cac0: 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74  tStmtPointer(int
cad0: 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
cae0: 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53  ng(objv[1]), &pS
caf0: 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43  tmt) ) return TC
cb00: 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54  L_ERROR;.  if( T
cb10: 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a  cl_GetIntFromObj
cb20: 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d  (interp, objv[2]
cb30: 2c 20 26 69 64 78 29 20 29 20 72 65 74 75 72 6e  , &idx) ) return
cb40: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72   TCL_ERROR;..  r
cb50: 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  c = sqlite3_bind
cb60: 5f 6e 75 6c 6c 28 70 53 74 6d 74 2c 20 69 64 78  _null(pStmt, idx
cb70: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
cb80: 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65  TestErrCode(inte
cb90: 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74  rp, StmtToDb(pSt
cba0: 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74 75 72  mt), rc) ) retur
cbb0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
cbc0: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
cbd0: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54   ){.    return T
cbe0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
cbf0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
cc00: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
cc10: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74    sqlite3_bind_t
cc20: 65 78 74 20 20 53 54 4d 54 20 4e 20 53 54 52 49  ext  STMT N STRI
cc30: 4e 47 20 42 59 54 45 53 0a 2a 2a 0a 2a 2a 20 54  NG BYTES.**.** T
cc40: 65 73 74 20 74 68 65 20 73 71 6c 69 74 65 33 5f  est the sqlite3_
cc50: 62 69 6e 64 5f 74 65 78 74 20 69 6e 74 65 72 66  bind_text interf
cc60: 61 63 65 2e 20 20 53 54 4d 54 20 69 73 20 61 20  ace.  STMT is a 
cc70: 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
cc80: 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20  nt..** N is the 
cc90: 69 6e 64 65 78 20 6f 66 20 61 20 77 69 6c 64 63  index of a wildc
cca0: 61 72 64 20 69 6e 20 74 68 65 20 70 72 65 70 61  ard in the prepa
ccb0: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  red statement.  
ccc0: 54 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20  This command.** 
ccd0: 62 69 6e 64 73 20 61 20 55 54 46 2d 38 20 73 74  binds a UTF-8 st
cce0: 72 69 6e 67 20 53 54 52 49 4e 47 20 74 6f 20 74  ring STRING to t
ccf0: 68 65 20 77 69 6c 64 63 61 72 64 2e 20 20 54 68  he wildcard.  Th
cd00: 65 20 73 74 72 69 6e 67 20 69 73 20 42 59 54 45  e string is BYTE
cd10: 53 20 62 79 74 65 73 0a 2a 2a 20 6c 6f 6e 67 2e  S bytes.** long.
cd20: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
cd30: 65 73 74 5f 62 69 6e 64 5f 74 65 78 74 28 0a 20  est_bind_text(. 
cd40: 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
cd50: 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
cd60: 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
cd70: 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
cd80: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
cd90: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
cda0: 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64  *pStmt;.  int id
cdb0: 78 3b 0a 20 20 69 6e 74 20 62 79 74 65 73 3b 0a  x;.  int bytes;.
cdc0: 20 20 63 68 61 72 20 2a 76 61 6c 75 65 3b 0a 20    char *value;. 
cdd0: 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20   int rc;..  if( 
cde0: 6f 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20 54  objc!=5 ){.    T
cdf0: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
ce00: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
ce10: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
ce20: 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63   \"",.        Tc
ce30: 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f  l_GetStringFromO
ce40: 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20  bj(objv[0], 0), 
ce50: 22 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 20 42  " STMT N VALUE B
ce60: 59 54 45 53 22 2c 20 30 29 3b 0a 20 20 20 20 72  YTES", 0);.    r
ce70: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
ce80: 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53  .  }..  if( getS
ce90: 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tmtPointer(inter
cea0: 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
ceb0: 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d  (objv[1]), &pStm
cec0: 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  t) ) return TCL_
ced0: 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c  ERROR;.  if( Tcl
cee0: 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
cef0: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20  nterp, objv[2], 
cf00: 26 69 64 78 29 20 29 20 72 65 74 75 72 6e 20 54  &idx) ) return T
cf10: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 76 61 6c 75  CL_ERROR;.  valu
cf20: 65 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  e = Tcl_GetStrin
cf30: 67 28 6f 62 6a 76 5b 33 5d 29 3b 0a 20 20 69 66  g(objv[3]);.  if
cf40: 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d  ( Tcl_GetIntFrom
cf50: 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
cf60: 5b 34 5d 2c 20 26 62 79 74 65 73 29 20 29 20 72  [4], &bytes) ) r
cf70: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
cf80: 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ..  rc = sqlite3
cf90: 5f 62 69 6e 64 5f 74 65 78 74 28 70 53 74 6d 74  _bind_text(pStmt
cfa0: 2c 20 69 64 78 2c 20 76 61 6c 75 65 2c 20 62 79  , idx, value, by
cfb0: 74 65 73 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e  tes, SQLITE_TRAN
cfc0: 53 49 45 4e 54 29 3b 0a 20 20 69 66 28 20 73 71  SIENT);.  if( sq
cfd0: 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65  lite3TestErrCode
cfe0: 28 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f 44  (interp, StmtToD
cff0: 62 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29 20  b(pStmt), rc) ) 
d000: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
d010: 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ;.  if( rc!=SQLI
d020: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c  TE_OK ){.    Tcl
d030: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
d040: 74 65 72 70 2c 20 73 71 6c 69 74 65 33 54 65 73  terp, sqlite3Tes
d050: 74 45 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20  tErrorName(rc), 
d060: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
d070: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
d080: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
d090: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
d0a0: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74    sqlite3_bind_t
d0b0: 65 78 74 31 36 20 20 53 54 4d 54 20 4e 20 53 54  ext16  STMT N ST
d0c0: 52 49 4e 47 20 42 59 54 45 53 0a 2a 2a 0a 2a 2a  RING BYTES.**.**
d0d0: 20 54 65 73 74 20 74 68 65 20 73 71 6c 69 74 65   Test the sqlite
d0e0: 33 5f 62 69 6e 64 5f 74 65 78 74 31 36 20 69 6e  3_bind_text16 in
d0f0: 74 65 72 66 61 63 65 2e 20 20 53 54 4d 54 20 69  terface.  STMT i
d100: 73 20 61 20 70 72 65 70 61 72 65 64 20 73 74 61  s a prepared sta
d110: 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20  tement..** N is 
d120: 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20 77  the index of a w
d130: 69 6c 64 63 61 72 64 20 69 6e 20 74 68 65 20 70  ildcard in the p
d140: 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
d150: 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64  t.  This command
d160: 0a 2a 2a 20 62 69 6e 64 73 20 61 20 55 54 46 2d  .** binds a UTF-
d170: 31 36 20 73 74 72 69 6e 67 20 53 54 52 49 4e 47  16 string STRING
d180: 20 74 6f 20 74 68 65 20 77 69 6c 64 63 61 72 64   to the wildcard
d190: 2e 20 20 54 68 65 20 73 74 72 69 6e 67 20 69 73  .  The string is
d1a0: 20 42 59 54 45 53 20 62 79 74 65 73 0a 2a 2a 20   BYTES bytes.** 
d1b0: 6c 6f 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  long..*/.static 
d1c0: 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f 74 65  int test_bind_te
d1d0: 78 74 31 36 28 0a 20 20 76 6f 69 64 20 2a 20 63  xt16(.  void * c
d1e0: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
d1f0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
d200: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
d210: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
d220: 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20  jv[].){.#ifndef 
d230: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
d240: 36 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  6.  sqlite3_stmt
d250: 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69   *pStmt;.  int i
d260: 64 78 3b 0a 20 20 69 6e 74 20 62 79 74 65 73 3b  dx;.  int bytes;
d270: 0a 20 20 63 68 61 72 20 2a 76 61 6c 75 65 3b 0a  .  char *value;.
d280: 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28    int rc;..  if(
d290: 20 6f 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20   objc!=5 ){.    
d2a0: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
d2b0: 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
d2c0: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
d2d0: 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54  e \"",.        T
d2e0: 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d  cl_GetStringFrom
d2f0: 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c  Obj(objv[0], 0),
d300: 20 22 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 20   " STMT N VALUE 
d310: 42 59 54 45 53 22 2c 20 30 29 3b 0a 20 20 20 20  BYTES", 0);.    
d320: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
d330: 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
d340: 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
d350: 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
d360: 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
d370: 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
d380: 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63  _ERROR;.  if( Tc
d390: 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
d3a0: 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c  interp, objv[2],
d3b0: 20 26 69 64 78 29 20 29 20 72 65 74 75 72 6e 20   &idx) ) return 
d3c0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 76 61 6c  TCL_ERROR;.  val
d3d0: 75 65 20 3d 20 28 63 68 61 72 2a 29 54 63 6c 5f  ue = (char*)Tcl_
d3e0: 47 65 74 42 79 74 65 41 72 72 61 79 46 72 6f 6d  GetByteArrayFrom
d3f0: 4f 62 6a 28 6f 62 6a 76 5b 33 5d 2c 20 30 29 3b  Obj(objv[3], 0);
d400: 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e  .  if( Tcl_GetIn
d410: 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
d420: 20 6f 62 6a 76 5b 34 5d 2c 20 26 62 79 74 65 73   objv[4], &bytes
d430: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
d440: 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71  RROR;..  rc = sq
d450: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 31  lite3_bind_text1
d460: 36 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 28 76  6(pStmt, idx, (v
d470: 6f 69 64 20 2a 29 76 61 6c 75 65 2c 20 62 79 74  oid *)value, byt
d480: 65 73 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  es, SQLITE_TRANS
d490: 49 45 4e 54 29 3b 0a 20 20 69 66 28 20 73 71 6c  IENT);.  if( sql
d4a0: 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28  ite3TestErrCode(
d4b0: 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62  interp, StmtToDb
d4c0: 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29 20 72  (pStmt), rc) ) r
d4d0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
d4e0: 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
d4f0: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74 75  E_OK ){.    retu
d500: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
d510: 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  }..#endif /* SQL
d520: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a  ITE_OMIT_UTF16 *
d530: 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  /.  return TCL_O
d540: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
d550: 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e  e:   sqlite3_bin
d560: 64 5f 62 6c 6f 62 20 20 53 54 4d 54 20 4e 20 44  d_blob  STMT N D
d570: 41 54 41 20 42 59 54 45 53 0a 2a 2a 0a 2a 2a 20  ATA BYTES.**.** 
d580: 54 65 73 74 20 74 68 65 20 73 71 6c 69 74 65 33  Test the sqlite3
d590: 5f 62 69 6e 64 5f 62 6c 6f 62 20 69 6e 74 65 72  _bind_blob inter
d5a0: 66 61 63 65 2e 20 20 53 54 4d 54 20 69 73 20 61  face.  STMT is a
d5b0: 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
d5c0: 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20 74 68 65  ent..** N is the
d5d0: 20 69 6e 64 65 78 20 6f 66 20 61 20 77 69 6c 64   index of a wild
d5e0: 63 61 72 64 20 69 6e 20 74 68 65 20 70 72 65 70  card in the prep
d5f0: 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 20  ared statement. 
d600: 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a   This command.**
d610: 20 62 69 6e 64 73 20 61 20 42 4c 4f 42 20 74 6f   binds a BLOB to
d620: 20 74 68 65 20 77 69 6c 64 63 61 72 64 2e 20 20   the wildcard.  
d630: 54 68 65 20 42 4c 4f 42 20 69 73 20 42 59 54 45  The BLOB is BYTE
d640: 53 20 62 79 74 65 73 20 69 6e 20 73 69 7a 65 2e  S bytes in size.
d650: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
d660: 65 73 74 5f 62 69 6e 64 5f 62 6c 6f 62 28 0a 20  est_bind_blob(. 
d670: 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
d680: 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
d690: 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
d6a0: 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
d6b0: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
d6c0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
d6d0: 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64  *pStmt;.  int id
d6e0: 78 3b 0a 20 20 69 6e 74 20 62 79 74 65 73 3b 0a  x;.  int bytes;.
d6f0: 20 20 63 68 61 72 20 2a 76 61 6c 75 65 3b 0a 20    char *value;. 
d700: 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20   int rc;..  if( 
d710: 6f 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20 54  objc!=5 ){.    T
d720: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
d730: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
d740: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
d750: 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63   \"",.        Tc
d760: 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f  l_GetStringFromO
d770: 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20  bj(objv[0], 0), 
d780: 22 20 53 54 4d 54 20 4e 20 44 41 54 41 20 42 59  " STMT N DATA BY
d790: 54 45 53 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  TES", 0);.    re
d7a0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
d7b0: 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74    }..  if( getSt
d7c0: 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  mtPointer(interp
d7d0: 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
d7e0: 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74  objv[1]), &pStmt
d7f0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
d800: 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f  RROR;.  if( Tcl_
d810: 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e  GetIntFromObj(in
d820: 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26  terp, objv[2], &
d830: 69 64 78 29 20 29 20 72 65 74 75 72 6e 20 54 43  idx) ) return TC
d840: 4c 5f 45 52 52 4f 52 3b 0a 20 20 76 61 6c 75 65  L_ERROR;.  value
d850: 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67   = Tcl_GetString
d860: 28 6f 62 6a 76 5b 33 5d 29 3b 0a 20 20 69 66 28  (objv[3]);.  if(
d870: 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f   Tcl_GetIntFromO
d880: 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
d890: 34 5d 2c 20 26 62 79 74 65 73 29 20 29 20 72 65  4], &bytes) ) re
d8a0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
d8b0: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
d8c0: 62 69 6e 64 5f 62 6c 6f 62 28 70 53 74 6d 74 2c  bind_blob(pStmt,
d8d0: 20 69 64 78 2c 20 76 61 6c 75 65 2c 20 62 79 74   idx, value, byt
d8e0: 65 73 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  es, SQLITE_TRANS
d8f0: 49 45 4e 54 29 3b 0a 20 20 69 66 28 20 73 71 6c  IENT);.  if( sql
d900: 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28  ite3TestErrCode(
d910: 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62  interp, StmtToDb
d920: 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29 20 72  (pStmt), rc) ) r
d930: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
d940: 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
d950: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74 75  E_OK ){.    retu
d960: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
d970: 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  }..  return TCL_
d980: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
d990: 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69  ge:   sqlite3_bi
d9a0: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f 75  nd_parameter_cou
d9b0: 6e 74 20 20 53 54 4d 54 0a 2a 2a 0a 2a 2a 20 52  nt  STMT.**.** R
d9c0: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
d9d0: 20 6f 66 20 77 69 6c 64 63 61 72 64 73 20 69 6e   of wildcards in
d9e0: 20 74 68 65 20 67 69 76 65 6e 20 73 74 61 74 65   the given state
d9f0: 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ment..*/.static 
da00: 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f 70 61  int test_bind_pa
da10: 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 28 0a 20  rameter_count(. 
da20: 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
da30: 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
da40: 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
da50: 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
da60: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
da70: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
da80: 2a 70 53 74 6d 74 3b 0a 0a 20 20 69 66 28 20 6f  *pStmt;..  if( o
da90: 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  bjc!=2 ){.    Tc
daa0: 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69  l_WrongNumArgs(i
dab0: 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20  nterp, 1, objv, 
dac0: 22 53 54 4d 54 22 29 3b 0a 20 20 20 20 72 65 74  "STMT");.    ret
dad0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
dae0: 20 7d 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74   }.  if( getStmt
daf0: 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
db00: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
db10: 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20  jv[1]), &pStmt) 
db20: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
db30: 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a  OR;.  Tcl_SetObj
db40: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
db50: 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c  cl_NewIntObj(sql
db60: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
db70: 74 65 72 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29  ter_count(pStmt)
db80: 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ));.  return TCL
db90: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
dba0: 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 62  age:   sqlite3_b
dbb0: 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61  ind_parameter_na
dbc0: 6d 65 20 20 53 54 4d 54 20 20 4e 0a 2a 2a 0a 2a  me  STMT  N.**.*
dbd0: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61 6d  * Return the nam
dbe0: 65 20 6f 66 20 74 68 65 20 4e 74 68 20 77 69 6c  e of the Nth wil
dbf0: 64 63 61 72 64 2e 20 20 54 68 65 20 66 69 72 73  dcard.  The firs
dc00: 74 20 77 69 6c 64 63 61 72 64 20 69 73 20 31 2e  t wildcard is 1.
dc10: 0a 2a 2a 20 41 6e 20 65 6d 70 74 79 20 73 74 72  .** An empty str
dc20: 69 6e 67 20 69 73 20 72 65 74 75 72 6e 65 64 20  ing is returned 
dc30: 69 66 20 4e 20 69 73 20 6f 75 74 20 6f 66 20 72  if N is out of r
dc40: 61 6e 67 65 20 6f 72 20 69 66 20 74 68 65 20 77  ange or if the w
dc50: 69 6c 64 63 61 72 64 0a 2a 2a 20 69 73 20 6e 61  ildcard.** is na
dc60: 6d 65 6c 65 73 73 2e 0a 2a 2f 0a 73 74 61 74 69  meless..*/.stati
dc70: 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f  c int test_bind_
dc80: 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 0a  parameter_name(.
dc90: 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
dca0: 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
dcb0: 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
dcc0: 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
dcd0: 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
dce0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  {.  sqlite3_stmt
dcf0: 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69   *pStmt;.  int i
dd00: 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33  ;..  if( objc!=3
dd10: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e   ){.    Tcl_Wron
dd20: 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c  gNumArgs(interp,
dd30: 20 31 2c 20 6f 62 6a 76 2c 20 22 53 54 4d 54 20   1, objv, "STMT 
dd40: 4e 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  N");.    return 
dd50: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
dd60: 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
dd70: 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
dd80: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
dd90: 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
dda0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
ddb0: 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
ddc0: 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
ddd0: 6f 62 6a 76 5b 32 5d 2c 20 26 69 29 20 29 20 72  objv[2], &i) ) r
dde0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
ddf0: 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  .  Tcl_SetObjRes
de00: 75 6c 74 28 69 6e 74 65 72 70 2c 20 0a 20 20 20  ult(interp, .   
de10: 20 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f    Tcl_NewStringO
de20: 62 6a 28 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  bj(sqlite3_bind_
de30: 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 70  parameter_name(p
de40: 53 74 6d 74 2c 69 29 2c 2d 31 29 0a 20 20 29 3b  Stmt,i),-1).  );
de50: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
de60: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
de70: 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  :   sqlite3_bind
de80: 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78  _parameter_index
de90: 20 20 53 54 4d 54 20 20 4e 41 4d 45 0a 2a 2a 0a    STMT  NAME.**.
dea0: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 69 6e  ** Return the in
deb0: 64 65 78 20 6f 66 20 74 68 65 20 77 69 6c 64 63  dex of the wildc
dec0: 61 72 64 20 63 61 6c 6c 65 64 20 4e 41 4d 45 2e  ard called NAME.
ded0: 20 20 52 65 74 75 72 6e 20 30 20 69 66 20 74 68    Return 0 if th
dee0: 65 72 65 20 69 73 0a 2a 2a 20 6e 6f 20 73 75 63  ere is.** no suc
def0: 68 20 77 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73  h wildcard..*/.s
df00: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62  tatic int test_b
df10: 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e  ind_parameter_in
df20: 64 65 78 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  dex(.  void * cl
df30: 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
df40: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
df50: 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
df60: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
df70: 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
df80: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 0a 20  _stmt *pStmt;.. 
df90: 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a   if( objc!=3 ){.
dfa0: 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d      Tcl_WrongNum
dfb0: 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20  Args(interp, 1, 
dfc0: 6f 62 6a 76 2c 20 22 53 54 4d 54 20 4e 41 4d 45  objv, "STMT NAME
dfd0: 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  ");.    return T
dfe0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
dff0: 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  if( getStmtPoint
e000: 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
e010: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
e020: 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74  ), &pStmt) ) ret
e030: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
e040: 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c   Tcl_SetObjResul
e050: 74 28 69 6e 74 65 72 70 2c 20 0a 20 20 20 20 20  t(interp, .     
e060: 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 0a 20  Tcl_NewIntObj(. 
e070: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69        sqlite3_bi
e080: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64  nd_parameter_ind
e090: 65 78 28 70 53 74 6d 74 2c 54 63 6c 5f 47 65 74  ex(pStmt,Tcl_Get
e0a0: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 29  String(objv[2]))
e0b0: 0a 20 20 20 20 20 29 0a 20 20 29 3b 0a 20 20 72  .     ).  );.  r
e0c0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
e0d0: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20  ./*.** Usage:   
e0e0: 73 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f 62 69  sqlite3_clear_bi
e0f0: 6e 64 69 6e 67 73 20 53 54 4d 54 0a 2a 2a 0a 2a  ndings STMT.**.*
e100: 2f 0a 23 69 66 20 30 0a 73 74 61 74 69 63 20 69  /.#if 0.static i
e110: 6e 74 20 74 65 73 74 5f 63 6c 65 61 72 5f 62 69  nt test_clear_bi
e120: 6e 64 69 6e 67 73 28 0a 20 20 76 6f 69 64 20 2a  ndings(.  void *
e130: 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
e140: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
e150: 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
e160: 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
e170: 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
e180: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
e190: 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20  ..  if( objc!=2 
e1a0: 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67  ){.    Tcl_Wrong
e1b0: 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20  NumArgs(interp, 
e1c0: 31 2c 20 6f 62 6a 76 2c 20 22 53 54 4d 54 22 29  1, objv, "STMT")
e1d0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
e1e0: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
e1f0: 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
e200: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
e210: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
e220: 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
e230: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54  n TCL_ERROR;.  T
e240: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
e250: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49  interp, Tcl_NewI
e260: 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33 5f 63 6c  ntObj(sqlite3_cl
e270: 65 61 72 5f 62 69 6e 64 69 6e 67 73 28 70 53 74  ear_bindings(pSt
e280: 6d 74 29 29 29 3b 0a 20 20 72 65 74 75 72 6e 20  mt)));.  return 
e290: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66  TCL_OK;.}.#endif
e2a0: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
e2b0: 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20 44  qlite3_errcode D
e2c0: 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  B.**.** Return t
e2d0: 68 65 20 73 74 72 69 6e 67 20 72 65 70 72 65 73  he string repres
e2e0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
e2f0: 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 71 6c 69  most recent sqli
e300: 74 65 33 5f 2a 20 41 50 49 0a 2a 2a 20 65 72 72  te3_* API.** err
e310: 6f 72 20 63 6f 64 65 2e 20 65 2e 67 2e 20 22 53  or code. e.g. "S
e320: 51 4c 49 54 45 5f 45 52 52 4f 52 22 2e 0a 2a 2f  QLITE_ERROR"..*/
e330: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
e340: 5f 65 72 72 63 6f 64 65 28 0a 20 20 76 6f 69 64  _errcode(.  void
e350: 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
e360: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
e370: 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
e380: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
e390: 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
e3a0: 6c 69 74 65 33 20 2a 64 62 3b 0a 0a 20 20 69 66  lite3 *db;..  if
e3b0: 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
e3c0: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
e3d0: 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
e3e0: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
e3f0: 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20  be \"", .       
e400: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
e410: 6a 76 5b 30 5d 29 2c 20 22 20 44 42 22 2c 20 30  jv[0]), " DB", 0
e420: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
e430: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
e440: 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
e450: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
e460: 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
e470: 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
e480: 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53  L_ERROR;.  Tcl_S
e490: 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
e4a0: 20 28 63 68 61 72 20 2a 29 65 72 72 6f 72 4e 61   (char *)errorNa
e4b0: 6d 65 28 73 71 6c 69 74 65 33 5f 65 72 72 63 6f  me(sqlite3_errco
e4c0: 64 65 28 64 62 29 29 2c 20 30 29 3b 0a 20 20 72  de(db)), 0);.  r
e4d0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
e4e0: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20  ./*.** Usage:   
e4f0: 74 65 73 74 5f 65 72 72 6d 73 67 20 44 42 0a 2a  test_errmsg DB.*
e500: 2a 0a 2a 2a 20 52 65 74 75 72 6e 73 20 74 68 65  *.** Returns the
e510: 20 55 54 46 2d 38 20 72 65 70 72 65 73 65 6e 74   UTF-8 represent
e520: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 65 72 72  ation of the err
e530: 6f 72 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e  or message strin
e540: 67 20 66 6f 72 20 74 68 65 0a 2a 2a 20 6d 6f 73  g for the.** mos
e550: 74 20 72 65 63 65 6e 74 20 73 71 6c 69 74 65 33  t recent sqlite3
e560: 5f 2a 20 41 50 49 20 63 61 6c 6c 2e 0a 2a 2f 0a  _* API call..*/.
e570: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
e580: 65 72 72 6d 73 67 28 0a 20 20 76 6f 69 64 20 2a  errmsg(.  void *
e590: 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
e5a0: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
e5b0: 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
e5c0: 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
e5d0: 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
e5e0: 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74  te3 *db;.  const
e5f0: 20 63 68 61 72 20 2a 7a 45 72 72 3b 0a 0a 20 20   char *zErr;..  
e600: 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20  if( objc!=2 ){. 
e610: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
e620: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
e630: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
e640: 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20  d be \"", .     
e650: 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28    Tcl_GetString(
e660: 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44 42 22 2c  objv[0]), " DB",
e670: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
e680: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
e690: 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
e6a0: 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
e6b0: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
e6c0: 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
e6d0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 7a 45  TCL_ERROR;..  zE
e6e0: 72 72 20 3d 20 73 71 6c 69 74 65 33 5f 65 72 72  rr = sqlite3_err
e6f0: 6d 73 67 28 64 62 29 3b 0a 20 20 54 63 6c 5f 53  msg(db);.  Tcl_S
e700: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
e710: 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  rp, Tcl_NewStrin
e720: 67 4f 62 6a 28 7a 45 72 72 2c 20 2d 31 29 29 3b  gObj(zErr, -1));
e730: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
e740: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
e750: 3a 20 20 20 74 65 73 74 5f 65 72 72 6d 73 67 31  :   test_errmsg1
e760: 36 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72  6 DB.**.** Retur
e770: 6e 73 20 74 68 65 20 55 54 46 2d 31 36 20 72 65  ns the UTF-16 re
e780: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
e790: 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  the error messag
e7a0: 65 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65  e string for the
e7b0: 0a 2a 2a 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  .** most recent 
e7c0: 73 71 6c 69 74 65 33 5f 2a 20 41 50 49 20 63 61  sqlite3_* API ca
e7d0: 6c 6c 2e 20 54 68 69 73 20 69 73 20 61 20 62 79  ll. This is a by
e7e0: 74 65 20 61 72 72 61 79 20 6f 62 6a 65 63 74 20  te array object 
e7f0: 61 74 20 74 68 65 20 54 43 4c 20 0a 2a 2a 20 6c  at the TCL .** l
e800: 65 76 65 6c 2c 20 61 6e 64 20 69 74 20 69 6e 63  evel, and it inc
e810: 6c 75 64 65 73 20 74 68 65 20 30 78 30 30 20 30  ludes the 0x00 0
e820: 78 30 30 20 74 65 72 6d 69 6e 61 74 6f 72 20 62  x00 terminator b
e830: 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64 20  ytes at the end 
e840: 6f 66 20 74 68 65 0a 2a 2a 20 55 54 46 2d 31 36  of the.** UTF-16
e850: 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 73 74 61 74   string..*/.stat
e860: 69 63 20 69 6e 74 20 74 65 73 74 5f 65 72 72 6d  ic int test_errm
e870: 73 67 31 36 28 0a 20 20 76 6f 69 64 20 2a 20 63  sg16(.  void * c
e880: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
e890: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
e8a0: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
e8b0: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
e8c0: 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20  jv[].){.#ifndef 
e8d0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
e8e0: 36 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  6.  sqlite3 *db;
e8f0: 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a  .  const void *z
e900: 45 72 72 3b 0a 20 20 69 6e 74 20 62 79 74 65 73  Err;.  int bytes
e910: 20 3d 20 30 3b 0a 0a 20 20 69 66 28 20 6f 62 6a   = 0;..  if( obj
e920: 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
e930: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
e940: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
e950: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
e960: 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
e970: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
e980: 29 2c 20 22 20 44 42 22 2c 20 30 29 3b 0a 20 20  ), " DB", 0);.  
e990: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
e9a0: 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
e9b0: 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tDbPointer(inter
e9c0: 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
e9d0: 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20  (objv[1]), &db) 
e9e0: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
e9f0: 4f 52 3b 0a 0a 20 20 7a 45 72 72 20 3d 20 73 71  OR;..  zErr = sq
ea00: 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36 28 64  lite3_errmsg16(d
ea10: 62 29 3b 0a 20 20 69 66 28 20 7a 45 72 72 20 29  b);.  if( zErr )
ea20: 7b 0a 20 20 20 20 62 79 74 65 73 20 3d 20 73 71  {.    bytes = sq
ea30: 6c 69 74 65 33 75 74 66 31 36 42 79 74 65 4c 65  lite3utf16ByteLe
ea40: 6e 28 7a 45 72 72 2c 20 2d 31 29 3b 0a 20 20 7d  n(zErr, -1);.  }
ea50: 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  .  Tcl_SetObjRes
ea60: 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
ea70: 4e 65 77 42 79 74 65 41 72 72 61 79 4f 62 6a 28  NewByteArrayObj(
ea80: 7a 45 72 72 2c 20 62 79 74 65 73 29 29 3b 0a 23  zErr, bytes));.#
ea90: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
eaa0: 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 20 20  OMIT_UTF16 */.  
eab0: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
eac0: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
ead0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 44  qlite3_prepare D
eae0: 42 20 73 71 6c 20 62 79 74 65 73 20 74 61 69 6c  B sql bytes tail
eaf0: 76 61 72 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 69 6c  var.**.** Compil
eb00: 65 20 75 70 20 74 6f 20 3c 62 79 74 65 73 3e 20  e up to <bytes> 
eb10: 62 79 74 65 73 20 6f 66 20 74 68 65 20 73 75 70  bytes of the sup
eb20: 70 6c 69 65 64 20 53 51 4c 20 73 74 72 69 6e 67  plied SQL string
eb30: 20 3c 73 71 6c 3e 20 75 73 69 6e 67 0a 2a 2a 20   <sql> using.** 
eb40: 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20  database handle 
eb50: 3c 44 42 3e 2e 20 54 68 65 20 70 61 72 61 6d 65  <DB>. The parame
eb60: 74 65 72 20 3c 74 61 69 6c 76 61 6c 3e 20 69 73  ter <tailval> is
eb70: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 67   the name of a g
eb80: 6c 6f 62 61 6c 0a 2a 2a 20 76 61 72 69 61 62 6c  lobal.** variabl
eb90: 65 20 74 68 61 74 20 69 73 20 73 65 74 20 74 6f  e that is set to
eba0: 20 74 68 65 20 75 6e 75 73 65 64 20 70 6f 72 74   the unused port
ebb0: 69 6f 6e 20 6f 66 20 3c 73 71 6c 3e 20 28 69 66  ion of <sql> (if
ebc0: 20 61 6e 79 29 2e 20 41 0a 2a 2a 20 53 54 4d 54   any). A.** STMT
ebd0: 20 68 61 6e 64 6c 65 20 69 73 20 72 65 74 75 72   handle is retur
ebe0: 6e 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ned..*/.static i
ebf0: 6e 74 20 74 65 73 74 5f 70 72 65 70 61 72 65 28  nt test_prepare(
ec00: 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
ec10: 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
ec20: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
ec30: 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
ec40: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
ec50: 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
ec60: 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
ec70: 7a 53 71 6c 3b 0a 20 20 69 6e 74 20 62 79 74 65  zSql;.  int byte
ec80: 73 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  s;.  const char 
ec90: 2a 7a 54 61 69 6c 20 3d 20 30 3b 0a 20 20 73 71  *zTail = 0;.  sq
eca0: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
ecb0: 74 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 7a 42  t = 0;.  char zB
ecc0: 75 66 5b 35 30 5d 3b 0a 20 20 69 6e 74 20 72 63  uf[50];.  int rc
ecd0: 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 35  ;..  if( objc!=5
ece0: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
ecf0: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
ed00: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
ed10: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a  should be \"", .
ed20: 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
ed30: 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22  ring(objv[0]), "
ed40: 20 44 42 20 73 71 6c 20 62 79 74 65 73 20 74 61   DB sql bytes ta
ed50: 69 6c 76 61 72 22 2c 20 30 29 3b 0a 20 20 20 20  ilvar", 0);.    
ed60: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
ed70: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44  ;.  }.  if( getD
ed80: 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  bPointer(interp,
ed90: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
eda0: 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20  bjv[1]), &db) ) 
edb0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
edc0: 3b 0a 20 20 7a 53 71 6c 20 3d 20 54 63 6c 5f 47  ;.  zSql = Tcl_G
edd0: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d  etString(objv[2]
ede0: 29 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  );.  if( Tcl_Get
edf0: 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
ee00: 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 62 79 74  p, objv[3], &byt
ee10: 65 73 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  es) ) return TCL
ee20: 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20  _ERROR;..  rc = 
ee30: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
ee40: 64 62 2c 20 7a 53 71 6c 2c 20 62 79 74 65 73 2c  db, zSql, bytes,
ee50: 20 26 70 53 74 6d 74 2c 20 26 7a 54 61 69 6c 29   &pStmt, &zTail)
ee60: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54  ;.  if( sqlite3T
ee70: 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72  estErrCode(inter
ee80: 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65 74  p, db, rc) ) ret
ee90: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
eea0: 20 69 66 28 20 7a 54 61 69 6c 20 29 7b 0a 20 20   if( zTail ){.  
eeb0: 20 20 69 66 28 20 62 79 74 65 73 3e 3d 30 20 29    if( bytes>=0 )
eec0: 7b 0a 20 20 20 20 20 20 62 79 74 65 73 20 3d 20  {.      bytes = 
eed0: 62 79 74 65 73 20 2d 20 28 7a 54 61 69 6c 2d 7a  bytes - (zTail-z
eee0: 53 71 6c 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  Sql);.    }.    
eef0: 54 63 6c 5f 4f 62 6a 53 65 74 56 61 72 32 28 69  Tcl_ObjSetVar2(i
ef00: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20  nterp, objv[4], 
ef10: 30 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  0, Tcl_NewString
ef20: 4f 62 6a 28 7a 54 61 69 6c 2c 20 62 79 74 65 73  Obj(zTail, bytes
ef30: 29 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66 28  ), 0);.  }.  if(
ef40: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
ef50: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 53  {.    assert( pS
ef60: 74 6d 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 70  tmt==0 );.    sp
ef70: 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 28 25 64  rintf(zBuf, "(%d
ef80: 29 20 22 2c 20 72 63 29 3b 0a 20 20 20 20 54 63  ) ", rc);.    Tc
ef90: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
efa0: 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 73 71 6c  nterp, zBuf, sql
efb0: 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29 2c  ite3_errmsg(db),
efc0: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
efd0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
efe0: 20 20 69 66 28 20 70 53 74 6d 74 20 29 7b 0a 20    if( pStmt ){. 
eff0: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65     if( sqlite3Te
f000: 73 74 4d 61 6b 65 50 6f 69 6e 74 65 72 53 74 72  stMakePointerStr
f010: 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 70  (interp, zBuf, p
f020: 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
f030: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 54 63  CL_ERROR;.    Tc
f040: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
f050: 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b  nterp, zBuf, 0);
f060: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43  .  }.  return TC
f070: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
f080: 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 70 72  sage: sqlite3_pr
f090: 65 70 61 72 65 20 44 42 20 73 71 6c 20 62 79 74  epare DB sql byt
f0a0: 65 73 20 74 61 69 6c 76 61 72 0a 2a 2a 0a 2a 2a  es tailvar.**.**
f0b0: 20 43 6f 6d 70 69 6c 65 20 75 70 20 74 6f 20 3c   Compile up to <
f0c0: 62 79 74 65 73 3e 20 62 79 74 65 73 20 6f 66 20  bytes> bytes of 
f0d0: 74 68 65 20 73 75 70 70 6c 69 65 64 20 53 51 4c  the supplied SQL
f0e0: 20 73 74 72 69 6e 67 20 3c 73 71 6c 3e 20 75 73   string <sql> us
f0f0: 69 6e 67 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  ing.** database 
f100: 68 61 6e 64 6c 65 20 3c 44 42 3e 2e 20 54 68 65  handle <DB>. The
f110: 20 70 61 72 61 6d 65 74 65 72 20 3c 74 61 69 6c   parameter <tail
f120: 76 61 6c 3e 20 69 73 20 74 68 65 20 6e 61 6d 65  val> is the name
f130: 20 6f 66 20 61 20 67 6c 6f 62 61 6c 0a 2a 2a 20   of a global.** 
f140: 76 61 72 69 61 62 6c 65 20 74 68 61 74 20 69 73  variable that is
f150: 20 73 65 74 20 74 6f 20 74 68 65 20 75 6e 75 73   set to the unus
f160: 65 64 20 70 6f 72 74 69 6f 6e 20 6f 66 20 3c 73  ed portion of <s
f170: 71 6c 3e 20 28 69 66 20 61 6e 79 29 2e 20 41 0a  ql> (if any). A.
f180: 2a 2a 20 53 54 4d 54 20 68 61 6e 64 6c 65 20 69  ** STMT handle i
f190: 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a 73  s returned..*/.s
f1a0: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 70  tatic int test_p
f1b0: 72 65 70 61 72 65 31 36 28 0a 20 20 76 6f 69 64  repare16(.  void
f1c0: 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
f1d0: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
f1e0: 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
f1f0: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
f200: 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e  T objv[].){.#ifn
f210: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
f220: 55 54 46 31 36 0a 20 20 73 71 6c 69 74 65 33 20  UTF16.  sqlite3 
f230: 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20 76 6f 69  *db;.  const voi
f240: 64 20 2a 7a 53 71 6c 3b 0a 20 20 63 6f 6e 73 74  d *zSql;.  const
f250: 20 76 6f 69 64 20 2a 7a 54 61 69 6c 20 3d 20 30   void *zTail = 0
f260: 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 54 61  ;.  Tcl_Obj *pTa
f270: 69 6c 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65  il = 0;.  sqlite
f280: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20  3_stmt *pStmt = 
f290: 30 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 35  0;.  char zBuf[5
f2a0: 30 5d 3b 20 0a 20 20 69 6e 74 20 72 63 3b 0a 20  0]; .  int rc;. 
f2b0: 20 69 6e 74 20 62 79 74 65 73 3b 20 20 20 20 20   int bytes;     
f2c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
f2d0: 65 20 69 6e 74 65 67 65 72 20 73 70 65 63 69 66  e integer specif
f2e0: 69 65 64 20 61 73 20 61 72 67 20 33 20 2a 2f 0a  ied as arg 3 */.
f2f0: 20 20 69 6e 74 20 6f 62 6a 6c 65 6e 3b 20 20 20    int objlen;   
f300: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
f310: 68 65 20 62 79 74 65 2d 61 72 72 61 79 20 6c 65  he byte-array le
f320: 6e 67 74 68 20 6f 66 20 61 72 67 20 32 20 2a 2f  ngth of arg 2 */
f330: 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 35 20  ..  if( objc!=5 
f340: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
f350: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
f360: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
f370: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20  hould be \"", . 
f380: 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
f390: 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20  ing(objv[0]), " 
f3a0: 44 42 20 73 71 6c 20 62 79 74 65 73 20 74 61 69  DB sql bytes tai
f3b0: 6c 76 61 72 22 2c 20 30 29 3b 0a 20 20 20 20 72  lvar", 0);.    r
f3c0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
f3d0: 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
f3e0: 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
f3f0: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
f400: 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72  jv[1]), &db) ) r
f410: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
f420: 0a 20 20 7a 53 71 6c 20 3d 20 54 63 6c 5f 47 65  .  zSql = Tcl_Ge
f430: 74 42 79 74 65 41 72 72 61 79 46 72 6f 6d 4f 62  tByteArrayFromOb
f440: 6a 28 6f 62 6a 76 5b 32 5d 2c 20 26 6f 62 6a 6c  j(objv[2], &objl
f450: 65 6e 29 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47  en);.  if( Tcl_G
f460: 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
f470: 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 62  erp, objv[3], &b
f480: 79 74 65 73 29 20 29 20 72 65 74 75 72 6e 20 54  ytes) ) return T
f490: 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20  CL_ERROR;..  rc 
f4a0: 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  = sqlite3_prepar
f4b0: 65 31 36 28 64 62 2c 20 7a 53 71 6c 2c 20 62 79  e16(db, zSql, by
f4c0: 74 65 73 2c 20 26 70 53 74 6d 74 2c 20 26 7a 54  tes, &pStmt, &zT
f4d0: 61 69 6c 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  ail);.  if( sqli
f4e0: 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69  te3TestErrCode(i
f4f0: 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29  nterp, db, rc) )
f500: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
f510: 52 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20  R;.  if( rc ){. 
f520: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
f530: 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  ROR;.  }..  if( 
f540: 7a 54 61 69 6c 20 29 7b 0a 20 20 20 20 6f 62 6a  zTail ){.    obj
f550: 6c 65 6e 20 3d 20 6f 62 6a 6c 65 6e 20 2d 20 28  len = objlen - (
f560: 28 75 38 20 2a 29 7a 54 61 69 6c 2d 28 75 38 20  (u8 *)zTail-(u8 
f570: 2a 29 7a 53 71 6c 29 3b 0a 20 20 7d 65 6c 73 65  *)zSql);.  }else
f580: 7b 0a 20 20 20 20 6f 62 6a 6c 65 6e 20 3d 20 30  {.    objlen = 0
f590: 3b 0a 20 20 7d 0a 20 20 70 54 61 69 6c 20 3d 20  ;.  }.  pTail = 
f5a0: 54 63 6c 5f 4e 65 77 42 79 74 65 41 72 72 61 79  Tcl_NewByteArray
f5b0: 4f 62 6a 28 28 75 38 20 2a 29 7a 54 61 69 6c 2c  Obj((u8 *)zTail,
f5c0: 20 6f 62 6a 6c 65 6e 29 3b 0a 20 20 54 63 6c 5f   objlen);.  Tcl_
f5d0: 49 6e 63 72 52 65 66 43 6f 75 6e 74 28 70 54 61  IncrRefCount(pTa
f5e0: 69 6c 29 3b 0a 20 20 54 63 6c 5f 4f 62 6a 53 65  il);.  Tcl_ObjSe
f5f0: 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 6f 62  tVar2(interp, ob
f600: 6a 76 5b 34 5d 2c 20 30 2c 20 70 54 61 69 6c 2c  jv[4], 0, pTail,
f610: 20 30 29 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52   0);.  Tcl_DecrR
f620: 65 66 43 6f 75 6e 74 28 70 54 61 69 6c 29 3b 0a  efCount(pTail);.
f630: 0a 20 20 69 66 28 20 70 53 74 6d 74 20 29 7b 0a  .  if( pStmt ){.
f640: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 54      if( sqlite3T
f650: 65 73 74 4d 61 6b 65 50 6f 69 6e 74 65 72 53 74  estMakePointerSt
f660: 72 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20  r(interp, zBuf, 
f670: 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20  pStmt) ) return 
f680: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
f690: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
f6a0: 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20  t(interp, zBuf, 
f6b0: 30 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  0);.#endif /* SQ
f6c0: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
f6d0: 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  */.  return TCL_
f6e0: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
f6f0: 67 65 3a 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e  ge: sqlite3_open
f700: 20 66 69 6c 65 6e 61 6d 65 20 3f 6f 70 74 69 6f   filename ?optio
f710: 6e 73 2d 6c 69 73 74 3f 0a 2a 2f 0a 73 74 61 74  ns-list?.*/.stat
f720: 69 63 20 69 6e 74 20 74 65 73 74 5f 6f 70 65 6e  ic int test_open
f730: 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
f740: 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
f750: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
f760: 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
f770: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
f780: 0a 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  .){.  const char
f790: 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 0a 20 20 73   *zFilename;.  s
f7a0: 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e  qlite3 *db;.  in
f7b0: 74 20 72 63 3b 0a 20 20 63 68 61 72 20 7a 42 75  t rc;.  char zBu
f7c0: 66 5b 31 30 30 5d 3b 0a 0a 20 20 69 66 28 20 6f  f[100];..  if( o
f7d0: 62 6a 63 21 3d 33 20 26 26 20 6f 62 6a 63 21 3d  bjc!=3 && objc!=
f7e0: 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  2 ){.    Tcl_App
f7f0: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
f800: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
f810: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
f820: 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  .       Tcl_GetS
f830: 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20  tring(objv[0]), 
f840: 22 20 66 69 6c 65 6e 61 6d 65 20 6f 70 74 69 6f  " filename optio
f850: 6e 73 2d 6c 69 73 74 22 2c 20 30 29 3b 0a 20 20  ns-list", 0);.  
f860: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
f870: 4f 52 3b 0a 20 20 7d 0a 0a 20 20 7a 46 69 6c 65  OR;.  }..  zFile
f880: 6e 61 6d 65 20 3d 20 54 63 6c 5f 47 65 74 53 74  name = Tcl_GetSt
f890: 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 3b 0a 20  ring(objv[1]);. 
f8a0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 6f 70   rc = sqlite3_op
f8b0: 65 6e 28 7a 46 69 6c 65 6e 61 6d 65 2c 20 26 64  en(zFilename, &d
f8c0: 62 29 3b 0a 20 20 0a 20 20 69 66 28 20 73 71 6c  b);.  .  if( sql
f8d0: 69 74 65 33 54 65 73 74 4d 61 6b 65 50 6f 69 6e  ite3TestMakePoin
f8e0: 74 65 72 53 74 72 28 69 6e 74 65 72 70 2c 20 7a  terStr(interp, z
f8f0: 42 75 66 2c 20 64 62 29 20 29 20 72 65 74 75 72  Buf, db) ) retur
f900: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54  n TCL_ERROR;.  T
f910: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
f920: 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29  interp, zBuf, 0)
f930: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
f940: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
f950: 65 3a 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31  e: sqlite3_open1
f960: 36 20 66 69 6c 65 6e 61 6d 65 20 6f 70 74 69 6f  6 filename optio
f970: 6e 73 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  ns.*/.static int
f980: 20 74 65 73 74 5f 6f 70 65 6e 31 36 28 0a 20 20   test_open16(.  
f990: 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
f9a0: 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
f9b0: 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
f9c0: 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
f9d0: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
f9e0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
f9f0: 4d 49 54 5f 55 54 46 31 36 0a 20 20 63 6f 6e 73  MIT_UTF16.  cons
fa00: 74 20 76 6f 69 64 20 2a 7a 46 69 6c 65 6e 61 6d  t void *zFilenam
fa10: 65 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  e;.  sqlite3 *db
fa20: 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 68  ;.  int rc;.  ch
fa30: 61 72 20 7a 42 75 66 5b 31 30 30 5d 3b 0a 0a 20  ar zBuf[100];.. 
fa40: 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a   if( objc!=3 ){.
fa50: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
fa60: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
fa70: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
fa80: 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20  ld be \"", .    
fa90: 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
faa0: 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 66 69 6c  (objv[0]), " fil
fab0: 65 6e 61 6d 65 20 6f 70 74 69 6f 6e 73 2d 6c 69  ename options-li
fac0: 73 74 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  st", 0);.    ret
fad0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
fae0: 20 7d 0a 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20   }..  zFilename 
faf0: 3d 20 54 63 6c 5f 47 65 74 42 79 74 65 41 72 72  = Tcl_GetByteArr
fb00: 61 79 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 31  ayFromObj(objv[1
fb10: 5d 2c 20 30 29 3b 0a 20 20 72 63 20 3d 20 73 71  ], 0);.  rc = sq
fb20: 6c 69 74 65 33 5f 6f 70 65 6e 31 36 28 7a 46 69  lite3_open16(zFi
fb30: 6c 65 6e 61 6d 65 2c 20 26 64 62 29 3b 0a 20 20  lename, &db);.  
fb40: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65  .  if( sqlite3Te
fb50: 73 74 4d 61 6b 65 50 6f 69 6e 74 65 72 53 74 72  stMakePointerStr
fb60: 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 64  (interp, zBuf, d
fb70: 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
fb80: 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 41 70 70  ERROR;.  Tcl_App
fb90: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
fba0: 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 23 65 6e 64  , zBuf, 0);.#end
fbb0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
fbc0: 54 5f 55 54 46 31 36 20 2a 2f 0a 20 20 72 65 74  T_UTF16 */.  ret
fbd0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
fbe0: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69  *.** Usage: sqli
fbf0: 74 65 33 5f 63 6f 6d 70 6c 65 74 65 31 36 20 3c  te3_complete16 <
fc00: 55 54 46 2d 31 36 20 73 74 72 69 6e 67 3e 0a 2a  UTF-16 string>.*
fc10: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 31 20 69 66  *.** Return 1 if
fc20: 20 74 68 65 20 73 75 70 70 6c 69 65 64 20 61 72   the supplied ar
fc30: 67 75 6d 65 6e 74 20 69 73 20 61 20 63 6f 6d 70  gument is a comp
fc40: 6c 65 74 65 20 53 51 4c 20 73 74 61 74 65 6d 65  lete SQL stateme
fc50: 6e 74 2c 20 6f 72 20 7a 65 72 6f 0a 2a 2a 20 6f  nt, or zero.** o
fc60: 74 68 65 72 77 69 73 65 2e 0a 2a 2f 0a 73 74 61  therwise..*/.sta
fc70: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63 6f 6d  tic int test_com
fc80: 70 6c 65 74 65 31 36 28 0a 20 20 76 6f 69 64 20  plete16(.  void 
fc90: 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
fca0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
fcb0: 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
fcc0: 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
fcd0: 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 20 21   objv[].){.#if !
fce0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
fcf0: 4d 49 54 5f 43 4f 4d 50 4c 45 54 45 29 20 26 26  MIT_COMPLETE) &&
fd00: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
fd10: 5f 4f 4d 49 54 5f 55 54 46 31 36 29 0a 20 20 63  _OMIT_UTF16).  c
fd20: 68 61 72 20 2a 7a 42 75 66 3b 0a 0a 20 20 69 66  har *zBuf;..  if
fd30: 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
fd40: 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67   Tcl_WrongNumArg
fd50: 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a  s(interp, 1, obj
fd60: 76 2c 20 22 3c 75 74 66 2d 31 36 20 73 71 6c 3e  v, "<utf-16 sql>
fd70: 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  ");.    return T
fd80: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
fd90: 20 7a 42 75 66 20 3d 20 28 63 68 61 72 2a 29 54   zBuf = (char*)T
fda0: 63 6c 5f 47 65 74 42 79 74 65 41 72 72 61 79 46  cl_GetByteArrayF
fdb0: 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 31 5d 2c 20  romObj(objv[1], 
fdc0: 30 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a  0);.  Tcl_SetObj
fdd0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
fde0: 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c  cl_NewIntObj(sql
fdf0: 69 74 65 33 5f 63 6f 6d 70 6c 65 74 65 31 36 28  ite3_complete16(
fe00: 7a 42 75 66 29 29 29 3b 0a 23 65 6e 64 69 66 20  zBuf)));.#endif 
fe10: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  /* SQLITE_OMIT_C
fe20: 4f 4d 50 4c 45 54 45 20 26 26 20 53 51 4c 49 54  OMPLETE && SQLIT
fe30: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a  E_OMIT_UTF16 */.
fe40: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
fe50: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
fe60: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 53 54   sqlite3_step ST
fe70: 4d 54 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65  MT.**.** Advance
fe80: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74   the statement t
fe90: 6f 20 74 68 65 20 6e 65 78 74 20 72 6f 77 2e 0a  o the next row..
fea0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
feb0: 73 74 5f 73 74 65 70 28 0a 20 20 76 6f 69 64 20  st_step(.  void 
fec0: 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
fed0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
fee0: 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
fef0: 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
ff00: 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
ff10: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
ff20: 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69  ;.  int rc;..  i
ff30: 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20  f( objc!=2 ){.  
ff40: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
ff50: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
ff60: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
ff70: 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20   be \"", .      
ff80: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
ff90: 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54 22  bjv[0]), " STMT"
ffa0: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
ffb0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
ffc0: 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f  .  if( getStmtPo
ffd0: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
ffe0: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
fff0: 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20  [1]), &pStmt) ) 
10000 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
10010 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
10020 5f 73 74 65 70 28 70 53 74 6d 74 29 3b 0a 0a 20  _step(pStmt);.. 
10030 20 2f 2a 20 69 66 28 20 72 63 21 3d 53 51 4c 49   /* if( rc!=SQLI
10040 54 45 5f 44 4f 4e 45 20 26 26 20 72 63 21 3d 53  TE_DONE && rc!=S
10050 51 4c 49 54 45 5f 52 4f 57 20 29 20 72 65 74 75  QLITE_ROW ) retu
10060 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 20 2a 2f  rn TCL_ERROR; */
10070 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74  .  Tcl_SetResult
10080 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a  (interp, (char *
10090 29 65 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20  )errorName(rc), 
100a0 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  0);.  return TCL
100b0 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
100c0 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c  age: sqlite3_col
100d0 75 6d 6e 5f 63 6f 75 6e 74 20 53 54 4d 54 20 0a  umn_count STMT .
100e0 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  **.** Return the
100f0 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
10100 6e 73 20 72 65 74 75 72 6e 65 64 20 62 79 20 74  ns returned by t
10110 68 65 20 73 71 6c 20 73 74 61 74 65 6d 65 6e 74  he sql statement
10120 20 53 54 4d 54 2e 0a 2a 2f 0a 73 74 61 74 69 63   STMT..*/.static
10130 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c 75 6d 6e   int test_column
10140 5f 63 6f 75 6e 74 28 0a 20 20 76 6f 69 64 20 2a  _count(.  void *
10150 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
10160 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
10170 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
10180 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
10190 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
101a0 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
101b0 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20  ..  if( objc!=2 
101c0 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
101d0 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
101e0 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
101f0 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20  hould be \"", . 
10200 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
10210 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20  ing(objv[0]), " 
10220 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30 29  STMT column", 0)
10230 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
10240 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69  _ERROR;.  }..  i
10250 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
10260 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
10270 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
10280 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
10290 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20  rn TCL_ERROR;.. 
102a0 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c   Tcl_SetObjResul
102b0 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
102c0 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33 5f  wIntObj(sqlite3_
102d0 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70 53 74  column_count(pSt
102e0 6d 74 29 29 29 3b 0a 20 20 72 65 74 75 72 6e 20  mt)));.  return 
102f0 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
10300 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
10310 63 6f 6c 75 6d 6e 5f 74 79 70 65 20 53 54 4d 54  column_type STMT
10320 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 52 65   column.**.** Re
10330 74 75 72 6e 20 74 68 65 20 74 79 70 65 20 6f 66  turn the type of
10340 20 74 68 65 20 64 61 74 61 20 69 6e 20 63 6f 6c   the data in col
10350 75 6d 6e 20 27 63 6f 6c 75 6d 6e 27 20 6f 66 20  umn 'column' of 
10360 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 2e  the current row.
10370 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
10380 65 73 74 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 28  est_column_type(
10390 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
103a0 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
103b0 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
103c0 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
103d0 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
103e0 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
103f0 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20  t *pStmt;.  int 
10400 63 6f 6c 3b 0a 20 20 69 6e 74 20 74 70 3b 0a 0a  col;.  int tp;..
10410 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b    if( objc!=3 ){
10420 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
10430 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
10440 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
10450 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20  uld be \"", .   
10460 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
10470 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54  g(objv[0]), " ST
10480 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a  MT column", 0);.
10490 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
104a0 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  RROR;.  }..  if(
104b0 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28   getStmtPointer(
104c0 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
104d0 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
104e0 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e  &pStmt) ) return
104f0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
10500 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d  ( Tcl_GetIntFrom
10510 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
10520 5b 32 5d 2c 20 26 63 6f 6c 29 20 29 20 72 65 74  [2], &col) ) ret
10530 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a  urn TCL_ERROR;..
10540 20 20 74 70 20 3d 20 73 71 6c 69 74 65 33 5f 63    tp = sqlite3_c
10550 6f 6c 75 6d 6e 5f 74 79 70 65 28 70 53 74 6d 74  olumn_type(pStmt
10560 2c 20 63 6f 6c 29 3b 0a 20 20 73 77 69 74 63 68  , col);.  switch
10570 28 20 74 70 20 29 7b 0a 20 20 20 20 63 61 73 65  ( tp ){.    case
10580 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 3a   SQLITE_INTEGER:
10590 20 0a 20 20 20 20 20 20 54 63 6c 5f 53 65 74 52   .      Tcl_SetR
105a0 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 49  esult(interp, "I
105b0 4e 54 45 47 45 52 22 2c 20 54 43 4c 5f 53 54 41  NTEGER", TCL_STA
105c0 54 49 43 29 3b 20 0a 20 20 20 20 20 20 62 72 65  TIC); .      bre
105d0 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
105e0 49 54 45 5f 4e 55 4c 4c 3a 0a 20 20 20 20 20 20  ITE_NULL:.      
105f0 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
10600 74 65 72 70 2c 20 22 4e 55 4c 4c 22 2c 20 54 43  terp, "NULL", TC
10610 4c 5f 53 54 41 54 49 43 29 3b 20 0a 20 20 20 20  L_STATIC); .    
10620 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
10630 65 20 53 51 4c 49 54 45 5f 46 4c 4f 41 54 3a 0a  e SQLITE_FLOAT:.
10640 20 20 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73        Tcl_SetRes
10650 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 46 4c 4f  ult(interp, "FLO
10660 41 54 22 2c 20 54 43 4c 5f 53 54 41 54 49 43 29  AT", TCL_STATIC)
10670 3b 20 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  ; .      break;.
10680 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
10690 54 45 58 54 3a 0a 20 20 20 20 20 20 54 63 6c 5f  TEXT:.      Tcl_
106a0 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70  SetResult(interp
106b0 2c 20 22 54 45 58 54 22 2c 20 54 43 4c 5f 53 54  , "TEXT", TCL_ST
106c0 41 54 49 43 29 3b 20 0a 20 20 20 20 20 20 62 72  ATIC); .      br
106d0 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
106e0 4c 49 54 45 5f 42 4c 4f 42 3a 0a 20 20 20 20 20  LITE_BLOB:.     
106f0 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69   Tcl_SetResult(i
10700 6e 74 65 72 70 2c 20 22 42 4c 4f 42 22 2c 20 54  nterp, "BLOB", T
10710 43 4c 5f 53 54 41 54 49 43 29 3b 20 0a 20 20 20  CL_STATIC); .   
10720 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65     break;.    de
10730 66 61 75 6c 74 3a 0a 20 20 20 20 20 20 61 73 73  fault:.      ass
10740 65 72 74 28 30 29 3b 0a 20 20 7d 0a 0a 20 20 72  ert(0);.  }..  r
10750 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
10760 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  ./*.** Usage: sq
10770 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
10780 36 34 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a  64 STMT column.*
10790 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
107a0 64 61 74 61 20 69 6e 20 63 6f 6c 75 6d 6e 20 27  data in column '
107b0 63 6f 6c 75 6d 6e 27 20 6f 66 20 74 68 65 20 63  column' of the c
107c0 75 72 72 65 6e 74 20 72 6f 77 20 63 61 73 74 20  urrent row cast 
107d0 61 73 20 61 6e 0a 2a 2a 20 77 69 64 65 20 28 36  as an.** wide (6
107e0 34 2d 62 69 74 29 20 69 6e 74 65 67 65 72 2e 0a  4-bit) integer..
107f0 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
10800 73 74 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 28  st_column_int64(
10810 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
10820 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
10830 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
10840 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
10850 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
10860 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
10870 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20  t *pStmt;.  int 
10880 63 6f 6c 3b 0a 20 20 69 36 34 20 69 56 61 6c 3b  col;.  i64 iVal;
10890 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20  ..  if( objc!=3 
108a0 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
108b0 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
108c0 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
108d0 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20  hould be \"", . 
108e0 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
108f0 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20  ing(objv[0]), " 
10900 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30 29  STMT column", 0)
10910 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
10920 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69  _ERROR;.  }..  i
10930 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
10940 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
10950 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
10960 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
10970 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
10980 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72  if( Tcl_GetIntFr
10990 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
109a0 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20 29 20 72  jv[2], &col) ) r
109b0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
109c0 0a 0a 20 20 69 56 61 6c 20 3d 20 73 71 6c 69 74  ..  iVal = sqlit
109d0 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 28  e3_column_int64(
109e0 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20 54  pStmt, col);.  T
109f0 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
10a00 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 57  interp, Tcl_NewW
10a10 69 64 65 49 6e 74 4f 62 6a 28 69 56 61 6c 29 29  ideIntObj(iVal))
10a20 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
10a30 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
10a40 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  e: sqlite3_colum
10a50 6e 5f 62 6c 6f 62 20 53 54 4d 54 20 63 6f 6c 75  n_blob STMT colu
10a60 6d 6e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  mn.*/.static int
10a70 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f   test_column_blo
10a80 62 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  b(.  void * clie
10a90 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
10aa0 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
10ab0 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
10ac0 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
10ad0 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ].){.  sqlite3_s
10ae0 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e  tmt *pStmt;.  in
10af0 74 20 63 6f 6c 3b 0a 0a 20 20 69 6e 74 20 6c 65  t col;..  int le
10b00 6e 3b 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20  n;.  const void 
10b10 2a 70 42 6c 6f 62 3b 0a 0a 20 20 69 66 28 20 6f  *pBlob;..  if( o
10b20 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63  bjc!=3 ){.    Tc
10b30 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
10b40 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
10b50 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
10b60 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c  \"", .       Tcl
10b70 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
10b80 30 5d 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75  0]), " STMT colu
10b90 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  mn", 0);.    ret
10ba0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
10bb0 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d   }..  if( getStm
10bc0 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  tPointer(interp,
10bd0 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
10be0 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29  bjv[1]), &pStmt)
10bf0 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
10c00 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47  ROR;.  if( Tcl_G
10c10 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
10c20 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 63  erp, objv[2], &c
10c30 6f 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  ol) ) return TCL
10c40 5f 45 52 52 4f 52 3b 0a 0a 20 20 70 42 6c 6f 62  _ERROR;..  pBlob
10c50 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d   = sqlite3_colum
10c60 6e 5f 62 6c 6f 62 28 70 53 74 6d 74 2c 20 63 6f  n_blob(pStmt, co
10c70 6c 29 3b 0a 20 20 6c 65 6e 20 3d 20 73 71 6c 69  l);.  len = sqli
10c80 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73  te3_column_bytes
10c90 28 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20  (pStmt, col);.  
10ca0 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
10cb0 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
10cc0 42 79 74 65 41 72 72 61 79 4f 62 6a 28 70 42 6c  ByteArrayObj(pBl
10cd0 6f 62 2c 20 6c 65 6e 29 29 3b 0a 20 20 72 65 74  ob, len));.  ret
10ce0 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
10cf0 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69  *.** Usage: sqli
10d00 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c  te3_column_doubl
10d10 65 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a  e STMT column.**
10d20 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 64  .** Return the d
10d30 61 74 61 20 69 6e 20 63 6f 6c 75 6d 6e 20 27 63  ata in column 'c
10d40 6f 6c 75 6d 6e 27 20 6f 66 20 74 68 65 20 63 75  olumn' of the cu
10d50 72 72 65 6e 74 20 72 6f 77 20 63 61 73 74 20 61  rrent row cast a
10d60 73 20 61 20 64 6f 75 62 6c 65 2e 0a 2a 2f 0a 73  s a double..*/.s
10d70 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63  tatic int test_c
10d80 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28 0a 20 20  olumn_double(.  
10d90 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
10da0 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
10db0 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
10dc0 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
10dd0 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
10de0 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
10df0 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63 6f 6c  pStmt;.  int col
10e00 3b 0a 20 20 64 6f 75 62 6c 65 20 72 56 61 6c 3b  ;.  double rVal;
10e10 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20  ..  if( objc!=3 
10e20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
10e30 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
10e40 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
10e50 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20  hould be \"", . 
10e60 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
10e70 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20  ing(objv[0]), " 
10e80 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30 29  STMT column", 0)
10e90 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
10ea0 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69  _ERROR;.  }..  i
10eb0 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
10ec0 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
10ed0 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
10ee0 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
10ef0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
10f00 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72  if( Tcl_GetIntFr
10f10 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
10f20 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20 29 20 72  jv[2], &col) ) r
10f30 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
10f40 0a 0a 20 20 72 56 61 6c 20 3d 20 73 71 6c 69 74  ..  rVal = sqlit
10f50 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65  e3_column_double
10f60 28 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20  (pStmt, col);.  
10f70 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
10f80 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
10f90 44 6f 75 62 6c 65 4f 62 6a 28 72 56 61 6c 29 29  DoubleObj(rVal))
10fa0 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
10fb0 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
10fc0 65 3a 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f  e: sqlite3_data_
10fd0 63 6f 75 6e 74 20 53 54 4d 54 20 0a 2a 2a 0a 2a  count STMT .**.*
10fe0 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d  * Return the num
10ff0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 72  ber of columns r
11000 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 73  eturned by the s
11010 71 6c 20 73 74 61 74 65 6d 65 6e 74 20 53 54 4d  ql statement STM
11020 54 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  T..*/.static int
11030 20 74 65 73 74 5f 64 61 74 61 5f 63 6f 75 6e 74   test_data_count
11040 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
11050 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
11060 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
11070 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
11080 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
11090 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  .){.  sqlite3_st
110a0 6d 74 20 2a 70 53 74 6d 74 3b 0a 0a 20 20 69 66  mt *pStmt;..  if
110b0 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
110c0 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
110d0 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
110e0 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
110f0 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20  be \"", .       
11100 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
11110 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20 63  jv[0]), " STMT c
11120 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20  olumn", 0);.    
11130 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
11140 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
11150 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
11160 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
11170 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
11180 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
11190 5f 45 52 52 4f 52 3b 0a 0a 20 20 54 63 6c 5f 53  _ERROR;..  Tcl_S
111a0 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
111b0 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62  rp, Tcl_NewIntOb
111c0 6a 28 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 63  j(sqlite3_data_c
111d0 6f 75 6e 74 28 70 53 74 6d 74 29 29 29 3b 0a 20  ount(pStmt)));. 
111e0 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
111f0 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
11200 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
11210 65 78 74 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a  ext STMT column.
11220 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  **.** Usage: sql
11230 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c  ite3_column_decl
11240 74 79 70 65 20 53 54 4d 54 20 63 6f 6c 75 6d 6e  type STMT column
11250 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  .**.** Usage: sq
11260 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  lite3_column_nam
11270 65 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2f  e STMT column.*/
11280 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
11290 5f 73 74 6d 74 5f 75 74 66 38 28 0a 20 20 76 6f  _stmt_utf8(.  vo
112a0 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
112b0 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
112c0 65 72 20 74 6f 20 53 51 4c 69 74 65 20 41 50 49  er to SQLite API
112d0 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20   function to be 
112e0 69 6e 76 6f 6b 65 20 2a 2f 0a 20 20 54 63 6c 5f  invoke */.  Tcl_
112f0 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
11300 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
11310 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
11320 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
11330 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20  _stmt *pStmt;.  
11340 69 6e 74 20 63 6f 6c 3b 0a 20 20 63 6f 6e 73 74  int col;.  const
11350 20 63 68 61 72 20 2a 28 2a 78 46 75 6e 63 29 28   char *(*xFunc)(
11360 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 2c 20 69  sqlite3_stmt*, i
11370 6e 74 29 20 3d 20 63 6c 69 65 6e 74 44 61 74 61  nt) = clientData
11380 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
11390 7a 52 65 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  zRet;..  if( obj
113a0 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
113b0 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
113c0 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
113d0 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
113e0 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
113f0 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
11400 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e  ), " STMT column
11410 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
11420 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
11430 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  ..  if( getStmtP
11440 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
11450 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
11460 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29  v[1]), &pStmt) )
11470 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
11480 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  R;.  if( Tcl_Get
11490 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
114a0 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c  p, objv[2], &col
114b0 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
114c0 52 52 4f 52 3b 0a 20 20 7a 52 65 74 20 3d 20 78  RROR;.  zRet = x
114d0 46 75 6e 63 28 70 53 74 6d 74 2c 20 63 6f 6c 29  Func(pStmt, col)
114e0 3b 0a 20 20 69 66 28 20 7a 52 65 74 20 29 7b 0a  ;.  if( zRet ){.
114f0 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c      Tcl_SetResul
11500 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20  t(interp, (char 
11510 2a 29 7a 52 65 74 2c 20 30 29 3b 0a 20 20 7d 0a  *)zRet, 0);.  }.
11520 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
11530 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .}..static int t
11540 65 73 74 5f 67 6c 6f 62 61 6c 5f 72 65 63 6f 76  est_global_recov
11550 65 72 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  er(.  void * cli
11560 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
11570 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
11580 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
11590 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
115a0 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20 53 51  [].){.#ifndef SQ
115b0 4c 49 54 45 5f 4f 4d 49 54 5f 47 4c 4f 42 41 4c  LITE_OMIT_GLOBAL
115c0 52 45 43 4f 56 45 52 0a 20 20 69 6e 74 20 72 63  RECOVER.  int rc
115d0 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 31 20  ;.  if( objc!=1 
115e0 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67  ){.    Tcl_Wrong
115f0 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20  NumArgs(interp, 
11600 31 2c 20 6f 62 6a 76 2c 20 22 22 29 3b 0a 20 20  1, objv, "");.  
11610 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
11620 4f 52 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73  OR;.  }.  rc = s
11630 71 6c 69 74 65 33 5f 67 6c 6f 62 61 6c 5f 72 65  qlite3_global_re
11640 63 6f 76 65 72 28 29 3b 0a 20 20 54 63 6c 5f 53  cover();.  Tcl_S
11650 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
11660 20 28 63 68 61 72 20 2a 29 65 72 72 6f 72 4e 61   (char *)errorNa
11670 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54  me(rc), TCL_STAT
11680 49 43 29 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65  IC);.#endif.  re
11690 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
116a0 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  /*.** Usage: sql
116b0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
116c0 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a   STMT column.**.
116d0 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65  ** Usage: sqlite
116e0 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70  3_column_decltyp
116f0 65 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a  e STMT column.**
11700 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
11710 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 20 53  e3_column_name S
11720 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2f 0a 73 74  TMT column.*/.st
11730 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 73 74  atic int test_st
11740 6d 74 5f 75 74 66 31 36 28 0a 20 20 76 6f 69 64  mt_utf16(.  void
11750 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 20   * clientData,  
11760 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
11770 20 53 51 4c 69 74 65 20 41 50 49 20 66 75 6e 63   SQLite API func
11780 74 69 6f 6e 20 74 6f 20 62 65 20 69 6e 76 6f 6b  tion to be invok
11790 65 64 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65  ed */.  Tcl_Inte
117a0 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
117b0 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
117c0 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
117d0 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ){.#ifndef SQLIT
117e0 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 73  E_OMIT_UTF16.  s
117f0 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
11800 6d 74 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a 20  mt;.  int col;. 
11810 20 54 63 6c 5f 4f 62 6a 20 2a 70 52 65 74 3b 0a   Tcl_Obj *pRet;.
11820 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 4e    const void *zN
11830 61 6d 65 31 36 3b 0a 20 20 63 6f 6e 73 74 20 76  ame16;.  const v
11840 6f 69 64 20 2a 28 2a 78 46 75 6e 63 29 28 73 71  oid *(*xFunc)(sq
11850 6c 69 74 65 33 5f 73 74 6d 74 2a 2c 20 69 6e 74  lite3_stmt*, int
11860 29 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 3b 0a  ) = clientData;.
11870 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29  .  if( objc!=3 )
11880 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
11890 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
118a0 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
118b0 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20  ould be \"", .  
118c0 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
118d0 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53  ng(objv[0]), " S
118e0 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b  TMT column", 0);
118f0 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
11900 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66  ERROR;.  }..  if
11910 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
11920 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
11930 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
11940 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
11950 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
11960 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f  f( Tcl_GetIntFro
11970 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
11980 76 5b 32 5d 2c 20 26 63 6f 6c 29 20 29 20 72 65  v[2], &col) ) re
11990 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
119a0 0a 20 20 7a 4e 61 6d 65 31 36 20 3d 20 78 46 75  .  zName16 = xFu
119b0 6e 63 28 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a  nc(pStmt, col);.
119c0 20 20 69 66 28 20 7a 4e 61 6d 65 31 36 20 29 7b    if( zName16 ){
119d0 0a 20 20 20 20 70 52 65 74 20 3d 20 54 63 6c 5f  .    pRet = Tcl_
119e0 4e 65 77 42 79 74 65 41 72 72 61 79 4f 62 6a 28  NewByteArrayObj(
119f0 7a 4e 61 6d 65 31 36 2c 20 73 71 6c 69 74 65 33  zName16, sqlite3
11a00 75 74 66 31 36 42 79 74 65 4c 65 6e 28 7a 4e 61  utf16ByteLen(zNa
11a10 6d 65 31 36 2c 20 2d 31 29 2b 32 29 3b 0a 20 20  me16, -1)+2);.  
11a20 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
11a30 6c 74 28 69 6e 74 65 72 70 2c 20 70 52 65 74 29  lt(interp, pRet)
11a40 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ;.  }.#endif /* 
11a50 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
11a60 36 20 2a 2f 0a 0a 20 20 72 65 74 75 72 6e 20 54  6 */..  return T
11a70 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
11a80 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63  Usage: sqlite3_c
11a90 6f 6c 75 6d 6e 5f 69 6e 74 20 53 54 4d 54 20 63  olumn_int STMT c
11aa0 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67  olumn.**.** Usag
11ab0 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  e: sqlite3_colum
11ac0 6e 5f 62 79 74 65 73 20 53 54 4d 54 20 63 6f 6c  n_bytes STMT col
11ad0 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a  umn.**.** Usage:
11ae0 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
11af0 62 79 74 65 73 31 36 20 53 54 4d 54 20 63 6f 6c  bytes16 STMT col
11b00 75 6d 6e 0a 2a 2a 0a 2a 2f 0a 73 74 61 74 69 63  umn.**.*/.static
11b10 20 69 6e 74 20 74 65 73 74 5f 73 74 6d 74 5f 69   int test_stmt_i
11b20 6e 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  nt(.  void * cli
11b30 65 6e 74 44 61 74 61 2c 20 20 20 20 2f 2a 20 50  entData,    /* P
11b40 6f 69 6e 74 65 72 20 74 6f 20 53 51 4c 69 74 65  ointer to SQLite
11b50 20 41 50 49 20 66 75 6e 63 74 69 6f 6e 20 74 6f   API function to
11b60 20 62 65 20 69 6e 76 6f 6b 65 64 20 2a 2f 0a 20   be invoked */. 
11b70 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
11b80 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
11b90 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
11ba0 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
11bb0 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
11bc0 74 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a 20 20  t;.  int col;.  
11bd0 69 6e 74 20 28 2a 78 46 75 6e 63 29 28 73 71 6c  int (*xFunc)(sql
11be0 69 74 65 33 5f 73 74 6d 74 2a 2c 20 69 6e 74 29  ite3_stmt*, int)
11bf0 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 3b 0a 0a   = clientData;..
11c00 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b    if( objc!=3 ){
11c10 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
11c20 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
11c30 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
11c40 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20  uld be \"", .   
11c50 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
11c60 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54  g(objv[0]), " ST
11c70 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a  MT column", 0);.
11c80 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
11c90 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  RROR;.  }..  if(
11ca0 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28   getStmtPointer(
11cb0 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
11cc0 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
11cd0 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e  &pStmt) ) return
11ce0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
11cf0 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d  ( Tcl_GetIntFrom
11d00 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
11d10 5b 32 5d 2c 20 26 63 6f 6c 29 20 29 20 72 65 74  [2], &col) ) ret
11d20 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a  urn TCL_ERROR;..
11d30 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
11d40 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
11d50 65 77 49 6e 74 4f 62 6a 28 78 46 75 6e 63 28 70  ewIntObj(xFunc(p
11d60 53 74 6d 74 2c 20 63 6f 6c 29 29 29 3b 0a 20 20  Stmt, col)));.  
11d70 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
11d80 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
11d90 5f 4f 4d 49 54 5f 44 49 53 4b 49 4f 0a 2f 2a 0a  _OMIT_DISKIO./*.
11da0 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
11db0 65 33 4f 73 4f 70 65 6e 52 65 61 64 57 72 69 74  e3OsOpenReadWrit
11dc0 65 20 3c 66 69 6c 65 6e 61 6d 65 3e 0a 2a 2f 0a  e <filename>.*/.
11dd0 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
11de0 73 71 6c 69 74 65 33 4f 73 4f 70 65 6e 52 65 61  sqlite3OsOpenRea
11df0 64 57 72 69 74 65 28 0a 20 20 76 6f 69 64 20 2a  dWrite(.  void *
11e00 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
11e10 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
11e20 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
11e30 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
11e40 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 4f 73 46 69  objv[].){.  OsFi
11e50 6c 65 20 2a 70 46 69 6c 65 3b 0a 20 20 69 6e 74  le *pFile;.  int
11e60 20 72 63 3b 0a 20 20 69 6e 74 20 64 75 6d 6d 79   rc;.  int dummy
11e70 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 31 30  ;.  char zBuf[10
11e80 30 5d 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  0];..  if( objc!
11e90 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =2 ){.    Tcl_Ap
11ea0 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
11eb0 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
11ec0 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
11ed0 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74   .       Tcl_Get
11ee0 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c  String(objv[0]),
11ef0 20 22 20 66 69 6c 65 6e 61 6d 65 22 2c 20 30 29   " filename", 0)
11f00 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
11f10 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72  _ERROR;.  }..  r
11f20 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 4f 70 65  c = sqlite3OsOpe
11f30 6e 52 65 61 64 57 72 69 74 65 28 54 63 6c 5f 47  nReadWrite(Tcl_G
11f40 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
11f50 29 2c 20 26 70 46 69 6c 65 2c 20 26 64 75 6d 6d  ), &pFile, &dumm
11f60 79 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51  y);.  if( rc!=SQ
11f70 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54  LITE_OK ){.    T
11f80 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74  cl_SetResult(int
11f90 65 72 70 2c 20 28 63 68 61 72 20 2a 29 65 72 72  erp, (char *)err
11fa0 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f  orName(rc), TCL_
11fb0 53 54 41 54 49 43 29 3b 0a 20 20 20 20 72 65 74  STATIC);.    ret
11fc0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
11fd0 20 7d 0a 20 20 73 71 6c 69 74 65 33 54 65 73 74   }.  sqlite3Test
11fe0 4d 61 6b 65 50 6f 69 6e 74 65 72 53 74 72 28 69  MakePointerStr(i
11ff0 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 70 46 69  nterp, zBuf, pFi
12000 6c 65 29 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65  le);.  Tcl_SetRe
12010 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75  sult(interp, zBu
12020 66 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20  f, 0);.  return 
12030 54 43 4c 5f 45 52 52 4f 52 3b 0a 7d 0a 0a 2f 2a  TCL_ERROR;.}../*
12040 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
12050 74 65 33 4f 73 43 6c 6f 73 65 20 3c 66 69 6c 65  te3OsClose <file
12060 20 68 61 6e 64 6c 65 3e 0a 2a 2f 0a 73 74 61 74   handle>.*/.stat
12070 69 63 20 69 6e 74 20 74 65 73 74 5f 73 71 6c 69  ic int test_sqli
12080 74 65 33 4f 73 43 6c 6f 73 65 28 0a 20 20 76 6f  te3OsClose(.  vo
12090 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
120a0 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
120b0 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
120c0 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
120d0 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
120e0 4f 73 46 69 6c 65 20 2a 70 46 69 6c 65 3b 0a 20  OsFile *pFile;. 
120f0 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20   int rc;..  if( 
12100 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  objc!=2 ){.    T
12110 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
12120 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
12130 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
12140 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63   \"", .       Tc
12150 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
12160 5b 30 5d 29 2c 20 22 20 66 69 6c 65 68 61 6e 64  [0]), " filehand
12170 6c 65 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  le", 0);.    ret
12180 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
12190 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 46 69 6c   }..  if( getFil
121a0 65 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  ePointer(interp,
121b0 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
121c0 62 6a 76 5b 31 5d 29 2c 20 26 70 46 69 6c 65 29  bjv[1]), &pFile)
121d0 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54   ){.    return T
121e0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
121f0 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 43 6c  rc = sqlite3OsCl
12200 6f 73 65 28 26 70 46 69 6c 65 29 3b 0a 20 20 69  ose(&pFile);.  i
12210 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
12220 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 52   ){.    Tcl_SetR
12230 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63  esult(interp, (c
12240 68 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28  har *)errorName(
12250 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43 29  rc), TCL_STATIC)
12260 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
12270 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 65  _ERROR;.  }.  re
12280 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
12290 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
122a0 6c 69 74 65 33 4f 73 4c 6f 63 6b 20 3c 66 69 6c  lite3OsLock <fil
122b0 65 20 68 61 6e 64 6c 65 3e 20 3c 6c 6f 63 6b 74  e handle> <lockt
122c0 79 70 65 3e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ype>.*/.static i
122d0 6e 74 20 74 65 73 74 5f 73 71 6c 69 74 65 33 4f  nt test_sqlite3O
122e0 73 4c 6f 63 6b 28 0a 20 20 76 6f 69 64 20 2a 20  sLock(.  void * 
122f0 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
12300 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
12310 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
12320 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
12330 62 6a 76 5b 5d 0a 29 7b 0a 20 20 4f 73 46 69 6c  bjv[].){.  OsFil
12340 65 20 2a 20 70 46 69 6c 65 3b 0a 20 20 69 6e 74  e * pFile;.  int
12350 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63   rc;..  if( objc
12360 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=3 ){.    Tcl_A
12370 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
12380 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
12390 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
123a0 2c 20 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47  , .        Tcl_G
123b0 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
123c0 29 2c 20 0a 20 20 20 20 20 20 20 20 22 20 66 69  ), .        " fi
123d0 6c 65 68 61 6e 64 6c 65 20 28 53 48 41 52 45 44  lehandle (SHARED
123e0 7c 52 45 53 45 52 56 45 44 7c 50 45 4e 44 49 4e  |RESERVED|PENDIN
123f0 47 7c 45 58 43 4c 55 53 49 56 45 29 22 2c 20 30  G|EXCLUSIVE)", 0
12400 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
12410 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
12420 69 66 28 20 67 65 74 46 69 6c 65 50 6f 69 6e 74  if( getFilePoint
12430 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
12440 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
12450 29 2c 20 26 70 46 69 6c 65 29 20 29 7b 0a 20 20  ), &pFile) ){.  
12460 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
12470 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 30  OR;.  }..  if( 0
12480 3d 3d 73 74 72 63 6d 70 28 22 53 48 41 52 45 44  ==strcmp("SHARED
12490 22 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  ", Tcl_GetString
124a0 28 6f 62 6a 76 5b 32 5d 29 29 20 29 7b 0a 20 20  (objv[2])) ){.  
124b0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73    rc = sqlite3Os
124c0 4c 6f 63 6b 28 70 46 69 6c 65 2c 20 53 48 41 52  Lock(pFile, SHAR
124d0 45 44 5f 4c 4f 43 4b 29 3b 0a 20 20 7d 0a 20 20  ED_LOCK);.  }.  
124e0 65 6c 73 65 20 69 66 28 20 30 3d 3d 73 74 72 63  else if( 0==strc
124f0 6d 70 28 22 52 45 53 45 52 56 45 44 22 2c 20 54  mp("RESERVED", T
12500 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
12510 76 5b 32 5d 29 29 20 29 7b 0a 20 20 20 20 72 63  v[2])) ){.    rc
12520 20 3d 20 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b   = sqlite3OsLock
12530 28 70 46 69 6c 65 2c 20 52 45 53 45 52 56 45 44  (pFile, RESERVED
12540 5f 4c 4f 43 4b 29 3b 0a 20 20 7d 0a 20 20 65 6c  _LOCK);.  }.  el
12550 73 65 20 69 66 28 20 30 3d 3d 73 74 72 63 6d 70  se if( 0==strcmp
12560 28 22 50 45 4e 44 49 4e 47 22 2c 20 54 63 6c 5f  ("PENDING", Tcl_
12570 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32  GetString(objv[2
12580 5d 29 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ])) ){.    rc = 
12590 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b 28 70 46  sqlite3OsLock(pF
125a0 69 6c 65 2c 20 50 45 4e 44 49 4e 47 5f 4c 4f 43  ile, PENDING_LOC
125b0 4b 29 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69  K);.  }.  else i
125c0 66 28 20 30 3d 3d 73 74 72 63 6d 70 28 22 45 58  f( 0==strcmp("EX
125d0 43 4c 55 53 49 56 45 22 2c 20 54 63 6c 5f 47 65  CLUSIVE", Tcl_Ge
125e0 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29  tString(objv[2])
125f0 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  ) ){.    rc = sq
12600 6c 69 74 65 33 4f 73 4c 6f 63 6b 28 70 46 69 6c  lite3OsLock(pFil
12610 65 2c 20 45 58 43 4c 55 53 49 56 45 5f 4c 4f 43  e, EXCLUSIVE_LOC
12620 4b 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  K);.  }else{.   
12630 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
12640 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
12650 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
12660 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20  be \"", .       
12670 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
12680 62 6a 76 5b 30 5d 29 2c 20 0a 20 20 20 20 20 20  bjv[0]), .      
12690 20 20 22 20 66 69 6c 65 68 61 6e 64 6c 65 20 28    " filehandle (
126a0 53 48 41 52 45 44 7c 52 45 53 45 52 56 45 44 7c  SHARED|RESERVED|
126b0 50 45 4e 44 49 4e 47 7c 45 58 43 4c 55 53 49 56  PENDING|EXCLUSIV
126c0 45 29 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  E)", 0);.    ret
126d0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
126e0 20 7d 0a 0a 20 20 69 66 28 20 72 63 21 3d 53 51   }..  if( rc!=SQ
126f0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54  LITE_OK ){.    T
12700 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74  cl_SetResult(int
12710 65 72 70 2c 20 28 63 68 61 72 20 2a 29 65 72 72  erp, (char *)err
12720 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f  orName(rc), TCL_
12730 53 54 41 54 49 43 29 3b 0a 20 20 20 20 72 65 74  STATIC);.    ret
12740 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
12750 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f   }.  return TCL_
12760 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
12770 67 65 3a 20 20 73 71 6c 69 74 65 33 4f 73 55 6e  ge:  sqlite3OsUn
12780 6c 6f 63 6b 20 3c 66 69 6c 65 20 68 61 6e 64 6c  lock <file handl
12790 65 3e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  e>.*/.static int
127a0 20 74 65 73 74 5f 73 71 6c 69 74 65 33 4f 73 55   test_sqlite3OsU
127b0 6e 6c 6f 63 6b 28 0a 20 20 76 6f 69 64 20 2a 20  nlock(.  void * 
127c0 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
127d0 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
127e0 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
127f0 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
12800 62 6a 76 5b 5d 0a 29 7b 0a 20 20 4f 73 46 69 6c  bjv[].){.  OsFil
12810 65 20 2a 20 70 46 69 6c 65 3b 0a 20 20 69 6e 74  e * pFile;.  int
12820 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63   rc;..  if( objc
12830 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=2 ){.    Tcl_A
12840 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
12850 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
12860 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
12870 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65  , .       Tcl_Ge
12880 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29  tString(objv[0])
12890 2c 20 22 20 66 69 6c 65 68 61 6e 64 6c 65 22 2c  , " filehandle",
128a0 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
128b0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
128c0 20 20 69 66 28 20 67 65 74 46 69 6c 65 50 6f 69    if( getFilePoi
128d0 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
128e0 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
128f0 31 5d 29 2c 20 26 70 46 69 6c 65 29 20 29 7b 0a  1]), &pFile) ){.
12900 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
12910 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  RROR;.  }.  rc =
12920 20 73 71 6c 69 74 65 33 4f 73 55 6e 6c 6f 63 6b   sqlite3OsUnlock
12930 28 70 46 69 6c 65 2c 20 4e 4f 5f 4c 4f 43 4b 29  (pFile, NO_LOCK)
12940 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ;.  if( rc!=SQLI
12950 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c  TE_OK ){.    Tcl
12960 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
12970 70 2c 20 28 63 68 61 72 20 2a 29 65 72 72 6f 72  p, (char *)error
12980 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54  Name(rc), TCL_ST
12990 41 54 49 43 29 3b 0a 20 20 20 20 72 65 74 75 72  ATIC);.    retur
129a0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
129b0 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
129c0 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
129d0 3a 20 20 73 71 6c 69 74 65 33 4f 73 54 65 6d 70  :  sqlite3OsTemp
129e0 46 69 6c 65 4e 61 6d 65 0a 2a 2f 0a 73 74 61 74  FileName.*/.stat
129f0 69 63 20 69 6e 74 20 74 65 73 74 5f 73 71 6c 69  ic int test_sqli
12a00 74 65 33 4f 73 54 65 6d 70 46 69 6c 65 4e 61 6d  te3OsTempFileNam
12a10 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  e(.  void * clie
12a20 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
12a30 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
12a40 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
12a50 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
12a60 5d 0a 29 7b 0a 20 20 63 68 61 72 20 7a 46 69 6c  ].){.  char zFil
12a70 65 5b 53 51 4c 49 54 45 5f 54 45 4d 50 4e 41 4d  e[SQLITE_TEMPNAM
12a80 45 5f 53 49 5a 45 5d 3b 0a 20 20 69 6e 74 20 72  E_SIZE];.  int r
12a90 63 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  c;..  rc = sqlit
12aa0 65 33 4f 73 54 65 6d 70 46 69 6c 65 4e 61 6d 65  e3OsTempFileName
12ab0 28 7a 46 69 6c 65 29 3b 0a 20 20 69 66 28 20 72  (zFile);.  if( r
12ac0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
12ad0 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c      Tcl_SetResul
12ae0 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20  t(interp, (char 
12af0 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c  *)errorName(rc),
12b00 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20   TCL_STATIC);.  
12b10 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
12b20 4f 52 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 41 70  OR;.  }.  Tcl_Ap
12b30 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
12b40 70 2c 20 7a 46 69 6c 65 2c 20 30 29 3b 0a 20 20  p, zFile, 0);.  
12b50 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
12b60 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 55  .#endif../*.** U
12b70 73 61 67 65 3a 20 20 73 71 6c 69 74 65 5f 73 65  sage:  sqlite_se
12b80 74 5f 6d 61 67 69 63 20 20 44 42 20 20 4d 41 47  t_magic  DB  MAG
12b90 49 43 2d 4e 55 4d 42 45 52 0a 2a 2a 0a 2a 2a 20  IC-NUMBER.**.** 
12ba0 53 65 74 20 74 68 65 20 64 62 2d 3e 6d 61 67 69  Set the db->magi
12bb0 63 20 76 61 6c 75 65 2e 20 20 54 68 69 73 20 69  c value.  This i
12bc0 73 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 65  s used to test e
12bd0 72 72 6f 72 20 72 65 63 6f 76 65 72 79 20 6c 6f  rror recovery lo
12be0 67 69 63 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  gic..*/.static i
12bf0 6e 74 20 73 71 6c 69 74 65 5f 73 65 74 5f 6d 61  nt sqlite_set_ma
12c00 67 69 63 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  gic(.  void * cl
12c10 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
12c20 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
12c30 20 20 69 6e 74 20 61 72 67 63 2c 0a 20 20 63 68    int argc,.  ch
12c40 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 73  ar **argv.){.  s
12c50 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 66  qlite3 *db;.  if
12c60 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20  ( argc!=3 ){.   
12c70 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
12c80 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
12c90 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
12ca0 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c  be \"", argv[0],
12cb0 0a 20 20 20 20 20 20 20 20 20 22 20 44 42 20 4d  .         " DB M
12cc0 41 47 49 43 22 2c 20 30 29 3b 0a 20 20 20 20 72  AGIC", 0);.    r
12cd0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
12ce0 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
12cf0 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
12d00 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20  argv[1], &db) ) 
12d10 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
12d20 3b 0a 20 20 69 66 28 20 73 74 72 63 6d 70 28 61  ;.  if( strcmp(a
12d30 72 67 76 5b 32 5d 2c 20 22 53 51 4c 49 54 45 5f  rgv[2], "SQLITE_
12d40 4d 41 47 49 43 5f 4f 50 45 4e 22 29 3d 3d 30 20  MAGIC_OPEN")==0 
12d50 29 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63  ){.    db->magic
12d60 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f   = SQLITE_MAGIC_
12d70 4f 50 45 4e 3b 0a 20 20 7d 65 6c 73 65 20 69 66  OPEN;.  }else if
12d80 28 20 73 74 72 63 6d 70 28 61 72 67 76 5b 32 5d  ( strcmp(argv[2]
12d90 2c 20 22 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  , "SQLITE_MAGIC_
12da0 43 4c 4f 53 45 44 22 29 3d 3d 30 20 29 7b 0a 20  CLOSED")==0 ){. 
12db0 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53     db->magic = S
12dc0 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53  QLITE_MAGIC_CLOS
12dd0 45 44 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ED;.  }else if( 
12de0 73 74 72 63 6d 70 28 61 72 67 76 5b 32 5d 2c 20  strcmp(argv[2], 
12df0 22 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55  "SQLITE_MAGIC_BU
12e00 53 59 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 64  SY")==0 ){.    d
12e10 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54  b->magic = SQLIT
12e20 45 5f 4d 41 47 49 43 5f 42 55 53 59 3b 0a 20 20  E_MAGIC_BUSY;.  
12e30 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
12e40 28 61 72 67 76 5b 32 5d 2c 20 22 53 51 4c 49 54  (argv[2], "SQLIT
12e50 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 22 29 3d  E_MAGIC_ERROR")=
12e60 3d 30 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d 61  =0 ){.    db->ma
12e70 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47  gic = SQLITE_MAG
12e80 49 43 5f 45 52 52 4f 52 3b 0a 20 20 7d 65 6c 73  IC_ERROR;.  }els
12e90 65 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74  e if( Tcl_GetInt
12ea0 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 32 5d  (interp, argv[2]
12eb0 2c 20 26 64 62 2d 3e 6d 61 67 69 63 29 20 29 7b  , &db->magic) ){
12ec0 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
12ed0 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 65 74  ERROR;.  }.  ret
12ee0 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
12ef0 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
12f00 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20 20  ite3_interrupt  
12f10 44 42 20 0a 2a 2a 0a 2a 2a 20 54 72 69 67 67 65  DB .**.** Trigge
12f20 72 20 61 6e 20 69 6e 74 65 72 72 75 70 74 20 6f  r an interrupt o
12f30 6e 20 44 42 0a 2a 2f 0a 73 74 61 74 69 63 20 69  n DB.*/.static i
12f40 6e 74 20 74 65 73 74 5f 69 6e 74 65 72 72 75 70  nt test_interrup
12f50 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  t(.  void * clie
12f60 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
12f70 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
12f80 69 6e 74 20 61 72 67 63 2c 0a 20 20 63 68 61 72  int argc,.  char
12f90 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 73 71 6c   **argv.){.  sql
12fa0 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 66 28 20  ite3 *db;.  if( 
12fb0 61 72 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  argc!=2 ){.    T
12fc0 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
12fd0 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
12fe0 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
12ff0 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 22   \"", argv[0], "
13000 20 44 42 22 2c 20 30 29 3b 0a 20 20 20 20 72 65   DB", 0);.    re
13010 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
13020 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
13030 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61  ointer(interp, a
13040 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72  rgv[1], &db) ) r
13050 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
13060 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  .  sqlite3_inter
13070 72 75 70 74 28 64 62 29 3b 0a 20 20 72 65 74 75  rupt(db);.  retu
13080 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 73 74  rn TCL_OK;.}..st
13090 61 74 69 63 20 75 38 20 2a 73 71 6c 69 74 65 33  atic u8 *sqlite3
130a0 5f 73 74 61 63 6b 5f 62 61 73 65 6c 69 6e 65 20  _stack_baseline 
130b0 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20 46 69 6c 6c  = 0;../*.** Fill
130c0 20 74 68 65 20 73 74 61 63 6b 20 77 69 74 68 20   the stack with 
130d0 61 20 6b 6e 6f 77 6e 20 62 69 74 70 61 74 74 65  a known bitpatte
130e0 72 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  rn..*/.static vo
130f0 69 64 20 70 72 65 70 53 74 61 63 6b 28 76 6f 69  id prepStack(voi
13100 64 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 75  d){.  int i;.  u
13110 33 32 20 62 69 67 42 75 66 5b 36 35 35 33 36 5d  32 bigBuf[65536]
13120 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 73  ;.  for(i=0; i<s
13130 69 7a 65 6f 66 28 62 69 67 42 75 66 29 3b 20 69  izeof(bigBuf); i
13140 2b 2b 29 20 62 69 67 42 75 66 5b 69 5d 20 3d 20  ++) bigBuf[i] = 
13150 30 78 64 65 61 64 62 65 65 66 3b 0a 20 20 73 71  0xdeadbeef;.  sq
13160 6c 69 74 65 33 5f 73 74 61 63 6b 5f 62 61 73 65  lite3_stack_base
13170 6c 69 6e 65 20 3d 20 28 75 38 2a 29 26 62 69 67  line = (u8*)&big
13180 42 75 66 5b 36 35 35 33 36 5d 3b 0a 7d 0a 0a 2f  Buf[65536];.}../
13190 2a 0a 2a 2a 20 47 65 74 20 74 68 65 20 63 75 72  *.** Get the cur
131a0 72 65 6e 74 20 73 74 61 63 6b 20 64 65 70 74 68  rent stack depth
131b0 2e 20 20 55 73 65 64 20 66 6f 72 20 64 65 62 75  .  Used for debu
131c0 67 67 69 6e 67 20 6f 6e 6c 79 2e 0a 2a 2f 0a 75  gging only..*/.u
131d0 36 34 20 73 71 6c 69 74 65 33 53 74 61 63 6b 44  64 sqlite3StackD
131e0 65 70 74 68 28 76 6f 69 64 29 7b 0a 20 20 75 38  epth(void){.  u8
131f0 20 78 3b 0a 20 20 72 65 74 75 72 6e 20 28 75 36   x;.  return (u6
13200 34 29 28 73 71 6c 69 74 65 33 5f 73 74 61 63 6b  4)(sqlite3_stack
13210 5f 62 61 73 65 6c 69 6e 65 20 2d 20 26 78 29 3b  _baseline - &x);
13220 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
13230 20 20 73 71 6c 69 74 65 33 5f 73 74 61 63 6b 5f    sqlite3_stack_
13240 75 73 65 64 20 44 42 20 53 51 4c 0a 2a 2a 0a 2a  used DB SQL.**.*
13250 2a 20 54 72 79 20 74 6f 20 6d 65 61 73 75 72 65  * Try to measure
13260 20 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20 73   the amount of s
13270 74 61 63 6b 20 73 70 61 63 65 20 75 73 65 64 20  tack space used 
13280 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c  by a call to sql
13290 69 74 65 33 5f 65 78 65 63 0a 2a 2f 0a 73 74 61  ite3_exec.*/.sta
132a0 74 69 63 20 69 6e 74 20 74 65 73 74 5f 73 74 61  tic int test_sta
132b0 63 6b 5f 75 73 65 64 28 0a 20 20 76 6f 69 64 20  ck_used(.  void 
132c0 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
132d0 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
132e0 72 70 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a  rp,.  int argc,.
132f0 20 20 63 68 61 72 20 2a 2a 61 72 67 76 0a 29 7b    char **argv.){
13300 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a  .  sqlite3 *db;.
13310 20 20 69 6e 74 20 69 3b 0a 20 20 69 66 28 20 61    int i;.  if( a
13320 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63  rgc!=3 ){.    Tc
13330 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
13340 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
13350 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
13360 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20  \"", argv[0], . 
13370 20 20 20 20 20 20 20 22 20 44 42 20 53 51 4c 22         " DB SQL"
13380 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
13390 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
133a0 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74    if( getDbPoint
133b0 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  er(interp, argv[
133c0 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72  1], &db) ) retur
133d0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 70  n TCL_ERROR;.  p
133e0 72 65 70 53 74 61 63 6b 28 29 3b 0a 20 20 73 71  repStack();.  sq
133f0 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20 61  lite3_exec(db, a
13400 72 67 76 5b 32 5d 2c 20 30 2c 20 30 2c 20 30 29  rgv[2], 0, 0, 0)
13410 3b 0a 20 20 66 6f 72 28 69 3d 36 35 35 33 35 3b  ;.  for(i=65535;
13420 20 69 3e 3d 30 20 26 26 20 28 28 75 33 32 2a 29   i>=0 && ((u32*)
13430 73 71 6c 69 74 65 33 5f 73 74 61 63 6b 5f 62 61  sqlite3_stack_ba
13440 73 65 6c 69 6e 65 29 5b 2d 69 5d 3d 3d 30 78 64  seline)[-i]==0xd
13450 65 61 64 62 65 65 66 3b 20 69 2d 2d 29 7b 7d 0a  eadbeef; i--){}.
13460 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
13470 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
13480 65 77 49 6e 74 4f 62 6a 28 69 2a 34 29 29 3b 0a  ewIntObj(i*4));.
13490 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
134a0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
134b0 20 73 71 6c 69 74 65 5f 64 65 6c 65 74 65 5f 66   sqlite_delete_f
134c0 75 6e 63 74 69 6f 6e 20 44 42 20 66 75 6e 63 74  unction DB funct
134d0 69 6f 6e 2d 6e 61 6d 65 0a 2a 2a 0a 2a 2a 20 44  ion-name.**.** D
134e0 65 6c 65 74 65 20 74 68 65 20 75 73 65 72 20 66  elete the user f
134f0 75 6e 63 74 69 6f 6e 20 27 66 75 6e 63 74 69 6f  unction 'functio
13500 6e 2d 6e 61 6d 65 27 20 66 72 6f 6d 20 64 61 74  n-name' from dat
13510 61 62 61 73 65 20 68 61 6e 64 6c 65 20 44 42 2e  abase handle DB.
13520 20 49 74 0a 2a 2a 20 69 73 20 61 73 73 75 6d 65   It.** is assume
13530 64 20 74 68 61 74 20 74 68 65 20 75 73 65 72 20  d that the user 
13540 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 63 72 65  function was cre
13550 61 74 65 64 20 61 73 20 55 54 46 38 2c 20 61 6e  ated as UTF8, an
13560 79 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 61  y number of.** a
13570 72 67 75 6d 65 6e 74 73 20 28 74 68 65 20 77 61  rguments (the wa
13580 79 20 74 68 65 20 54 43 4c 20 69 6e 74 65 72 66  y the TCL interf
13590 61 63 65 20 64 6f 65 73 20 69 74 29 2e 0a 2a 2f  ace does it)..*/
135a0 0a 73 74 61 74 69 63 20 69 6e 74 20 64 65 6c 65  .static int dele
135b0 74 65 5f 66 75 6e 63 74 69 6f 6e 28 0a 20 20 76  te_function(.  v
135c0 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
135d0 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
135e0 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 61 72  interp,.  int ar
135f0 67 63 2c 0a 20 20 63 68 61 72 20 2a 2a 61 72 67  gc,.  char **arg
13600 76 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  v.){.  int rc;. 
13610 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
13620 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20  if( argc!=3 ){. 
13630 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
13640 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
13650 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
13660 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30  d be \"", argv[0
13670 5d 2c 20 0a 20 20 20 20 20 20 20 20 22 20 44 42  ], .        " DB
13680 20 66 75 6e 63 74 69 6f 6e 2d 6e 61 6d 65 22 2c   function-name",
13690 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
136a0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
136b0 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
136c0 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31  r(interp, argv[1
136d0 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e  ], &db) ) return
136e0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63   TCL_ERROR;.  rc
136f0 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74   = sqlite3_creat
13700 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 61  e_function(db, a
13710 72 67 76 5b 32 5d 2c 20 2d 31 2c 20 53 51 4c 49  rgv[2], -1, SQLI
13720 54 45 5f 55 54 46 38 2c 20 30 2c 20 30 2c 20 30  TE_UTF8, 0, 0, 0
13730 2c 20 30 29 3b 0a 20 20 54 63 6c 5f 53 65 74 52  , 0);.  Tcl_SetR
13740 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63  esult(interp, (c
13750 68 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28  har *)errorName(
13760 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43 29  rc), TCL_STATIC)
13770 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
13780 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
13790 65 3a 20 73 71 6c 69 74 65 5f 64 65 6c 65 74 65  e: sqlite_delete
137a0 5f 63 6f 6c 6c 61 74 69 6f 6e 20 44 42 20 63 6f  _collation DB co
137b0 6c 6c 61 74 69 6f 6e 2d 6e 61 6d 65 0a 2a 2a 0a  llation-name.**.
137c0 2a 2a 20 44 65 6c 65 74 65 20 74 68 65 20 63 6f  ** Delete the co
137d0 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
137e0 20 27 63 6f 6c 6c 61 74 69 6f 6e 2d 6e 61 6d 65   'collation-name
137f0 27 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65 20  ' from database 
13800 68 61 6e 64 6c 65 20 0a 2a 2a 20 44 42 2e 20 49  handle .** DB. I
13810 74 20 69 73 20 61 73 73 75 6d 65 64 20 74 68 61  t is assumed tha
13820 74 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20  t the collation 
13830 73 65 71 75 65 6e 63 65 20 77 61 73 20 63 72 65  sequence was cre
13840 61 74 65 64 20 61 73 20 55 54 46 38 20 28 74 68  ated as UTF8 (th
13850 65 20 0a 2a 2a 20 77 61 79 20 74 68 65 20 54 43  e .** way the TC
13860 4c 20 69 6e 74 65 72 66 61 63 65 20 64 6f 65 73  L interface does
13870 20 69 74 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20   it)..*/.static 
13880 69 6e 74 20 64 65 6c 65 74 65 5f 63 6f 6c 6c 61  int delete_colla
13890 74 69 6f 6e 28 0a 20 20 76 6f 69 64 20 2a 20 63  tion(.  void * c
138a0 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
138b0 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
138c0 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a 20 20 63  .  int argc,.  c
138d0 68 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20  har **argv.){.  
138e0 69 6e 74 20 72 63 3b 0a 20 20 73 71 6c 69 74 65  int rc;.  sqlite
138f0 33 20 2a 64 62 3b 0a 20 20 69 66 28 20 61 72 67  3 *db;.  if( arg
13900 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
13910 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
13920 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
13930 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
13940 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20  ", argv[0], .   
13950 20 20 20 20 20 22 20 44 42 20 66 75 6e 63 74 69       " DB functi
13960 6f 6e 2d 6e 61 6d 65 22 2c 20 30 29 3b 0a 20 20  on-name", 0);.  
13970 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
13980 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
13990 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tDbPointer(inter
139a0 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29  p, argv[1], &db)
139b0 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
139c0 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ROR;.  rc = sqli
139d0 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61  te3_create_colla
139e0 74 69 6f 6e 28 64 62 2c 20 61 72 67 76 5b 32 5d  tion(db, argv[2]
139f0 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30  , SQLITE_UTF8, 0
13a00 2c 20 30 29 3b 0a 20 20 54 63 6c 5f 53 65 74 52  , 0);.  Tcl_SetR
13a10 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63  esult(interp, (c
13a20 68 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28  har *)errorName(
13a30 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43 29  rc), TCL_STATIC)
13a40 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
13a50 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
13a60 65 3a 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61  e: sqlite3_get_a
13a70 75 74 6f 63 6f 6d 6d 69 74 20 44 42 0a 2a 2a 0a  utocommit DB.**.
13a80 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  ** Return true i
13a90 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 44  f the database D
13aa0 42 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 69  B is currently i
13ab0 6e 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 6d 6f  n auto-commit mo
13ac0 64 65 2e 0a 2a 2a 20 52 65 74 75 72 6e 20 66 61  de..** Return fa
13ad0 6c 73 65 20 69 66 20 6e 6f 74 2e 0a 2a 2f 0a 73  lse if not..*/.s
13ae0 74 61 74 69 63 20 69 6e 74 20 67 65 74 5f 61 75  tatic int get_au
13af0 74 6f 63 6f 6d 6d 69 74 28 0a 20 20 76 6f 69 64  tocommit(.  void
13b00 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
13b10 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
13b20 65 72 70 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c  erp,.  int argc,
13b30 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 0a 29  .  char **argv.)
13b40 7b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 33 30  {.  char zBuf[30
13b50 5d 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ];.  sqlite3 *db
13b60 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 32 20  ;.  if( argc!=2 
13b70 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
13b80 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
13b90 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
13ba0 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72  hould be \"", ar
13bb0 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 20  gv[0], .        
13bc0 22 20 44 42 22 2c 20 30 29 3b 0a 20 20 20 20 72  " DB", 0);.    r
13bd0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
13be0 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
13bf0 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
13c00 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20  argv[1], &db) ) 
13c10 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
13c20 3b 0a 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66  ;.  sprintf(zBuf
13c30 2c 20 22 25 64 22 2c 20 73 71 6c 69 74 65 33 5f  , "%d", sqlite3_
13c40 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 28 64  get_autocommit(d
13c50 62 29 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e  b));.  Tcl_Appen
13c60 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
13c70 7a 42 75 66 2c 20 30 29 3b 0a 20 20 72 65 74 75  zBuf, 0);.  retu
13c80 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
13c90 0a 2a 2a 20 55 73 61 67 65 3a 20 20 74 63 6c 5f  .** Usage:  tcl_
13ca0 76 61 72 69 61 62 6c 65 5f 74 79 70 65 20 56 41  variable_type VA
13cb0 52 49 41 42 4c 45 4e 41 4d 45 0a 2a 2a 0a 2a 2a  RIABLENAME.**.**
13cc0 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61 6d 65   Return the name
13cd0 20 6f 66 20 74 68 65 20 69 6e 74 65 72 6e 61 6c   of the internal
13ce0 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
13cf0 66 6f 72 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65  for the.** value
13d00 20 6f 66 20 74 68 65 20 67 69 76 65 6e 20 76 61   of the given va
13d10 72 69 61 62 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69  riable..*/.stati
13d20 63 20 69 6e 74 20 74 63 6c 5f 76 61 72 69 61 62  c int tcl_variab
13d30 6c 65 5f 74 79 70 65 28 0a 20 20 76 6f 69 64 20  le_type(.  void 
13d40 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
13d50 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
13d60 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
13d70 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
13d80 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 54 63 6c   objv[].){.  Tcl
13d90 5f 4f 62 6a 20 2a 70 56 61 72 3b 0a 20 20 69 66  _Obj *pVar;.  if
13da0 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
13db0 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67   Tcl_WrongNumArg
13dc0 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a  s(interp, 1, obj
13dd0 76 2c 20 22 56 41 52 49 41 42 4c 45 22 29 3b 0a  v, "VARIABLE");.
13de0 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
13df0 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 70 56 61 72  RROR;.  }.  pVar
13e00 20 3d 20 54 63 6c 5f 47 65 74 56 61 72 32 45 78   = Tcl_GetVar2Ex
13e10 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
13e20 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
13e30 20 30 2c 20 54 43 4c 5f 4c 45 41 56 45 5f 45 52   0, TCL_LEAVE_ER
13e40 52 5f 4d 53 47 29 3b 0a 20 20 69 66 28 20 70 56  R_MSG);.  if( pV
13e50 61 72 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 54  ar==0 ) return T
13e60 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
13e70 70 56 61 72 2d 3e 74 79 70 65 50 74 72 20 29 7b  pVar->typePtr ){
13e80 0a 20 20 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52  .    Tcl_SetObjR
13e90 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
13ea0 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 70  l_NewStringObj(p
13eb0 56 61 72 2d 3e 74 79 70 65 50 74 72 2d 3e 6e 61  Var->typePtr->na
13ec0 6d 65 2c 20 2d 31 29 29 3b 0a 20 20 7d 0a 20 20  me, -1));.  }.  
13ed0 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
13ee0 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
13ef0 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73 65 5f  sqlite3_release_
13f00 6d 65 6d 6f 72 79 20 3f 4e 3f 0a 2a 2a 0a 2a 2a  memory ?N?.**.**
13f10 20 41 74 74 65 6d 70 74 20 74 6f 20 72 65 6c 65   Attempt to rele
13f20 61 73 65 20 6d 65 6d 6f 72 79 20 63 75 72 72 65  ase memory curre
13f30 6e 74 6c 79 20 68 65 6c 64 20 62 75 74 20 6e 6f  ntly held but no
13f40 74 20 61 63 74 75 61 6c 6c 79 20 72 65 71 75 69  t actually requi
13f50 72 65 64 2e 0a 2a 2a 20 54 68 65 20 69 6e 74 65  red..** The inte
13f60 67 65 72 20 4e 20 69 73 20 74 68 65 20 6e 75 6d  ger N is the num
13f70 62 65 72 20 6f 66 20 62 79 74 65 73 20 77 65 20  ber of bytes we 
13f80 61 72 65 20 74 72 79 69 6e 67 20 74 6f 20 72 65  are trying to re
13f90 6c 65 61 73 65 2e 20 20 54 68 65 20 0a 2a 2a 20  lease.  The .** 
13fa0 72 65 74 75 72 6e 20 76 61 6c 75 65 20 69 73 20  return value is 
13fb0 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20 6d 65  the amount of me
13fc0 6d 6f 72 79 20 61 63 74 75 61 6c 6c 79 20 72 65  mory actually re
13fd0 6c 65 61 73 65 64 2e 0a 2a 2f 0a 73 74 61 74 69  leased..*/.stati
13fe0 63 20 69 6e 74 20 74 65 73 74 5f 72 65 6c 65 61  c int test_relea
13ff0 73 65 5f 6d 65 6d 6f 72 79 28 0a 20 20 76 6f 69  se_memory(.  voi
14000 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
14010 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
14020 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
14030 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
14040 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66  ST objv[].){.#if
14050 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
14060 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41  ENABLE_MEMORY_MA
14070 4e 41 47 45 4d 45 4e 54 29 20 26 26 20 21 64 65  NAGEMENT) && !de
14080 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
14090 54 5f 44 49 53 4b 49 4f 29 0a 20 20 69 6e 74 20  T_DISKIO).  int 
140a0 4e 3b 0a 20 20 69 6e 74 20 61 6d 74 3b 0a 20 20  N;.  int amt;.  
140b0 69 66 28 20 6f 62 6a 63 21 3d 31 20 26 26 20 6f  if( objc!=1 && o
140c0 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  bjc!=2 ){.    Tc
140d0 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69  l_WrongNumArgs(i
140e0 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20  nterp, 1, objv, 
140f0 22 3f 4e 3f 22 29 3b 0a 20 20 20 20 72 65 74 75  "?N?");.    retu
14100 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
14110 7d 0a 20 20 69 66 28 20 6f 62 6a 63 3d 3d 32 20  }.  if( objc==2 
14120 29 7b 0a 20 20 20 20 69 66 28 20 54 63 6c 5f 47  ){.    if( Tcl_G
14130 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
14140 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20 26 4e  erp, objv[1], &N
14150 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
14160 52 52 4f 52 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  RROR;.  }else{. 
14170 20 20 20 4e 20 3d 20 2d 31 3b 0a 20 20 7d 0a 20     N = -1;.  }. 
14180 20 61 6d 74 20 3d 20 73 71 6c 69 74 65 33 5f 72   amt = sqlite3_r
14190 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 4e 29  elease_memory(N)
141a0 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65  ;.  Tcl_SetObjRe
141b0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
141c0 5f 4e 65 77 49 6e 74 4f 62 6a 28 61 6d 74 29 29  _NewIntObj(amt))
141d0 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72  ;.#endif.  retur
141e0 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
141f0 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
14200 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d  e3_soft_heap_lim
14210 69 74 20 3f 4e 3f 0a 2a 2a 0a 2a 2a 20 51 75 65  it ?N?.**.** Que
14220 72 79 20 6f 72 20 73 65 74 20 74 68 65 20 73 6f  ry or set the so
14230 66 74 20 68 65 61 70 20 6c 69 6d 69 74 20 66 6f  ft heap limit fo
14240 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 68  r the current th
14250 72 65 61 64 2e 20 20 54 68 65 0a 2a 2a 20 6c 69  read.  The.** li
14260 6d 69 74 20 69 73 20 6f 6e 6c 79 20 63 68 61 6e  mit is only chan
14270 67 65 64 20 69 66 20 74 68 65 20 4e 20 69 73 20  ged if the N is 
14280 70 72 65 73 65 6e 74 2e 20 20 54 68 65 20 70 72  present.  The pr
14290 65 76 69 6f 75 73 20 6c 69 6d 69 74 0a 2a 2a 20  evious limit.** 
142a0 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a  is returned..*/.
142b0 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
142c0 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 28  soft_heap_limit(
142d0 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
142e0 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
142f0 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
14300 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
14310 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
14320 29 7b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  ){.#if defined(S
14330 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
14340 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 29 20  ORY_MANAGEMENT) 
14350 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
14360 54 45 5f 4f 4d 49 54 5f 44 49 53 4b 49 4f 29 0a  TE_OMIT_DISKIO).
14370 20 20 69 6e 74 20 61 6d 74 3b 0a 20 20 69 66 28    int amt;.  if(
14380 20 6f 62 6a 63 21 3d 31 20 26 26 20 6f 62 6a 63   objc!=1 && objc
14390 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57  !=2 ){.    Tcl_W
143a0 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65  rongNumArgs(inte
143b0 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 3f 4e  rp, 1, objv, "?N
143c0 3f 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  ?");.    return 
143d0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
143e0 20 61 6d 74 20 3d 20 73 71 6c 69 74 65 33 54 68   amt = sqlite3Th
143f0 72 65 61 64 44 61 74 61 52 65 61 64 4f 6e 6c 79  readDataReadOnly
14400 28 29 2d 3e 6e 53 6f 66 74 48 65 61 70 4c 69 6d  ()->nSoftHeapLim
14410 69 74 3b 0a 20 20 69 66 28 20 6f 62 6a 63 3d 3d  it;.  if( objc==
14420 32 20 29 7b 0a 20 20 20 20 69 6e 74 20 4e 3b 0a  2 ){.    int N;.
14430 20 20 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49      if( Tcl_GetI
14440 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  ntFromObj(interp
14450 2c 20 6f 62 6a 76 5b 31 5d 2c 20 26 4e 29 20 29  , objv[1], &N) )
14460 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
14470 52 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  R;.    sqlite3_s
14480 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 28 4e  oft_heap_limit(N
14490 29 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 53 65 74  );.  }.  Tcl_Set
144a0 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
144b0 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28  , Tcl_NewIntObj(
144c0 61 6d 74 29 29 3b 0a 23 65 6e 64 69 66 0a 20 20  amt));.#endif.  
144d0 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
144e0 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
144f0 20 73 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f 74   sqlite3_clear_t
14500 73 64 5f 6d 65 6d 64 65 62 75 67 0a 2a 2a 0a 2a  sd_memdebug.**.*
14510 2a 20 43 6c 65 61 72 20 61 6c 6c 20 6f 66 20 74  * Clear all of t
14520 68 65 20 4d 45 4d 44 45 42 55 47 20 69 6e 66 6f  he MEMDEBUG info
14530 72 6d 61 74 69 6f 6e 20 6f 75 74 20 6f 66 20 74  rmation out of t
14540 68 72 65 61 64 2d 73 70 65 63 69 66 69 63 20 64  hread-specific d
14550 61 74 61 2e 0a 2a 2a 20 54 68 69 73 20 77 69 6c  ata..** This wil
14560 6c 20 61 6c 6c 6f 77 20 69 74 20 74 6f 20 62 65  l allow it to be
14570 20 64 65 61 6c 6c 6f 63 61 74 65 64 2e 0a 2a 2f   deallocated..*/
14580 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
14590 5f 63 6c 65 61 72 5f 74 73 64 5f 6d 65 6d 64 65  _clear_tsd_memde
145a0 62 75 67 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  bug(.  void * cl
145b0 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
145c0 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
145d0 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
145e0 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
145f0 76 5b 5d 0a 29 7b 0a 23 69 66 20 64 65 66 69 6e  v[].){.#if defin
14600 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ed(SQLITE_MEMDEB
14610 55 47 29 0a 20 20 54 68 72 65 61 64 44 61 74 61  UG).  ThreadData
14620 20 2a 70 54 64 20 3d 20 73 71 6c 69 74 65 33 54   *pTd = sqlite3T
14630 68 72 65 61 64 44 61 74 61 28 29 3b 0a 20 20 70  hreadData();.  p
14640 54 64 2d 3e 6e 4d 61 78 41 6c 6c 6f 63 20 3d 20  Td->nMaxAlloc = 
14650 30 3b 0a 20 20 70 54 64 2d 3e 7a 46 69 6c 65 20  0;.  pTd->zFile 
14660 3d 20 30 3b 0a 20 20 70 54 64 2d 3e 69 4c 69 6e  = 0;.  pTd->iLin
14670 65 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20  e = 0;.#endif.  
14680 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
14690 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
146a0 20 73 71 6c 69 74 65 33 5f 74 73 64 5f 72 65 6c   sqlite3_tsd_rel
146b0 65 61 73 65 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20  ease.**.** Call 
146c0 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 68  sqlite3ReleaseTh
146d0 72 65 61 64 44 61 74 61 2e 0a 2a 2f 0a 73 74 61  readData..*/.sta
146e0 74 69 63 20 69 6e 74 20 74 65 73 74 5f 74 73 64  tic int test_tsd
146f0 5f 72 65 6c 65 61 73 65 28 0a 20 20 76 6f 69 64  _release(.  void
14700 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
14710 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
14720 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
14730 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
14740 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 20  T objv[].){.#if 
14750 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
14760 45 4d 44 45 42 55 47 29 0a 20 20 73 71 6c 69 74  EMDEBUG).  sqlit
14770 65 33 52 65 6c 65 61 73 65 54 68 72 65 61 64 44  e3ReleaseThreadD
14780 61 74 61 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20  ata();.#endif.  
14790 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
147a0 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
147b0 20 73 71 6c 69 74 65 33 5f 74 68 72 65 61 64 5f   sqlite3_thread_
147c0 63 6c 65 61 6e 75 70 0a 2a 2a 0a 2a 2a 20 43 61  cleanup.**.** Ca
147d0 6c 6c 20 74 68 65 20 73 71 6c 69 74 65 33 5f 74  ll the sqlite3_t
147e0 68 72 65 61 64 5f 63 6c 65 61 6e 75 70 20 41 50  hread_cleanup AP
147f0 49 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  I..*/.static int
14800 20 74 65 73 74 5f 74 68 72 65 61 64 5f 63 6c 65   test_thread_cle
14810 61 6e 75 70 28 0a 20 20 76 6f 69 64 20 2a 20 63  anup(.  void * c
14820 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
14830 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
14840 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
14850 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
14860 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
14870 33 5f 74 68 72 65 61 64 5f 63 6c 65 61 6e 75 70  3_thread_cleanup
14880 28 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ();.  return TCL
14890 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 54  _OK;.}.../*.** T
148a0 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73  his routine sets
148b0 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20   entries in the 
148c0 67 6c 6f 62 61 6c 20 3a 3a 73 71 6c 69 74 65 5f  global ::sqlite_
148d0 6f 70 74 69 6f 6e 73 28 29 20 61 72 72 61 79 20  options() array 
148e0 76 61 72 69 61 62 6c 65 0a 2a 2a 20 61 63 63 6f  variable.** acco
148f0 72 64 69 6e 67 20 74 6f 20 74 68 65 20 63 6f 6d  rding to the com
14900 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67  pile-time config
14910 75 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64  uration of the d
14920 61 74 61 62 61 73 65 2e 20 20 54 65 73 74 0a 2a  atabase.  Test.*
14930 2a 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65  * procedures use
14940 20 74 68 69 73 20 74 6f 20 64 65 74 65 72 6d 69   this to determi
14950 6e 65 20 77 68 65 6e 20 74 65 73 74 73 20 73 68  ne when tests sh
14960 6f 75 6c 64 20 62 65 20 6f 6d 69 74 74 65 64 2e  ould be omitted.
14970 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
14980 73 65 74 5f 6f 70 74 69 6f 6e 73 28 54 63 6c 5f  set_options(Tcl_
14990 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 29 7b  Interp *interp){
149a0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 33  .#ifdef SQLITE_3
149b0 32 42 49 54 5f 52 4f 57 49 44 0a 20 20 54 63 6c  2BIT_ROWID.  Tcl
149c0 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
149d0 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
149e0 22 2c 20 22 72 6f 77 69 64 33 32 22 2c 20 22 31  ", "rowid32", "1
149f0 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
14a00 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
14a10 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
14a20 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
14a30 22 2c 20 22 72 6f 77 69 64 33 32 22 2c 20 22 30  ", "rowid32", "0
14a40 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
14a50 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
14a60 64 65 66 20 53 51 4c 49 54 45 5f 43 41 53 45 5f  def SQLITE_CASE_
14a70 53 45 4e 53 49 54 49 56 45 5f 4c 49 4b 45 0a 20  SENSITIVE_LIKE. 
14a80 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
14a90 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
14aa0 69 6f 6e 73 22 2c 22 63 61 73 65 73 65 6e 73 69  ions","casesensi
14ab0 74 69 76 65 6c 69 6b 65 22 2c 22 31 22 2c 54 43  tivelike","1",TC
14ac0 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
14ad0 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
14ae0 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
14af0 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 22 63 61  ite_options","ca
14b00 73 65 73 65 6e 73 69 74 69 76 65 6c 69 6b 65 22  sesensitivelike"
14b10 2c 22 30 22 2c 54 43 4c 5f 47 4c 4f 42 41 4c 5f  ,"0",TCL_GLOBAL_
14b20 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
14b30 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 49 53  ifdef SQLITE_DIS
14b40 41 42 4c 45 5f 44 49 52 53 59 4e 43 0a 20 20 54  ABLE_DIRSYNC.  T
14b50 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
14b60 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
14b70 6e 73 22 2c 20 22 64 69 72 73 79 6e 63 22 2c 20  ns", "dirsync", 
14b80 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
14b90 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
14ba0 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
14bb0 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
14bc0 6e 73 22 2c 20 22 64 69 72 73 79 6e 63 22 2c 20  ns", "dirsync", 
14bd0 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
14be0 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
14bf0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 49 53  ifdef SQLITE_DIS
14c00 41 42 4c 45 5f 4c 46 53 0a 20 20 54 63 6c 5f 53  ABLE_LFS.  Tcl_S
14c10 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
14c20 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
14c30 20 22 6c 66 73 22 2c 20 22 30 22 2c 20 54 43 4c   "lfs", "0", TCL
14c40 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
14c50 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
14c60 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
14c70 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 6c 66  te_options", "lf
14c80 73 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  s", "1", TCL_GLO
14c90 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
14ca0 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
14cb0 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45  _OMIT_ALTERTABLE
14cc0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
14cd0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
14ce0 70 74 69 6f 6e 73 22 2c 20 22 61 6c 74 65 72 74  ptions", "altert
14cf0 61 62 6c 65 22 2c 20 22 30 22 2c 20 54 43 4c 5f  able", "0", TCL_
14d00 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
14d10 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
14d20 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
14d30 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 61 6c 74  e_options", "alt
14d40 65 72 74 61 62 6c 65 22 2c 20 22 31 22 2c 20 54  ertable", "1", T
14d50 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
14d60 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
14d70 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c  SQLITE_OMIT_ANAL
14d80 59 5a 45 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  YZE.  Tcl_SetVar
14d90 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
14da0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 61 6e 61  e_options", "ana
14db0 6c 79 7a 65 22 2c 20 22 30 22 2c 20 54 43 4c 5f  lyze", "0", TCL_
14dc0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
14dd0 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
14de0 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
14df0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 61 6e 61  e_options", "ana
14e00 6c 79 7a 65 22 2c 20 22 31 22 2c 20 54 43 4c 5f  lyze", "1", TCL_
14e10 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
14e20 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
14e30 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49  ITE_OMIT_AUTHORI
14e40 5a 41 54 49 4f 4e 0a 20 20 54 63 6c 5f 53 65 74  ZATION.  Tcl_Set
14e50 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
14e60 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
14e70 61 75 74 68 22 2c 20 22 30 22 2c 20 54 43 4c 5f  auth", "0", TCL_
14e80 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
14e90 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
14ea0 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
14eb0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 61 75 74  e_options", "aut
14ec0 68 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  h", "1", TCL_GLO
14ed0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
14ee0 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
14ef0 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
14f00 45 4e 54 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  ENT.  Tcl_SetVar
14f10 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
14f20 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 61 75 74  e_options", "aut
14f30 6f 69 6e 63 22 2c 20 22 30 22 2c 20 54 43 4c 5f  oinc", "0", TCL_
14f40 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
14f50 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
14f60 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
14f70 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 61 75 74  e_options", "aut
14f80 6f 69 6e 63 22 2c 20 22 31 22 2c 20 54 43 4c 5f  oinc", "1", TCL_
14f90 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
14fa0 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
14fb0 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43  ITE_OMIT_AUTOVAC
14fc0 55 55 4d 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  UUM.  Tcl_SetVar
14fd0 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
14fe0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 61 75 74  e_options", "aut
14ff0 6f 76 61 63 75 75 6d 22 2c 20 22 30 22 2c 20 54  ovacuum", "0", T
15000 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
15010 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
15020 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
15030 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
15040 61 75 74 6f 76 61 63 75 75 6d 22 2c 20 22 31 22  autovacuum", "1"
15050 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
15060 59 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  Y);.#endif /* SQ
15070 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41  LITE_OMIT_AUTOVA
15080 43 55 55 4d 20 2a 2f 0a 23 69 66 20 21 64 65 66  CUUM */.#if !def
15090 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 46 41  ined(SQLITE_DEFA
150a0 55 4c 54 5f 41 55 54 4f 56 41 43 55 55 4d 29 20  ULT_AUTOVACUUM) 
150b0 7c 7c 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  || SQLITE_DEFAUL
150c0 54 5f 41 55 54 4f 56 41 43 55 55 4d 3d 3d 30 0a  T_AUTOVACUUM==0.
150d0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
150e0 74 65 72 70 2c 22 73 71 6c 69 74 65 5f 6f 70 74  terp,"sqlite_opt
150f0 69 6f 6e 73 22 2c 22 64 65 66 61 75 6c 74 5f 61  ions","default_a
15100 75 74 6f 76 61 63 75 75 6d 22 2c 22 30 22 2c 54  utovacuum","0",T
15110 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
15120 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
15130 56 61 72 32 28 69 6e 74 65 72 70 2c 22 73 71 6c  Var2(interp,"sql
15140 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 22 64 65  ite_options","de
15150 66 61 75 6c 74 5f 61 75 74 6f 76 61 63 75 75 6d  fault_autovacuum
15160 22 2c 22 31 22 2c 54 43 4c 5f 47 4c 4f 42 41 4c  ","1",TCL_GLOBAL
15170 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
15180 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
15190 49 54 5f 42 45 54 57 45 45 4e 5f 4f 50 54 49 4d  IT_BETWEEN_OPTIM
151a0 49 5a 41 54 49 4f 4e 0a 20 20 54 63 6c 5f 53 65  IZATION.  Tcl_Se
151b0 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
151c0 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
151d0 22 62 65 74 77 65 65 6e 5f 6f 70 74 22 2c 20 22  "between_opt", "
151e0 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
151f0 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
15200 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
15210 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
15220 73 22 2c 20 22 62 65 74 77 65 65 6e 5f 6f 70 74  s", "between_opt
15230 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
15240 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
15250 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
15260 4f 4d 49 54 5f 42 4c 4f 42 5f 4c 49 54 45 52 41  OMIT_BLOB_LITERA
15270 4c 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  L.  Tcl_SetVar2(
15280 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
15290 6f 70 74 69 6f 6e 73 22 2c 20 22 62 6c 6f 62 6c  options", "blobl
152a0 69 74 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  it", "0", TCL_GL
152b0 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
152c0 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
152d0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
152e0 6f 70 74 69 6f 6e 73 22 2c 20 22 62 6c 6f 62 6c  options", "blobl
152f0 69 74 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  it", "1", TCL_GL
15300 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
15310 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
15320 45 5f 4f 4d 49 54 5f 43 41 53 54 0a 20 20 54 63  E_OMIT_CAST.  Tc
15330 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
15340 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
15350 73 22 2c 20 22 63 61 73 74 22 2c 20 22 30 22 2c  s", "cast", "0",
15360 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
15370 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
15380 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
15390 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
153a0 20 22 63 61 73 74 22 2c 20 22 31 22 2c 20 54 43   "cast", "1", TC
153b0 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
153c0 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
153d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 48 45 43 4b  QLITE_OMIT_CHECK
153e0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
153f0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
15400 70 74 69 6f 6e 73 22 2c 20 22 63 68 65 63 6b 22  ptions", "check"
15410 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
15420 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
15430 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
15440 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
15450 69 6f 6e 73 22 2c 20 22 63 68 65 63 6b 22 2c 20  ions", "check", 
15460 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
15470 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
15480 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
15490 54 5f 43 4f 4d 50 4c 45 54 45 0a 20 20 54 63 6c  T_COMPLETE.  Tcl
154a0 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
154b0 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
154c0 22 2c 20 22 63 6f 6d 70 6c 65 74 65 22 2c 20 22  ", "complete", "
154d0 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
154e0 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
154f0 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
15500 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
15510 73 22 2c 20 22 63 6f 6d 70 6c 65 74 65 22 2c 20  s", "complete", 
15520 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
15530 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
15540 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
15550 54 5f 43 4f 4d 50 4f 55 4e 44 5f 53 45 4c 45 43  T_COMPOUND_SELEC
15560 54 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  T.  Tcl_SetVar2(
15570 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
15580 6f 70 74 69 6f 6e 73 22 2c 20 22 63 6f 6d 70 6f  options", "compo
15590 75 6e 64 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  und", "0", TCL_G
155a0 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
155b0 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
155c0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
155d0 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63 6f 6d 70  _options", "comp
155e0 6f 75 6e 64 22 2c 20 22 31 22 2c 20 54 43 4c 5f  ound", "1", TCL_
155f0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
15600 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
15610 49 54 45 5f 4f 4d 49 54 5f 43 4f 4e 46 4c 49 43  ITE_OMIT_CONFLIC
15620 54 5f 43 4c 41 55 53 45 0a 20 20 54 63 6c 5f 53  T_CLAUSE.  Tcl_S
15630 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
15640 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
15650 20 22 63 6f 6e 66 6c 69 63 74 22 2c 20 22 30 22   "conflict", "0"
15660 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
15670 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
15680 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
15690 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
156a0 2c 20 22 63 6f 6e 66 6c 69 63 74 22 2c 20 22 31  , "conflict", "1
156b0 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
156c0 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
156d0 20 4f 53 5f 55 4e 49 58 0a 20 20 54 63 6c 5f 53   OS_UNIX.  Tcl_S
156e0 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
156f0 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
15700 20 22 63 72 61 73 68 74 65 73 74 22 2c 20 22 31   "crashtest", "1
15710 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
15720 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
15730 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
15740 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
15750 22 2c 20 22 63 72 61 73 68 74 65 73 74 22 2c 20  ", "crashtest", 
15760 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
15770 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
15780 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
15790 54 5f 44 41 54 45 54 49 4d 45 5f 46 55 4e 43 53  T_DATETIME_FUNCS
157a0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
157b0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
157c0 70 74 69 6f 6e 73 22 2c 20 22 64 61 74 65 74 69  ptions", "dateti
157d0 6d 65 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  me", "0", TCL_GL
157e0 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
157f0 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
15800 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
15810 6f 70 74 69 6f 6e 73 22 2c 20 22 64 61 74 65 74  options", "datet
15820 69 6d 65 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47  ime", "1", TCL_G
15830 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
15840 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
15850 54 45 5f 4f 4d 49 54 5f 44 49 53 4b 49 4f 0a 20  TE_OMIT_DISKIO. 
15860 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
15870 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
15880 69 6f 6e 73 22 2c 20 22 64 69 73 6b 69 6f 22 2c  ions", "diskio",
15890 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
158a0 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
158b0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
158c0 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
158d0 6f 6e 73 22 2c 20 22 64 69 73 6b 69 6f 22 2c 20  ons", "diskio", 
158e0 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
158f0 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
15900 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
15910 54 5f 45 58 50 4c 41 49 4e 0a 20 20 54 63 6c 5f  T_EXPLAIN.  Tcl_
15920 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
15930 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
15940 2c 20 22 65 78 70 6c 61 69 6e 22 2c 20 22 30 22  , "explain", "0"
15950 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
15960 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
15970 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
15980 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
15990 2c 20 22 65 78 70 6c 61 69 6e 22 2c 20 22 31 22  , "explain", "1"
159a0 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
159b0 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  Y);.#endif..#ifd
159c0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
159d0 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20  LOATING_POINT.  
159e0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
159f0 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
15a00 6f 6e 73 22 2c 20 22 66 6c 6f 61 74 69 6e 67 70  ons", "floatingp
15a10 6f 69 6e 74 22 2c 20 22 30 22 2c 20 54 43 4c 5f  oint", "0", TCL_
15a20 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
15a30 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
15a40 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
15a50 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 66 6c 6f  e_options", "flo
15a60 61 74 69 6e 67 70 6f 69 6e 74 22 2c 20 22 31 22  atingpoint", "1"
15a70 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
15a80 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  Y);.#endif..#ifd
15a90 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
15aa0 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 54 63 6c  OREIGN_KEY.  Tcl
15ab0 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
15ac0 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
15ad0 22 2c 20 22 66 6f 72 65 69 67 6e 6b 65 79 22 2c  ", "foreignkey",
15ae0 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
15af0 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
15b00 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
15b10 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
15b20 6f 6e 73 22 2c 20 22 66 6f 72 65 69 67 6e 6b 65  ons", "foreignke
15b30 79 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  y", "1", TCL_GLO
15b40 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
15b50 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
15b60 5f 4f 4d 49 54 5f 47 4c 4f 42 41 4c 52 45 43 4f  _OMIT_GLOBALRECO
15b70 56 45 52 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  VER.  Tcl_SetVar
15b80 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
15b90 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 67 6c 6f  e_options", "glo
15ba0 62 61 6c 72 65 63 6f 76 65 72 22 2c 20 22 30 22  balrecover", "0"
15bb0 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
15bc0 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
15bd0 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
15be0 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
15bf0 2c 20 22 67 6c 6f 62 61 6c 72 65 63 6f 76 65 72  , "globalrecover
15c00 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
15c10 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
15c20 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
15c30 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43  OMIT_INTEGRITY_C
15c40 48 45 43 4b 0a 20 20 54 63 6c 5f 53 65 74 56 61  HECK.  Tcl_SetVa
15c50 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
15c60 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 69 6e  te_options", "in
15c70 74 65 67 72 69 74 79 63 6b 22 2c 20 22 30 22 2c  tegrityck", "0",
15c80 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
15c90 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
15ca0 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
15cb0 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
15cc0 20 22 69 6e 74 65 67 72 69 74 79 63 6b 22 2c 20   "integrityck", 
15cd0 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
15ce0 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
15cf0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
15d00 54 5f 4c 49 4b 45 5f 4f 50 54 49 4d 49 5a 41 54  T_LIKE_OPTIMIZAT
15d10 49 4f 4e 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  ION.  Tcl_SetVar
15d20 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
15d30 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 6c 69 6b  e_options", "lik
15d40 65 5f 6f 70 74 22 2c 20 22 30 22 2c 20 54 43 4c  e_opt", "0", TCL
15d50 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
15d60 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
15d70 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
15d80 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 6c 69  te_options", "li
15d90 6b 65 5f 6f 70 74 22 2c 20 22 31 22 2c 20 54 43  ke_opt", "1", TC
15da0 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
15db0 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
15dc0 51 4c 49 54 45 5f 4f 4d 49 54 5f 4d 45 4d 4f 52  QLITE_OMIT_MEMOR
15dd0 59 44 42 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  YDB.  Tcl_SetVar
15de0 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
15df0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 6d 65 6d  e_options", "mem
15e00 6f 72 79 64 62 22 2c 20 22 30 22 2c 20 54 43 4c  orydb", "0", TCL
15e10 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
15e20 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
15e30 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
15e40 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 6d 65  te_options", "me
15e50 6d 6f 72 79 64 62 22 2c 20 22 31 22 2c 20 54 43  morydb", "1", TC
15e60 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
15e70 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
15e80 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
15e90 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 0a 20  ORY_MANAGEMENT. 
15ea0 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
15eb0 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
15ec0 69 6f 6e 73 22 2c 20 22 6d 65 6d 6f 72 79 6d 61  ions", "memoryma
15ed0 6e 61 67 65 22 2c 20 22 31 22 2c 20 54 43 4c 5f  nage", "1", TCL_
15ee0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
15ef0 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
15f00 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
15f10 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 6d 65 6d  e_options", "mem
15f20 6f 72 79 6d 61 6e 61 67 65 22 2c 20 22 30 22 2c  orymanage", "0",
15f30 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
15f40 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
15f50 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4f 52  f SQLITE_OMIT_OR
15f60 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 0a 20 20  _OPTIMIZATION.  
15f70 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
15f80 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
15f90 6f 6e 73 22 2c 20 22 6f 72 5f 6f 70 74 22 2c 20  ons", "or_opt", 
15fa0 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
15fb0 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
15fc0 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
15fd0 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
15fe0 6e 73 22 2c 20 22 6f 72 5f 6f 70 74 22 2c 20 22  ns", "or_opt", "
15ff0 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
16000 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
16010 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
16020 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 20  _PAGER_PRAGMAS. 
16030 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
16040 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
16050 69 6f 6e 73 22 2c 20 22 70 61 67 65 72 5f 70 72  ions", "pager_pr
16060 61 67 6d 61 73 22 2c 20 22 30 22 2c 20 54 43 4c  agmas", "0", TCL
16070 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
16080 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
16090 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
160a0 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 70 61  te_options", "pa
160b0 67 65 72 5f 70 72 61 67 6d 61 73 22 2c 20 22 31  ger_pragmas", "1
160c0 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
160d0 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
160e0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
160f0 50 41 52 53 45 52 0a 20 20 54 63 6c 5f 53 65 74  PARSER.  Tcl_Set
16100 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
16110 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
16120 70 61 72 73 65 72 22 2c 20 22 30 22 2c 20 54 43  parser", "0", TC
16130 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
16140 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
16150 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
16160 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 70  ite_options", "p
16170 61 72 73 65 72 22 2c 20 22 31 22 2c 20 54 43 4c  arser", "1", TCL
16180 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
16190 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e  endif..#if defin
161a0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ed(SQLITE_OMIT_P
161b0 52 41 47 4d 41 29 20 7c 7c 20 64 65 66 69 6e 65  RAGMA) || define
161c0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  d(SQLITE_OMIT_FL
161d0 41 47 5f 50 52 41 47 4d 41 53 29 0a 20 20 54 63  AG_PRAGMAS).  Tc
161e0 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
161f0 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
16200 73 22 2c 20 22 70 72 61 67 6d 61 22 2c 20 22 30  s", "pragma", "0
16210 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
16220 4c 59 29 3b 0a 20 20 54 63 6c 5f 53 65 74 56 61  LY);.  Tcl_SetVa
16230 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
16240 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 69 6e  te_options", "in
16250 74 65 67 72 69 74 79 63 6b 22 2c 20 22 30 22 2c  tegrityck", "0",
16260 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
16270 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
16280 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
16290 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
162a0 20 22 70 72 61 67 6d 61 22 2c 20 22 31 22 2c 20   "pragma", "1", 
162b0 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
162c0 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
162d0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
162e0 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
162f0 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
16300 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
16310 69 6f 6e 73 22 2c 20 22 70 72 6f 67 72 65 73 73  ions", "progress
16320 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
16330 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
16340 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
16350 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
16360 74 69 6f 6e 73 22 2c 20 22 70 72 6f 67 72 65 73  tions", "progres
16370 73 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  s", "1", TCL_GLO
16380 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
16390 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
163a0 5f 45 4e 41 42 4c 45 5f 52 45 44 45 46 5f 49 4f  _ENABLE_REDEF_IO
163b0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
163c0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
163d0 70 74 69 6f 6e 73 22 2c 20 22 72 65 64 65 66 69  ptions", "redefi
163e0 6f 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  o", "1", TCL_GLO
163f0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
16400 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
16410 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
16420 70 74 69 6f 6e 73 22 2c 20 22 72 65 64 65 66 69  ptions", "redefi
16430 6f 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  o", "0", TCL_GLO
16440 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
16450 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
16460 5f 4f 4d 49 54 5f 52 45 49 4e 44 45 58 0a 20 20  _OMIT_REINDEX.  
16470 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
16480 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
16490 6f 6e 73 22 2c 20 22 72 65 69 6e 64 65 78 22 2c  ons", "reindex",
164a0 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
164b0 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
164c0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
164d0 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
164e0 6f 6e 73 22 2c 20 22 72 65 69 6e 64 65 78 22 2c  ons", "reindex",
164f0 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
16500 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
16510 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
16520 49 54 5f 53 43 48 45 4d 41 5f 50 52 41 47 4d 41  IT_SCHEMA_PRAGMA
16530 53 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  S.  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 73 63 68 65 6d  options", "schem
16560 61 5f 70 72 61 67 6d 61 73 22 2c 20 22 30 22 2c  a_pragmas", "0",
16570 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
16580 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
16590 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
165a0 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
165b0 20 22 73 63 68 65 6d 61 5f 70 72 61 67 6d 61 73   "schema_pragmas
165c0 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
165d0 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
165e0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
165f0 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53  OMIT_SCHEMA_VERS
16600 49 4f 4e 5f 50 52 41 47 4d 41 53 0a 20 20 54 63  ION_PRAGMAS.  Tc
16610 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
16620 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
16630 73 22 2c 20 22 73 63 68 65 6d 61 5f 76 65 72 73  s", "schema_vers
16640 69 6f 6e 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  ion", "0", TCL_G
16650 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
16660 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
16670 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
16680 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 73 63 68 65  _options", "sche
16690 6d 61 5f 76 65 72 73 69 6f 6e 22 2c 20 22 31 22  ma_version", "1"
166a0 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
166b0 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  Y);.#endif..#ifd
166c0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
166d0 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 54 63  HARED_CACHE.  Tc
166e0 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
166f0 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
16700 73 22 2c 20 22 73 68 61 72 65 64 5f 63 61 63 68  s", "shared_cach
16710 65 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  e", "0", TCL_GLO
16720 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
16730 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
16740 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
16750 70 74 69 6f 6e 73 22 2c 20 22 73 68 61 72 65 64  ptions", "shared
16760 5f 63 61 63 68 65 22 2c 20 22 31 22 2c 20 54 43  _cache", "1", TC
16770 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
16780 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
16790 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55  QLITE_OMIT_SUBQU
167a0 45 52 59 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  ERY.  Tcl_SetVar
167b0 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
167c0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 73 75 62  e_options", "sub
167d0 71 75 65 72 79 22 2c 20 22 30 22 2c 20 54 43 4c  query", "0", TCL
167e0 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
167f0 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
16800 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
16810 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 73 75  te_options", "su
16820 62 71 75 65 72 79 22 2c 20 22 31 22 2c 20 54 43  bquery", "1", TC
16830 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
16840 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
16850 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 43 4c 5f 56  QLITE_OMIT_TCL_V
16860 41 52 49 41 42 4c 45 0a 20 20 54 63 6c 5f 53 65  ARIABLE.  Tcl_Se
16870 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
16880 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
16890 22 74 63 6c 76 61 72 22 2c 20 22 30 22 2c 20 54  "tclvar", "0", T
168a0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
168b0 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
168c0 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
168d0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
168e0 74 63 6c 76 61 72 22 2c 20 22 31 22 2c 20 54 43  tclvar", "1", TC
168f0 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
16900 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69  #endif..#if defi
16910 6e 65 64 28 54 48 52 45 41 44 53 41 46 45 29 20  ned(THREADSAFE) 
16920 26 26 20 54 48 52 45 41 44 53 41 46 45 0a 20 20  && THREADSAFE.  
16930 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
16940 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
16950 6f 6e 73 22 2c 20 22 74 68 72 65 61 64 73 61 66  ons", "threadsaf
16960 65 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  e", "1", TCL_GLO
16970 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
16980 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
16990 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
169a0 70 74 69 6f 6e 73 22 2c 20 22 74 68 72 65 61 64  ptions", "thread
169b0 73 61 66 65 22 2c 20 22 30 22 2c 20 54 43 4c 5f  safe", "0", TCL_
169c0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
169d0 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
169e0 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 20  ITE_OMIT_TRACE. 
169f0 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
16a00 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
16a10 69 6f 6e 73 22 2c 20 22 74 72 61 63 65 22 2c 20  ions", "trace", 
16a20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
16a30 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
16a40 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
16a50 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
16a60 6e 73 22 2c 20 22 74 72 61 63 65 22 2c 20 22 31  ns", "trace", "1
16a70 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
16a80 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
16a90 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
16aa0 54 52 49 47 47 45 52 0a 20 20 54 63 6c 5f 53 65  TRIGGER.  Tcl_Se
16ab0 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
16ac0 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
16ad0 22 74 72 69 67 67 65 72 22 2c 20 22 30 22 2c 20  "trigger", "0", 
16ae0 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
16af0 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
16b00 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
16b10 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
16b20 22 74 72 69 67 67 65 72 22 2c 20 22 31 22 2c 20  "trigger", "1", 
16b30 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
16b40 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
16b50 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d   SQLITE_OMIT_TEM
16b60 50 44 42 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  PDB.  Tcl_SetVar
16b70 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
16b80 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 74 65 6d  e_options", "tem
16b90 70 64 62 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  pdb", "0", TCL_G
16ba0 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
16bb0 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
16bc0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
16bd0 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 74 65 6d 70  _options", "temp
16be0 64 62 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  db", "1", TCL_GL
16bf0 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
16c00 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
16c10 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 54  E_OMIT_UTF16.  T
16c20 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
16c30 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
16c40 6e 73 22 2c 20 22 75 74 66 31 36 22 2c 20 22 30  ns", "utf16", "0
16c50 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
16c60 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
16c70 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
16c80 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
16c90 22 2c 20 22 75 74 66 31 36 22 2c 20 22 31 22 2c  ", "utf16", "1",
16ca0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
16cb0 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
16cc0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41  f SQLITE_OMIT_VA
16cd0 43 55 55 4d 0a 20 20 54 63 6c 5f 53 65 74 56 61  CUUM.  Tcl_SetVa
16ce0 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
16cf0 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 76 61  te_options", "va
16d00 63 75 75 6d 22 2c 20 22 30 22 2c 20 54 43 4c 5f  cuum", "0", TCL_
16d10 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
16d20 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
16d30 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
16d40 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 76 61 63  e_options", "vac
16d50 75 75 6d 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47  uum", "1", TCL_G
16d60 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
16d70 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
16d80 54 45 5f 4f 4d 49 54 5f 56 49 45 57 0a 20 20 54  TE_OMIT_VIEW.  T
16d90 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
16da0 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
16db0 6e 73 22 2c 20 22 76 69 65 77 22 2c 20 22 30 22  ns", "view", "0"
16dc0 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
16dd0 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
16de0 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
16df0 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
16e00 2c 20 22 76 69 65 77 22 2c 20 22 31 22 2c 20 54  , "view", "1", T
16e10 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
16e20 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a  .#endif.}../*.**
16e30 20 52 65 67 69 73 74 65 72 20 63 6f 6d 6d 61 6e   Register comman
16e40 64 73 20 77 69 74 68 20 74 68 65 20 54 43 4c 20  ds with the TCL 
16e50 69 6e 74 65 72 70 72 65 74 65 72 2e 0a 2a 2f 0a  interpreter..*/.
16e60 69 6e 74 20 53 71 6c 69 74 65 74 65 73 74 31 5f  int Sqlitetest1_
16e70 49 6e 69 74 28 54 63 6c 5f 49 6e 74 65 72 70 20  Init(Tcl_Interp 
16e80 2a 69 6e 74 65 72 70 29 7b 0a 20 20 65 78 74 65  *interp){.  exte
16e90 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 73  rn int sqlite3_s
16ea0 65 61 72 63 68 5f 63 6f 75 6e 74 3b 0a 20 20 65  earch_count;.  e
16eb0 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
16ec0 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  3_interrupt_coun
16ed0 74 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20  t;.  extern int 
16ee0 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 66 69 6c  sqlite3_open_fil
16ef0 65 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72  e_count;.  exter
16f00 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f  n int sqlite3_so
16f10 72 74 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65  rt_count;.  exte
16f20 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 63  rn int sqlite3_c
16f30 75 72 72 65 6e 74 5f 74 69 6d 65 3b 0a 20 20 73  urrent_time;.  s
16f40 74 61 74 69 63 20 73 74 72 75 63 74 20 7b 0a 20  tatic struct {. 
16f50 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
16f60 0a 20 20 20 20 20 54 63 6c 5f 43 6d 64 50 72 6f  .     Tcl_CmdPro
16f70 63 20 2a 78 50 72 6f 63 3b 0a 20 20 7d 20 61 43  c *xProc;.  } aC
16f80 6d 64 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 7b 20  md[] = {.     { 
16f90 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  "sqlite3_mprintf
16fa0 5f 69 6e 74 22 2c 20 20 20 20 20 20 20 20 20 20  _int",          
16fb0 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73   (Tcl_CmdProc*)s
16fc0 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69  qlite3_mprintf_i
16fd0 6e 74 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20  nt    },.     { 
16fe0 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  "sqlite3_mprintf
16ff0 5f 69 6e 74 36 34 22 2c 20 20 20 20 20 20 20 20  _int64",        
17000 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73   (Tcl_CmdProc*)s
17010 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69  qlite3_mprintf_i
17020 6e 74 36 34 20 20 7d 2c 0a 20 20 20 20 20 7b 20  nt64  },.     { 
17030 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  "sqlite3_mprintf
17040 5f 73 74 72 22 2c 20 20 20 20 20 20 20 20 20 20  _str",          
17050 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73   (Tcl_CmdProc*)s
17060 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73  qlite3_mprintf_s
17070 74 72 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20  tr    },.     { 
17080 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  "sqlite3_mprintf
17090 5f 73 74 72 6f 6e 6c 79 22 2c 20 20 20 20 20 20  _stronly",      
170a0 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73   (Tcl_CmdProc*)s
170b0 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73  qlite3_mprintf_s
170c0 74 72 6f 6e 6c 79 7d 2c 0a 20 20 20 20 20 7b 20  tronly},.     { 
170d0 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  "sqlite3_mprintf
170e0 5f 64 6f 75 62 6c 65 22 2c 20 20 20 20 20 20 20  _double",       
170f0 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73   (Tcl_CmdProc*)s
17100 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 64  qlite3_mprintf_d
17110 6f 75 62 6c 65 20 7d 2c 0a 20 20 20 20 20 7b 20  ouble },.     { 
17120 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  "sqlite3_mprintf
17130 5f 73 63 61 6c 65 64 22 2c 20 20 20 20 20 20 20  _scaled",       
17140 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73   (Tcl_CmdProc*)s
17150 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73  qlite3_mprintf_s
17160 63 61 6c 65 64 20 7d 2c 0a 20 20 20 20 20 7b 20  caled },.     { 
17170 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  "sqlite3_mprintf
17180 5f 68 65 78 64 6f 75 62 6c 65 22 2c 20 20 20 28  _hexdouble",   (
17190 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c  Tcl_CmdProc*)sql
171a0 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 68 65 78  ite3_mprintf_hex
171b0 64 6f 75 62 6c 65 7d 2c 0a 20 20 20 20 20 7b 20  double},.     { 
171c0 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  "sqlite3_mprintf
171d0 5f 7a 5f 74 65 73 74 22 2c 20 20 20 20 20 20 20  _z_test",       
171e0 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74   (Tcl_CmdProc*)t
171f0 65 73 74 5f 6d 70 72 69 6e 74 66 5f 7a 20 20 20  est_mprintf_z   
17200 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22       },.     { "
17210 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73  sqlite3_last_ins
17220 65 72 74 5f 72 6f 77 69 64 22 2c 20 20 20 20 20  ert_rowid",     
17230 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65  (Tcl_CmdProc*)te
17240 73 74 5f 6c 61 73 74 5f 72 6f 77 69 64 20 20 20  st_last_rowid   
17250 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73      },.     { "s
17260 71 6c 69 74 65 33 5f 65 78 65 63 5f 70 72 69 6e  qlite3_exec_prin
17270 74 66 22 2c 20 20 20 20 20 20 20 20 20 20 20 28  tf",           (
17280 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73  Tcl_CmdProc*)tes
17290 74 5f 65 78 65 63 5f 70 72 69 6e 74 66 20 20 20  t_exec_printf   
172a0 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71     },.     { "sq
172b0 6c 69 74 65 33 5f 67 65 74 5f 74 61 62 6c 65 5f  lite3_get_table_
172c0 70 72 69 6e 74 66 22 2c 20 20 20 20 20 20 28 54  printf",      (T
172d0 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74  cl_CmdProc*)test
172e0 5f 67 65 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74  _get_table_print
172f0 66 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  f },.     { "sql
17300 69 74 65 33 5f 63 6c 6f 73 65 22 2c 20 20 20 20  ite3_close",    
17310 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63               (Tc
17320 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74  l_CmdProc*)sqlit
17330 65 5f 74 65 73 74 5f 63 6c 6f 73 65 20 20 20 20  e_test_close    
17340 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
17350 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
17360 69 6f 6e 22 2c 20 20 20 20 20 20 20 28 54 63 6c  ion",       (Tcl
17370 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 63  _CmdProc*)test_c
17380 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 20 20  reate_function  
17390 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
173a0 65 33 5f 63 72 65 61 74 65 5f 61 67 67 72 65 67  e3_create_aggreg
173b0 61 74 65 22 2c 20 20 20 20 20 20 28 54 63 6c 5f  ate",      (Tcl_
173c0 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 63 72  CmdProc*)test_cr
173d0 65 61 74 65 5f 61 67 67 72 65 67 61 74 65 20 7d  eate_aggregate }
173e0 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
173f0 5f 72 65 67 69 73 74 65 72 5f 74 65 73 74 5f 66  _register_test_f
17400 75 6e 63 74 69 6f 6e 22 2c 20 28 54 63 6c 5f 43  unction", (Tcl_C
17410 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 72 65 67  mdProc*)test_reg
17420 69 73 74 65 72 5f 66 75 6e 63 20 20 20 20 7d 2c  ister_func    },
17430 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 5f  .     { "sqlite_
17440 61 62 6f 72 74 22 2c 20 20 20 20 20 20 20 20 20  abort",         
17450 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d           (Tcl_Cm
17460 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 5f 61 62  dProc*)sqlite_ab
17470 6f 72 74 20 20 20 20 20 20 20 20 20 20 7d 2c 0a  ort          },.
17480 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45  #ifdef SQLITE_ME
17490 4d 44 45 42 55 47 0a 20 20 20 20 20 7b 20 22 73  MDEBUG.     { "s
174a0 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 66 61 69  qlite_malloc_fai
174b0 6c 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 28  l",            (
174c0 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c  Tcl_CmdProc*)sql
174d0 69 74 65 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 20  ite_malloc_fail 
174e0 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71     },.     { "sq
174f0 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 73 74 61 74  lite_malloc_stat
17500 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 28 54  ",            (T
17510 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69  cl_CmdProc*)sqli
17520 74 65 5f 6d 61 6c 6c 6f 63 5f 73 74 61 74 20 20  te_malloc_stat  
17530 20 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 20 20    },.#endif.    
17540 20 7b 20 22 73 71 6c 69 74 65 5f 62 69 6e 64 22   { "sqlite_bind"
17550 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
17560 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63      (Tcl_CmdProc
17570 2a 29 74 65 73 74 5f 62 69 6e 64 20 20 20 20 20  *)test_bind     
17580 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20          },.     
17590 7b 20 22 62 72 65 61 6b 70 6f 69 6e 74 22 2c 20  { "breakpoint", 
175a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175b0 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
175c0 29 74 65 73 74 5f 62 72 65 61 6b 70 6f 69 6e 74  )test_breakpoint
175d0 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b         },.     {
175e0 20 22 73 71 6c 69 74 65 33 5f 6b 65 79 22 2c 20   "sqlite3_key", 
175f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17600 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29    (Tcl_CmdProc*)
17610 74 65 73 74 5f 6b 65 79 20 20 20 20 20 20 20 20  test_key        
17620 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20        },.     { 
17630 22 73 71 6c 69 74 65 33 5f 72 65 6b 65 79 22 2c  "sqlite3_rekey",
17640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17650 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74   (Tcl_CmdProc*)t
17660 65 73 74 5f 72 65 6b 65 79 20 20 20 20 20 20 20  est_rekey       
17670 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22       },.     { "
17680 73 71 6c 69 74 65 5f 73 65 74 5f 6d 61 67 69 63  sqlite_set_magic
17690 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ",              
176a0 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71  (Tcl_CmdProc*)sq
176b0 6c 69 74 65 5f 73 65 74 5f 6d 61 67 69 63 20 20  lite_set_magic  
176c0 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73      },.     { "s
176d0 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
176e0 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 28  ",             (
176f0 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73  Tcl_CmdProc*)tes
17700 74 5f 69 6e 74 65 72 72 75 70 74 20 20 20 20 20  t_interrupt     
17710 20 20 20 7d 2c 0a 23 69 66 20 30 0a 20 20 20 20     },.#if 0.    
17720 20 7b 20 22 73 71 6c 69 74 65 33 5f 73 6c 65 65   { "sqlite3_slee
17730 70 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  p",             
17740 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63      (Tcl_CmdProc
17750 2a 29 74 65 73 74 5f 73 6c 65 65 70 20 20 20 20  *)test_sleep    
17760 20 20 20 20 20 20 20 20 7d 2c 0a 23 65 6e 64 69          },.#endi
17770 66 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  f.     { "sqlite
17780 5f 64 65 6c 65 74 65 5f 66 75 6e 63 74 69 6f 6e  _delete_function
17790 22 2c 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43  ",        (Tcl_C
177a0 6d 64 50 72 6f 63 2a 29 64 65 6c 65 74 65 5f 66  mdProc*)delete_f
177b0 75 6e 63 74 69 6f 6e 20 20 20 20 20 20 20 7d 2c  unction       },
177c0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 5f  .     { "sqlite_
177d0 64 65 6c 65 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e  delete_collation
177e0 22 2c 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d  ",       (Tcl_Cm
177f0 64 50 72 6f 63 2a 29 64 65 6c 65 74 65 5f 63 6f  dProc*)delete_co
17800 6c 6c 61 74 69 6f 6e 20 20 20 20 20 20 7d 2c 0a  llation      },.
17810 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
17820 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 22 2c  get_autocommit",
17830 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64          (Tcl_Cmd
17840 50 72 6f 63 2a 29 67 65 74 5f 61 75 74 6f 63 6f  Proc*)get_autoco
17850 6d 6d 69 74 20 20 20 20 20 20 20 20 7d 2c 0a 20  mmit        },. 
17860 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 73      { "sqlite3_s
17870 74 61 63 6b 5f 75 73 65 64 22 2c 20 20 20 20 20  tack_used",     
17880 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
17890 72 6f 63 2a 29 74 65 73 74 5f 73 74 61 63 6b 5f  roc*)test_stack_
178a0 75 73 65 64 20 20 20 20 20 20 20 7d 2c 0a 20 20  used       },.  
178b0 7d 3b 0a 20 20 73 74 61 74 69 63 20 73 74 72 75  };.  static stru
178c0 63 74 20 7b 0a 20 20 20 20 20 63 68 61 72 20 2a  ct {.     char *
178d0 7a 4e 61 6d 65 3b 0a 20 20 20 20 20 54 63 6c 5f  zName;.     Tcl_
178e0 4f 62 6a 43 6d 64 50 72 6f 63 20 2a 78 50 72 6f  ObjCmdProc *xPro
178f0 63 3b 0a 20 20 20 20 20 76 6f 69 64 20 2a 63 6c  c;.     void *cl
17900 69 65 6e 74 44 61 74 61 3b 0a 20 20 7d 20 61 4f  ientData;.  } aO
17910 62 6a 43 6d 64 5b 5d 20 3d 20 7b 0a 20 20 20 20  bjCmd[] = {.    
17920 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6e 6e   { "sqlite3_conn
17930 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 22 2c  ection_pointer",
17940 20 20 20 20 67 65 74 5f 73 71 6c 69 74 65 5f 70      get_sqlite_p
17950 6f 69 6e 74 65 72 2c 20 30 20 7d 2c 0a 20 20 20  ointer, 0 },.   
17960 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e    { "sqlite3_bin
17970 64 5f 69 6e 74 22 2c 20 20 20 20 20 20 20 20 20  d_int",         
17980 20 20 20 20 20 74 65 73 74 5f 62 69 6e 64 5f 69       test_bind_i
17990 6e 74 2c 20 20 20 20 20 20 30 20 7d 2c 0a 20 20  nt,      0 },.  
179a0 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69     { "sqlite3_bi
179b0 6e 64 5f 69 6e 74 36 34 22 2c 20 20 20 20 20 20  nd_int64",      
179c0 20 20 20 20 20 20 74 65 73 74 5f 62 69 6e 64 5f        test_bind_
179d0 69 6e 74 36 34 2c 20 20 20 20 30 20 7d 2c 0a 20  int64,    0 },. 
179e0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62      { "sqlite3_b
179f0 69 6e 64 5f 64 6f 75 62 6c 65 22 2c 20 20 20 20  ind_double",    
17a00 20 20 20 20 20 20 20 74 65 73 74 5f 62 69 6e 64         test_bind
17a10 5f 64 6f 75 62 6c 65 2c 20 20 20 30 20 7d 2c 0a  _double,   0 },.
17a20 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
17a30 62 69 6e 64 5f 6e 75 6c 6c 22 2c 20 20 20 20 20  bind_null",     
17a40 20 20 20 20 20 20 20 20 74 65 73 74 5f 62 69 6e          test_bin
17a50 64 5f 6e 75 6c 6c 20 20 20 20 20 2c 30 20 7d 2c  d_null     ,0 },
17a60 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
17a70 5f 62 69 6e 64 5f 74 65 78 74 22 2c 20 20 20 20  _bind_text",    
17a80 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 62 69           test_bi
17a90 6e 64 5f 74 65 78 74 20 20 20 20 20 2c 30 20 7d  nd_text     ,0 }
17aa0 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
17ab0 33 5f 62 69 6e 64 5f 74 65 78 74 31 36 22 2c 20  3_bind_text16", 
17ac0 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 62            test_b
17ad0 69 6e 64 5f 74 65 78 74 31 36 20 20 20 2c 30 20  ind_text16   ,0 
17ae0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
17af0 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 22 2c 20 20  e3_bind_blob",  
17b00 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f             test_
17b10 62 69 6e 64 5f 62 6c 6f 62 20 20 20 20 20 2c 30  bind_blob     ,0
17b20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
17b30 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
17b40 65 72 5f 63 6f 75 6e 74 22 2c 20 20 74 65 73 74  er_count",  test
17b50 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
17b60 63 6f 75 6e 74 2c 20 30 7d 2c 0a 20 20 20 20 20  count, 0},.     
17b70 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  { "sqlite3_bind_
17b80 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 22 2c  parameter_name",
17b90 20 20 20 74 65 73 74 5f 62 69 6e 64 5f 70 61 72     test_bind_par
17ba0 61 6d 65 74 65 72 5f 6e 61 6d 65 2c 20 20 30 7d  ameter_name,  0}
17bb0 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
17bc0 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
17bd0 5f 69 6e 64 65 78 22 2c 20 20 74 65 73 74 5f 62  _index",  test_b
17be0 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e  ind_parameter_in
17bf0 64 65 78 2c 20 30 7d 2c 0a 23 69 66 20 30 0a 20  dex, 0},.#if 0. 
17c00 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63      { "sqlite3_c
17c10 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73 22 2c 20  lear_bindings", 
17c20 20 20 20 20 20 20 20 74 65 73 74 5f 63 6c 65 61         test_clea
17c30 72 5f 62 69 6e 64 69 6e 67 73 2c 20 30 7d 2c 0a  r_bindings, 0},.
17c40 23 65 6e 64 69 66 0a 20 20 20 20 20 7b 20 22 73  #endif.     { "s
17c50 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 22 2c  qlite3_errcode",
17c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
17c70 65 73 74 5f 65 72 72 63 6f 64 65 20 20 20 20 20  est_errcode     
17c80 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22    ,0 },.     { "
17c90 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 22 2c  sqlite3_errmsg",
17ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cb0 74 65 73 74 5f 65 72 72 6d 73 67 20 20 20 20 20  test_errmsg     
17cc0 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20     ,0 },.     { 
17cd0 22 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31  "sqlite3_errmsg1
17ce0 36 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  6",             
17cf0 20 74 65 73 74 5f 65 72 72 6d 73 67 31 36 20 20   test_errmsg16  
17d00 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b      ,0 },.     {
17d10 20 22 73 71 6c 69 74 65 33 5f 6f 70 65 6e 22 2c   "sqlite3_open",
17d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d30 20 20 74 65 73 74 5f 6f 70 65 6e 20 20 20 20 20    test_open     
17d40 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20       ,0 },.     
17d50 7b 20 22 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31  { "sqlite3_open1
17d60 36 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  6",             
17d70 20 20 20 74 65 73 74 5f 6f 70 65 6e 31 36 20 20     test_open16  
17d80 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20        ,0 },.    
17d90 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6d 70   { "sqlite3_comp
17da0 6c 65 74 65 31 36 22 2c 20 20 20 20 20 20 20 20  lete16",        
17db0 20 20 20 20 74 65 73 74 5f 63 6f 6d 70 6c 65 74      test_complet
17dc0 65 31 36 20 20 20 20 2c 30 20 7d 2c 0a 0a 20 20  e16    ,0 },..  
17dd0 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 70 72     { "sqlite3_pr
17de0 65 70 61 72 65 22 2c 20 20 20 20 20 20 20 20 20  epare",         
17df0 20 20 20 20 20 20 74 65 73 74 5f 70 72 65 70 61        test_prepa
17e00 72 65 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20  re       ,0 },. 
17e10 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 70      { "sqlite3_p
17e20 72 65 70 61 72 65 31 36 22 2c 20 20 20 20 20 20  repare16",      
17e30 20 20 20 20 20 20 20 74 65 73 74 5f 70 72 65 70         test_prep
17e40 61 72 65 31 36 20 20 20 20 20 2c 30 20 7d 2c 0a  are16     ,0 },.
17e50 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
17e60 66 69 6e 61 6c 69 7a 65 22 2c 20 20 20 20 20 20  finalize",      
17e70 20 20 20 20 20 20 20 20 74 65 73 74 5f 66 69 6e          test_fin
17e80 61 6c 69 7a 65 20 20 20 20 20 20 2c 30 20 7d 2c  alize      ,0 },
17e90 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
17ea0 5f 72 65 73 65 74 22 2c 20 20 20 20 20 20 20 20  _reset",        
17eb0 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 72 65           test_re
17ec0 73 65 74 20 20 20 20 20 20 20 20 20 2c 30 20 7d  set         ,0 }
17ed0 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
17ee0 33 5f 65 78 70 69 72 65 64 22 2c 20 20 20 20 20  3_expired",     
17ef0 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 65            test_e
17f00 78 70 69 72 65 64 20 20 20 20 20 20 20 2c 30 20  xpired       ,0 
17f10 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
17f20 65 33 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e 64  e3_transfer_bind
17f30 69 6e 67 73 22 2c 20 20 20 20 20 74 65 73 74 5f  ings",     test_
17f40 74 72 61 6e 73 66 65 72 5f 62 69 6e 64 20 2c 30  transfer_bind ,0
17f50 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
17f60 74 65 33 5f 63 68 61 6e 67 65 73 22 2c 20 20 20  te3_changes",   
17f70 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
17f80 5f 63 68 61 6e 67 65 73 20 20 20 20 20 20 20 2c  _changes       ,
17f90 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
17fa0 69 74 65 33 5f 73 74 65 70 22 2c 20 20 20 20 20  ite3_step",     
17fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73               tes
17fc0 74 5f 73 74 65 70 20 20 20 20 20 20 20 20 20 20  t_step          
17fd0 2c 30 20 7d 2c 0a 0a 20 20 20 20 20 7b 20 22 73  ,0 },..     { "s
17fe0 71 6c 69 74 65 33 5f 72 65 6c 65 61 73 65 5f 6d  qlite3_release_m
17ff0 65 6d 6f 72 79 22 2c 20 20 20 20 20 20 20 20 74  emory",        t
18000 65 73 74 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f  est_release_memo
18010 72 79 2c 20 20 20 20 20 30 7d 2c 0a 20 20 20 20  ry,     0},.    
18020 20 7b 20 22 73 71 6c 69 74 65 33 5f 73 6f 66 74   { "sqlite3_soft
18030 5f 68 65 61 70 5f 6c 69 6d 69 74 22 2c 20 20 20  _heap_limit",   
18040 20 20 20 20 74 65 73 74 5f 73 6f 66 74 5f 68 65      test_soft_he
18050 61 70 5f 6c 69 6d 69 74 2c 20 20 20 20 30 7d 2c  ap_limit,    0},
18060 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
18070 5f 63 6c 65 61 72 5f 74 73 64 5f 6d 65 6d 64 65  _clear_tsd_memde
18080 62 75 67 22 2c 20 20 20 20 74 65 73 74 5f 63 6c  bug",    test_cl
18090 65 61 72 5f 74 73 64 5f 6d 65 6d 64 65 62 75 67  ear_tsd_memdebug
180a0 2c 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  , 0},.     { "sq
180b0 6c 69 74 65 33 5f 74 73 64 5f 72 65 6c 65 61 73  lite3_tsd_releas
180c0 65 22 2c 20 20 20 20 20 20 20 20 20 20 20 74 65  e",           te
180d0 73 74 5f 74 73 64 5f 72 65 6c 65 61 73 65 2c 20  st_tsd_release, 
180e0 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20         0},.     
180f0 7b 20 22 73 71 6c 69 74 65 33 5f 74 68 72 65 61  { "sqlite3_threa
18100 64 5f 63 6c 65 61 6e 75 70 22 2c 20 20 20 20 20  d_cleanup",     
18110 20 20 20 74 65 73 74 5f 74 68 72 65 61 64 5f 63     test_thread_c
18120 6c 65 61 6e 75 70 2c 20 20 20 20 20 30 7d 2c 0a  leanup,     0},.
18130 0a 20 20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33  .     /* sqlite3
18140 5f 63 6f 6c 75 6d 6e 5f 2a 28 29 20 41 50 49 20  _column_*() API 
18150 2a 2f 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  */.     { "sqlit
18160 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 22  e3_column_count"
18170 2c 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f  ,          test_
18180 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 20 2c 30  column_count  ,0
18190 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
181a0 74 65 33 5f 64 61 74 61 5f 63 6f 75 6e 74 22 2c  te3_data_count",
181b0 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
181c0 5f 64 61 74 61 5f 63 6f 75 6e 74 20 20 20 20 2c  _data_count    ,
181d0 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
181e0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65  ite3_column_type
181f0 22 2c 20 20 20 20 20 20 20 20 20 20 20 74 65 73  ",           tes
18200 74 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 20 20 20  t_column_type   
18210 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  ,0 },.     { "sq
18220 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f  lite3_column_blo
18230 62 22 2c 20 20 20 20 20 20 20 20 20 20 20 74 65  b",           te
18240 73 74 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 20 20  st_column_blob  
18250 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73   ,0 },.     { "s
18260 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f  qlite3_column_do
18270 75 62 6c 65 22 2c 20 20 20 20 20 20 20 20 20 74  uble",         t
18280 65 73 74 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c  est_column_doubl
18290 65 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22  e ,0 },.     { "
182a0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
182b0 6e 74 36 34 22 2c 20 20 20 20 20 20 20 20 20 20  nt64",          
182c0 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36  test_column_int6
182d0 34 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20  4  ,0 },.     { 
182e0 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  "sqlite3_column_
182f0 74 65 78 74 22 2c 20 20 20 20 20 20 20 74 65 73  text",       tes
18300 74 5f 73 74 6d 74 5f 75 74 66 38 2c 20 20 73 71  t_stmt_utf8,  sq
18310 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
18320 74 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b  t      },.     {
18330 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   "sqlite3_column
18340 5f 64 65 63 6c 74 79 70 65 22 2c 20 20 20 74 65  _decltype",   te
18350 73 74 5f 73 74 6d 74 5f 75 74 66 38 2c 20 20 73  st_stmt_utf8,  s
18360 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65  qlite3_column_de
18370 63 6c 74 79 70 65 20 20 7d 2c 0a 20 20 20 20 20  cltype  },.     
18380 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  { "sqlite3_colum
18390 6e 5f 6e 61 6d 65 22 2c 20 20 20 20 20 20 20 74  n_name",       t
183a0 65 73 74 5f 73 74 6d 74 5f 75 74 66 38 2c 20 20  est_stmt_utf8,  
183b0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e  sqlite3_column_n
183c0 61 6d 65 20 20 20 20 20 20 7d 2c 0a 20 20 20 20  ame      },.    
183d0 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75   { "sqlite3_colu
183e0 6d 6e 5f 69 6e 74 22 2c 20 20 20 20 20 20 20 20  mn_int",        
183f0 74 65 73 74 5f 73 74 6d 74 5f 69 6e 74 2c 20 20  test_stmt_int,  
18400 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
18410 69 6e 74 20 20 20 20 20 20 20 7d 2c 0a 20 20 20  int       },.   
18420 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c    { "sqlite3_col
18430 75 6d 6e 5f 62 79 74 65 73 22 2c 20 20 20 20 20  umn_bytes",     
18440 20 74 65 73 74 5f 73 74 6d 74 5f 69 6e 74 2c 20   test_stmt_int, 
18450 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e    sqlite3_column
18460 5f 62 79 74 65 73 20 20 20 20 20 7d 2c 0a 23 69  _bytes     },.#i
18470 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
18480 54 5f 55 54 46 31 36 0a 20 20 20 20 20 7b 20 22  T_UTF16.     { "
18490 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62  sqlite3_column_b
184a0 79 74 65 73 31 36 22 2c 20 20 20 20 74 65 73 74  ytes16",    test
184b0 5f 73 74 6d 74 5f 69 6e 74 2c 20 20 20 73 71 6c  _stmt_int,   sql
184c0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65  ite3_column_byte
184d0 73 31 36 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20  s16   },.     { 
184e0 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  "sqlite3_column_
184f0 74 65 78 74 31 36 22 2c 20 20 20 20 20 74 65 73  text16",     tes
18500 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c 20 73 71  t_stmt_utf16, sq
18510 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
18520 74 31 36 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b  t16    },.     {
18530 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   "sqlite3_column
18540 5f 64 65 63 6c 74 79 70 65 31 36 22 2c 20 74 65  _decltype16", te
18550 73 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c 20 73  st_stmt_utf16, s
18560 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65  qlite3_column_de
18570 63 6c 74 79 70 65 31 36 7d 2c 0a 20 20 20 20 20  cltype16},.     
18580 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  { "sqlite3_colum
18590 6e 5f 6e 61 6d 65 31 36 22 2c 20 20 20 20 20 74  n_name16",     t
185a0 65 73 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c 20  est_stmt_utf16, 
185b0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e  sqlite3_column_n
185c0 61 6d 65 31 36 20 20 20 20 7d 2c 0a 23 65 6e 64  ame16    },.#end
185d0 69 66 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  if.     { "sqlit
185e0 65 33 5f 67 6c 6f 62 61 6c 5f 72 65 63 6f 76 65  e3_global_recove
185f0 72 22 2c 20 20 20 20 74 65 73 74 5f 67 6c 6f 62  r",    test_glob
18600 61 6c 5f 72 65 63 6f 76 65 72 2c 20 30 20 20 20  al_recover, 0   
18610 7d 2c 0a 0a 20 20 20 20 20 2f 2a 20 46 75 6e 63  },..     /* Func
18620 74 69 6f 6e 73 20 66 72 6f 6d 20 6f 73 2e 68 20  tions from os.h 
18630 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
18640 45 5f 4f 4d 49 54 5f 44 49 53 4b 49 4f 0a 20 20  E_OMIT_DISKIO.  
18650 20 20 20 7b 20 22 73 71 6c 69 74 65 33 4f 73 4f     { "sqlite3OsO
18660 70 65 6e 52 65 61 64 57 72 69 74 65 22 2c 74 65  penReadWrite",te
18670 73 74 5f 73 71 6c 69 74 65 33 4f 73 4f 70 65 6e  st_sqlite3OsOpen
18680 52 65 61 64 57 72 69 74 65 2c 20 30 20 7d 2c 0a  ReadWrite, 0 },.
18690 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 4f       { "sqlite3O
186a0 73 43 6c 6f 73 65 22 2c 20 20 20 20 20 20 20 20  sClose",        
186b0 74 65 73 74 5f 73 71 6c 69 74 65 33 4f 73 43 6c  test_sqlite3OsCl
186c0 6f 73 65 2c 20 30 20 7d 2c 0a 20 20 20 20 20 7b  ose, 0 },.     {
186d0 20 22 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b 22   "sqlite3OsLock"
186e0 2c 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 73  ,         test_s
186f0 71 6c 69 74 65 33 4f 73 4c 6f 63 6b 2c 20 30 20  qlite3OsLock, 0 
18700 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
18710 65 33 4f 73 54 65 6d 70 46 69 6c 65 4e 61 6d 65  e3OsTempFileName
18720 22 2c 20 74 65 73 74 5f 73 71 6c 69 74 65 33 4f  ", test_sqlite3O
18730 73 54 65 6d 70 46 69 6c 65 4e 61 6d 65 2c 20 30  sTempFileName, 0
18740 20 7d 2c 0a 20 20 20 0a 20 20 20 20 20 2f 2a 20   },.   .     /* 
18750 43 75 73 74 6f 6d 20 74 65 73 74 20 69 6e 74 65  Custom test inte
18760 72 66 61 63 65 73 20 2a 2f 0a 20 20 20 20 20 7b  rfaces */.     {
18770 20 22 73 71 6c 69 74 65 33 4f 73 55 6e 6c 6f 63   "sqlite3OsUnloc
18780 6b 22 2c 20 20 20 20 20 20 20 20 20 74 65 73 74  k",         test
18790 5f 73 71 6c 69 74 65 33 4f 73 55 6e 6c 6f 63 6b  _sqlite3OsUnlock
187a0 2c 20 30 20 20 20 20 7d 2c 0a 23 65 6e 64 69 66  , 0    },.#endif
187b0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
187c0 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 20 20 20  OMIT_UTF16.     
187d0 7b 20 22 61 64 64 5f 74 65 73 74 5f 63 6f 6c 6c  { "add_test_coll
187e0 61 74 65 22 2c 20 20 20 20 20 20 20 20 74 65 73  ate",        tes
187f0 74 5f 63 6f 6c 6c 61 74 65 2c 20 30 20 20 20 20  t_collate, 0    
18800 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20          },.     
18810 7b 20 22 61 64 64 5f 74 65 73 74 5f 63 6f 6c 6c  { "add_test_coll
18820 61 74 65 5f 6e 65 65 64 65 64 22 2c 20 74 65 73  ate_needed", tes
18830 74 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64  t_collate_needed
18840 2c 20 30 20 20 20 20 20 7d 2c 0a 20 20 20 20 20  , 0     },.     
18850 7b 20 22 61 64 64 5f 74 65 73 74 5f 66 75 6e 63  { "add_test_func
18860 74 69 6f 6e 22 2c 20 20 20 20 20 20 20 74 65 73  tion",       tes
18870 74 5f 66 75 6e 63 74 69 6f 6e 2c 20 30 20 20 20  t_function, 0   
18880 20 20 20 20 20 20 20 20 7d 2c 0a 23 65 6e 64 69          },.#endi
18890 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
188a0 4d 45 4d 44 45 42 55 47 0a 20 20 20 20 20 7b 20  MEMDEBUG.     { 
188b0 22 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 6f  "sqlite_malloc_o
188c0 75 74 73 74 61 6e 64 69 6e 67 22 2c 20 73 71 6c  utstanding", sql
188d0 69 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74  ite_malloc_outst
188e0 61 6e 64 69 6e 67 2c 20 30 7d 2c 0a 23 65 6e 64  anding, 0},.#end
188f0 69 66 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  if.     { "sqlit
18900 65 33 5f 74 65 73 74 5f 65 72 72 73 74 72 22 2c  e3_test_errstr",
18910 20 20 20 20 20 74 65 73 74 5f 65 72 72 73 74 72       test_errstr
18920 2c 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20  , 0             
18930 7d 2c 0a 20 20 20 20 20 7b 20 22 74 63 6c 5f 76  },.     { "tcl_v
18940 61 72 69 61 62 6c 65 5f 74 79 70 65 22 2c 20 20  ariable_type",  
18950 20 20 20 20 20 74 63 6c 5f 76 61 72 69 61 62 6c       tcl_variabl
18960 65 5f 74 79 70 65 2c 20 30 20 20 20 20 20 20 20  e_type, 0       
18970 7d 2c 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  },.#ifndef SQLIT
18980 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
18990 43 48 45 0a 20 20 20 20 20 7b 20 22 73 71 6c 69  CHE.     { "sqli
189a0 74 65 33 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65  te3_enable_share
189b0 64 5f 63 61 63 68 65 22 2c 20 74 65 73 74 5f 65  d_cache", test_e
189c0 6e 61 62 6c 65 5f 73 68 61 72 65 64 2c 20 30 20  nable_shared, 0 
189d0 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 7d 3b 0a   },.#endif.  };.
189e0 20 20 73 74 61 74 69 63 20 69 6e 74 20 62 69 74    static int bit
189f0 6d 61 73 6b 5f 73 69 7a 65 20 3d 20 73 69 7a 65  mask_size = size
18a00 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 3b 0a 20  of(Bitmask)*8;. 
18a10 20 69 6e 74 20 69 3b 0a 20 20 65 78 74 65 72 6e   int i;.  extern
18a20 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6f 73 5f   int sqlite3_os_
18a30 74 72 61 63 65 3b 0a 20 20 65 78 74 65 72 6e 20  trace;.  extern 
18a40 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 68 65 72  int sqlite3_wher
18a50 65 5f 74 72 61 63 65 3b 0a 20 20 65 78 74 65 72  e_trace;.  exter
18a60 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 79  n int sqlite3_sy
18a70 6e 63 5f 63 6f 75 6e 74 2c 20 73 71 6c 69 74 65  nc_count, sqlite
18a80 33 5f 66 75 6c 6c 73 79 6e 63 5f 63 6f 75 6e 74  3_fullsync_count
18a90 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  ;.  extern int s
18aa0 71 6c 69 74 65 33 5f 6f 70 65 6e 74 65 6d 70 5f  qlite3_opentemp_
18ab0 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20  count;.  extern 
18ac0 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 55  int sqlite3_memU
18ad0 73 65 64 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e  sed;.  extern in
18ae0 74 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  t sqlite3_malloc
18af0 5f 69 64 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e  _id;.  extern in
18b00 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 4d 61 78  t sqlite3_memMax
18b10 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  ;.  extern int s
18b20 71 6c 69 74 65 33 5f 6c 69 6b 65 5f 63 6f 75 6e  qlite3_like_coun
18b30 74 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20  t;.  extern int 
18b40 73 71 6c 69 74 65 33 5f 74 73 64 5f 63 6f 75 6e  sqlite3_tsd_coun
18b50 74 3b 0a 23 69 66 20 4f 53 5f 55 4e 49 58 20 26  t;.#if OS_UNIX &
18b60 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
18b70 5f 54 45 53 54 29 20 26 26 20 64 65 66 69 6e 65  _TEST) && define
18b80 64 28 54 48 52 45 41 44 53 41 46 45 29 20 26 26  d(THREADSAFE) &&
18b90 20 54 48 52 45 41 44 53 41 46 45 0a 20 20 65 78   THREADSAFE.  ex
18ba0 74 65 72 6e 20 69 6e 74 20 74 68 72 65 61 64 73  tern int threads
18bb0 4f 76 65 72 72 69 64 65 45 61 63 68 4f 74 68 65  OverrideEachOthe
18bc0 72 73 4c 6f 63 6b 73 3b 0a 23 65 6e 64 69 66 0a  rsLocks;.#endif.
18bd0 23 69 66 20 4f 53 5f 57 49 4e 0a 20 20 65 78 74  #if OS_WIN.  ext
18be0 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ern int sqlite3_
18bf0 6f 73 5f 74 79 70 65 3b 0a 23 65 6e 64 69 66 0a  os_type;.#endif.
18c00 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
18c10 42 55 47 0a 20 20 65 78 74 65 72 6e 20 69 6e 74  BUG.  extern int
18c20 20 73 71 6c 69 74 65 33 5f 76 64 62 65 5f 61 64   sqlite3_vdbe_ad
18c30 64 6f 70 5f 74 72 61 63 65 3b 0a 23 65 6e 64 69  dop_trace;.#endi
18c40 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
18c50 54 45 53 54 0a 20 20 65 78 74 65 72 6e 20 63 68  TEST.  extern ch
18c60 61 72 20 73 71 6c 69 74 65 33 5f 71 75 65 72 79  ar sqlite3_query
18c70 5f 70 6c 61 6e 5b 5d 3b 0a 20 20 73 74 61 74 69  _plan[];.  stati
18c80 63 20 63 68 61 72 20 2a 71 75 65 72 79 5f 70 6c  c char *query_pl
18c90 61 6e 20 3d 20 73 71 6c 69 74 65 33 5f 71 75 65  an = sqlite3_que
18ca0 72 79 5f 70 6c 61 6e 3b 0a 23 65 6e 64 69 66 0a  ry_plan;.#endif.
18cb0 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 73 69  .  for(i=0; i<si
18cc0 7a 65 6f 66 28 61 43 6d 64 29 2f 73 69 7a 65 6f  zeof(aCmd)/sizeo
18cd0 66 28 61 43 6d 64 5b 30 5d 29 3b 20 69 2b 2b 29  f(aCmd[0]); i++)
18ce0 7b 0a 20 20 20 20 54 63 6c 5f 43 72 65 61 74 65  {.    Tcl_Create
18cf0 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20  Command(interp, 
18d00 61 43 6d 64 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 61  aCmd[i].zName, a
18d10 43 6d 64 5b 69 5d 2e 78 50 72 6f 63 2c 20 30 2c  Cmd[i].xProc, 0,
18d20 20 30 29 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69   0);.  }.  for(i
18d30 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28 61 4f 62  =0; i<sizeof(aOb
18d40 6a 43 6d 64 29 2f 73 69 7a 65 6f 66 28 61 4f 62  jCmd)/sizeof(aOb
18d50 6a 43 6d 64 5b 30 5d 29 3b 20 69 2b 2b 29 7b 0a  jCmd[0]); i++){.
18d60 20 20 20 20 54 63 6c 5f 43 72 65 61 74 65 4f 62      Tcl_CreateOb
18d70 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c  jCommand(interp,
18d80 20 61 4f 62 6a 43 6d 64 5b 69 5d 2e 7a 4e 61 6d   aObjCmd[i].zNam
18d90 65 2c 20 0a 20 20 20 20 20 20 20 20 61 4f 62 6a  e, .        aObj
18da0 43 6d 64 5b 69 5d 2e 78 50 72 6f 63 2c 20 61 4f  Cmd[i].xProc, aO
18db0 62 6a 43 6d 64 5b 69 5d 2e 63 6c 69 65 6e 74 44  bjCmd[i].clientD
18dc0 61 74 61 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 54  ata, 0);.  }.  T
18dd0 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72  cl_LinkVar(inter
18de0 70 2c 20 22 73 71 6c 69 74 65 5f 73 65 61 72 63  p, "sqlite_searc
18df0 68 5f 63 6f 75 6e 74 22 2c 20 0a 20 20 20 20 20  h_count", .     
18e00 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33   (char*)&sqlite3
18e10 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2c 20 54  _search_count, T
18e20 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20  CL_LINK_INT);.  
18e30 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
18e40 72 70 2c 20 22 73 71 6c 69 74 65 5f 73 6f 72 74  rp, "sqlite_sort
18e50 5f 63 6f 75 6e 74 22 2c 20 0a 20 20 20 20 20 20  _count", .      
18e60 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f  (char*)&sqlite3_
18e70 73 6f 72 74 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f  sort_count, TCL_
18e80 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c  LINK_INT);.  Tcl
18e90 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c  _LinkVar(interp,
18ea0 20 22 73 71 6c 69 74 65 5f 6c 69 6b 65 5f 63 6f   "sqlite_like_co
18eb0 75 6e 74 22 2c 20 0a 20 20 20 20 20 20 28 63 68  unt", .      (ch
18ec0 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6c 69 6b  ar*)&sqlite3_lik
18ed0 65 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e  e_count, TCL_LIN
18ee0 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69  K_INT);.  Tcl_Li
18ef0 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73  nkVar(interp, "s
18f00 71 6c 69 74 65 5f 69 6e 74 65 72 72 75 70 74 5f  qlite_interrupt_
18f10 63 6f 75 6e 74 22 2c 20 0a 20 20 20 20 20 20 28  count", .      (
18f20 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 69  char*)&sqlite3_i
18f30 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 2c 20  nterrupt_count, 
18f40 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20  TCL_LINK_INT);. 
18f50 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
18f60 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 65  erp, "sqlite_ope
18f70 6e 5f 66 69 6c 65 5f 63 6f 75 6e 74 22 2c 20 0a  n_file_count", .
18f80 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71        (char*)&sq
18f90 6c 69 74 65 33 5f 6f 70 65 6e 5f 66 69 6c 65 5f  lite3_open_file_
18fa0 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f  count, TCL_LINK_
18fb0 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b  INT);.  Tcl_Link
18fc0 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  Var(interp, "sql
18fd0 69 74 65 5f 63 75 72 72 65 6e 74 5f 74 69 6d 65  ite_current_time
18fe0 22 2c 20 0a 20 20 20 20 20 20 28 63 68 61 72 2a  ", .      (char*
18ff0 29 26 73 71 6c 69 74 65 33 5f 63 75 72 72 65 6e  )&sqlite3_curren
19000 74 5f 74 69 6d 65 2c 20 54 43 4c 5f 4c 49 4e 4b  t_time, TCL_LINK
19010 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e  _INT);.  Tcl_Lin
19020 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71  kVar(interp, "sq
19030 6c 69 74 65 5f 6f 73 5f 74 72 61 63 65 22 2c 0a  lite_os_trace",.
19040 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71        (char*)&sq
19050 6c 69 74 65 33 5f 6f 73 5f 74 72 61 63 65 2c 20  lite3_os_trace, 
19060 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20  TCL_LINK_INT);. 
19070 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
19080 65 72 70 2c 20 22 73 71 6c 69 74 65 33 5f 74 73  erp, "sqlite3_ts
19090 64 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20 20 20  d_count",.      
190a0 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f  (char*)&sqlite3_
190b0 74 73 64 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c  tsd_count, TCL_L
190c0 49 4e 4b 5f 49 4e 54 29 3b 0a 23 69 66 20 4f 53  INK_INT);.#if OS
190d0 5f 55 4e 49 58 20 26 26 20 64 65 66 69 6e 65 64  _UNIX && defined
190e0 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 26 26  (SQLITE_TEST) &&
190f0 20 64 65 66 69 6e 65 64 28 54 48 52 45 41 44 53   defined(THREADS
19100 41 46 45 29 20 26 26 20 54 48 52 45 41 44 53 41  AFE) && THREADSA
19110 46 45 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72  FE.  Tcl_LinkVar
19120 28 69 6e 74 65 72 70 2c 20 22 74 68 72 65 61 64  (interp, "thread
19130 73 4f 76 65 72 72 69 64 65 45 61 63 68 4f 74 68  sOverrideEachOth
19140 65 72 73 4c 6f 63 6b 73 22 2c 0a 20 20 20 20 20  ersLocks",.     
19150 20 28 63 68 61 72 2a 29 26 74 68 72 65 61 64 73   (char*)&threads
19160 4f 76 65 72 72 69 64 65 45 61 63 68 4f 74 68 65  OverrideEachOthe
19170 72 73 4c 6f 63 6b 73 2c 20 54 43 4c 5f 4c 49 4e  rsLocks, TCL_LIN
19180 4b 5f 49 4e 54 29 3b 0a 23 65 6e 64 69 66 0a 23  K_INT);.#endif.#
19190 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
191a0 49 54 5f 55 54 46 31 36 0a 20 20 54 63 6c 5f 4c  IT_UTF16.  Tcl_L
191b0 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22  inkVar(interp, "
191c0 73 71 6c 69 74 65 5f 6c 61 73 74 5f 6e 65 65 64  sqlite_last_need
191d0 65 64 5f 63 6f 6c 6c 61 74 69 6f 6e 22 2c 0a 20  ed_collation",. 
191e0 20 20 20 20 20 28 63 68 61 72 2a 29 26 70 7a 4e       (char*)&pzN
191f0 65 65 64 65 64 43 6f 6c 6c 61 74 69 6f 6e 2c 20  eededCollation, 
19200 54 43 4c 5f 4c 49 4e 4b 5f 53 54 52 49 4e 47 7c  TCL_LINK_STRING|
19210 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e  TCL_LINK_READ_ON
19220 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64  LY);.#endif.#ifd
19230 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ef SQLITE_MEMDEB
19240 55 47 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72  UG.  Tcl_LinkVar
19250 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
19260 5f 6d 61 6c 6c 6f 63 5f 69 64 22 2c 0a 20 20 20  _malloc_id",.   
19270 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74     (char*)&sqlit
19280 65 33 5f 6d 61 6c 6c 6f 63 5f 69 64 2c 20 54 43  e3_malloc_id, TC
19290 4c 5f 4c 49 4e 4b 5f 53 54 52 49 4e 47 29 3b 0a  L_LINK_STRING);.
192a0 23 65 6e 64 69 66 0a 23 69 66 20 4f 53 5f 57 49  #endif.#if OS_WI
192b0 4e 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  N.  Tcl_LinkVar(
192c0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
192d0 6f 73 5f 74 79 70 65 22 2c 0a 20 20 20 20 20 20  os_type",.      
192e0 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f  (char*)&sqlite3_
192f0 6f 73 5f 74 79 70 65 2c 20 54 43 4c 5f 4c 49 4e  os_type, TCL_LIN
19300 4b 5f 49 4e 54 29 3b 0a 23 65 6e 64 69 66 0a 23  K_INT);.#endif.#
19310 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
19320 54 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  T.  Tcl_LinkVar(
19330 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
19340 71 75 65 72 79 5f 70 6c 61 6e 22 2c 0a 20 20 20  query_plan",.   
19350 20 20 20 28 63 68 61 72 2a 29 26 71 75 65 72 79     (char*)&query
19360 5f 70 6c 61 6e 2c 20 54 43 4c 5f 4c 49 4e 4b 5f  _plan, TCL_LINK_
19370 53 54 52 49 4e 47 7c 54 43 4c 5f 4c 49 4e 4b 5f  STRING|TCL_LINK_
19380 52 45 41 44 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  READ_ONLY);.#end
19390 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
193a0 5f 44 45 42 55 47 0a 20 20 54 63 6c 5f 4c 69 6e  _DEBUG.  Tcl_Lin
193b0 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71  kVar(interp, "sq
193c0 6c 69 74 65 5f 61 64 64 6f 70 5f 74 72 61 63 65  lite_addop_trace
193d0 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29  ",.      (char*)
193e0 26 73 71 6c 69 74 65 33 5f 76 64 62 65 5f 61 64  &sqlite3_vdbe_ad
193f0 64 6f 70 5f 74 72 61 63 65 2c 20 54 43 4c 5f 4c  dop_trace, TCL_L
19400 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f  INK_INT);.  Tcl_
19410 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20  LinkVar(interp, 
19420 22 73 71 6c 69 74 65 5f 77 68 65 72 65 5f 74 72  "sqlite_where_tr
19430 61 63 65 22 2c 0a 20 20 20 20 20 20 28 63 68 61  ace",.      (cha
19440 72 2a 29 26 73 71 6c 69 74 65 33 5f 77 68 65 72  r*)&sqlite3_wher
19450 65 5f 74 72 61 63 65 2c 20 54 43 4c 5f 4c 49 4e  e_trace, TCL_LIN
19460 4b 5f 49 4e 54 29 3b 0a 23 65 6e 64 69 66 0a 23  K_INT);.#endif.#
19470 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d  ifdef SQLITE_MEM
19480 44 45 42 55 47 0a 20 20 54 63 6c 5f 4c 69 6e 6b  DEBUG.  Tcl_Link
19490 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  Var(interp, "sql
194a0 69 74 65 5f 6d 65 6d 75 73 65 64 22 2c 0a 20 20  ite_memused",.  
194b0 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69      (char*)&sqli
194c0 74 65 33 5f 6d 65 6d 55 73 65 64 2c 20 54 43 4c  te3_memUsed, TCL
194d0 5f 4c 49 4e 4b 5f 49 4e 54 20 7c 20 54 43 4c 5f  _LINK_INT | TCL_
194e0 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59 29 3b  LINK_READ_ONLY);
194f0 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
19500 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6d  nterp, "sqlite_m
19510 65 6d 6d 61 78 22 2c 0a 20 20 20 20 20 20 28 63  emmax",.      (c
19520 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6d 65  har*)&sqlite3_me
19530 6d 4d 61 78 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49  mMax, TCL_LINK_I
19540 4e 54 20 7c 20 54 43 4c 5f 4c 49 4e 4b 5f 52 45  NT | TCL_LINK_RE
19550 41 44 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AD_ONLY);.#endif
19560 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
19570 4f 4d 49 54 5f 44 49 53 4b 49 4f 0a 20 20 54 63  OMIT_DISKIO.  Tc
19580 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70  l_LinkVar(interp
19590 2c 20 22 73 71 6c 69 74 65 5f 6f 70 65 6e 74 65  , "sqlite_opente
195a0 6d 70 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20 20  mp_count",.     
195b0 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33   (char*)&sqlite3
195c0 5f 6f 70 65 6e 74 65 6d 70 5f 63 6f 75 6e 74 2c  _opentemp_count,
195d0 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a   TCL_LINK_INT);.
195e0 23 65 6e 64 69 66 0a 20 20 54 63 6c 5f 4c 69 6e  #endif.  Tcl_Lin
195f0 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71  kVar(interp, "sq
19600 6c 69 74 65 5f 73 74 61 74 69 63 5f 62 69 6e 64  lite_static_bind
19610 5f 76 61 6c 75 65 22 2c 0a 20 20 20 20 20 20 28  _value",.      (
19620 63 68 61 72 2a 29 26 73 71 6c 69 74 65 5f 73 74  char*)&sqlite_st
19630 61 74 69 63 5f 62 69 6e 64 5f 76 61 6c 75 65 2c  atic_bind_value,
19640 20 54 43 4c 5f 4c 49 4e 4b 5f 53 54 52 49 4e 47   TCL_LINK_STRING
19650 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72  );.  Tcl_LinkVar
19660 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
19670 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 22  _temp_directory"
19680 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26  ,.      (char*)&
19690 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72  sqlite3_temp_dir
196a0 65 63 74 6f 72 79 2c 20 54 43 4c 5f 4c 49 4e 4b  ectory, TCL_LINK
196b0 5f 53 54 52 49 4e 47 29 3b 0a 20 20 54 63 6c 5f  _STRING);.  Tcl_
196c0 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20  LinkVar(interp, 
196d0 22 62 69 74 6d 61 73 6b 5f 73 69 7a 65 22 2c 0a  "bitmask_size",.
196e0 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 62 69        (char*)&bi
196f0 74 6d 61 73 6b 5f 73 69 7a 65 2c 20 54 43 4c 5f  tmask_size, TCL_
19700 4c 49 4e 4b 5f 49 4e 54 7c 54 43 4c 5f 4c 49 4e  LINK_INT|TCL_LIN
19710 4b 5f 52 45 41 44 5f 4f 4e 4c 59 29 3b 0a 23 69  K_READ_ONLY);.#i
19720 66 20 4f 53 5f 55 4e 49 58 0a 20 20 54 63 6c 5f  f OS_UNIX.  Tcl_
19730 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20  LinkVar(interp, 
19740 22 73 71 6c 69 74 65 5f 73 79 6e 63 5f 63 6f 75  "sqlite_sync_cou
19750 6e 74 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72  nt",.      (char
19760 2a 29 26 73 71 6c 69 74 65 33 5f 73 79 6e 63 5f  *)&sqlite3_sync_
19770 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f  count, TCL_LINK_
19780 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b  INT);.  Tcl_Link
19790 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  Var(interp, "sql
197a0 69 74 65 5f 66 75 6c 6c 73 79 6e 63 5f 63 6f 75  ite_fullsync_cou
197b0 6e 74 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72  nt",.      (char
197c0 2a 29 26 73 71 6c 69 74 65 33 5f 66 75 6c 6c 73  *)&sqlite3_fulls
197d0 79 6e 63 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c  ync_count, TCL_L
197e0 49 4e 4b 5f 49 4e 54 29 3b 0a 23 65 6e 64 69 66  INK_INT);.#endif
197f0 20 2f 2a 20 4f 53 5f 55 4e 49 58 20 2a 2f 0a 20   /* OS_UNIX */. 
19800 20 73 65 74 5f 6f 70 74 69 6f 6e 73 28 69 6e 74   set_options(int
19810 65 72 70 29 3b 0a 0a 20 20 7b 0a 20 20 20 20 65  erp);..  {.    e
19820 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
19830 33 5f 73 68 61 72 65 64 5f 63 61 63 68 65 5f 72  3_shared_cache_r
19840 65 70 6f 72 74 28 76 6f 69 64 20 2a 2c 20 54 63  eport(void *, Tc
19850 6c 5f 49 6e 74 65 72 70 20 2a 2c 0a 20 20 20 20  l_Interp *,.    
19860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19880 69 6e 74 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  int, Tcl_Obj *CO
19890 4e 53 54 5b 5d 29 3b 0a 20 20 20 20 54 63 6c 5f  NST[]);.    Tcl_
198a0 43 72 65 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64  CreateObjCommand
198b0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
198c0 5f 73 68 61 72 65 64 5f 63 61 63 68 65 5f 72 65  _shared_cache_re
198d0 70 6f 72 74 22 2c 20 0a 20 20 20 20 20 20 20 20  port", .        
198e0 73 71 6c 69 74 65 33 5f 73 68 61 72 65 64 5f 63  sqlite3_shared_c
198f0 61 63 68 65 5f 72 65 70 6f 72 74 2c 20 30 2c 20  ache_report, 0, 
19900 30 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  0);.  }.  return
19910 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a                  TCL_OK;.}.