/ Hex Artifact Content
Login

Artifact 96d78c83c011df65f1c3538e2118647b09239acd:


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 37 33 20 32 30 30 35 2f 31 32  ,v 1.173 2005/12
0240: 2f 30 39 20 31 34 3a 33 39 3a 30 34 20 64 61 6e  /09 14:39:04 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 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  >..const char *s
02d0: 71 6c 69 74 65 33 54 65 73 74 45 72 72 6f 72 4e  qlite3TestErrorN
02e0: 61 6d 65 28 69 6e 74 20 72 63 29 7b 0a 20 20 63  ame(int rc){.  c
02f0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
0300: 20 3d 20 30 3b 0a 20 20 73 77 69 74 63 68 28 20   = 0;.  switch( 
0310: 72 63 20 29 7b 0a 20 20 20 20 63 61 73 65 20 53  rc ){.    case S
0320: 51 4c 49 54 45 5f 4f 4b 3a 20 20 20 20 20 20 20  QLITE_OK:       
0330: 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54    zName = "SQLIT
0340: 45 5f 4f 4b 22 3b 20 20 20 20 20 20 20 20 20 20  E_OK";          
0350: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
0360: 53 51 4c 49 54 45 5f 45 52 52 4f 52 3a 20 20 20  SQLITE_ERROR:   
0370: 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49     zName = "SQLI
0380: 54 45 5f 45 52 52 4f 52 22 3b 20 20 20 20 20 20  TE_ERROR";      
0390: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
03a0: 20 53 51 4c 49 54 45 5f 50 45 52 4d 3a 20 20 20   SQLITE_PERM:   
03b0: 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c      zName = "SQL
03c0: 49 54 45 5f 50 45 52 4d 22 3b 20 20 20 20 20 20  ITE_PERM";      
03d0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
03e0: 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 3a 20  e SQLITE_ABORT: 
03f0: 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51       zName = "SQ
0400: 4c 49 54 45 5f 41 42 4f 52 54 22 3b 20 20 20 20  LITE_ABORT";    
0410: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
0420: 73 65 20 53 51 4c 49 54 45 5f 42 55 53 59 3a 20  se SQLITE_BUSY: 
0430: 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53        zName = "S
0440: 51 4c 49 54 45 5f 42 55 53 59 22 3b 20 20 20 20  QLITE_BUSY";    
0450: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
0460: 61 73 65 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  ase SQLITE_LOCKE
0470: 44 3a 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22  D:     zName = "
0480: 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 22 3b 20  SQLITE_LOCKED"; 
0490: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
04a0: 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  case SQLITE_NOME
04b0: 4d 3a 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20  M:      zName = 
04c0: 22 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 22 3b 20  "SQLITE_NOMEM"; 
04d0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
04e0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 52 45 41   case SQLITE_REA
04f0: 44 4f 4e 4c 59 3a 20 20 20 7a 4e 61 6d 65 20 3d  DONLY:   zName =
0500: 20 22 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c   "SQLITE_READONL
0510: 59 22 3b 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  Y";    break;.  
0520: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4e    case SQLITE_IN
0530: 54 45 52 52 55 50 54 3a 20 20 7a 4e 61 6d 65 20  TERRUPT:  zName 
0540: 3d 20 22 53 51 4c 49 54 45 5f 49 4e 54 45 52 52  = "SQLITE_INTERR
0550: 55 50 54 22 3b 20 20 20 62 72 65 61 6b 3b 0a 20  UPT";   break;. 
0560: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49     case SQLITE_I
0570: 4f 45 52 52 3a 20 20 20 20 20 20 7a 4e 61 6d 65  OERR:      zName
0580: 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f 45 52 52   = "SQLITE_IOERR
0590: 22 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  ";       break;.
05a0: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
05b0: 43 4f 52 52 55 50 54 3a 20 20 20 20 7a 4e 61 6d  CORRUPT:    zNam
05c0: 65 20 3d 20 22 53 51 4c 49 54 45 5f 43 4f 52 52  e = "SQLITE_CORR
05d0: 55 50 54 22 3b 20 20 20 20 20 62 72 65 61 6b 3b  UPT";     break;
05e0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
05f0: 5f 46 55 4c 4c 3a 20 20 20 20 20 20 20 7a 4e 61  _FULL:       zNa
0600: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 46 55 4c  me = "SQLITE_FUL
0610: 4c 22 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b  L";        break
0620: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
0630: 45 5f 43 41 4e 54 4f 50 45 4e 3a 20 20 20 7a 4e  E_CANTOPEN:   zN
0640: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 43 41  ame = "SQLITE_CA
0650: 4e 54 4f 50 45 4e 22 3b 20 20 20 20 62 72 65 61  NTOPEN";    brea
0660: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
0670: 54 45 5f 50 52 4f 54 4f 43 4f 4c 3a 20 20 20 7a  TE_PROTOCOL:   z
0680: 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 50  Name = "SQLITE_P
0690: 52 4f 54 4f 43 4f 4c 22 3b 20 20 20 20 62 72 65  ROTOCOL";    bre
06a0: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
06b0: 49 54 45 5f 45 4d 50 54 59 3a 20 20 20 20 20 20  ITE_EMPTY:      
06c0: 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f  zName = "SQLITE_
06d0: 45 4d 50 54 59 22 3b 20 20 20 20 20 20 20 62 72  EMPTY";       br
06e0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
06f0: 4c 49 54 45 5f 53 43 48 45 4d 41 3a 20 20 20 20  LITE_SCHEMA:    
0700: 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45   zName = "SQLITE
0710: 5f 53 43 48 45 4d 41 22 3b 20 20 20 20 20 20 62  _SCHEMA";      b
0720: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
0730: 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
0740: 3a 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54  : zName = "SQLIT
0750: 45 5f 43 4f 4e 53 54 52 41 49 4e 54 22 3b 20 20  E_CONSTRAINT";  
0760: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
0770: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3a  SQLITE_MISMATCH:
0780: 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49     zName = "SQLI
0790: 54 45 5f 4d 49 53 4d 41 54 43 48 22 3b 20 20 20  TE_MISMATCH";   
07a0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
07b0: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3a 20   SQLITE_MISUSE: 
07c0: 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c      zName = "SQL
07d0: 49 54 45 5f 4d 49 53 55 53 45 22 3b 20 20 20 20  ITE_MISUSE";    
07e0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
07f0: 65 20 53 51 4c 49 54 45 5f 4e 4f 4c 46 53 3a 20  e SQLITE_NOLFS: 
0800: 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51       zName = "SQ
0810: 4c 49 54 45 5f 4e 4f 4c 46 53 22 3b 20 20 20 20  LITE_NOLFS";    
0820: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
0830: 73 65 20 53 51 4c 49 54 45 5f 41 55 54 48 3a 20  se SQLITE_AUTH: 
0840: 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53        zName = "S
0850: 51 4c 49 54 45 5f 41 55 54 48 22 3b 20 20 20 20  QLITE_AUTH";    
0860: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
0870: 61 73 65 20 53 51 4c 49 54 45 5f 46 4f 52 4d 41  ase SQLITE_FORMA
0880: 54 3a 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22  T:     zName = "
0890: 53 51 4c 49 54 45 5f 46 4f 52 4d 41 54 22 3b 20  SQLITE_FORMAT"; 
08a0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
08b0: 63 61 73 65 20 53 51 4c 49 54 45 5f 52 41 4e 47  case SQLITE_RANG
08c0: 45 3a 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20  E:      zName = 
08d0: 22 53 51 4c 49 54 45 5f 52 41 4e 47 45 22 3b 20  "SQLITE_RANGE"; 
08e0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
08f0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 52 4f 57   case SQLITE_ROW
0900: 3a 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d  :        zName =
0910: 20 22 53 51 4c 49 54 45 5f 52 4f 57 22 3b 20 20   "SQLITE_ROW";  
0920: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
0930: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 44 4f    case SQLITE_DO
0940: 4e 45 3a 20 20 20 20 20 20 20 7a 4e 61 6d 65 20  NE:       zName 
0950: 3d 20 22 53 51 4c 49 54 45 5f 44 4f 4e 45 22 3b  = "SQLITE_DONE";
0960: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
0970: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4e     case SQLITE_N
0980: 4f 54 41 44 42 3a 20 20 20 20 20 7a 4e 61 6d 65  OTADB:     zName
0990: 20 3d 20 22 53 51 4c 49 54 45 5f 4e 4f 54 41 44   = "SQLITE_NOTAD
09a0: 42 22 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  B";      break;.
09b0: 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20      default:    
09c0: 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d              zNam
09d0: 65 20 3d 20 22 53 51 4c 49 54 45 5f 55 6e 6b 6e  e = "SQLITE_Unkn
09e0: 6f 77 6e 22 3b 20 20 20 20 20 62 72 65 61 6b 3b  own";     break;
09f0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a 4e  .  }.  return zN
0a00: 61 6d 65 3b 0a 7d 0a 23 64 65 66 69 6e 65 20 65  ame;.}.#define e
0a10: 72 72 6f 72 4e 61 6d 65 20 73 71 6c 69 74 65 33  rrorName sqlite3
0a20: 54 65 73 74 45 72 72 6f 72 4e 61 6d 65 0a 0a 2f  TestErrorName../
0a30: 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 61 6e 20  *.** Convert an 
0a40: 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 20 69 6e  sqlite3_stmt* in
0a50: 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2a 2e 20  to an sqlite3*. 
0a60: 20 54 68 69 73 20 64 65 70 65 6e 64 73 20 6f 6e   This depends on
0a70: 20 74 68 65 0a 2a 2a 20 66 61 63 74 20 74 68 61   the.** fact tha
0a80: 74 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20 69  t the sqlite3* i
0a90: 73 20 74 68 65 20 66 69 72 73 74 20 66 69 65 6c  s the first fiel
0aa0: 64 20 69 6e 20 74 68 65 20 56 64 62 65 20 73 74  d in the Vdbe st
0ab0: 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 23 64 65 66  ructure..*/.#def
0ac0: 69 6e 65 20 53 74 6d 74 54 6f 44 62 28 58 29 20  ine StmtToDb(X) 
0ad0: 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 68 61 6e    sqlite3_db_han
0ae0: 64 6c 65 28 58 29 0a 0a 2f 2a 0a 2a 2a 20 43 68  dle(X)../*.** Ch
0af0: 65 63 6b 20 61 20 72 65 74 75 72 6e 20 76 61 6c  eck a return val
0b00: 75 65 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  ue to make sure 
0b10: 69 74 20 61 67 72 65 65 73 20 77 69 74 68 20 74  it agrees with t
0b20: 68 65 20 72 65 73 75 6c 74 73 0a 2a 2a 20 66 72  he results.** fr
0b30: 6f 6d 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f  om sqlite3_errco
0b40: 64 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  de..*/.int sqlit
0b50: 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 54 63  e3TestErrCode(Tc
0b60: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
0b70: 2c 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69  , sqlite3 *db, i
0b80: 6e 74 20 72 63 29 7b 0a 20 20 69 66 28 20 72 63  nt rc){.  if( rc
0b90: 21 3d 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20  !=SQLITE_MISUSE 
0ba0: 26 26 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  && rc!=SQLITE_OK
0bb0: 20 26 26 20 73 71 6c 69 74 65 33 5f 65 72 72 63   && sqlite3_errc
0bc0: 6f 64 65 28 64 62 29 21 3d 72 63 20 29 7b 0a 20  ode(db)!=rc ){. 
0bd0: 20 20 20 63 68 61 72 20 7a 42 75 66 5b 32 30 30     char zBuf[200
0be0: 5d 3b 0a 20 20 20 20 69 6e 74 20 72 32 20 3d 20  ];.    int r2 = 
0bf0: 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28  sqlite3_errcode(
0c00: 64 62 29 3b 0a 20 20 20 20 73 70 72 69 6e 74 66  db);.    sprintf
0c10: 28 7a 42 75 66 2c 20 22 65 72 72 6f 72 20 63 6f  (zBuf, "error co
0c20: 64 65 20 25 73 20 28 25 64 29 20 64 6f 65 73 20  de %s (%d) does 
0c30: 6e 6f 74 20 6d 61 74 63 68 20 73 71 6c 69 74 65  not match sqlite
0c40: 33 5f 65 72 72 63 6f 64 65 20 25 73 20 28 25 64  3_errcode %s (%d
0c50: 29 22 2c 0a 20 20 20 20 20 20 20 65 72 72 6f 72  )",.       error
0c60: 4e 61 6d 65 28 72 63 29 2c 20 72 63 2c 20 65 72  Name(rc), rc, er
0c70: 72 6f 72 4e 61 6d 65 28 72 32 29 2c 20 72 32 29  rorName(r2), r2)
0c80: 3b 0a 20 20 20 20 54 63 6c 5f 52 65 73 65 74 52  ;.    Tcl_ResetR
0c90: 65 73 75 6c 74 28 69 6e 74 65 72 70 29 3b 0a 20  esult(interp);. 
0ca0: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
0cb0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66  ult(interp, zBuf
0cc0: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
0cd0: 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e   1;.  }.  return
0ce0: 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 65 63   0;.}../*.** Dec
0cf0: 6f 64 65 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  ode a pointer to
0d00: 20 61 6e 20 73 71 6c 69 74 65 33 20 6f 62 6a 65   an sqlite3 obje
0d10: 63 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ct..*/.static in
0d20: 74 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 54  t getDbPointer(T
0d30: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
0d40: 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  p, const char *z
0d50: 41 2c 20 73 71 6c 69 74 65 33 20 2a 2a 70 70 44  A, sqlite3 **ppD
0d60: 62 29 7b 0a 20 20 2a 70 70 44 62 20 3d 20 28 73  b){.  *ppDb = (s
0d70: 71 6c 69 74 65 33 2a 29 73 71 6c 69 74 65 33 54  qlite3*)sqlite3T
0d80: 65 78 74 54 6f 50 74 72 28 7a 41 29 3b 0a 20 20  extToPtr(zA);.  
0d90: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
0da0: 0a 0a 2f 2a 0a 2a 2a 20 44 65 63 6f 64 65 20 61  ../*.** Decode a
0db0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73   pointer to an s
0dc0: 71 6c 69 74 65 33 5f 73 74 6d 74 20 6f 62 6a 65  qlite3_stmt obje
0dd0: 63 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ct..*/.static in
0de0: 74 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  t getStmtPointer
0df0: 28 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  (.  Tcl_Interp *
0e00: 69 6e 74 65 72 70 2c 20 0a 20 20 63 6f 6e 73 74  interp, .  const
0e10: 20 63 68 61 72 20 2a 7a 41 72 67 2c 20 20 0a 20   char *zArg,  . 
0e20: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2a   sqlite3_stmt **
0e30: 70 70 53 74 6d 74 0a 29 7b 0a 20 20 2a 70 70 53  ppStmt.){.  *ppS
0e40: 74 6d 74 20 3d 20 28 73 71 6c 69 74 65 33 5f 73  tmt = (sqlite3_s
0e50: 74 6d 74 2a 29 73 71 6c 69 74 65 33 54 65 78 74  tmt*)sqlite3Text
0e60: 54 6f 50 74 72 28 7a 41 72 67 29 3b 0a 20 20 72  ToPtr(zArg);.  r
0e70: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
0e80: 0a 2f 2a 0a 2a 2a 20 44 65 63 6f 64 65 20 61 20  ./*.** Decode a 
0e90: 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71  pointer to an sq
0ea0: 6c 69 74 65 33 5f 73 74 6d 74 20 6f 62 6a 65 63  lite3_stmt objec
0eb0: 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  t..*/.static int
0ec0: 20 67 65 74 46 69 6c 65 50 6f 69 6e 74 65 72 28   getFilePointer(
0ed0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
0ee0: 6e 74 65 72 70 2c 20 0a 20 20 63 6f 6e 73 74 20  nterp, .  const 
0ef0: 63 68 61 72 20 2a 7a 41 72 67 2c 20 20 0a 20 20  char *zArg,  .  
0f00: 4f 73 46 69 6c 65 20 2a 2a 70 70 46 69 6c 65 0a  OsFile **ppFile.
0f10: 29 7b 0a 20 20 2a 70 70 46 69 6c 65 20 3d 20 28  ){.  *ppFile = (
0f20: 4f 73 46 69 6c 65 2a 29 73 71 6c 69 74 65 33 54  OsFile*)sqlite3T
0f30: 65 78 74 54 6f 50 74 72 28 7a 41 72 67 29 3b 0a  extToPtr(zArg);.
0f40: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
0f50: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72 61  .}../*.** Genera
0f60: 74 65 20 61 20 74 65 78 74 20 72 65 70 72 65 73  te a text repres
0f70: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 20 70 6f  entation of a po
0f80: 69 6e 74 65 72 20 74 68 61 74 20 63 61 6e 20 62  inter that can b
0f90: 65 20 75 6e 64 65 72 73 74 6f 6f 64 0a 2a 2a 20  e understood.** 
0fa0: 62 79 20 74 68 65 20 67 65 74 44 62 50 6f 69 6e  by the getDbPoin
0fb0: 74 65 72 20 61 6e 64 20 67 65 74 56 6d 50 6f 69  ter and getVmPoi
0fc0: 6e 74 65 72 20 72 6f 75 74 69 6e 65 73 20 61 62  nter routines ab
0fd0: 6f 76 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70  ove..**.** The p
0fe0: 72 6f 62 6c 65 6d 20 69 73 2c 20 6f 6e 20 73 6f  roblem is, on so
0ff0: 6d 65 20 6d 61 63 68 69 6e 65 73 20 28 53 6f 6c  me machines (Sol
1000: 61 72 69 73 29 20 69 66 20 79 6f 75 20 64 6f 20  aris) if you do 
1010: 61 20 70 72 69 6e 74 66 20 77 69 74 68 0a 2a 2a  a printf with.**
1020: 20 22 25 70 22 20 79 6f 75 20 63 61 6e 6e 6f 74   "%p" you cannot
1030: 20 74 75 72 6e 20 61 72 6f 75 6e 64 20 61 6e 64   turn around and
1040: 20 64 6f 20 61 20 73 63 61 6e 66 20 77 69 74 68   do a scanf with
1050: 20 74 68 65 20 73 61 6d 65 20 22 25 70 22 20 61   the same "%p" a
1060: 6e 64 0a 2a 2a 20 67 65 74 20 79 6f 75 72 20 70  nd.** get your p
1070: 6f 69 6e 74 65 72 20 62 61 63 6b 2e 20 20 59 6f  ointer back.  Yo
1080: 75 20 68 61 76 65 20 74 6f 20 70 72 65 70 65 6e  u have to prepen
1090: 64 20 61 20 22 30 78 22 20 62 65 66 6f 72 65 20  d a "0x" before 
10a0: 69 74 20 77 69 6c 6c 0a 2a 2a 20 77 6f 72 6b 2e  it will.** work.
10b0: 20 20 4f 72 20 61 74 20 6c 65 61 73 74 20 74 68    Or at least th
10c0: 61 74 20 69 73 20 77 68 61 74 20 69 73 20 72 65  at is what is re
10d0: 70 6f 72 74 65 64 20 74 6f 20 6d 65 20 28 64 72  ported to me (dr
10e0: 68 29 2e 20 20 42 75 74 20 74 68 69 73 0a 2a 2a  h).  But this.**
10f0: 20 62 65 68 61 76 69 6f 72 20 76 61 72 69 65 73   behavior varies
1100: 20 66 72 6f 6d 20 6d 61 63 68 69 6e 65 20 74 6f   from machine to
1110: 20 6d 61 63 68 69 6e 65 2e 20 20 54 68 65 20 73   machine.  The s
1120: 6f 6c 75 74 69 6f 6e 20 75 73 65 64 20 68 65 72  olution used her
1130: 20 69 73 0a 2a 2a 20 74 6f 20 74 65 73 74 20 74   is.** to test t
1140: 68 65 20 73 74 72 69 6e 67 20 72 69 67 68 74 20  he string right 
1150: 61 66 74 65 72 20 69 74 20 69 73 20 67 65 6e 65  after it is gene
1160: 72 61 74 65 64 20 74 6f 20 73 65 65 20 69 66 20  rated to see if 
1170: 69 74 20 63 61 6e 20 62 65 0a 2a 2a 20 75 6e 64  it can be.** und
1180: 65 72 73 74 6f 6f 64 20 62 79 20 73 63 61 6e 66  erstood by scanf
1190: 2c 20 61 6e 64 20 69 66 20 6e 6f 74 2c 20 74 72  , and if not, tr
11a0: 79 20 70 72 65 70 65 6e 64 69 6e 67 20 61 6e 20  y prepending an 
11b0: 22 30 78 22 20 74 6f 20 73 65 65 20 69 66 0a 2a  "0x" to see if.*
11c0: 2a 20 74 68 61 74 20 68 65 6c 70 73 2e 20 20 49  * that helps.  I
11d0: 66 20 6e 6f 74 68 69 6e 67 20 77 6f 72 6b 73 2c  f nothing works,
11e0: 20 61 20 66 61 74 61 6c 20 65 72 72 6f 72 20 69   a fatal error i
11f0: 73 20 67 65 6e 65 72 61 74 65 64 2e 0a 2a 2f 0a  s generated..*/.
1200: 73 74 61 74 69 63 20 69 6e 74 20 6d 61 6b 65 50  static int makeP
1210: 6f 69 6e 74 65 72 53 74 72 28 54 63 6c 5f 49 6e  ointerStr(Tcl_In
1220: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 63 68  terp *interp, ch
1230: 61 72 20 2a 7a 50 74 72 2c 20 76 6f 69 64 20 2a  ar *zPtr, void *
1240: 70 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 6e  p){.  sqlite3_sn
1250: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 50 74 72  printf(100, zPtr
1260: 2c 20 22 25 70 22 2c 20 70 29 3b 0a 20 20 72 65  , "%p", p);.  re
1270: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
1280: 2f 2a 0a 2a 2a 20 54 68 65 20 63 61 6c 6c 62 61  /*.** The callba
1290: 63 6b 20 72 6f 75 74 69 6e 65 20 66 6f 72 20 73  ck routine for s
12a0: 71 6c 69 74 65 33 5f 65 78 65 63 5f 70 72 69 6e  qlite3_exec_prin
12b0: 74 66 28 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  tf()..*/.static 
12c0: 69 6e 74 20 65 78 65 63 5f 70 72 69 6e 74 66 5f  int exec_printf_
12d0: 63 62 28 76 6f 69 64 20 2a 70 41 72 67 2c 20 69  cb(void *pArg, i
12e0: 6e 74 20 61 72 67 63 2c 20 63 68 61 72 20 2a 2a  nt argc, char **
12f0: 61 72 67 76 2c 20 63 68 61 72 20 2a 2a 6e 61 6d  argv, char **nam
1300: 65 29 7b 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e  e){.  Tcl_DStrin
1310: 67 20 2a 73 74 72 20 3d 20 28 54 63 6c 5f 44 53  g *str = (Tcl_DS
1320: 74 72 69 6e 67 2a 29 70 41 72 67 3b 0a 20 20 69  tring*)pArg;.  i
1330: 6e 74 20 69 3b 0a 0a 20 20 69 66 28 20 54 63 6c  nt i;..  if( Tcl
1340: 5f 44 53 74 72 69 6e 67 4c 65 6e 67 74 68 28 73  _DStringLength(s
1350: 74 72 29 3d 3d 30 20 29 7b 0a 20 20 20 20 66 6f  tr)==0 ){.    fo
1360: 72 28 69 3d 30 3b 20 69 3c 61 72 67 63 3b 20 69  r(i=0; i<argc; i
1370: 2b 2b 29 7b 0a 20 20 20 20 20 20 54 63 6c 5f 44  ++){.      Tcl_D
1380: 53 74 72 69 6e 67 41 70 70 65 6e 64 45 6c 65 6d  StringAppendElem
1390: 65 6e 74 28 73 74 72 2c 20 6e 61 6d 65 5b 69 5d  ent(str, name[i]
13a0: 20 3f 20 6e 61 6d 65 5b 69 5d 20 3a 20 22 4e 55   ? name[i] : "NU
13b0: 4c 4c 22 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  LL");.    }.  }.
13c0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 61 72 67    for(i=0; i<arg
13d0: 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 54 63 6c  c; i++){.    Tcl
13e0: 5f 44 53 74 72 69 6e 67 41 70 70 65 6e 64 45 6c  _DStringAppendEl
13f0: 65 6d 65 6e 74 28 73 74 72 2c 20 61 72 67 76 5b  ement(str, argv[
1400: 69 5d 20 3f 20 61 72 67 76 5b 69 5d 20 3a 20 22  i] ? argv[i] : "
1410: 4e 55 4c 4c 22 29 3b 0a 20 20 7d 0a 20 20 72 65  NULL");.  }.  re
1420: 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn 0;.}../*.**
1430: 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33   Usage:  sqlite3
1440: 5f 65 78 65 63 5f 70 72 69 6e 74 66 20 20 44 42  _exec_printf  DB
1450: 20 20 46 4f 52 4d 41 54 20 20 53 54 52 49 4e 47    FORMAT  STRING
1460: 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68  .**.** Invoke th
1470: 65 20 73 71 6c 69 74 65 33 5f 65 78 65 63 5f 70  e sqlite3_exec_p
1480: 72 69 6e 74 66 28 29 20 69 6e 74 65 72 66 61 63  rintf() interfac
1490: 65 20 75 73 69 6e 67 20 74 68 65 20 6f 70 65 6e  e using the open
14a0: 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 44 42 2e   database.** DB.
14b0: 20 20 54 68 65 20 53 51 4c 20 69 73 20 74 68 65    The SQL is the
14c0: 20 73 74 72 69 6e 67 20 46 4f 52 4d 41 54 2e 20   string FORMAT. 
14d0: 20 54 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69   The format stri
14e0: 6e 67 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61 69  ng should contai
14f0: 6e 0a 2a 2a 20 6f 6e 65 20 25 73 20 6f 72 20 25  n.** one %s or %
1500: 71 2e 20 20 53 54 52 49 4e 47 20 69 73 20 74 68  q.  STRING is th
1510: 65 20 76 61 6c 75 65 20 69 6e 73 65 72 74 65 64  e value inserted
1520: 20 69 6e 74 6f 20 25 73 20 6f 72 20 25 71 2e 0a   into %s or %q..
1530: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
1540: 73 74 5f 65 78 65 63 5f 70 72 69 6e 74 66 28 0a  st_exec_printf(.
1550: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
1560: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
1570: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
1580: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
1590: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
15a0: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
15b0: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
15c0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
15d0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
15e0: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
15f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
1600: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
1610: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74  nt */.){.  sqlit
1620: 65 33 20 2a 64 62 3b 0a 20 20 54 63 6c 5f 44 53  e3 *db;.  Tcl_DS
1630: 74 72 69 6e 67 20 73 74 72 3b 0a 20 20 69 6e 74  tring str;.  int
1640: 20 72 63 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72   rc;.  char *zEr
1650: 72 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 2a 7a  r = 0;.  char *z
1660: 53 71 6c 3b 0a 20 20 63 68 61 72 20 7a 42 75 66  Sql;.  char zBuf
1670: 5b 33 30 5d 3b 0a 20 20 69 66 28 20 61 72 67 63  [30];.  if( argc
1680: 21 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=4 ){.    Tcl_A
1690: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
16a0: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
16b0: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
16c0: 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20  , argv[0], .    
16d0: 20 20 20 22 20 44 42 20 46 4f 52 4d 41 54 20 53     " DB FORMAT S
16e0: 54 52 49 4e 47 22 2c 20 30 29 3b 0a 20 20 20 20  TRING", 0);.    
16f0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
1700: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44  ;.  }.  if( getD
1710: 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  bPointer(interp,
1720: 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29   argv[1], &db) )
1730: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
1740: 52 3b 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e 67  R;.  Tcl_DString
1750: 49 6e 69 74 28 26 73 74 72 29 3b 0a 20 20 7a 53  Init(&str);.  zS
1760: 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  ql = sqlite3_mpr
1770: 69 6e 74 66 28 61 72 67 76 5b 32 5d 2c 20 61 72  intf(argv[2], ar
1780: 67 76 5b 33 5d 29 3b 0a 20 20 72 63 20 3d 20 73  gv[3]);.  rc = s
1790: 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20  qlite3_exec(db, 
17a0: 7a 53 71 6c 2c 20 65 78 65 63 5f 70 72 69 6e 74  zSql, exec_print
17b0: 66 5f 63 62 2c 20 26 73 74 72 2c 20 26 7a 45 72  f_cb, &str, &zEr
17c0: 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72  r);.  sqlite3_fr
17d0: 65 65 28 7a 53 71 6c 29 3b 0a 20 20 73 70 72 69  ee(zSql);.  spri
17e0: 6e 74 66 28 7a 42 75 66 2c 20 22 25 64 22 2c 20  ntf(zBuf, "%d", 
17f0: 72 63 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e  rc);.  Tcl_Appen
1800: 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c  dElement(interp,
1810: 20 7a 42 75 66 29 3b 0a 20 20 54 63 6c 5f 41 70   zBuf);.  Tcl_Ap
1820: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65  pendElement(inte
1830: 72 70 2c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rp, rc==SQLITE_O
1840: 4b 20 3f 20 54 63 6c 5f 44 53 74 72 69 6e 67 56  K ? Tcl_DStringV
1850: 61 6c 75 65 28 26 73 74 72 29 20 3a 20 7a 45 72  alue(&str) : zEr
1860: 72 29 3b 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e  r);.  Tcl_DStrin
1870: 67 46 72 65 65 28 26 73 74 72 29 3b 0a 20 20 69  gFree(&str);.  i
1880: 66 28 20 7a 45 72 72 20 29 20 66 72 65 65 28 7a  f( zErr ) free(z
1890: 45 72 72 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  Err);.  if( sqli
18a0: 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69  te3TestErrCode(i
18b0: 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29  nterp, db, rc) )
18c0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
18d0: 52 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  R;.  return TCL_
18e0: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
18f0: 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70 72  ge:  sqlite3_mpr
1900: 69 6e 74 66 5f 7a 5f 74 65 73 74 20 20 53 45 50  intf_z_test  SEP
1910: 41 52 41 54 4f 52 20 20 41 52 47 30 20 20 41 52  ARATOR  ARG0  AR
1920: 47 31 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 54 65 73  G1 ....**.** Tes
1930: 74 20 74 68 65 20 25 7a 20 66 6f 72 6d 61 74 20  t the %z format 
1940: 6f 66 20 6d 70 72 69 6e 74 66 28 29 2e 20 20 55  of mprintf().  U
1950: 73 65 20 6d 75 6c 74 69 70 6c 65 20 6d 70 72 69  se multiple mpri
1960: 6e 74 66 28 29 20 63 61 6c 6c 73 20 74 6f 20 0a  ntf() calls to .
1970: 2a 2a 20 63 6f 6e 63 61 74 65 6e 61 74 65 20 61  ** concatenate a
1980: 72 67 30 20 74 68 72 6f 75 67 68 20 61 72 67 6e  rg0 through argn
1990: 20 75 73 69 6e 67 20 73 65 70 61 72 61 74 6f 72   using separator
19a0: 20 61 73 20 74 68 65 20 73 65 70 61 72 61 74 6f   as the separato
19b0: 72 2e 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  r..** Return the
19c0: 20 72 65 73 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74   result..*/.stat
19d0: 69 63 20 69 6e 74 20 74 65 73 74 5f 6d 70 72 69  ic int test_mpri
19e0: 6e 74 66 5f 7a 28 0a 20 20 76 6f 69 64 20 2a 4e  ntf_z(.  void *N
19f0: 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e  otUsed,.  Tcl_In
1a00: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
1a10: 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
1a20: 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
1a30: 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
1a40: 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c  d */.  int argc,
1a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a60: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
1a70: 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ents */.  char *
1a80: 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20  *argv           
1a90: 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68   /* Text of each
1aa0: 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a   argument */.){.
1ab0: 20 20 63 68 61 72 20 2a 7a 52 65 73 75 6c 74 20    char *zResult 
1ac0: 3d 20 30 3b 0a 20 20 69 6e 74 20 69 3b 0a 0a 20  = 0;.  int i;.. 
1ad0: 20 66 6f 72 28 69 3d 32 3b 20 69 3c 61 72 67 63   for(i=2; i<argc
1ae0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 7a 52 65 73  ; i++){.    zRes
1af0: 75 6c 74 20 3d 20 73 71 6c 69 74 65 33 4d 50 72  ult = sqlite3MPr
1b00: 69 6e 74 66 28 22 25 7a 25 73 25 73 22 2c 20 7a  intf("%z%s%s", z
1b10: 52 65 73 75 6c 74 2c 20 61 72 67 76 5b 31 5d 2c  Result, argv[1],
1b20: 20 61 72 67 76 5b 69 5d 29 3b 0a 20 20 7d 0a 20   argv[i]);.  }. 
1b30: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
1b40: 74 28 69 6e 74 65 72 70 2c 20 7a 52 65 73 75 6c  t(interp, zResul
1b50: 74 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 46  t, 0);.  sqliteF
1b60: 72 65 65 28 7a 52 65 73 75 6c 74 29 3b 0a 20 20  ree(zResult);.  
1b70: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
1b80: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
1b90: 73 71 6c 69 74 65 33 5f 67 65 74 5f 74 61 62 6c  sqlite3_get_tabl
1ba0: 65 5f 70 72 69 6e 74 66 20 20 44 42 20 20 46 4f  e_printf  DB  FO
1bb0: 52 4d 41 54 20 20 53 54 52 49 4e 47 0a 2a 2a 0a  RMAT  STRING.**.
1bc0: 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 73 71  ** Invoke the sq
1bd0: 6c 69 74 65 33 5f 67 65 74 5f 74 61 62 6c 65 5f  lite3_get_table_
1be0: 70 72 69 6e 74 66 28 29 20 69 6e 74 65 72 66 61  printf() interfa
1bf0: 63 65 20 75 73 69 6e 67 20 74 68 65 20 6f 70 65  ce using the ope
1c00: 6e 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 44 42  n database.** DB
1c10: 2e 20 20 54 68 65 20 53 51 4c 20 69 73 20 74 68  .  The SQL is th
1c20: 65 20 73 74 72 69 6e 67 20 46 4f 52 4d 41 54 2e  e string FORMAT.
1c30: 20 20 54 68 65 20 66 6f 72 6d 61 74 20 73 74 72    The format str
1c40: 69 6e 67 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61  ing should conta
1c50: 69 6e 0a 2a 2a 20 6f 6e 65 20 25 73 20 6f 72 20  in.** one %s or 
1c60: 25 71 2e 20 20 53 54 52 49 4e 47 20 69 73 20 74  %q.  STRING is t
1c70: 68 65 20 76 61 6c 75 65 20 69 6e 73 65 72 74 65  he value inserte
1c80: 64 20 69 6e 74 6f 20 25 73 20 6f 72 20 25 71 2e  d into %s or %q.
1c90: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
1ca0: 65 73 74 5f 67 65 74 5f 74 61 62 6c 65 5f 70 72  est_get_table_pr
1cb0: 69 6e 74 66 28 0a 20 20 76 6f 69 64 20 2a 4e 6f  intf(.  void *No
1cc0: 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74  tUsed,.  Tcl_Int
1cd0: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
1ce0: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
1cf0: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
1d00: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
1d10: 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20   */.  int argc, 
1d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d30: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
1d40: 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  nts */.  char **
1d50: 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20  argv            
1d60: 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20  /* Text of each 
1d70: 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20  argument */.){. 
1d80: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
1d90: 54 63 6c 5f 44 53 74 72 69 6e 67 20 73 74 72 3b  Tcl_DString str;
1da0: 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 68 61  .  int rc;.  cha
1db0: 72 20 2a 7a 45 72 72 20 3d 20 30 3b 0a 20 20 69  r *zErr = 0;.  i
1dc0: 6e 74 20 6e 52 6f 77 2c 20 6e 43 6f 6c 3b 0a 20  nt nRow, nCol;. 
1dd0: 20 63 68 61 72 20 2a 2a 61 52 65 73 75 6c 74 3b   char **aResult;
1de0: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63 68 61 72  .  int i;.  char
1df0: 20 7a 42 75 66 5b 33 30 5d 3b 0a 20 20 63 68 61   zBuf[30];.  cha
1e00: 72 20 2a 7a 53 71 6c 3b 0a 20 20 69 66 28 20 61  r *zSql;.  if( a
1e10: 72 67 63 21 3d 34 20 29 7b 0a 20 20 20 20 54 63  rgc!=4 ){.    Tc
1e20: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
1e30: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
1e40: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
1e50: 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20  \"", argv[0], . 
1e60: 20 20 20 20 20 20 22 20 44 42 20 46 4f 52 4d 41        " DB FORMA
1e70: 54 20 53 54 52 49 4e 47 22 2c 20 30 29 3b 0a 20  T STRING", 0);. 
1e80: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
1e90: 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67  ROR;.  }.  if( g
1ea0: 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65  etDbPointer(inte
1eb0: 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62  rp, argv[1], &db
1ec0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
1ed0: 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 44 53 74 72  RROR;.  Tcl_DStr
1ee0: 69 6e 67 49 6e 69 74 28 26 73 74 72 29 3b 0a 20  ingInit(&str);. 
1ef0: 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f   zSql = sqlite3_
1f00: 6d 70 72 69 6e 74 66 28 61 72 67 76 5b 32 5d 2c  mprintf(argv[2],
1f10: 61 72 67 76 5b 33 5d 29 3b 0a 20 20 72 63 20 3d  argv[3]);.  rc =
1f20: 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 74 61 62   sqlite3_get_tab
1f30: 6c 65 28 64 62 2c 20 7a 53 71 6c 2c 20 26 61 52  le(db, zSql, &aR
1f40: 65 73 75 6c 74 2c 20 26 6e 52 6f 77 2c 20 26 6e  esult, &nRow, &n
1f50: 43 6f 6c 2c 20 26 7a 45 72 72 29 3b 0a 20 20 73  Col, &zErr);.  s
1f60: 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53 71 6c  qlite3_free(zSql
1f70: 29 3b 0a 20 20 73 70 72 69 6e 74 66 28 7a 42 75  );.  sprintf(zBu
1f80: 66 2c 20 22 25 64 22 2c 20 72 63 29 3b 0a 20 20  f, "%d", rc);.  
1f90: 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e  Tcl_AppendElemen
1fa0: 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 29 3b  t(interp, zBuf);
1fb0: 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
1fc0: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 70 72 69  E_OK ){.    spri
1fd0: 6e 74 66 28 7a 42 75 66 2c 20 22 25 64 22 2c 20  ntf(zBuf, "%d", 
1fe0: 6e 52 6f 77 29 3b 0a 20 20 20 20 54 63 6c 5f 41  nRow);.    Tcl_A
1ff0: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74  ppendElement(int
2000: 65 72 70 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20  erp, zBuf);.    
2010: 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 25  sprintf(zBuf, "%
2020: 64 22 2c 20 6e 43 6f 6c 29 3b 0a 20 20 20 20 54  d", nCol);.    T
2030: 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  cl_AppendElement
2040: 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 29 3b 0a  (interp, zBuf);.
2050: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 28      for(i=0; i<(
2060: 6e 52 6f 77 2b 31 29 2a 6e 43 6f 6c 3b 20 69 2b  nRow+1)*nCol; i+
2070: 2b 29 7b 0a 20 20 20 20 20 20 54 63 6c 5f 41 70  +){.      Tcl_Ap
2080: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65  pendElement(inte
2090: 72 70 2c 20 61 52 65 73 75 6c 74 5b 69 5d 20 3f  rp, aResult[i] ?
20a0: 20 61 52 65 73 75 6c 74 5b 69 5d 20 3a 20 22 4e   aResult[i] : "N
20b0: 55 4c 4c 22 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  ULL");.    }.  }
20c0: 65 6c 73 65 7b 0a 20 20 20 20 54 63 6c 5f 41 70  else{.    Tcl_Ap
20d0: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65  pendElement(inte
20e0: 72 70 2c 20 7a 45 72 72 29 3b 0a 20 20 7d 0a 20  rp, zErr);.  }. 
20f0: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 5f 74 61   sqlite3_free_ta
2100: 62 6c 65 28 61 52 65 73 75 6c 74 29 3b 0a 20 20  ble(aResult);.  
2110: 69 66 28 20 7a 45 72 72 20 29 20 66 72 65 65 28  if( zErr ) free(
2120: 7a 45 72 72 29 3b 0a 20 20 69 66 28 20 73 71 6c  zErr);.  if( sql
2130: 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28  ite3TestErrCode(
2140: 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20  interp, db, rc) 
2150: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
2160: 4f 52 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  OR;.  return TCL
2170: 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 55  _OK;.}.../*.** U
2180: 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6c  sage:  sqlite3_l
2190: 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
21a0: 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e   DB.**.** Return
21b0: 73 20 74 68 65 20 69 6e 74 65 67 65 72 20 52 4f  s the integer RO
21c0: 57 49 44 20 6f 66 20 74 68 65 20 6d 6f 73 74 20  WID of the most 
21d0: 72 65 63 65 6e 74 20 69 6e 73 65 72 74 2e 0a 2a  recent insert..*
21e0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
21f0: 74 5f 6c 61 73 74 5f 72 6f 77 69 64 28 0a 20 20  t_last_rowid(.  
2200: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
2210: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
2220: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
2230: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
2240: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
2250: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
2260: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
2270: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
2280: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
2290: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
22a0: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
22b0: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
22c0: 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33   */.){.  sqlite3
22d0: 20 2a 64 62 3b 0a 20 20 63 68 61 72 20 7a 42 75   *db;.  char zBu
22e0: 66 5b 33 30 5d 3b 0a 0a 20 20 69 66 28 20 61 72  f[30];..  if( ar
22f0: 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=2 ){.    Tcl
2300: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
2310: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
2320: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
2330: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 22 20 44  "", argv[0], " D
2340: 42 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  B\"", 0);.    re
2350: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
2360: 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
2370: 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61  ointer(interp, a
2380: 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72  rgv[1], &db) ) r
2390: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
23a0: 0a 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c  .  sprintf(zBuf,
23b0: 20 22 25 6c 6c 64 22 2c 20 73 71 6c 69 74 65 33   "%lld", sqlite3
23c0: 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  _last_insert_row
23d0: 69 64 28 64 62 29 29 3b 0a 20 20 54 63 6c 5f 41  id(db));.  Tcl_A
23e0: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
23f0: 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 20 20  rp, zBuf, 0);.  
2400: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
2410: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
2420: 3a 20 20 73 71 6c 69 74 65 33 5f 6b 65 79 20 44  :  sqlite3_key D
2430: 42 20 4b 45 59 0a 2a 2a 0a 2a 2a 20 53 65 74 20  B KEY.**.** Set 
2440: 74 68 65 20 63 6f 64 65 63 20 6b 65 79 2e 0a 2a  the codec key..*
2450: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
2460: 74 5f 6b 65 79 28 0a 20 20 76 6f 69 64 20 2a 4e  t_key(.  void *N
2470: 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e  otUsed,.  Tcl_In
2480: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
2490: 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
24a0: 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
24b0: 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
24c0: 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c  d */.  int argc,
24d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24e0: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
24f0: 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ents */.  char *
2500: 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20  *argv           
2510: 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68   /* Text of each
2520: 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a   argument */.){.
2530: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
2540: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65   const char *zKe
2550: 79 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20  y;.  int nKey;. 
2560: 20 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a   if( argc!=3 ){.
2570: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
2580: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
2590: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
25a0: 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
25b0: 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 49 4c  0],.       " FIL
25c0: 45 4e 41 4d 45 5c 22 22 2c 20 30 29 3b 0a 20 20  ENAME\"", 0);.  
25d0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
25e0: 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
25f0: 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tDbPointer(inter
2600: 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29  p, argv[1], &db)
2610: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
2620: 52 4f 52 3b 0a 20 20 7a 4b 65 79 20 3d 20 61 72  ROR;.  zKey = ar
2630: 67 76 5b 32 5d 3b 0a 20 20 6e 4b 65 79 20 3d 20  gv[2];.  nKey = 
2640: 73 74 72 6c 65 6e 28 7a 4b 65 79 29 3b 0a 23 69  strlen(zKey);.#i
2650: 66 64 65 66 20 53 51 4c 49 54 45 5f 48 41 53 5f  fdef SQLITE_HAS_
2660: 43 4f 44 45 43 0a 20 20 73 71 6c 69 74 65 33 5f  CODEC.  sqlite3_
2670: 6b 65 79 28 64 62 2c 20 7a 4b 65 79 2c 20 6e 4b  key(db, zKey, nK
2680: 65 79 29 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65  ey);.#endif.  re
2690: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
26a0: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
26b0: 6c 69 74 65 33 5f 72 65 6b 65 79 20 44 42 20 4b  lite3_rekey DB K
26c0: 45 59 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20  EY.**.** Change 
26d0: 74 68 65 20 63 6f 64 65 63 20 6b 65 79 2e 0a 2a  the codec key..*
26e0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
26f0: 74 5f 72 65 6b 65 79 28 0a 20 20 76 6f 69 64 20  t_rekey(.  void 
2700: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f  *NotUsed,.  Tcl_
2710: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
2720: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
2730: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
2740: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
2750: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67  and */.  int arg
2760: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
2770: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
2780: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72  uments */.  char
2790: 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20   **argv         
27a0: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61     /* Text of ea
27b0: 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29  ch argument */.)
27c0: 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
27d0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
27e0: 4b 65 79 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 3b  Key;.  int nKey;
27f0: 0a 20 20 69 66 28 20 61 72 67 63 21 3d 33 20 29  .  if( argc!=3 )
2800: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
2810: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
2820: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
2830: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
2840: 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46  v[0],.       " F
2850: 49 4c 45 4e 41 4d 45 5c 22 22 2c 20 30 29 3b 0a  ILENAME\"", 0);.
2860: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
2870: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
2880: 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
2890: 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64  erp, argv[1], &d
28a0: 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
28b0: 45 52 52 4f 52 3b 0a 20 20 7a 4b 65 79 20 3d 20  ERROR;.  zKey = 
28c0: 61 72 67 76 5b 32 5d 3b 0a 20 20 6e 4b 65 79 20  argv[2];.  nKey 
28d0: 3d 20 73 74 72 6c 65 6e 28 7a 4b 65 79 29 3b 0a  = strlen(zKey);.
28e0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 48 41  #ifdef SQLITE_HA
28f0: 53 5f 43 4f 44 45 43 0a 20 20 73 71 6c 69 74 65  S_CODEC.  sqlite
2900: 33 5f 72 65 6b 65 79 28 64 62 2c 20 7a 4b 65 79  3_rekey(db, zKey
2910: 2c 20 6e 4b 65 79 29 3b 0a 23 65 6e 64 69 66 0a  , nKey);.#endif.
2920: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
2930: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
2940: 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20    sqlite3_close 
2950: 44 42 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 73 20  DB.**.** Closes 
2960: 74 68 65 20 64 61 74 61 62 61 73 65 20 6f 70 65  the database ope
2970: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6f  ned by sqlite3_o
2980: 70 65 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  pen..*/.static i
2990: 6e 74 20 73 71 6c 69 74 65 5f 74 65 73 74 5f 63  nt sqlite_test_c
29a0: 6c 6f 73 65 28 0a 20 20 76 6f 69 64 20 2a 4e 6f  lose(.  void *No
29b0: 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74  tUsed,.  Tcl_Int
29c0: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
29d0: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
29e0: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
29f0: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
2a00: 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20   */.  int argc, 
2a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2a20: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
2a30: 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  nts */.  char **
2a40: 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20  argv            
2a50: 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20  /* Text of each 
2a60: 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20  argument */.){. 
2a70: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
2a80: 69 6e 74 20 72 63 3b 0a 20 20 69 66 28 20 61 72  int rc;.  if( ar
2a90: 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=2 ){.    Tcl
2aa0: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
2ab0: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
2ac0: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
2ad0: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20  "", argv[0],.   
2ae0: 20 20 20 20 22 20 46 49 4c 45 4e 41 4d 45 5c 22      " FILENAME\"
2af0: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
2b00: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
2b10: 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e  .  if( getDbPoin
2b20: 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76  ter(interp, argv
2b30: 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75  [1], &db) ) retu
2b40: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
2b50: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 6c 6f  rc = sqlite3_clo
2b60: 73 65 28 64 62 29 3b 0a 20 20 54 63 6c 5f 53 65  se(db);.  Tcl_Se
2b70: 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  tResult(interp, 
2b80: 28 63 68 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d  (char *)errorNam
2b90: 65 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49  e(rc), TCL_STATI
2ba0: 43 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  C);.  return TCL
2bb0: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6d  _OK;.}../*.** Im
2bc0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
2bd0: 74 68 65 20 78 5f 63 6f 61 6c 65 73 63 65 28 29  the x_coalesce()
2be0: 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 20 52 65   function..** Re
2bf0: 74 75 72 6e 20 74 68 65 20 66 69 72 73 74 20 61  turn the first a
2c00: 72 67 75 6d 65 6e 74 20 6e 6f 6e 2d 4e 55 4c 4c  rgument non-NULL
2c10: 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74   argument..*/.st
2c20: 61 74 69 63 20 76 6f 69 64 20 69 66 6e 75 6c 6c  atic void ifnull
2c30: 46 75 6e 63 28 73 71 6c 69 74 65 33 5f 63 6f 6e  Func(sqlite3_con
2c40: 74 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c 20 69  text *context, i
2c50: 6e 74 20 61 72 67 63 2c 20 73 71 6c 69 74 65 33  nt argc, sqlite3
2c60: 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76 29 7b 0a  _value **argv){.
2c70: 20 20 69 6e 74 20 69 3b 0a 20 20 66 6f 72 28 69    int i;.  for(i
2c80: 3d 30 3b 20 69 3c 61 72 67 63 3b 20 69 2b 2b 29  =0; i<argc; i++)
2c90: 7b 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54 45  {.    if( SQLITE
2ca0: 5f 4e 55 4c 4c 21 3d 73 71 6c 69 74 65 33 5f 76  _NULL!=sqlite3_v
2cb0: 61 6c 75 65 5f 74 79 70 65 28 61 72 67 76 5b 69  alue_type(argv[i
2cc0: 5d 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ]) ){.      sqli
2cd0: 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28  te3_result_text(
2ce0: 63 6f 6e 74 65 78 74 2c 20 73 71 6c 69 74 65 33  context, sqlite3
2cf0: 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67 76  _value_text(argv
2d00: 5b 69 5d 29 2c 0a 20 20 20 20 20 20 20 20 20 20  [i]),.          
2d10: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79  sqlite3_value_by
2d20: 74 65 73 28 61 72 67 76 5b 69 5d 29 2c 20 53 51  tes(argv[i]), SQ
2d30: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
2d40: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
2d50: 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a    }.  }.}../*.**
2d60: 20 41 20 73 74 72 75 63 74 75 72 65 20 69 6e 74   A structure int
2d70: 6f 20 77 68 69 63 68 20 74 6f 20 61 63 63 75 6d  o which to accum
2d80: 75 6c 61 74 65 20 74 65 78 74 2e 0a 2a 2f 0a 73  ulate text..*/.s
2d90: 74 72 75 63 74 20 64 73 74 72 20 7b 0a 20 20 69  truct dstr {.  i
2da0: 6e 74 20 6e 41 6c 6c 6f 63 3b 20 20 2f 2a 20 53  nt nAlloc;  /* S
2db0: 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 2a  pace allocated *
2dc0: 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20  /.  int nUsed;  
2dd0: 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20 2a   /* Space used *
2de0: 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20  /.  char *z;    
2df0: 20 2f 2a 20 54 68 65 20 73 70 61 63 65 20 2a 2f   /* The space */
2e00: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 70 70 65 6e  .};../*.** Appen
2e10: 64 20 74 65 78 74 20 74 6f 20 61 20 64 73 74 72  d text to a dstr
2e20: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
2e30: 64 73 74 72 41 70 70 65 6e 64 28 73 74 72 75 63  dstrAppend(struc
2e40: 74 20 64 73 74 72 20 2a 70 2c 20 63 6f 6e 73 74  t dstr *p, const
2e50: 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 64 69   char *z, int di
2e60: 76 69 64 65 72 29 7b 0a 20 20 69 6e 74 20 6e 20  vider){.  int n 
2e70: 3d 20 73 74 72 6c 65 6e 28 7a 29 3b 0a 20 20 69  = strlen(z);.  i
2e80: 66 28 20 70 2d 3e 6e 55 73 65 64 20 2b 20 6e 20  f( p->nUsed + n 
2e90: 2b 20 32 20 3e 20 70 2d 3e 6e 41 6c 6c 6f 63 20  + 2 > p->nAlloc 
2ea0: 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 65  ){.    char *zNe
2eb0: 77 3b 0a 20 20 20 20 70 2d 3e 6e 41 6c 6c 6f 63  w;.    p->nAlloc
2ec0: 20 3d 20 70 2d 3e 6e 41 6c 6c 6f 63 2a 32 20 2b   = p->nAlloc*2 +
2ed0: 20 6e 20 2b 20 32 30 30 3b 0a 20 20 20 20 7a 4e   n + 200;.    zN
2ee0: 65 77 20 3d 20 73 71 6c 69 74 65 52 65 61 6c 6c  ew = sqliteReall
2ef0: 6f 63 28 70 2d 3e 7a 2c 20 70 2d 3e 6e 41 6c 6c  oc(p->z, p->nAll
2f00: 6f 63 29 3b 0a 20 20 20 20 69 66 28 20 7a 4e 65  oc);.    if( zNe
2f10: 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71  w==0 ){.      sq
2f20: 6c 69 74 65 46 72 65 65 28 70 2d 3e 7a 29 3b 0a  liteFree(p->z);.
2f30: 20 20 20 20 20 20 6d 65 6d 73 65 74 28 70 2c 20        memset(p, 
2f40: 30 2c 20 73 69 7a 65 6f 66 28 2a 70 29 29 3b 0a  0, sizeof(*p));.
2f50: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20        return;.  
2f60: 20 20 7d 0a 20 20 20 20 70 2d 3e 7a 20 3d 20 7a    }.    p->z = z
2f70: 4e 65 77 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64  New;.  }.  if( d
2f80: 69 76 69 64 65 72 20 26 26 20 70 2d 3e 6e 55 73  ivider && p->nUs
2f90: 65 64 3e 30 20 29 7b 0a 20 20 20 20 70 2d 3e 7a  ed>0 ){.    p->z
2fa0: 5b 70 2d 3e 6e 55 73 65 64 2b 2b 5d 20 3d 20 64  [p->nUsed++] = d
2fb0: 69 76 69 64 65 72 3b 0a 20 20 7d 0a 20 20 6d 65  ivider;.  }.  me
2fc0: 6d 63 70 79 28 26 70 2d 3e 7a 5b 70 2d 3e 6e 55  mcpy(&p->z[p->nU
2fd0: 73 65 64 5d 2c 20 7a 2c 20 6e 2b 31 29 3b 0a 20  sed], z, n+1);. 
2fe0: 20 70 2d 3e 6e 55 73 65 64 20 2b 3d 20 6e 3b 0a   p->nUsed += n;.
2ff0: 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 64  }../*.** Invoked
3000: 20 66 6f 72 20 65 61 63 68 20 63 61 6c 6c 62 61   for each callba
3010: 63 6b 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 45  ck from sqlite3E
3020: 78 65 63 46 75 6e 63 0a 2a 2f 0a 73 74 61 74 69  xecFunc.*/.stati
3030: 63 20 69 6e 74 20 65 78 65 63 46 75 6e 63 43 61  c int execFuncCa
3040: 6c 6c 62 61 63 6b 28 76 6f 69 64 20 2a 70 44 61  llback(void *pDa
3050: 74 61 2c 20 69 6e 74 20 61 72 67 63 2c 20 63 68  ta, int argc, ch
3060: 61 72 20 2a 2a 61 72 67 76 2c 20 63 68 61 72 20  ar **argv, char 
3070: 2a 2a 4e 6f 74 55 73 65 64 29 7b 0a 20 20 73 74  **NotUsed){.  st
3080: 72 75 63 74 20 64 73 74 72 20 2a 70 20 3d 20 28  ruct dstr *p = (
3090: 73 74 72 75 63 74 20 64 73 74 72 2a 29 70 44 61  struct dstr*)pDa
30a0: 74 61 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 66  ta;.  int i;.  f
30b0: 6f 72 28 69 3d 30 3b 20 69 3c 61 72 67 63 3b 20  or(i=0; i<argc; 
30c0: 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 61 72  i++){.    if( ar
30d0: 67 76 5b 69 5d 3d 3d 30 20 29 7b 0a 20 20 20 20  gv[i]==0 ){.    
30e0: 20 20 64 73 74 72 41 70 70 65 6e 64 28 70 2c 20    dstrAppend(p, 
30f0: 22 4e 55 4c 4c 22 2c 20 27 20 27 29 3b 0a 20 20  "NULL", ' ');.  
3100: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64    }else{.      d
3110: 73 74 72 41 70 70 65 6e 64 28 70 2c 20 61 72 67  strAppend(p, arg
3120: 76 5b 69 5d 2c 20 27 20 27 29 3b 0a 20 20 20 20  v[i], ' ');.    
3130: 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30  }.  }.  return 0
3140: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c 65  ;.}../*.** Imple
3150: 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  mentation of the
3160: 20 78 5f 73 71 6c 69 74 65 5f 65 78 65 63 28 29   x_sqlite_exec()
3170: 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 69 73   function.  This
3180: 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73 0a   function takes.
3190: 2a 2a 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75  ** a single argu
31a0: 6d 65 6e 74 20 61 6e 64 20 61 74 74 65 6d 70 74  ment and attempt
31b0: 73 20 74 6f 20 65 78 65 63 75 74 65 20 74 68 61  s to execute tha
31c0: 74 20 61 72 67 75 6d 65 6e 74 20 61 73 20 53 51  t argument as SQ
31d0: 4c 20 63 6f 64 65 2e 0a 2a 2a 20 54 68 69 73 20  L code..** This 
31e0: 69 73 20 69 6c 6c 65 67 61 6c 20 61 6e 64 20 73  is illegal and s
31f0: 68 6f 75 6c 64 20 73 65 74 20 74 68 65 20 53 51  hould set the SQ
3200: 4c 49 54 45 5f 4d 49 53 55 53 45 20 66 6c 61 67  LITE_MISUSE flag
3210: 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
3220: 2e 0a 2a 2a 0a 2a 2a 20 32 30 30 34 2d 4a 61 6e  ..**.** 2004-Jan
3230: 2d 30 37 3a 20 20 57 65 20 68 61 76 65 20 63 68  -07:  We have ch
3240: 61 6e 67 65 64 20 74 68 69 73 20 74 6f 20 6d 61  anged this to ma
3250: 6b 65 20 69 74 20 6c 65 67 61 6c 20 74 6f 20 63  ke it legal to c
3260: 61 6c 6c 20 73 71 6c 69 74 65 33 5f 65 78 65 63  all sqlite3_exec
3270: 28 29 0a 2a 2a 20 66 72 6f 6d 20 77 69 74 68 69  ().** from withi
3280: 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 63 61 6c  n a function cal
3290: 6c 2e 20 20 0a 2a 2a 20 0a 2a 2a 20 54 68 69 73  l.  .** .** This
32a0: 20 72 6f 75 74 69 6e 65 20 73 69 6d 75 6c 61 74   routine simulat
32b0: 65 73 20 74 68 65 20 65 66 66 65 63 74 20 6f 66  es the effect of
32c0: 20 68 61 76 69 6e 67 20 74 77 6f 20 74 68 72 65   having two thre
32d0: 61 64 73 20 61 74 74 65 6d 70 74 20 74 6f 0a 2a  ads attempt to.*
32e0: 2a 20 75 73 65 20 74 68 65 20 73 61 6d 65 20 64  * use the same d
32f0: 61 74 61 62 61 73 65 20 61 74 20 74 68 65 20 73  atabase at the s
3300: 61 6d 65 20 74 69 6d 65 2e 0a 2a 2f 0a 73 74 61  ame time..*/.sta
3310: 74 69 63 20 76 6f 69 64 20 73 71 6c 69 74 65 33  tic void sqlite3
3320: 45 78 65 63 46 75 6e 63 28 0a 20 20 73 71 6c 69  ExecFunc(.  sqli
3330: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e  te3_context *con
3340: 74 65 78 74 2c 20 0a 20 20 69 6e 74 20 61 72 67  text, .  int arg
3350: 63 2c 20 20 0a 20 20 73 71 6c 69 74 65 33 5f 76  c,  .  sqlite3_v
3360: 61 6c 75 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20  alue **argv.){. 
3370: 20 73 74 72 75 63 74 20 64 73 74 72 20 78 3b 0a   struct dstr x;.
3380: 20 20 6d 65 6d 73 65 74 28 26 78 2c 20 30 2c 20    memset(&x, 0, 
3390: 73 69 7a 65 6f 66 28 78 29 29 3b 0a 20 20 73 71  sizeof(x));.  sq
33a0: 6c 69 74 65 33 5f 65 78 65 63 28 28 73 71 6c 69  lite3_exec((sqli
33b0: 74 65 33 2a 29 73 71 6c 69 74 65 33 5f 75 73 65  te3*)sqlite3_use
33c0: 72 5f 64 61 74 61 28 63 6f 6e 74 65 78 74 29 2c  r_data(context),
33d0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76  .      sqlite3_v
33e0: 61 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b 30  alue_text(argv[0
33f0: 5d 29 2c 0a 20 20 20 20 20 20 65 78 65 63 46 75  ]),.      execFu
3400: 6e 63 43 61 6c 6c 62 61 63 6b 2c 20 26 78 2c 20  ncCallback, &x, 
3410: 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65  0);.  sqlite3_re
3420: 73 75 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65 78  sult_text(contex
3430: 74 2c 20 78 2e 7a 2c 20 78 2e 6e 55 73 65 64 2c  t, x.z, x.nUsed,
3440: 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
3450: 54 29 3b 0a 20 20 73 71 6c 69 74 65 46 72 65 65  T);.  sqliteFree
3460: 28 78 2e 7a 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  (x.z);.}../*.** 
3470: 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 5f 74  Usage:  sqlite_t
3480: 65 73 74 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  est_create_funct
3490: 69 6f 6e 20 44 42 0a 2a 2a 0a 2a 2a 20 43 61 6c  ion DB.**.** Cal
34a0: 6c 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63 72  l the sqlite3_cr
34b0: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 20 41 50  eate_function AP
34c0: 49 20 6f 6e 20 74 68 65 20 67 69 76 65 6e 20 64  I on the given d
34d0: 61 74 61 62 61 73 65 20 69 6e 20 6f 72 64 65 72  atabase in order
34e0: 0a 2a 2a 20 74 6f 20 63 72 65 61 74 65 20 61 20  .** to create a 
34f0: 66 75 6e 63 74 69 6f 6e 20 6e 61 6d 65 64 20 22  function named "
3500: 78 5f 63 6f 61 6c 65 73 63 65 22 2e 20 20 54 68  x_coalesce".  Th
3510: 69 73 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73  is function does
3520: 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67 0a   the same thing.
3530: 2a 2a 20 61 73 20 74 68 65 20 22 63 6f 61 6c 65  ** as the "coale
3540: 73 63 65 22 20 66 75 6e 63 74 69 6f 6e 2e 20 20  sce" function.  
3550: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 61 6c  This function al
3560: 73 6f 20 72 65 67 69 73 74 65 72 73 20 61 6e 20  so registers an 
3570: 53 51 4c 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20  SQL function.** 
3580: 6e 61 6d 65 64 20 22 78 5f 73 71 6c 69 74 65 5f  named "x_sqlite_
3590: 65 78 65 63 22 20 74 68 61 74 20 69 6e 76 6f 6b  exec" that invok
35a0: 65 73 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28  es sqlite3_exec(
35b0: 29 2e 20 20 49 6e 76 6f 6b 69 6e 67 20 73 71 6c  ).  Invoking sql
35c0: 69 74 65 33 5f 65 78 65 63 28 29 0a 2a 2a 20 69  ite3_exec().** i
35d0: 6e 20 74 68 69 73 20 77 61 79 20 69 73 20 69 6c  n this way is il
35e0: 6c 65 67 61 6c 20 72 65 63 75 72 73 69 6f 6e 20  legal recursion 
35f0: 61 6e 64 20 73 68 6f 75 6c 64 20 72 61 69 73 65  and should raise
3600: 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53   an SQLITE_MISUS
3610: 45 20 65 72 72 6f 72 2e 0a 2a 2a 20 54 68 65 20  E error..** The 
3620: 65 66 66 65 63 74 20 69 73 20 73 69 6d 69 6c 61  effect is simila
3630: 72 20 74 6f 20 74 72 79 69 6e 67 20 74 6f 20 75  r to trying to u
3640: 73 65 20 74 68 65 20 73 61 6d 65 20 64 61 74 61  se the same data
3650: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
3660: 66 72 6f 6d 0a 2a 2a 20 74 77 6f 20 74 68 72 65  from.** two thre
3670: 61 64 73 20 61 74 20 74 68 65 20 73 61 6d 65 20  ads at the same 
3680: 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  time..**.** The 
3690: 6f 72 69 67 69 6e 61 6c 20 6d 6f 74 69 76 61 74  original motivat
36a0: 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 72 6f 75  ion for this rou
36b0: 74 69 6e 65 20 77 61 73 20 74 6f 20 62 65 20 61  tine was to be a
36c0: 62 6c 65 20 74 6f 20 63 61 6c 6c 20 74 68 65 0a  ble to call the.
36d0: 2a 2a 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  ** sqlite3_creat
36e0: 65 5f 66 75 6e 63 74 69 6f 6e 20 66 75 6e 63 74  e_function funct
36f0: 69 6f 6e 20 77 68 69 6c 65 20 61 20 71 75 65 72  ion while a quer
3700: 79 20 69 73 20 69 6e 20 70 72 6f 67 72 65 73 73  y is in progress
3710: 20 69 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20   in order.** to 
3720: 74 65 73 74 20 74 68 65 20 53 51 4c 49 54 45 5f  test the SQLITE_
3730: 4d 49 53 55 53 45 20 64 65 74 65 63 74 69 6f 6e  MISUSE detection
3740: 20 6c 6f 67 69 63 2e 0a 2a 2f 0a 73 74 61 74 69   logic..*/.stati
3750: 63 20 69 6e 74 20 74 65 73 74 5f 63 72 65 61 74  c int test_creat
3760: 65 5f 66 75 6e 63 74 69 6f 6e 28 0a 20 20 76 6f  e_function(.  vo
3770: 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54  id *NotUsed,.  T
3780: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
3790: 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c  p,    /* The TCL
37a0: 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61   interpreter tha
37b0: 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63  t invoked this c
37c0: 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  ommand */.  int 
37d0: 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20  argc,           
37e0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
37f0: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63  arguments */.  c
3800: 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20  har **argv      
3810: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
3820: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a   each argument *
3830: 2f 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  /.){.  int rc;. 
3840: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
3850: 65 78 74 65 72 6e 20 76 6f 69 64 20 4d 64 35 5f  extern void Md5_
3860: 52 65 67 69 73 74 65 72 28 73 71 6c 69 74 65 33  Register(sqlite3
3870: 2a 29 3b 0a 0a 20 20 69 66 28 20 61 72 67 63 21  *);..  if( argc!
3880: 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =2 ){.    Tcl_Ap
3890: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
38a0: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
38b0: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
38c0: 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20   argv[0],.      
38d0: 20 22 20 44 42 5c 22 22 2c 20 30 29 3b 0a 20 20   " DB\"", 0);.  
38e0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
38f0: 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
3900: 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tDbPointer(inter
3910: 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29  p, argv[1], &db)
3920: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
3930: 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ROR;.  rc = sqli
3940: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
3950: 69 6f 6e 28 64 62 2c 20 22 78 5f 63 6f 61 6c 65  ion(db, "x_coale
3960: 73 63 65 22 2c 20 2d 31 2c 20 53 51 4c 49 54 45  sce", -1, SQLITE
3970: 5f 41 4e 59 2c 20 30 2c 20 0a 20 20 20 20 20 20  _ANY, 0, .      
3980: 20 20 69 66 6e 75 6c 6c 46 75 6e 63 2c 20 30 2c    ifnullFunc, 0,
3990: 20 30 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51   0);..#ifndef SQ
39a0: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
39b0: 20 20 2f 2a 20 55 73 65 20 74 68 65 20 73 71 6c    /* Use the sql
39c0: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
39d0: 74 69 6f 6e 31 36 28 29 20 41 50 49 20 68 65 72  tion16() API her
39e0: 65 2e 20 4d 61 69 6e 6c 79 20 66 6f 72 20 66 75  e. Mainly for fu
39f0: 6e 2c 20 62 75 74 20 61 6c 73 6f 20 0a 20 20 2a  n, but also .  *
3a00: 2a 20 62 65 63 61 75 73 65 20 69 74 20 69 73 20  * because it is 
3a10: 6e 6f 74 20 74 65 73 74 65 64 20 61 6e 79 77 68  not tested anywh
3a20: 65 72 65 20 65 6c 73 65 2e 20 2a 2f 0a 20 20 69  ere else. */.  i
3a30: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
3a40: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   ){.    sqlite3_
3a50: 76 61 6c 75 65 20 2a 70 56 61 6c 3b 0a 20 20 20  value *pVal;.   
3a60: 20 70 56 61 6c 20 3d 20 73 71 6c 69 74 65 33 56   pVal = sqlite3V
3a70: 61 6c 75 65 4e 65 77 28 29 3b 0a 20 20 20 20 73  alueNew();.    s
3a80: 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74  qlite3ValueSetSt
3a90: 72 28 70 56 61 6c 2c 20 2d 31 2c 20 22 78 5f 73  r(pVal, -1, "x_s
3aa0: 71 6c 69 74 65 5f 65 78 65 63 22 2c 20 53 51 4c  qlite_exec", SQL
3ab0: 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45  ITE_UTF8, SQLITE
3ac0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 72 63  _STATIC);.    rc
3ad0: 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74   = sqlite3_creat
3ae0: 65 5f 66 75 6e 63 74 69 6f 6e 31 36 28 64 62 2c  e_function16(db,
3af0: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
3b00: 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74  sqlite3ValueText
3b10: 28 70 56 61 6c 2c 20 53 51 4c 49 54 45 5f 55 54  (pVal, SQLITE_UT
3b20: 46 31 36 4e 41 54 49 56 45 29 2c 0a 20 20 20 20  F16NATIVE),.    
3b30: 20 20 20 20 20 20 20 20 20 20 31 2c 20 53 51 4c            1, SQL
3b40: 49 54 45 5f 55 54 46 31 36 2c 20 64 62 2c 20 73  ITE_UTF16, db, s
3b50: 71 6c 69 74 65 33 45 78 65 63 46 75 6e 63 2c 20  qlite3ExecFunc, 
3b60: 30 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74  0, 0);.    sqlit
3b70: 65 33 56 61 6c 75 65 46 72 65 65 28 70 56 61 6c  e3ValueFree(pVal
3b80: 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  );.  }.#endif.. 
3b90: 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74   if( sqlite3Test
3ba0: 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20  ErrCode(interp, 
3bb0: 64 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e  db, rc) ) return
3bc0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63   TCL_ERROR;.  Tc
3bd0: 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65  l_SetResult(inte
3be0: 72 70 2c 20 28 63 68 61 72 20 2a 29 65 72 72 6f  rp, (char *)erro
3bf0: 72 4e 61 6d 65 28 72 63 29 2c 20 30 29 3b 0a 20  rName(rc), 0);. 
3c00: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
3c10: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65  }../*.** Routine
3c20: 73 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  s to implement t
3c30: 68 65 20 78 5f 63 6f 75 6e 74 28 29 20 61 67 67  he x_count() agg
3c40: 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 2e  regate function.
3c50: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
3c60: 63 74 20 43 6f 75 6e 74 43 74 78 20 43 6f 75 6e  ct CountCtx Coun
3c70: 74 43 74 78 3b 0a 73 74 72 75 63 74 20 43 6f 75  tCtx;.struct Cou
3c80: 6e 74 43 74 78 20 7b 0a 20 20 69 6e 74 20 6e 3b  ntCtx {.  int n;
3c90: 0a 7d 3b 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .};.static void 
3ca0: 63 6f 75 6e 74 53 74 65 70 28 73 71 6c 69 74 65  countStep(sqlite
3cb0: 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65  3_context *conte
3cc0: 78 74 2c 20 69 6e 74 20 61 72 67 63 2c 20 73 71  xt, int argc, sq
3cd0: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72  lite3_value **ar
3ce0: 67 76 29 7b 0a 20 20 43 6f 75 6e 74 43 74 78 20  gv){.  CountCtx 
3cf0: 2a 70 3b 0a 20 20 70 20 3d 20 73 71 6c 69 74 65  *p;.  p = sqlite
3d00: 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 6e 74  3_aggregate_cont
3d10: 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 73 69 7a  ext(context, siz
3d20: 65 6f 66 28 2a 70 29 29 3b 0a 20 20 69 66 28 20  eof(*p));.  if( 
3d30: 28 61 72 67 63 3d 3d 30 20 7c 7c 20 53 51 4c 49  (argc==0 || SQLI
3d40: 54 45 5f 4e 55 4c 4c 21 3d 73 71 6c 69 74 65 33  TE_NULL!=sqlite3
3d50: 5f 76 61 6c 75 65 5f 74 79 70 65 28 61 72 67 76  _value_type(argv
3d60: 5b 30 5d 29 20 29 20 26 26 20 70 20 29 7b 0a 20  [0]) ) && p ){. 
3d70: 20 20 20 70 2d 3e 6e 2b 2b 3b 0a 20 20 7d 0a 7d     p->n++;.  }.}
3d80: 20 20 20 0a 73 74 61 74 69 63 20 76 6f 69 64 20     .static void 
3d90: 63 6f 75 6e 74 46 69 6e 61 6c 69 7a 65 28 73 71  countFinalize(sq
3da0: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63  lite3_context *c
3db0: 6f 6e 74 65 78 74 29 7b 0a 20 20 43 6f 75 6e 74  ontext){.  Count
3dc0: 43 74 78 20 2a 70 3b 0a 20 20 70 20 3d 20 73 71  Ctx *p;.  p = sq
3dd0: 6c 69 74 65 33 5f 61 67 67 72 65 67 61 74 65 5f  lite3_aggregate_
3de0: 63 6f 6e 74 65 78 74 28 63 6f 6e 74 65 78 74 2c  context(context,
3df0: 20 73 69 7a 65 6f 66 28 2a 70 29 29 3b 0a 20 20   sizeof(*p));.  
3e00: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69  sqlite3_result_i
3e10: 6e 74 28 63 6f 6e 74 65 78 74 2c 20 70 20 3f 20  nt(context, p ? 
3e20: 70 2d 3e 6e 20 3a 20 30 29 3b 0a 7d 0a 0a 2f 2a  p->n : 0);.}../*
3e30: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
3e40: 74 65 5f 74 65 73 74 5f 63 72 65 61 74 65 5f 61  te_test_create_a
3e50: 67 67 72 65 67 61 74 65 20 44 42 0a 2a 2a 0a 2a  ggregate DB.**.*
3e60: 2a 20 43 61 6c 6c 20 74 68 65 20 73 71 6c 69 74  * Call the sqlit
3e70: 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
3e80: 6f 6e 20 41 50 49 20 6f 6e 20 74 68 65 20 67 69  on API on the gi
3e90: 76 65 6e 20 64 61 74 61 62 61 73 65 20 69 6e 20  ven database in 
3ea0: 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 63 72 65 61  order.** to crea
3eb0: 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20 6e 61  te a function na
3ec0: 6d 65 64 20 22 78 5f 63 6f 75 6e 74 22 2e 20 20  med "x_count".  
3ed0: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 64 6f  This function do
3ee0: 65 73 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e  es the same thin
3ef0: 67 0a 2a 2a 20 61 73 20 74 68 65 20 22 6d 64 35  g.** as the "md5
3f00: 73 75 6d 22 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a  sum" function..*
3f10: 2a 0a 2a 2a 20 54 68 65 20 6f 72 69 67 69 6e 61  *.** The origina
3f20: 6c 20 6d 6f 74 69 76 61 74 69 6f 6e 20 66 6f 72  l motivation for
3f30: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 77 61   this routine wa
3f40: 73 20 74 6f 20 62 65 20 61 62 6c 65 20 74 6f 20  s to be able to 
3f50: 63 61 6c 6c 20 74 68 65 0a 2a 2a 20 73 71 6c 69  call the.** sqli
3f60: 74 65 33 5f 63 72 65 61 74 65 5f 61 67 67 72 65  te3_create_aggre
3f70: 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 68  gate function wh
3f80: 69 6c 65 20 61 20 71 75 65 72 79 20 69 73 20 69  ile a query is i
3f90: 6e 20 70 72 6f 67 72 65 73 73 20 69 6e 20 6f 72  n progress in or
3fa0: 64 65 72 0a 2a 2a 20 74 6f 20 74 65 73 74 20 74  der.** to test t
3fb0: 68 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  he SQLITE_MISUSE
3fc0: 20 64 65 74 65 63 74 69 6f 6e 20 6c 6f 67 69 63   detection logic
3fd0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
3fe0: 74 65 73 74 5f 63 72 65 61 74 65 5f 61 67 67 72  test_create_aggr
3ff0: 65 67 61 74 65 28 0a 20 20 76 6f 69 64 20 2a 4e  egate(.  void *N
4000: 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e  otUsed,.  Tcl_In
4010: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
4020: 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
4030: 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
4040: 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
4050: 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c  d */.  int argc,
4060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
4070: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
4080: 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ents */.  char *
4090: 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20  *argv           
40a0: 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68   /* Text of each
40b0: 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a   argument */.){.
40c0: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
40d0: 20 69 6e 74 20 72 63 3b 0a 20 20 69 66 28 20 61   int rc;.  if( a
40e0: 72 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  rgc!=2 ){.    Tc
40f0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
4100: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
4110: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
4120: 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20  \"", argv[0],.  
4130: 20 20 20 20 20 22 20 46 49 4c 45 4e 41 4d 45 5c       " FILENAME\
4140: 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  "", 0);.    retu
4150: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
4160: 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  }.  if( getDbPoi
4170: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67  nter(interp, arg
4180: 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74  v[1], &db) ) ret
4190: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
41a0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72   rc = sqlite3_cr
41b0: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62  eate_function(db
41c0: 2c 20 22 78 5f 63 6f 75 6e 74 22 2c 20 30 2c 20  , "x_count", 0, 
41d0: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 20  SQLITE_UTF8, 0, 
41e0: 30 2c 0a 20 20 20 20 20 20 63 6f 75 6e 74 53 74  0,.      countSt
41f0: 65 70 2c 63 6f 75 6e 74 46 69 6e 61 6c 69 7a 65  ep,countFinalize
4200: 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
4210: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 71  ITE_OK ){.    sq
4220: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
4230: 63 74 69 6f 6e 28 64 62 2c 20 22 78 5f 63 6f 75  ction(db, "x_cou
4240: 6e 74 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f 55  nt", 1, SQLITE_U
4250: 54 46 38 2c 20 30 2c 20 30 2c 0a 20 20 20 20 20  TF8, 0, 0,.     
4260: 20 20 20 63 6f 75 6e 74 53 74 65 70 2c 63 6f 75     countStep,cou
4270: 6e 74 46 69 6e 61 6c 69 7a 65 29 3b 0a 20 20 7d  ntFinalize);.  }
4280: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65  .  if( sqlite3Te
4290: 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70  stErrCode(interp
42a0: 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65 74 75  , db, rc) ) retu
42b0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
42c0: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
42d0: 0a 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  ..../*.** Usage:
42e0: 20 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74    sqlite3_mprint
42f0: 66 5f 69 6e 74 20 46 4f 52 4d 41 54 20 49 4e 54  f_int FORMAT INT
4300: 45 47 45 52 20 49 4e 54 45 47 45 52 20 49 4e 54  EGER INTEGER INT
4310: 45 47 45 52 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20  EGER.**.** Call 
4320: 6d 70 72 69 6e 74 66 20 77 69 74 68 20 74 68 72  mprintf with thr
4330: 65 65 20 69 6e 74 65 67 65 72 20 61 72 67 75 6d  ee integer argum
4340: 65 6e 74 73 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ents.*/.static i
4350: 6e 74 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  nt sqlite3_mprin
4360: 74 66 5f 69 6e 74 28 0a 20 20 76 6f 69 64 20 2a  tf_int(.  void *
4370: 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49  NotUsed,.  Tcl_I
4380: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20  nterp *interp,  
4390: 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74    /* The TCL int
43a0: 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e  erpreter that in
43b0: 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61  voked this comma
43c0: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63  nd */.  int argc
43d0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
43e0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
43f0: 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20  ments */.  char 
4400: 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20  **argv          
4410: 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63    /* Text of eac
4420: 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b  h argument */.){
4430: 0a 20 20 69 6e 74 20 61 5b 33 5d 2c 20 69 3b 0a  .  int a[3], i;.
4440: 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69 66 28    char *z;.  if(
4450: 20 61 72 67 63 21 3d 35 20 29 7b 0a 20 20 20 20   argc!=5 ){.    
4460: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
4470: 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
4480: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
4490: 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a  e \"", argv[0],.
44a0: 20 20 20 20 20 20 20 22 20 46 4f 52 4d 41 54 20         " FORMAT 
44b0: 49 4e 54 20 49 4e 54 20 49 4e 54 5c 22 22 2c 20  INT INT INT\"", 
44c0: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
44d0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
44e0: 66 6f 72 28 69 3d 32 3b 20 69 3c 35 3b 20 69 2b  for(i=2; i<5; i+
44f0: 2b 29 7b 0a 20 20 20 20 69 66 28 20 54 63 6c 5f  +){.    if( Tcl_
4500: 47 65 74 49 6e 74 28 69 6e 74 65 72 70 2c 20 61  GetInt(interp, a
4510: 72 67 76 5b 69 5d 2c 20 26 61 5b 69 2d 32 5d 29  rgv[i], &a[i-2])
4520: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
4530: 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 73  ROR;.  }.  z = s
4540: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 61  qlite3_mprintf(a
4550: 72 67 76 5b 31 5d 2c 20 61 5b 30 5d 2c 20 61 5b  rgv[1], a[0], a[
4560: 31 5d 2c 20 61 5b 32 5d 29 3b 0a 20 20 54 63 6c  1], a[2]);.  Tcl
4570: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
4580: 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a 20 20 73  terp, z, 0);.  s
4590: 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a  qlite3_free(z);.
45a0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
45b0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 7a 4e 75  .}../*.** If zNu
45c0: 6d 20 72 65 70 72 65 73 65 6e 74 73 20 61 6e 20  m represents an 
45d0: 69 6e 74 65 67 65 72 20 74 68 61 74 20 77 69 6c  integer that wil
45e0: 6c 20 66 69 74 20 69 6e 20 36 34 2d 62 69 74 73  l fit in 64-bits
45f0: 2c 20 74 68 65 6e 20 73 65 74 0a 2a 2a 20 2a 70  , then set.** *p
4600: 56 61 6c 75 65 20 74 6f 20 74 68 61 74 20 69 6e  Value to that in
4610: 74 65 67 65 72 20 61 6e 64 20 72 65 74 75 72 6e  teger and return
4620: 20 74 72 75 65 2e 20 20 4f 74 68 65 72 77 69 73   true.  Otherwis
4630: 65 20 72 65 74 75 72 6e 20 66 61 6c 73 65 2e 0a  e return false..
4640: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71  */.static int sq
4650: 6c 69 74 65 33 47 65 74 49 6e 74 36 34 28 63 6f  lite3GetInt64(co
4660: 6e 73 74 20 63 68 61 72 20 2a 7a 4e 75 6d 2c 20  nst char *zNum, 
4670: 69 36 34 20 2a 70 56 61 6c 75 65 29 7b 0a 20 20  i64 *pValue){.  
4680: 69 66 28 20 73 71 6c 69 74 65 33 46 69 74 73 49  if( sqlite3FitsI
4690: 6e 36 34 42 69 74 73 28 7a 4e 75 6d 29 20 29 7b  n64Bits(zNum) ){
46a0: 0a 20 20 20 20 73 71 6c 69 74 65 33 61 74 6f 69  .    sqlite3atoi
46b0: 36 34 28 7a 4e 75 6d 2c 20 70 56 61 6c 75 65 29  64(zNum, pValue)
46c0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a  ;.    return 1;.
46d0: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a    }.  return 0;.
46e0: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
46f0: 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
4700: 5f 69 6e 74 36 34 20 46 4f 52 4d 41 54 20 49 4e  _int64 FORMAT IN
4710: 54 45 47 45 52 20 49 4e 54 45 47 45 52 20 49 4e  TEGER INTEGER IN
4720: 54 45 47 45 52 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c  TEGER.**.** Call
4730: 20 6d 70 72 69 6e 74 66 20 77 69 74 68 20 74 68   mprintf with th
4740: 72 65 65 20 36 34 2d 62 69 74 20 69 6e 74 65 67  ree 64-bit integ
4750: 65 72 20 61 72 67 75 6d 65 6e 74 73 0a 2a 2f 0a  er arguments.*/.
4760: 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74  static int sqlit
4770: 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 36 34  e3_mprintf_int64
4780: 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65  (.  void *NotUse
4790: 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  d,.  Tcl_Interp 
47a0: 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
47b0: 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
47c0: 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
47d0: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
47e0: 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20    int argc,     
47f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
4800: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
4810: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  */.  char **argv
4820: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
4830: 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75  ext of each argu
4840: 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  ment */.){.  int
4850: 20 69 3b 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74   i;.  sqlite_int
4860: 36 34 20 61 5b 33 5d 3b 0a 20 20 63 68 61 72 20  64 a[3];.  char 
4870: 2a 7a 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d  *z;.  if( argc!=
4880: 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  5 ){.    Tcl_App
4890: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
48a0: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
48b0: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
48c0: 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20  argv[0],.       
48d0: 22 20 46 4f 52 4d 41 54 20 49 4e 54 20 49 4e 54  " FORMAT INT INT
48e0: 20 49 4e 54 5c 22 22 2c 20 30 29 3b 0a 20 20 20   INT\"", 0);.   
48f0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
4900: 52 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 32  R;.  }.  for(i=2
4910: 3b 20 69 3c 35 3b 20 69 2b 2b 29 7b 0a 20 20 20  ; i<5; i++){.   
4920: 20 69 66 28 20 21 73 71 6c 69 74 65 33 47 65 74   if( !sqlite3Get
4930: 49 6e 74 36 34 28 61 72 67 76 5b 69 5d 2c 20 26  Int64(argv[i], &
4940: 61 5b 69 2d 32 5d 29 20 29 7b 0a 20 20 20 20 20  a[i-2]) ){.     
4950: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
4960: 74 28 69 6e 74 65 72 70 2c 20 22 61 72 67 75 6d  t(interp, "argum
4970: 65 6e 74 20 69 73 20 6e 6f 74 20 61 20 76 61 6c  ent is not a val
4980: 69 64 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65  id 64-bit intege
4990: 72 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 72 65  r", 0);.      re
49a0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
49b0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 7a 20 3d 20      }.  }.  z = 
49c0: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
49d0: 61 72 67 76 5b 31 5d 2c 20 61 5b 30 5d 2c 20 61  argv[1], a[0], a
49e0: 5b 31 5d 2c 20 61 5b 32 5d 29 3b 0a 20 20 54 63  [1], a[2]);.  Tc
49f0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
4a00: 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a 20 20  nterp, z, 0);.  
4a10: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 29 3b  sqlite3_free(z);
4a20: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
4a30: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
4a40: 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  :  sqlite3_mprin
4a50: 74 66 5f 73 74 72 20 46 4f 52 4d 41 54 20 49 4e  tf_str FORMAT IN
4a60: 54 45 47 45 52 20 49 4e 54 45 47 45 52 20 53 54  TEGER INTEGER ST
4a70: 52 49 4e 47 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20  RING.**.** Call 
4a80: 6d 70 72 69 6e 74 66 20 77 69 74 68 20 74 77 6f  mprintf with two
4a90: 20 69 6e 74 65 67 65 72 20 61 72 67 75 6d 65 6e   integer argumen
4aa0: 74 73 20 61 6e 64 20 6f 6e 65 20 73 74 72 69 6e  ts and one strin
4ab0: 67 20 61 72 67 75 6d 65 6e 74 0a 2a 2f 0a 73 74  g argument.*/.st
4ac0: 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33  atic int sqlite3
4ad0: 5f 6d 70 72 69 6e 74 66 5f 73 74 72 28 0a 20 20  _mprintf_str(.  
4ae0: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
4af0: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
4b00: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
4b10: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
4b20: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
4b30: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
4b40: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
4b50: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
4b60: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
4b70: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
4b80: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
4b90: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
4ba0: 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 61 5b 33   */.){.  int a[3
4bb0: 5d 2c 20 69 3b 0a 20 20 63 68 61 72 20 2a 7a 3b  ], i;.  char *z;
4bc0: 0a 20 20 69 66 28 20 61 72 67 63 3c 34 20 7c 7c  .  if( argc<4 ||
4bd0: 20 61 72 67 63 3e 35 20 29 7b 0a 20 20 20 20 54   argc>5 ){.    T
4be0: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
4bf0: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
4c00: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
4c10: 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20   \"", argv[0],. 
4c20: 20 20 20 20 20 20 22 20 46 4f 52 4d 41 54 20 49        " FORMAT I
4c30: 4e 54 20 49 4e 54 20 3f 53 54 52 49 4e 47 3f 5c  NT INT ?STRING?\
4c40: 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  "", 0);.    retu
4c50: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
4c60: 7d 0a 20 20 66 6f 72 28 69 3d 32 3b 20 69 3c 34  }.  for(i=2; i<4
4c70: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20  ; i++){.    if( 
4c80: 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74 65 72  Tcl_GetInt(inter
4c90: 70 2c 20 61 72 67 76 5b 69 5d 2c 20 26 61 5b 69  p, argv[i], &a[i
4ca0: 2d 32 5d 29 20 29 20 72 65 74 75 72 6e 20 54 43  -2]) ) return TC
4cb0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a  L_ERROR;.  }.  z
4cc0: 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
4cd0: 74 66 28 61 72 67 76 5b 31 5d 2c 20 61 5b 30 5d  tf(argv[1], a[0]
4ce0: 2c 20 61 5b 31 5d 2c 20 61 72 67 63 3e 34 20 3f  , a[1], argc>4 ?
4cf0: 20 61 72 67 76 5b 34 5d 20 3a 20 4e 55 4c 4c 29   argv[4] : NULL)
4d00: 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65  ;.  Tcl_AppendRe
4d10: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20  sult(interp, z, 
4d20: 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72  0);.  sqlite3_fr
4d30: 65 65 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20  ee(z);.  return 
4d40: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
4d50: 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33   Usage:  sqlite3
4d60: 5f 6d 70 72 69 6e 74 66 5f 64 6f 75 62 6c 65 20  _mprintf_double 
4d70: 46 4f 52 4d 41 54 20 49 4e 54 45 47 45 52 20 49  FORMAT INTEGER I
4d80: 4e 54 45 47 45 52 20 44 4f 55 42 4c 45 0a 2a 2a  NTEGER DOUBLE.**
4d90: 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e 74 66  .** Call mprintf
4da0: 20 77 69 74 68 20 74 77 6f 20 69 6e 74 65 67 65   with two intege
4db0: 72 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20  r arguments and 
4dc0: 6f 6e 65 20 64 6f 75 62 6c 65 20 61 72 67 75 6d  one double argum
4dd0: 65 6e 74 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ent.*/.static in
4de0: 74 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  t sqlite3_mprint
4df0: 66 5f 64 6f 75 62 6c 65 28 0a 20 20 76 6f 69 64  f_double(.  void
4e00: 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c   *NotUsed,.  Tcl
4e10: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
4e20: 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69      /* The TCL i
4e30: 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20  nterpreter that 
4e40: 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d  invoked this com
4e50: 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72  mand */.  int ar
4e60: 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  gc,             
4e70: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
4e80: 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61  guments */.  cha
4e90: 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20  r **argv        
4ea0: 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65      /* Text of e
4eb0: 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  ach argument */.
4ec0: 29 7b 0a 20 20 69 6e 74 20 61 5b 33 5d 2c 20 69  ){.  int a[3], i
4ed0: 3b 0a 20 20 64 6f 75 62 6c 65 20 72 3b 0a 20 20  ;.  double r;.  
4ee0: 63 68 61 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61  char *z;.  if( a
4ef0: 72 67 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63  rgc!=5 ){.    Tc
4f00: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
4f10: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
4f20: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
4f30: 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20  \"", argv[0],.  
4f40: 20 20 20 20 20 22 20 46 4f 52 4d 41 54 20 49 4e       " FORMAT IN
4f50: 54 20 49 4e 54 20 44 4f 55 42 4c 45 5c 22 22 2c  T INT DOUBLE\"",
4f60: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
4f70: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
4f80: 20 66 6f 72 28 69 3d 32 3b 20 69 3c 34 3b 20 69   for(i=2; i<4; i
4f90: 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 54 63 6c  ++){.    if( Tcl
4fa0: 5f 47 65 74 49 6e 74 28 69 6e 74 65 72 70 2c 20  _GetInt(interp, 
4fb0: 61 72 67 76 5b 69 5d 2c 20 26 61 5b 69 2d 32 5d  argv[i], &a[i-2]
4fc0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
4fd0: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
4fe0: 54 63 6c 5f 47 65 74 44 6f 75 62 6c 65 28 69 6e  Tcl_GetDouble(in
4ff0: 74 65 72 70 2c 20 61 72 67 76 5b 34 5d 2c 20 26  terp, argv[4], &
5000: 72 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  r) ) return TCL_
5010: 45 52 52 4f 52 3b 0a 20 20 7a 20 3d 20 73 71 6c  ERROR;.  z = sql
5020: 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 61 72 67  ite3_mprintf(arg
5030: 76 5b 31 5d 2c 20 61 5b 30 5d 2c 20 61 5b 31 5d  v[1], a[0], a[1]
5040: 2c 20 72 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65  , r);.  Tcl_Appe
5050: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
5060: 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65   z, 0);.  sqlite
5070: 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65 74  3_free(z);.  ret
5080: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
5090: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
50a0: 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 63 61  ite3_mprintf_sca
50b0: 6c 65 64 20 46 4f 52 4d 41 54 20 44 4f 55 42 4c  led FORMAT DOUBL
50c0: 45 20 44 4f 55 42 4c 45 0a 2a 2a 0a 2a 2a 20 43  E DOUBLE.**.** C
50d0: 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77 69 74 68  all mprintf with
50e0: 20 61 20 73 69 6e 67 6c 65 20 64 6f 75 62 6c 65   a single double
50f0: 20 61 72 67 75 6d 65 6e 74 20 77 68 69 63 68 20   argument which 
5100: 69 73 20 74 68 65 20 70 72 6f 64 75 63 74 20 6f  is the product o
5110: 66 20 74 68 65 0a 2a 2a 20 74 77 6f 20 61 72 67  f the.** two arg
5120: 75 6d 65 6e 74 73 20 67 69 76 65 6e 20 61 62 6f  uments given abo
5130: 76 65 2e 20 20 54 68 69 73 20 69 73 20 75 73 65  ve.  This is use
5140: 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 6f 76  d to generate ov
5150: 65 72 66 6c 6f 77 20 61 6e 64 20 75 6e 64 65 72  erflow and under
5160: 66 6c 6f 77 0a 2a 2a 20 64 6f 75 62 6c 65 73 20  flow.** doubles 
5170: 74 6f 20 74 65 73 74 20 74 68 61 74 20 74 68 65  to test that the
5180: 79 20 61 72 65 20 63 6f 6e 76 65 72 74 65 64 20  y are converted 
5190: 70 72 6f 70 65 72 6c 79 2e 0a 2a 2f 0a 73 74 61  properly..*/.sta
51a0: 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  tic int sqlite3_
51b0: 6d 70 72 69 6e 74 66 5f 73 63 61 6c 65 64 28 0a  mprintf_scaled(.
51c0: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
51d0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
51e0: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
51f0: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
5200: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
5210: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
5220: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
5230: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
5240: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
5250: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
5260: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
5270: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
5280: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 69  nt */.){.  int i
5290: 3b 0a 20 20 64 6f 75 62 6c 65 20 72 5b 32 5d 3b  ;.  double r[2];
52a0: 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69 66  .  char *z;.  if
52b0: 28 20 61 72 67 63 21 3d 34 20 29 7b 0a 20 20 20  ( argc!=4 ){.   
52c0: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
52d0: 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
52e0: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
52f0: 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c  be \"", argv[0],
5300: 0a 20 20 20 20 20 20 20 22 20 46 4f 52 4d 41 54  .       " FORMAT
5310: 20 44 4f 55 42 4c 45 20 44 4f 55 42 4c 45 5c 22   DOUBLE DOUBLE\"
5320: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
5330: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
5340: 0a 20 20 66 6f 72 28 69 3d 32 3b 20 69 3c 34 3b  .  for(i=2; i<4;
5350: 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 54   i++){.    if( T
5360: 63 6c 5f 47 65 74 44 6f 75 62 6c 65 28 69 6e 74  cl_GetDouble(int
5370: 65 72 70 2c 20 61 72 67 76 5b 69 5d 2c 20 26 72  erp, argv[i], &r
5380: 5b 69 2d 32 5d 29 20 29 20 72 65 74 75 72 6e 20  [i-2]) ) return 
5390: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
53a0: 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72   z = sqlite3_mpr
53b0: 69 6e 74 66 28 61 72 67 76 5b 31 5d 2c 20 72 5b  intf(argv[1], r[
53c0: 30 5d 2a 72 5b 31 5d 29 3b 0a 20 20 54 63 6c 5f  0]*r[1]);.  Tcl_
53d0: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
53e0: 65 72 70 2c 20 7a 2c 20 30 29 3b 0a 20 20 73 71  erp, z, 0);.  sq
53f0: 6c 69 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20  lite3_free(z);. 
5400: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
5410: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
5420: 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
5430: 5f 73 74 72 6f 6e 6c 79 20 46 4f 52 4d 41 54 20  _stronly FORMAT 
5440: 53 54 52 49 4e 47 0a 2a 2a 0a 2a 2a 20 43 61 6c  STRING.**.** Cal
5450: 6c 20 6d 70 72 69 6e 74 66 20 77 69 74 68 20 61  l mprintf with a
5460: 20 73 69 6e 67 6c 65 20 64 6f 75 62 6c 65 20 61   single double a
5470: 72 67 75 6d 65 6e 74 20 77 68 69 63 68 20 69 73  rgument which is
5480: 20 74 68 65 20 70 72 6f 64 75 63 74 20 6f 66 20   the product of 
5490: 74 68 65 0a 2a 2a 20 74 77 6f 20 61 72 67 75 6d  the.** two argum
54a0: 65 6e 74 73 20 67 69 76 65 6e 20 61 62 6f 76 65  ents given above
54b0: 2e 20 20 54 68 69 73 20 69 73 20 75 73 65 64 20  .  This is used 
54c0: 74 6f 20 67 65 6e 65 72 61 74 65 20 6f 76 65 72  to generate over
54d0: 66 6c 6f 77 20 61 6e 64 20 75 6e 64 65 72 66 6c  flow and underfl
54e0: 6f 77 0a 2a 2a 20 64 6f 75 62 6c 65 73 20 74 6f  ow.** doubles to
54f0: 20 74 65 73 74 20 74 68 61 74 20 74 68 65 79 20   test that they 
5500: 61 72 65 20 63 6f 6e 76 65 72 74 65 64 20 70 72  are converted pr
5510: 6f 70 65 72 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69  operly..*/.stati
5520: 63 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 70  c int sqlite3_mp
5530: 72 69 6e 74 66 5f 73 74 72 6f 6e 6c 79 28 0a 20  rintf_stronly(. 
5540: 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a   void *NotUsed,.
5550: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
5560: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
5570: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
5580: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
5590: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
55a0: 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20  nt argc,        
55b0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
55c0: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
55d0: 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20    char **argv   
55e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
55f0: 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e   of each argumen
5600: 74 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20 2a  t */.){.  char *
5610: 7a 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 33  z;.  if( argc!=3
5620: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
5630: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
5640: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
5650: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61  should be \"", a
5660: 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22  rgv[0],.       "
5670: 20 46 4f 52 4d 41 54 20 53 54 52 49 4e 47 5c 22   FORMAT STRING\"
5680: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
5690: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
56a0: 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 6d  .  z = sqlite3_m
56b0: 70 72 69 6e 74 66 28 61 72 67 76 5b 31 5d 2c 20  printf(argv[1], 
56c0: 61 72 67 76 5b 32 5d 29 3b 0a 20 20 54 63 6c 5f  argv[2]);.  Tcl_
56d0: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
56e0: 65 72 70 2c 20 7a 2c 20 30 29 3b 0a 20 20 73 71  erp, z, 0);.  sq
56f0: 6c 69 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20  lite3_free(z);. 
5700: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
5710: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
5720: 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
5730: 5f 68 65 78 64 6f 75 62 6c 65 20 46 4f 52 4d 41  _hexdouble FORMA
5740: 54 20 48 45 58 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c  T HEX.**.** Call
5750: 20 6d 70 72 69 6e 74 66 20 77 69 74 68 20 61 20   mprintf with a 
5760: 73 69 6e 67 6c 65 20 64 6f 75 62 6c 65 20 61 72  single double ar
5770: 67 75 6d 65 6e 74 20 77 68 69 63 68 20 69 73 20  gument which is 
5780: 64 65 72 69 76 65 64 20 66 72 6f 6d 20 74 68 65  derived from the
5790: 0a 2a 2a 20 68 65 78 61 64 65 63 69 6d 61 6c 20  .** hexadecimal 
57a0: 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 6e 20 49  encoding of an I
57b0: 45 45 45 20 64 6f 75 62 6c 65 2e 0a 2a 2f 0a 73  EEE double..*/.s
57c0: 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65  tatic int sqlite
57d0: 33 5f 6d 70 72 69 6e 74 66 5f 68 65 78 64 6f 75  3_mprintf_hexdou
57e0: 62 6c 65 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74  ble(.  void *Not
57f0: 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Used,.  Tcl_Inte
5800: 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
5810: 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
5820: 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
5830: 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
5840: 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20  */.  int argc,  
5850: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
5860: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
5870: 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  ts */.  char **a
5880: 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f  rgv            /
5890: 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61  * Text of each a
58a0: 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20  rgument */.){.  
58b0: 63 68 61 72 20 2a 7a 3b 0a 20 20 64 6f 75 62 6c  char *z;.  doubl
58c0: 65 20 72 3b 0a 20 20 75 6e 73 69 67 6e 65 64 20  e r;.  unsigned 
58d0: 20 78 31 2c 20 78 32 3b 0a 20 20 6c 6f 6e 67 20   x1, x2;.  long 
58e0: 6c 6f 6e 67 20 75 6e 73 69 67 6e 65 64 20 64 3b  long unsigned d;
58f0: 0a 20 20 69 66 28 20 61 72 67 63 21 3d 33 20 29  .  if( argc!=3 )
5900: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
5910: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
5920: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
5930: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
5940: 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46  v[0],.       " F
5950: 4f 52 4d 41 54 20 53 54 52 49 4e 47 5c 22 22 2c  ORMAT STRING\"",
5960: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
5970: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
5980: 20 69 66 28 20 73 73 63 61 6e 66 28 61 72 67 76   if( sscanf(argv
5990: 5b 32 5d 2c 20 22 25 30 38 78 25 30 38 78 22 2c  [2], "%08x%08x",
59a0: 20 26 78 32 2c 20 26 78 31 29 21 3d 32 20 29 7b   &x2, &x1)!=2 ){
59b0: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
59c0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 32  esult(interp, "2
59d0: 6e 64 20 61 72 67 75 6d 65 6e 74 20 73 68 6f 75  nd argument shou
59e0: 6c 64 20 62 65 20 31 36 2d 63 68 61 72 61 63 74  ld be 16-charact
59f0: 65 72 73 20 6f 66 20 68 65 78 22 2c 20 30 29 3b  ers of hex", 0);
5a00: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
5a10: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 64 20 3d  ERROR;.  }.  d =
5a20: 20 78 32 3b 0a 20 20 64 20 3d 20 28 64 3c 3c 33   x2;.  d = (d<<3
5a30: 32 29 20 2b 20 78 31 3b 0a 20 20 6d 65 6d 63 70  2) + x1;.  memcp
5a40: 79 28 26 72 2c 20 26 64 2c 20 73 69 7a 65 6f 66  y(&r, &d, sizeof
5a50: 28 72 29 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69  (r));.  z = sqli
5a60: 74 65 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76  te3_mprintf(argv
5a70: 5b 31 5d 2c 20 72 29 3b 0a 20 20 54 63 6c 5f 41  [1], r);.  Tcl_A
5a80: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
5a90: 72 70 2c 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c  rp, z, 0);.  sql
5aa0: 69 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20  ite3_free(z);.  
5ab0: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
5ac0: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
5ad0: 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 66 61 69  qlite_malloc_fai
5ae0: 6c 20 4e 20 20 3f 52 45 50 45 41 54 2d 49 4e 54  l N  ?REPEAT-INT
5af0: 45 52 56 41 4c 3f 0a 2a 2a 0a 2a 2a 20 52 69 67  ERVAL?.**.** Rig
5b00: 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 20   sqliteMalloc() 
5b10: 74 6f 20 66 61 69 6c 20 6f 6e 20 74 68 65 20 4e  to fail on the N
5b20: 2d 74 68 20 63 61 6c 6c 20 61 6e 64 20 65 76 65  -th call and eve
5b30: 72 79 20 52 45 50 45 41 54 2d 49 4e 54 45 52 56  ry REPEAT-INTERV
5b40: 41 4c 20 63 61 6c 6c 0a 2a 2a 20 61 66 74 65 72  AL call.** after
5b50: 20 74 68 61 74 2e 20 20 49 66 20 52 45 50 45 41   that.  If REPEA
5b60: 54 2d 49 4e 54 45 52 56 41 4c 20 69 73 20 30 20  T-INTERVAL is 0 
5b70: 6f 72 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 74  or is omitted, t
5b80: 68 65 6e 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c  hen only a singl
5b90: 65 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 77 69 6c 6c  e.** malloc will
5ba0: 20 66 61 69 6c 2e 20 20 49 66 20 52 45 50 45 41   fail.  If REPEA
5bb0: 54 2d 49 4e 54 45 52 56 41 4c 20 69 73 20 31 20  T-INTERVAL is 1 
5bc0: 74 68 65 6e 20 61 6c 6c 20 6d 61 6c 6c 6f 63 73  then all mallocs
5bd0: 20 61 66 74 65 72 20 74 68 65 0a 2a 2a 20 66 69   after the.** fi
5be0: 72 73 74 20 66 61 69 6c 75 72 65 20 77 69 6c 6c  rst failure will
5bf0: 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 66 61 69   continue to fai
5c00: 6c 20 6f 6e 20 65 76 65 72 79 20 63 61 6c 6c 2e  l on every call.
5c10: 20 20 49 66 20 52 45 50 45 41 54 2d 49 4e 54 45    If REPEAT-INTE
5c20: 52 56 41 4c 20 69 73 0a 2a 2a 20 32 20 74 68 65  RVAL is.** 2 the
5c30: 6e 20 65 76 65 72 79 20 6f 74 68 65 72 20 6d 61  n every other ma
5c40: 6c 6c 6f 63 20 77 69 6c 6c 20 66 61 69 6c 2e 20  lloc will fail. 
5c50: 20 41 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 2a   And so forth..*
5c60: 2a 0a 2a 2a 20 54 75 72 6e 20 6f 66 66 20 74 68  *.** Turn off th
5c70: 69 73 20 6d 65 63 68 61 6e 69 73 6d 20 61 6e 64  is mechanism and
5c80: 20 72 65 73 65 74 20 74 68 65 20 73 71 6c 69 74   reset the sqlit
5c90: 65 33 54 73 64 28 29 2d 3e 6d 61 6c 6c 6f 63 46  e3Tsd()->mallocF
5ca0: 61 69 6c 65 64 20 76 61 72 69 61 62 6c 65 20 69  ailed variable i
5cb0: 73 20 4e 3d 3d 30 2e 0a 2a 2f 0a 23 69 66 64 65  s N==0..*/.#ifde
5cc0: 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  f SQLITE_MEMDEBU
5cd0: 47 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c  G.static int sql
5ce0: 69 74 65 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 28  ite_malloc_fail(
5cf0: 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64  .  void *NotUsed
5d00: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
5d10: 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
5d20: 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
5d30: 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
5d40: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
5d50: 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20   int argc,      
5d60: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
5d70: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
5d80: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20  /.  char **argv 
5d90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
5da0: 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d  xt of each argum
5db0: 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20  ent */.){.  int 
5dc0: 6e 3b 0a 20 20 69 6e 74 20 72 65 70 3b 0a 20 20  n;.  int rep;.  
5dd0: 69 66 28 20 61 72 67 63 21 3d 32 20 26 26 20 61  if( argc!=2 && a
5de0: 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63  rgc!=3 ){.    Tc
5df0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
5e00: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
5e10: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
5e20: 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 22 20  \"", argv[0], " 
5e30: 4e 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  N\"", 0);.    re
5e40: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
5e50: 20 20 7d 0a 20 20 69 66 28 20 54 63 6c 5f 47 65    }.  if( Tcl_Ge
5e60: 74 49 6e 74 28 69 6e 74 65 72 70 2c 20 61 72 67  tInt(interp, arg
5e70: 76 5b 31 5d 2c 20 26 6e 29 20 29 20 72 65 74 75  v[1], &n) ) retu
5e80: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
5e90: 69 66 28 20 61 72 67 63 3d 3d 33 20 29 7b 0a 20  if( argc==3 ){. 
5ea0: 20 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e     if( Tcl_GetIn
5eb0: 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 32  t(interp, argv[2
5ec0: 5d 2c 20 26 72 65 70 29 20 29 20 72 65 74 75 72  ], &rep) ) retur
5ed0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
5ee0: 65 6c 73 65 7b 0a 20 20 20 20 72 65 70 20 3d 20  else{.    rep = 
5ef0: 30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  0;.  }.  sqlite3
5f00: 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c 20 3d 20 6e  _iMallocFail = n
5f10: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c  ;.  sqlite3_iMal
5f20: 6c 6f 63 52 65 73 65 74 20 3d 20 72 65 70 3b 0a  locReset = rep;.
5f30: 20 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e    sqlite3Tsd()->
5f40: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 30  mallocFailed = 0
5f50: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
5f60: 4b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  K;.}.#endif../*.
5f70: 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65  ** Usage: sqlite
5f80: 5f 6d 61 6c 6c 6f 63 5f 73 74 61 74 0a 2a 2a 0a  _malloc_stat.**.
5f90: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75  ** Return the nu
5fa0: 6d 62 65 72 20 6f 66 20 70 72 69 6f 72 20 63 61  mber of prior ca
5fb0: 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65 4d 61 6c  lls to sqliteMal
5fc0: 6c 6f 63 28 29 20 61 6e 64 20 73 71 6c 69 74 65  loc() and sqlite
5fd0: 46 72 65 65 28 29 2e 0a 2a 2f 0a 23 69 66 64 65  Free()..*/.#ifde
5fe0: 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  f SQLITE_MEMDEBU
5ff0: 47 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c  G.static int sql
6000: 69 74 65 5f 6d 61 6c 6c 6f 63 5f 73 74 61 74 28  ite_malloc_stat(
6010: 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64  .  void *NotUsed
6020: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
6030: 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
6040: 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
6050: 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
6060: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
6070: 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20   int argc,      
6080: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
6090: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
60a0: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20  /.  char **argv 
60b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
60c0: 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d  xt of each argum
60d0: 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72  ent */.){.  char
60e0: 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20 20 73 70   zBuf[200];.  sp
60f0: 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 25 64 20  rintf(zBuf, "%d 
6100: 25 64 20 25 64 22 2c 20 73 71 6c 69 74 65 33 5f  %d %d", sqlite3_
6110: 6e 4d 61 6c 6c 6f 63 2c 20 73 71 6c 69 74 65 33  nMalloc, sqlite3
6120: 5f 6e 46 72 65 65 2c 20 73 71 6c 69 74 65 33 5f  _nFree, sqlite3_
6130: 69 4d 61 6c 6c 6f 63 46 61 69 6c 29 3b 0a 20 20  iMallocFail);.  
6140: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
6150: 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 30  (interp, zBuf, 0
6160: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
6170: 4f 4b 3b 0a 7d 0a 73 74 61 74 69 63 20 69 6e 74  OK;.}.static int
6180: 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 6f   sqlite_malloc_o
6190: 75 74 73 74 61 6e 64 69 6e 67 28 0a 20 20 76 6f  utstanding(.  vo
61a0: 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54  id *NotUsed,.  T
61b0: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
61c0: 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c  p,    /* The TCL
61d0: 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61   interpreter tha
61e0: 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63  t invoked this c
61f0: 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  ommand */.  int 
6200: 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20  argc,           
6210: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
6220: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63  arguments */.  c
6230: 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20  har **argv      
6240: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
6250: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a   each argument *
6260: 2f 0a 29 7b 0a 20 20 65 78 74 65 72 6e 20 69 6e  /.){.  extern in
6270: 74 20 73 71 6c 69 74 65 33 4f 75 74 73 74 61 6e  t sqlite3Outstan
6280: 64 69 6e 67 4d 61 6c 6c 6f 63 73 28 54 63 6c 5f  dingMallocs(Tcl_
6290: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 29 3b  Interp *interp);
62a0: 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65  .  return sqlite
62b0: 33 4f 75 74 73 74 61 6e 64 69 6e 67 4d 61 6c 6c  3OutstandingMall
62c0: 6f 63 73 28 69 6e 74 65 72 70 29 3b 0a 7d 0a 23  ocs(interp);.}.#
62d0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  endif../*.** Usa
62e0: 67 65 3a 20 20 73 71 6c 69 74 65 5f 61 62 6f 72  ge:  sqlite_abor
62f0: 74 0a 2a 2a 0a 2a 2a 20 53 68 75 74 64 6f 77 6e  t.**.** Shutdown
6300: 20 74 68 65 20 70 72 6f 63 65 73 73 20 69 6d 6d   the process imm
6310: 65 64 69 61 74 65 6c 79 2e 20 20 54 68 69 73 20  ediately.  This 
6320: 69 73 20 6e 6f 74 20 61 20 63 6c 65 61 6e 20 73  is not a clean s
6330: 68 75 74 64 6f 77 6e 2e 0a 2a 2a 20 54 68 69 73  hutdown..** This
6340: 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65 64   command is used
6350: 20 74 6f 20 74 65 73 74 20 74 68 65 20 72 65 63   to test the rec
6360: 6f 76 65 72 61 62 69 6c 69 74 79 20 6f 66 20 61  overability of a
6370: 20 64 61 74 61 62 61 73 65 20 69 6e 0a 2a 2a 20   database in.** 
6380: 74 68 65 20 65 76 65 6e 74 20 6f 66 20 61 20 70  the event of a p
6390: 72 6f 67 72 61 6d 20 63 72 61 73 68 2e 0a 2a 2f  rogram crash..*/
63a0: 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69  .static int sqli
63b0: 74 65 5f 61 62 6f 72 74 28 0a 20 20 76 6f 69 64  te_abort(.  void
63c0: 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c   *NotUsed,.  Tcl
63d0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
63e0: 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69      /* The TCL i
63f0: 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20  nterpreter that 
6400: 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d  invoked this com
6410: 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72  mand */.  int ar
6420: 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  gc,             
6430: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
6440: 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61  guments */.  cha
6450: 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20  r **argv        
6460: 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65      /* Text of e
6470: 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  ach argument */.
6480: 29 7b 0a 20 20 61 73 73 65 72 74 28 20 69 6e 74  ){.  assert( int
6490: 65 72 70 3d 3d 30 20 29 3b 20 20 20 2f 2a 20 54  erp==0 );   /* T
64a0: 68 69 73 20 77 69 6c 6c 20 61 6c 77 61 79 73 20  his will always 
64b0: 66 61 69 6c 20 2a 2f 0a 20 20 72 65 74 75 72 6e  fail */.  return
64c0: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
64d0: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
64e0: 72 6f 75 74 69 6e 65 20 69 73 20 61 20 75 73 65  routine is a use
64f0: 72 2d 64 65 66 69 6e 65 64 20 53 51 4c 20 66 75  r-defined SQL fu
6500: 6e 63 74 69 6f 6e 20 77 68 6f 73 65 20 70 75 72  nction whose pur
6510: 70 6f 73 65 0a 2a 2a 20 69 73 20 74 6f 20 74 65  pose.** is to te
6520: 73 74 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65  st the sqlite_se
6530: 74 5f 72 65 73 75 6c 74 28 29 20 41 50 49 2e 0a  t_result() API..
6540: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74  */.static void t
6550: 65 73 74 46 75 6e 63 28 73 71 6c 69 74 65 33 5f  estFunc(sqlite3_
6560: 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78 74  context *context
6570: 2c 20 69 6e 74 20 61 72 67 63 2c 20 73 71 6c 69  , int argc, sqli
6580: 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76  te3_value **argv
6590: 29 7b 0a 20 20 77 68 69 6c 65 28 20 61 72 67 63  ){.  while( argc
65a0: 3e 3d 32 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74  >=2 ){.    const
65b0: 20 63 68 61 72 20 2a 7a 41 72 67 30 20 3d 20 73   char *zArg0 = s
65c0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
65d0: 74 28 61 72 67 76 5b 30 5d 29 3b 0a 20 20 20 20  t(argv[0]);.    
65e0: 69 66 28 20 7a 41 72 67 30 20 29 7b 0a 20 20 20  if( zArg0 ){.   
65f0: 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65     if( 0==sqlite
6600: 33 53 74 72 49 43 6d 70 28 7a 41 72 67 30 2c 20  3StrICmp(zArg0, 
6610: 22 69 6e 74 22 29 20 29 7b 0a 20 20 20 20 20 20  "int") ){.      
6620: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
6630: 5f 69 6e 74 28 63 6f 6e 74 65 78 74 2c 20 73 71  _int(context, sq
6640: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28  lite3_value_int(
6650: 61 72 67 76 5b 31 5d 29 29 3b 0a 20 20 20 20 20  argv[1]));.     
6660: 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74   }else if( sqlit
6670: 65 33 53 74 72 49 43 6d 70 28 7a 41 72 67 30 2c  e3StrICmp(zArg0,
6680: 22 69 6e 74 36 34 22 29 3d 3d 30 20 29 7b 0a 20  "int64")==0 ){. 
6690: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72         sqlite3_r
66a0: 65 73 75 6c 74 5f 69 6e 74 36 34 28 63 6f 6e 74  esult_int64(cont
66b0: 65 78 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  ext, sqlite3_val
66c0: 75 65 5f 69 6e 74 36 34 28 61 72 67 76 5b 31 5d  ue_int64(argv[1]
66d0: 29 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  ));.      }else 
66e0: 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43  if( sqlite3StrIC
66f0: 6d 70 28 7a 41 72 67 30 2c 22 73 74 72 69 6e 67  mp(zArg0,"string
6700: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ")==0 ){.       
6710: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
6720: 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 73 71  text(context, sq
6730: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
6740: 28 61 72 67 76 5b 31 5d 29 2c 20 2d 31 2c 0a 20  (argv[1]), -1,. 
6750: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54             SQLIT
6760: 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20  E_TRANSIENT);.  
6770: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71      }else if( sq
6780: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 41 72  lite3StrICmp(zAr
6790: 67 30 2c 22 64 6f 75 62 6c 65 22 29 3d 3d 30 20  g0,"double")==0 
67a0: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
67b0: 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65  e3_result_double
67c0: 28 63 6f 6e 74 65 78 74 2c 20 73 71 6c 69 74 65  (context, sqlite
67d0: 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 28 61  3_value_double(a
67e0: 72 67 76 5b 31 5d 29 29 3b 0a 20 20 20 20 20 20  rgv[1]));.      
67f0: 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65  }else if( sqlite
6800: 33 53 74 72 49 43 6d 70 28 7a 41 72 67 30 2c 22  3StrICmp(zArg0,"
6810: 6e 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20  null")==0 ){.   
6820: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73       sqlite3_res
6830: 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74 65 78 74  ult_null(context
6840: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  );.      }else i
6850: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
6860: 70 28 7a 41 72 67 30 2c 22 76 61 6c 75 65 22 29  p(zArg0,"value")
6870: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73  ==0 ){.        s
6880: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 76 61  qlite3_result_va
6890: 6c 75 65 28 63 6f 6e 74 65 78 74 2c 20 61 72 67  lue(context, arg
68a0: 76 5b 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  v[sqlite3_value_
68b0: 69 6e 74 28 61 72 67 76 5b 31 5d 29 5d 29 3b 0a  int(argv[1])]);.
68c0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
68d0: 20 20 20 20 20 67 6f 74 6f 20 65 72 72 6f 72 5f       goto error_
68e0: 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  out;.      }.   
68f0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 67 6f   }else{.      go
6900: 74 6f 20 65 72 72 6f 72 5f 6f 75 74 3b 0a 20 20  to error_out;.  
6910: 20 20 7d 0a 20 20 20 20 61 72 67 63 20 2d 3d 20    }.    argc -= 
6920: 32 3b 0a 20 20 20 20 61 72 67 76 20 2b 3d 20 32  2;.    argv += 2
6930: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 3b 0a  ;.  }.  return;.
6940: 0a 65 72 72 6f 72 5f 6f 75 74 3a 0a 20 20 73 71  .error_out:.  sq
6950: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72  lite3_result_err
6960: 6f 72 28 63 6f 6e 74 65 78 74 2c 22 66 69 72 73  or(context,"firs
6970: 74 20 61 72 67 75 6d 65 6e 74 20 73 68 6f 75 6c  t argument shoul
6980: 64 20 62 65 20 6f 6e 65 20 6f 66 3a 20 22 0a 20  d be one of: ". 
6990: 20 20 20 20 20 22 69 6e 74 20 69 6e 74 36 34 20       "int int64 
69a0: 73 74 72 69 6e 67 20 64 6f 75 62 6c 65 20 6e 75  string double nu
69b0: 6c 6c 20 76 61 6c 75 65 22 2c 20 2d 31 29 3b 0a  ll value", -1);.
69c0: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
69d0: 20 20 73 71 6c 69 74 65 5f 72 65 67 69 73 74 65    sqlite_registe
69e0: 72 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 20  r_test_function 
69f0: 20 44 42 20 20 4e 41 4d 45 0a 2a 2a 0a 2a 2a 20   DB  NAME.**.** 
6a00: 52 65 67 69 73 74 65 72 20 74 68 65 20 74 65 73  Register the tes
6a10: 74 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 6f  t SQL function o
6a20: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 44  n the database D
6a30: 42 20 75 6e 64 65 72 20 74 68 65 20 6e 61 6d 65  B under the name
6a40: 20 4e 41 4d 45 2e 0a 2a 2f 0a 73 74 61 74 69 63   NAME..*/.static
6a50: 20 69 6e 74 20 74 65 73 74 5f 72 65 67 69 73 74   int test_regist
6a60: 65 72 5f 66 75 6e 63 28 0a 20 20 76 6f 69 64 20  er_func(.  void 
6a70: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f  *NotUsed,.  Tcl_
6a80: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
6a90: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
6aa0: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
6ab0: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
6ac0: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67  and */.  int arg
6ad0: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
6ae0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
6af0: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72  uments */.  char
6b00: 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20   **argv         
6b10: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61     /* Text of ea
6b20: 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29  ch argument */.)
6b30: 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
6b40: 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 66 28  .  int rc;.  if(
6b50: 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20   argc!=3 ){.    
6b60: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
6b70: 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
6b80: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
6b90: 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20  e \"", argv[0], 
6ba0: 0a 20 20 20 20 20 20 20 22 20 44 42 20 46 55 4e  .       " DB FUN
6bb0: 43 54 49 4f 4e 2d 4e 41 4d 45 22 2c 20 30 29 3b  CTION-NAME", 0);
6bc0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
6bd0: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
6be0: 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e   getDbPointer(in
6bf0: 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26  terp, argv[1], &
6c00: 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  db) ) return TCL
6c10: 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73  _ERROR;.  rc = s
6c20: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
6c30: 6e 63 74 69 6f 6e 28 64 62 2c 20 61 72 67 76 5b  nction(db, argv[
6c40: 32 5d 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55  2], -1, SQLITE_U
6c50: 54 46 38 2c 20 30 2c 20 0a 20 20 20 20 20 20 74  TF8, 0, .      t
6c60: 65 73 74 46 75 6e 63 2c 20 30 2c 20 30 29 3b 0a  estFunc, 0, 0);.
6c70: 20 20 69 66 28 20 72 63 21 3d 30 20 29 7b 0a 20    if( rc!=0 ){. 
6c80: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
6c90: 75 6c 74 28 69 6e 74 65 72 70 2c 20 73 71 6c 69  ult(interp, sqli
6ca0: 74 65 33 45 72 72 53 74 72 28 72 63 29 2c 20 30  te3ErrStr(rc), 0
6cb0: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
6cc0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
6cd0: 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72  f( sqlite3TestEr
6ce0: 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62  rCode(interp, db
6cf0: 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54  , rc) ) return T
6d00: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74 75  CL_ERROR;.  retu
6d10: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
6d20: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
6d30: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 20 53 54  te3_finalize  ST
6d40: 4d 54 20 0a 2a 2a 0a 2a 2a 20 46 69 6e 61 6c 69  MT .**.** Finali
6d50: 7a 65 20 61 20 73 74 61 74 65 6d 65 6e 74 20 68  ze a statement h
6d60: 61 6e 64 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  andle..*/.static
6d70: 20 69 6e 74 20 74 65 73 74 5f 66 69 6e 61 6c 69   int test_finali
6d80: 7a 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  ze(.  void * cli
6d90: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
6da0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
6db0: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
6dc0: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
6dd0: 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  [].){.  sqlite3_
6de0: 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69  stmt *pStmt;.  i
6df0: 6e 74 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33  nt rc;.  sqlite3
6e00: 20 2a 64 62 3b 0a 0a 20 20 69 66 28 20 6f 62 6a   *db;..  if( obj
6e10: 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
6e20: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
6e30: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
6e40: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
6e50: 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47  ",.        Tcl_G
6e60: 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28  etStringFromObj(
6e70: 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 3c  objv[0], 0), " <
6e80: 53 54 4d 54 3e 22 2c 20 30 29 3b 0a 20 20 20 20  STMT>", 0);.    
6e90: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
6ea0: 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
6eb0: 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
6ec0: 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
6ed0: 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
6ee0: 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
6ef0: 5f 45 52 52 4f 52 3b 0a 0a 20 20 69 66 28 20 70  _ERROR;..  if( p
6f00: 53 74 6d 74 20 29 7b 0a 20 20 20 20 64 62 20 3d  Stmt ){.    db =
6f10: 20 53 74 6d 74 54 6f 44 62 28 70 53 74 6d 74 29   StmtToDb(pStmt)
6f20: 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
6f30: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53  ite3_finalize(pS
6f40: 74 6d 74 29 3b 0a 20 20 54 63 6c 5f 53 65 74 52  tmt);.  Tcl_SetR
6f50: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63  esult(interp, (c
6f60: 68 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28  har *)errorName(
6f70: 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43 29  rc), TCL_STATIC)
6f80: 3b 0a 20 20 69 66 28 20 64 62 20 26 26 20 73 71  ;.  if( db && sq
6f90: 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65  lite3TestErrCode
6fa0: 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29  (interp, db, rc)
6fb0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
6fc0: 52 4f 52 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  ROR;.  return TC
6fd0: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
6fe0: 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 72  sage:  sqlite3_r
6ff0: 65 73 65 74 20 20 53 54 4d 54 20 0a 2a 2a 0a 2a  eset  STMT .**.*
7000: 2a 20 52 65 73 65 74 20 61 20 73 74 61 74 65 6d  * Reset a statem
7010: 65 6e 74 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 73  ent handle..*/.s
7020: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 72  tatic int test_r
7030: 65 73 65 74 28 0a 20 20 76 6f 69 64 20 2a 20 63  eset(.  void * c
7040: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
7050: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
7060: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
7070: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
7080: 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
7090: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
70a0: 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20   int rc;..  if( 
70b0: 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  objc!=2 ){.    T
70c0: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
70d0: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
70e0: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
70f0: 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63   \"",.        Tc
7100: 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f  l_GetStringFromO
7110: 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20  bj(objv[0], 0), 
7120: 22 20 3c 53 54 4d 54 3e 22 2c 20 30 29 3b 0a 20  " <STMT>", 0);. 
7130: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
7140: 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  ROR;.  }..  if( 
7150: 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69  getStmtPointer(i
7160: 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
7170: 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
7180: 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20  pStmt) ) return 
7190: 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63  TCL_ERROR;..  rc
71a0: 20 3d 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74   = sqlite3_reset
71b0: 28 70 53 74 6d 74 29 3b 0a 20 20 69 66 28 20 70  (pStmt);.  if( p
71c0: 53 74 6d 74 20 26 26 20 73 71 6c 69 74 65 33 54  Stmt && sqlite3T
71d0: 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72  estErrCode(inter
71e0: 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74 6d  p, StmtToDb(pStm
71f0: 74 29 2c 20 72 63 29 20 29 7b 0a 20 20 20 20 72  t), rc) ){.    r
7200: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
7210: 0a 20 20 7d 0a 20 20 54 63 6c 5f 53 65 74 52 65  .  }.  Tcl_SetRe
7220: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68  sult(interp, (ch
7230: 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72  ar *)errorName(r
7240: 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b  c), TCL_STATIC);
7250: 0a 2f 2a 0a 20 20 69 66 28 20 72 63 20 29 7b 0a  ./*.  if( rc ){.
7260: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
7270: 52 52 4f 52 3b 0a 20 20 7d 0a 2a 2f 0a 20 20 72  RROR;.  }.*/.  r
7280: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
7290: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
72a0: 71 6c 69 74 65 33 5f 65 78 70 69 72 65 64 20 53  qlite3_expired S
72b0: 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72  TMT .**.** Retur
72c0: 6e 20 54 52 55 45 20 69 66 20 61 20 72 65 63 6f  n TRUE if a reco
72d0: 6d 70 69 6c 61 74 69 6f 6e 20 6f 66 20 74 68 65  mpilation of the
72e0: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 72 65   statement is re
72f0: 63 6f 6d 6d 65 6e 64 65 64 2e 0a 2a 2f 0a 73 74  commended..*/.st
7300: 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 65 78  atic int test_ex
7310: 70 69 72 65 64 28 0a 20 20 76 6f 69 64 20 2a 20  pired(.  void * 
7320: 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
7330: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
7340: 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
7350: 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
7360: 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74  bjv[].){.  sqlit
7370: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a  e3_stmt *pStmt;.
7380: 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b    if( objc!=2 ){
7390: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
73a0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
73b0: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
73c0: 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20  uld be \"",.    
73d0: 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
73e0: 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d  gFromObj(objv[0]
73f0: 2c 20 30 29 2c 20 22 20 3c 53 54 4d 54 3e 22 2c  , 0), " <STMT>",
7400: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
7410: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
7420: 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
7430: 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
7440: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
7450: 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
7460: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
7470: 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
7480: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
7490: 65 77 42 6f 6f 6c 65 61 6e 4f 62 6a 28 73 71 6c  ewBooleanObj(sql
74a0: 69 74 65 33 5f 65 78 70 69 72 65 64 28 70 53 74  ite3_expired(pSt
74b0: 6d 74 29 29 29 3b 0a 20 20 72 65 74 75 72 6e 20  mt)));.  return 
74c0: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
74d0: 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33   Usage:  sqlite3
74e0: 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e 64 69 6e  _transfer_bindin
74f0: 67 73 20 46 52 4f 4d 53 54 4d 54 20 54 4f 53 54  gs FROMSTMT TOST
7500: 4d 54 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65  MT.**.** Transfe
7510: 72 20 61 6c 6c 20 62 69 6e 64 69 6e 67 73 20 66  r all bindings f
7520: 72 6f 6d 20 46 52 4f 4d 53 54 4d 54 20 6f 76 65  rom FROMSTMT ove
7530: 72 20 74 6f 20 54 4f 53 54 4d 54 0a 2a 2f 0a 73  r to TOSTMT.*/.s
7540: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 74  tatic int test_t
7550: 72 61 6e 73 66 65 72 5f 62 69 6e 64 28 0a 20 20  ransfer_bind(.  
7560: 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
7570: 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
7580: 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
7590: 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
75a0: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
75b0: 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
75c0: 70 53 74 6d 74 31 2c 20 2a 70 53 74 6d 74 32 3b  pStmt1, *pStmt2;
75d0: 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29  .  if( objc!=3 )
75e0: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
75f0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
7600: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
7610: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20  ould be \"",.   
7620: 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
7630: 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30  ngFromObj(objv[0
7640: 5d 2c 20 30 29 2c 20 22 20 46 52 4f 4d 2d 53 54  ], 0), " FROM-ST
7650: 4d 54 20 54 4f 2d 53 54 4d 54 22 2c 20 30 29 3b  MT TO-STMT", 0);
7660: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
7670: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
7680: 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28   getStmtPointer(
7690: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
76a0: 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
76b0: 26 70 53 74 6d 74 31 29 29 20 72 65 74 75 72 6e  &pStmt1)) return
76c0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
76d0: 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
76e0: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
76f0: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 2c  String(objv[2]),
7700: 20 26 70 53 74 6d 74 32 29 29 20 72 65 74 75 72   &pStmt2)) retur
7710: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54  n TCL_ERROR;.  T
7720: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
7730: 69 6e 74 65 72 70 2c 20 0a 20 20 20 20 20 54 63  interp, .     Tc
7740: 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69  l_NewIntObj(sqli
7750: 74 65 33 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e  te3_transfer_bin
7760: 64 69 6e 67 73 28 70 53 74 6d 74 31 2c 70 53 74  dings(pStmt1,pSt
7770: 6d 74 32 29 29 29 3b 0a 20 20 72 65 74 75 72 6e  mt2)));.  return
7780: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
7790: 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
77a0: 33 5f 63 68 61 6e 67 65 73 20 44 42 0a 2a 2a 0a  3_changes DB.**.
77b0: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75  ** Return the nu
77c0: 6d 62 65 72 20 6f 66 20 63 68 61 6e 67 65 73 20  mber of changes 
77d0: 6d 61 64 65 20 74 6f 20 74 68 65 20 64 61 74 61  made to the data
77e0: 62 61 73 65 20 62 79 20 74 68 65 20 6c 61 73 74  base by the last
77f0: 20 53 51 4c 0a 2a 2a 20 65 78 65 63 75 74 69 6f   SQL.** executio
7800: 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  n..*/.static int
7810: 20 74 65 73 74 5f 63 68 61 6e 67 65 73 28 0a 20   test_changes(. 
7820: 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
7830: 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
7840: 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
7850: 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
7860: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
7870: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a  .  sqlite3 *db;.
7880: 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b    if( objc!=2 ){
7890: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
78a0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
78b0: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
78c0: 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20  uld be \"",.    
78d0: 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
78e0: 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44 42 22  (objv[0]), " DB"
78f0: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
7900: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
7910: 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74    if( getDbPoint
7920: 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
7930: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
7940: 29 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e  ), &db) ) return
7950: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63   TCL_ERROR;.  Tc
7960: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
7970: 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e  nterp, Tcl_NewIn
7980: 74 4f 62 6a 28 73 71 6c 69 74 65 33 5f 63 68 61  tObj(sqlite3_cha
7990: 6e 67 65 73 28 64 62 29 29 29 3b 0a 20 20 72 65  nges(db)));.  re
79a0: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
79b0: 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68  /*.** This is th
79c0: 65 20 22 73 74 61 74 69 63 5f 62 69 6e 64 5f 76  e "static_bind_v
79d0: 61 6c 75 65 22 20 74 68 61 74 20 76 61 72 69 61  alue" that varia
79e0: 62 6c 65 73 20 61 72 65 20 62 6f 75 6e 64 20 74  bles are bound t
79f0: 6f 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 46 4c  o when.** the FL
7a00: 41 47 20 6f 70 74 69 6f 6e 20 6f 66 20 73 71 6c  AG option of sql
7a10: 69 74 65 33 5f 62 69 6e 64 20 69 73 20 22 73 74  ite3_bind is "st
7a20: 61 74 69 63 22 0a 2a 2f 0a 73 74 61 74 69 63 20  atic".*/.static 
7a30: 63 68 61 72 20 2a 73 71 6c 69 74 65 5f 73 74 61  char *sqlite_sta
7a40: 74 69 63 5f 62 69 6e 64 5f 76 61 6c 75 65 20 3d  tic_bind_value =
7a50: 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65   0;../*.** Usage
7a60: 3a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 20  :  sqlite3_bind 
7a70: 20 56 4d 20 20 49 44 58 20 20 56 41 4c 55 45 20   VM  IDX  VALUE 
7a80: 20 46 4c 41 47 53 0a 2a 2a 0a 2a 2a 20 53 65 74   FLAGS.**.** Set
7a90: 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  s the value of t
7aa0: 68 65 20 49 44 58 2d 74 68 20 6f 63 63 75 72 61  he IDX-th occura
7ab0: 6e 63 65 20 6f 66 20 22 3f 22 20 69 6e 20 74 68  nce of "?" in th
7ac0: 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 0a 2a  e original SQL.*
7ad0: 2a 20 73 74 72 69 6e 67 2e 20 20 56 41 4c 55 45  * string.  VALUE
7ae0: 20 69 73 20 74 68 65 20 6e 65 77 20 76 61 6c 75   is the new valu
7af0: 65 2e 20 20 49 66 20 46 4c 41 47 53 3d 3d 22 6e  e.  If FLAGS=="n
7b00: 75 6c 6c 22 20 74 68 65 6e 20 56 41 4c 55 45 20  ull" then VALUE 
7b10: 69 73 0a 2a 2a 20 69 67 6e 6f 72 65 64 20 61 6e  is.** ignored an
7b20: 64 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 73  d the value is s
7b30: 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 49 66 20  et to NULL.  If 
7b40: 46 4c 41 47 53 3d 3d 22 73 74 61 74 69 63 22 20  FLAGS=="static" 
7b50: 74 68 65 6e 0a 2a 2a 20 74 68 65 20 76 61 6c 75  then.** the valu
7b60: 65 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  e is set to the 
7b70: 76 61 6c 75 65 20 6f 66 20 61 20 73 74 61 74 69  value of a stati
7b80: 63 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 64  c variable named
7b90: 0a 2a 2a 20 22 73 71 6c 69 74 65 5f 73 74 61 74  .** "sqlite_stat
7ba0: 69 63 5f 62 69 6e 64 5f 76 61 6c 75 65 22 2e 20  ic_bind_value". 
7bb0: 20 49 66 20 46 4c 41 47 53 3d 3d 22 6e 6f 72 6d   If FLAGS=="norm
7bc0: 61 6c 22 20 74 68 65 6e 20 61 20 63 6f 70 79 0a  al" then a copy.
7bd0: 2a 2a 20 6f 66 20 74 68 65 20 56 41 4c 55 45 20  ** of the VALUE 
7be0: 69 73 20 6d 61 64 65 2e 20 20 49 66 20 46 4c 41  is made.  If FLA
7bf0: 47 53 3d 3d 22 62 6c 6f 62 31 30 22 20 74 68 65  GS=="blob10" the
7c00: 6e 20 61 20 56 41 4c 55 45 20 69 73 20 69 67 6e  n a VALUE is ign
7c10: 6f 72 65 64 0a 2a 2a 20 61 6e 20 61 20 31 30 2d  ored.** an a 10-
7c20: 62 79 74 65 20 62 6c 6f 62 20 22 61 62 63 5c 30  byte blob "abc\0
7c30: 30 30 78 79 7a 5c 30 30 30 70 71 22 20 69 73 20  00xyz\000pq" is 
7c40: 69 6e 73 65 72 74 65 64 2e 0a 2a 2f 0a 73 74 61  inserted..*/.sta
7c50: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e  tic int test_bin
7c60: 64 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73  d(.  void *NotUs
7c70: 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ed,.  Tcl_Interp
7c80: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
7c90: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
7ca0: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
7cb0: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
7cc0: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20  .  int argc,    
7cd0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
7ce0: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
7cf0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67   */.  char **arg
7d00: 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  v            /* 
7d10: 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67  Text of each arg
7d20: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71  ument */.){.  sq
7d30: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
7d40: 74 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69  t;.  int rc;.  i
7d50: 6e 74 20 69 64 78 3b 0a 20 20 69 66 28 20 61 72  nt idx;.  if( ar
7d60: 67 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=5 ){.    Tcl
7d70: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
7d80: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
7d90: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
7da0: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20  "", argv[0], .  
7db0: 20 20 20 20 20 22 20 56 4d 20 49 44 58 20 56 41       " VM IDX VA
7dc0: 4c 55 45 20 28 6e 75 6c 6c 7c 73 74 61 74 69 63  LUE (null|static
7dd0: 7c 6e 6f 72 6d 61 6c 29 5c 22 22 2c 20 30 29 3b  |normal)\"", 0);
7de0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
7df0: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
7e00: 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28   getStmtPointer(
7e10: 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c  interp, argv[1],
7e20: 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
7e30: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
7e40: 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e  f( Tcl_GetInt(in
7e50: 74 65 72 70 2c 20 61 72 67 76 5b 32 5d 2c 20 26  terp, argv[2], &
7e60: 69 64 78 29 20 29 20 72 65 74 75 72 6e 20 54 43  idx) ) return TC
7e70: 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 73  L_ERROR;.  if( s
7e80: 74 72 63 6d 70 28 61 72 67 76 5b 34 5d 2c 22 6e  trcmp(argv[4],"n
7e90: 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ull")==0 ){.    
7ea0: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e  rc = sqlite3_bin
7eb0: 64 5f 6e 75 6c 6c 28 70 53 74 6d 74 2c 20 69 64  d_null(pStmt, id
7ec0: 78 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  x);.  }else if( 
7ed0: 73 74 72 63 6d 70 28 61 72 67 76 5b 34 5d 2c 22  strcmp(argv[4],"
7ee0: 73 74 61 74 69 63 22 29 3d 3d 30 20 29 7b 0a 20  static")==0 ){. 
7ef0: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
7f00: 62 69 6e 64 5f 74 65 78 74 28 70 53 74 6d 74 2c  bind_text(pStmt,
7f10: 20 69 64 78 2c 20 73 71 6c 69 74 65 5f 73 74 61   idx, sqlite_sta
7f20: 74 69 63 5f 62 69 6e 64 5f 76 61 6c 75 65 2c 20  tic_bind_value, 
7f30: 2d 31 2c 20 30 29 3b 0a 20 20 7d 65 6c 73 65 20  -1, 0);.  }else 
7f40: 69 66 28 20 73 74 72 63 6d 70 28 61 72 67 76 5b  if( strcmp(argv[
7f50: 34 5d 2c 22 6e 6f 72 6d 61 6c 22 29 3d 3d 30 20  4],"normal")==0 
7f60: 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
7f70: 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 70 53  te3_bind_text(pS
7f80: 74 6d 74 2c 20 69 64 78 2c 20 61 72 67 76 5b 33  tmt, idx, argv[3
7f90: 5d 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 54 52  ], -1, SQLITE_TR
7fa0: 41 4e 53 49 45 4e 54 29 3b 0a 20 20 7d 65 6c 73  ANSIENT);.  }els
7fb0: 65 20 69 66 28 20 73 74 72 63 6d 70 28 61 72 67  e if( strcmp(arg
7fc0: 76 5b 34 5d 2c 22 62 6c 6f 62 31 30 22 29 3d 3d  v[4],"blob10")==
7fd0: 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  0 ){.    rc = sq
7fe0: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28  lite3_bind_text(
7ff0: 70 53 74 6d 74 2c 20 69 64 78 2c 20 22 61 62 63  pStmt, idx, "abc
8000: 5c 30 30 30 78 79 7a 5c 30 30 30 70 71 22 2c 20  \000xyz\000pq", 
8010: 31 30 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  10, SQLITE_STATI
8020: 43 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  C);.  }else{.   
8030: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
8040: 74 28 69 6e 74 65 72 70 2c 20 22 34 74 68 20 61  t(interp, "4th a
8050: 72 67 75 6d 65 6e 74 20 73 68 6f 75 6c 64 20 62  rgument should b
8060: 65 20 22 0a 20 20 20 20 20 20 20 20 22 5c 22 6e  e ".        "\"n
8070: 75 6c 6c 5c 22 20 6f 72 20 5c 22 73 74 61 74 69  ull\" or \"stati
8080: 63 5c 22 20 6f 72 20 5c 22 6e 6f 72 6d 61 6c 5c  c\" or \"normal\
8090: 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  "", 0);.    retu
80a0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
80b0: 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54  }.  if( sqlite3T
80c0: 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72  estErrCode(inter
80d0: 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74 6d  p, StmtToDb(pStm
80e0: 74 29 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e  t), rc) ) return
80f0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
8100: 28 20 72 63 20 29 7b 0a 20 20 20 20 63 68 61 72  ( rc ){.    char
8110: 20 7a 42 75 66 5b 35 30 5d 3b 0a 20 20 20 20 73   zBuf[50];.    s
8120: 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 28 25  printf(zBuf, "(%
8130: 64 29 20 22 2c 20 72 63 29 3b 0a 20 20 20 20 54  d) ", rc);.    T
8140: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
8150: 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 73 71  interp, zBuf, sq
8160: 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29 2c  lite3ErrStr(rc),
8170: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
8180: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
8190: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
81a0: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
81b0: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 2f 2a 0a  E_OMIT_UTF16./*.
81c0: 2a 2a 20 55 73 61 67 65 3a 20 61 64 64 5f 74 65  ** Usage: add_te
81d0: 73 74 5f 63 6f 6c 6c 61 74 65 20 3c 64 62 20 70  st_collate <db p
81e0: 74 72 3e 20 3c 75 74 66 38 3e 20 3c 75 74 66 31  tr> <utf8> <utf1
81f0: 36 6c 65 3e 20 3c 75 74 66 31 36 62 65 3e 0a 2a  6le> <utf16be>.*
8200: 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69  *.** This functi
8210: 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 74 65  on is used to te
8220: 73 74 20 74 68 61 74 20 53 51 4c 69 74 65 20 73  st that SQLite s
8230: 65 6c 65 63 74 73 20 74 68 65 20 63 6f 72 72 65  elects the corre
8240: 63 74 20 63 6f 6c 6c 61 74 69 6f 6e 0a 2a 2a 20  ct collation.** 
8250: 73 65 71 75 65 6e 63 65 20 63 61 6c 6c 62 61 63  sequence callbac
8260: 6b 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20  k when multiple 
8270: 76 65 72 73 69 6f 6e 73 20 28 66 6f 72 20 64 69  versions (for di
8280: 66 66 65 72 65 6e 74 20 74 65 78 74 20 65 6e 63  fferent text enc
8290: 6f 64 69 6e 67 73 29 0a 2a 2a 20 61 72 65 20 61  odings).** are a
82a0: 76 61 69 6c 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  vailable..**.** 
82b0: 43 61 6c 6c 69 6e 67 20 74 68 69 73 20 72 6f 75  Calling this rou
82c0: 74 69 6e 65 20 72 65 67 69 73 74 65 72 73 20 74  tine registers t
82d0: 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
82e0: 75 65 6e 63 65 20 22 74 65 73 74 5f 63 6f 6c 6c  uence "test_coll
82f0: 61 74 65 22 0a 2a 2a 20 77 69 74 68 20 64 61 74  ate".** with dat
8300: 61 62 61 73 65 20 68 61 6e 64 6c 65 20 3c 64 62  abase handle <db
8310: 3e 2e 20 54 68 65 20 73 65 63 6f 6e 64 20 61 72  >. The second ar
8320: 67 75 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 61  gument must be a
8330: 20 6c 69 73 74 20 6f 66 20 74 68 72 65 65 0a 2a   list of three.*
8340: 2a 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 73  * boolean values
8350: 2e 20 49 66 20 74 68 65 20 66 69 72 73 74 20 69  . If the first i
8360: 73 20 74 72 75 65 2c 20 74 68 65 6e 20 61 20 76  s true, then a v
8370: 65 72 73 69 6f 6e 20 6f 66 20 74 65 73 74 5f 63  ersion of test_c
8380: 6f 6c 6c 61 74 65 20 69 73 0a 2a 2a 20 72 65 67  ollate is.** reg
8390: 69 73 74 65 72 65 64 20 66 6f 72 20 55 54 46 2d  istered for UTF-
83a0: 38 2c 20 69 66 20 74 68 65 20 73 65 63 6f 6e 64  8, if the second
83b0: 20 69 73 20 74 72 75 65 2c 20 61 20 76 65 72 73   is true, a vers
83c0: 69 6f 6e 20 69 73 20 72 65 67 69 73 74 65 72 65  ion is registere
83d0: 64 20 66 6f 72 0a 2a 2a 20 55 54 46 2d 31 36 6c  d for.** UTF-16l
83e0: 65 2c 20 69 66 20 74 68 65 20 74 68 69 72 64 20  e, if the third 
83f0: 69 73 20 74 72 75 65 2c 20 61 20 55 54 46 2d 31  is true, a UTF-1
8400: 36 62 65 20 76 65 72 73 69 6f 6e 20 69 73 20 61  6be version is a
8410: 76 61 69 6c 61 62 6c 65 2e 0a 2a 2a 20 50 72 65  vailable..** Pre
8420: 76 69 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f  vious versions o
8430: 66 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 20 61  f test_collate a
8440: 72 65 20 64 65 6c 65 74 65 64 2e 0a 2a 2a 0a 2a  re deleted..**.*
8450: 2a 20 54 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20  * The collation 
8460: 73 65 71 75 65 6e 63 65 20 74 65 73 74 5f 63 6f  sequence test_co
8470: 6c 6c 61 74 65 20 69 73 20 69 6d 70 6c 65 6d 65  llate is impleme
8480: 6e 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20  nted by calling 
8490: 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67  the.** following
84a0: 20 54 43 4c 20 73 63 72 69 70 74 3a 0a 2a 2a 0a   TCL script:.**.
84b0: 2a 2a 20 20 20 22 74 65 73 74 5f 63 6f 6c 6c 61  **   "test_colla
84c0: 74 65 20 3c 65 6e 63 3e 20 3c 6c 68 73 3e 20 3c  te <enc> <lhs> <
84d0: 72 68 73 3e 22 0a 2a 2a 0a 2a 2a 20 54 68 65 20  rhs>".**.** The 
84e0: 3c 6c 68 73 3e 20 61 6e 64 20 3c 72 68 73 3e 20  <lhs> and <rhs> 
84f0: 61 72 65 20 74 68 65 20 74 77 6f 20 76 61 6c 75  are the two valu
8500: 65 73 20 62 65 69 6e 67 20 63 6f 6d 70 61 72 65  es being compare
8510: 64 2c 20 65 6e 63 6f 64 65 64 20 69 6e 20 55 54  d, encoded in UT
8520: 46 2d 38 2e 0a 2a 2a 20 54 68 65 20 3c 65 6e 63  F-8..** The <enc
8530: 3e 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 74  > parameter is t
8540: 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 74  he encoding of t
8550: 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e  he collation fun
8560: 63 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 53 51  ction that.** SQ
8570: 4c 69 74 65 20 73 65 6c 65 63 74 65 64 20 74 6f  Lite selected to
8580: 20 63 61 6c 6c 2e 20 54 68 65 20 54 43 4c 20 74   call. The TCL t
8590: 65 73 74 20 73 63 72 69 70 74 20 69 6d 70 6c 65  est script imple
85a0: 6d 65 6e 74 73 20 74 68 65 0a 2a 2a 20 22 74 65  ments the.** "te
85b0: 73 74 5f 63 6f 6c 6c 61 74 65 22 20 70 72 6f 63  st_collate" proc
85c0: 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61  ..**.** Note tha
85d0: 74 20 74 68 69 73 20 77 69 6c 6c 20 6f 6e 6c 79  t this will only
85e0: 20 77 6f 72 6b 20 77 69 74 68 20 6f 6e 65 20 69   work with one i
85f0: 6e 74 65 70 72 65 74 65 72 20 61 74 20 61 20 74  ntepreter at a t
8600: 69 6d 65 2c 20 61 73 20 74 68 65 0a 2a 2a 20 69  ime, as the.** i
8610: 6e 74 65 72 70 20 70 6f 69 6e 74 65 72 20 74 6f  nterp pointer to
8620: 20 75 73 65 20 77 68 65 6e 20 65 76 61 6c 75 61   use when evalua
8630: 74 69 6e 67 20 74 68 65 20 54 43 4c 20 73 63 72  ting the TCL scr
8640: 69 70 74 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ipt is stored in
8650: 0a 2a 2a 20 70 54 65 73 74 43 6f 6c 6c 61 74 65  .** pTestCollate
8660: 49 6e 74 65 72 70 2e 0a 2a 2f 0a 73 74 61 74 69  Interp..*/.stati
8670: 63 20 54 63 6c 5f 49 6e 74 65 72 70 2a 20 70 54  c Tcl_Interp* pT
8680: 65 73 74 43 6f 6c 6c 61 74 65 49 6e 74 65 72 70  estCollateInterp
8690: 3b 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  ;.static int tes
86a0: 74 5f 63 6f 6c 6c 61 74 65 5f 66 75 6e 63 28 0a  t_collate_func(.
86b0: 20 20 76 6f 69 64 20 2a 70 43 74 78 2c 20 0a 20    void *pCtx, . 
86c0: 20 69 6e 74 20 6e 41 2c 20 63 6f 6e 73 74 20 76   int nA, const v
86d0: 6f 69 64 20 2a 7a 41 2c 0a 20 20 69 6e 74 20 6e  oid *zA,.  int n
86e0: 42 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a  B, const void *z
86f0: 42 0a 29 7b 0a 20 20 54 63 6c 5f 49 6e 74 65 72  B.){.  Tcl_Inter
8700: 70 20 2a 69 20 3d 20 70 54 65 73 74 43 6f 6c 6c  p *i = pTestColl
8710: 61 74 65 49 6e 74 65 72 70 3b 0a 20 20 69 6e 74  ateInterp;.  int
8720: 20 65 6e 63 69 6e 20 3d 20 28 69 6e 74 29 70 43   encin = (int)pC
8730: 74 78 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  tx;.  int res;. 
8740: 20 69 6e 74 20 6e 3b 0a 0a 20 20 73 71 6c 69 74   int n;..  sqlit
8750: 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 3b 0a  e3_value *pVal;.
8760: 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 58 3b 0a 0a    Tcl_Obj *pX;..
8770: 20 20 70 58 20 3d 20 54 63 6c 5f 4e 65 77 53 74    pX = Tcl_NewSt
8780: 72 69 6e 67 4f 62 6a 28 22 74 65 73 74 5f 63 6f  ringObj("test_co
8790: 6c 6c 61 74 65 22 2c 20 2d 31 29 3b 0a 20 20 54  llate", -1);.  T
87a0: 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74 28  cl_IncrRefCount(
87b0: 70 58 29 3b 0a 0a 20 20 73 77 69 74 63 68 28 20  pX);..  switch( 
87c0: 65 6e 63 69 6e 20 29 7b 0a 20 20 20 20 63 61 73  encin ){.    cas
87d0: 65 20 53 51 4c 49 54 45 5f 55 54 46 38 3a 0a 20  e SQLITE_UTF8:. 
87e0: 20 20 20 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a       Tcl_ListObj
87f0: 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 2c  AppendElement(i,
8800: 70 58 2c 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  pX,Tcl_NewString
8810: 4f 62 6a 28 22 55 54 46 2d 38 22 2c 2d 31 29 29  Obj("UTF-8",-1))
8820: 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
8830: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 55     case SQLITE_U
8840: 54 46 31 36 4c 45 3a 0a 20 20 20 20 20 20 54 63  TF16LE:.      Tc
8850: 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45  l_ListObjAppendE
8860: 6c 65 6d 65 6e 74 28 69 2c 70 58 2c 54 63 6c 5f  lement(i,pX,Tcl_
8870: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 55 54  NewStringObj("UT
8880: 46 2d 31 36 4c 45 22 2c 2d 31 29 29 3b 0a 20 20  F-16LE",-1));.  
8890: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
88a0: 61 73 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36  ase SQLITE_UTF16
88b0: 42 45 3a 0a 20 20 20 20 20 20 54 63 6c 5f 4c 69  BE:.      Tcl_Li
88c0: 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65  stObjAppendEleme
88d0: 6e 74 28 69 2c 70 58 2c 54 63 6c 5f 4e 65 77 53  nt(i,pX,Tcl_NewS
88e0: 74 72 69 6e 67 4f 62 6a 28 22 55 54 46 2d 31 36  tringObj("UTF-16
88f0: 42 45 22 2c 2d 31 29 29 3b 0a 20 20 20 20 20 20  BE",-1));.      
8900: 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75  break;.    defau
8910: 6c 74 3a 0a 20 20 20 20 20 20 61 73 73 65 72 74  lt:.      assert
8920: 28 30 29 3b 0a 20 20 7d 0a 0a 20 20 70 56 61 6c  (0);.  }..  pVal
8930: 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65 4e   = sqlite3ValueN
8940: 65 77 28 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  ew();.  sqlite3V
8950: 61 6c 75 65 53 65 74 53 74 72 28 70 56 61 6c 2c  alueSetStr(pVal,
8960: 20 6e 41 2c 20 7a 41 2c 20 65 6e 63 69 6e 2c 20   nA, zA, encin, 
8970: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
8980: 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 5f 76 61    n = sqlite3_va
8990: 6c 75 65 5f 62 79 74 65 73 28 70 56 61 6c 29 3b  lue_bytes(pVal);
89a0: 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70  .  Tcl_ListObjAp
89b0: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 2c 70 58  pendElement(i,pX
89c0: 2c 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62  ,Tcl_NewStringOb
89d0: 6a 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  j(sqlite3_value_
89e0: 74 65 78 74 28 70 56 61 6c 29 2c 6e 29 29 3b 0a  text(pVal),n));.
89f0: 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65    sqlite3ValueSe
8a00: 74 53 74 72 28 70 56 61 6c 2c 20 6e 42 2c 20 7a  tStr(pVal, nB, z
8a10: 42 2c 20 65 6e 63 69 6e 2c 20 53 51 4c 49 54 45  B, encin, SQLITE
8a20: 5f 53 54 41 54 49 43 29 3b 0a 20 20 6e 20 3d 20  _STATIC);.  n = 
8a30: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79  sqlite3_value_by
8a40: 74 65 73 28 70 56 61 6c 29 3b 0a 20 20 54 63 6c  tes(pVal);.  Tcl
8a50: 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
8a60: 65 6d 65 6e 74 28 69 2c 70 58 2c 54 63 6c 5f 4e  ement(i,pX,Tcl_N
8a70: 65 77 53 74 72 69 6e 67 4f 62 6a 28 73 71 6c 69  ewStringObj(sqli
8a80: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70  te3_value_text(p
8a90: 56 61 6c 29 2c 6e 29 29 3b 0a 20 20 73 71 6c 69  Val),n));.  sqli
8aa0: 74 65 33 56 61 6c 75 65 46 72 65 65 28 70 56 61  te3ValueFree(pVa
8ab0: 6c 29 3b 0a 0a 20 20 54 63 6c 5f 45 76 61 6c 4f  l);..  Tcl_EvalO
8ac0: 62 6a 45 78 28 69 2c 20 70 58 2c 20 30 29 3b 0a  bjEx(i, pX, 0);.
8ad0: 20 20 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75    Tcl_DecrRefCou
8ae0: 6e 74 28 70 58 29 3b 0a 20 20 54 63 6c 5f 47 65  nt(pX);.  Tcl_Ge
8af0: 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 2c 20 54  tIntFromObj(i, T
8b00: 63 6c 5f 47 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_GetObjResult(
8b10: 69 29 2c 20 26 72 65 73 29 3b 0a 20 20 72 65 74  i), &res);.  ret
8b20: 75 72 6e 20 72 65 73 3b 0a 7d 0a 73 74 61 74 69  urn res;.}.stati
8b30: 63 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c 6c 61  c int test_colla
8b40: 74 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  te(.  void * cli
8b50: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
8b60: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
8b70: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
8b80: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
8b90: 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  [].){.  sqlite3 
8ba0: 2a 64 62 3b 0a 20 20 69 6e 74 20 76 61 6c 3b 0a  *db;.  int val;.
8bb0: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
8bc0: 2a 70 56 61 6c 3b 0a 20 20 69 6e 74 20 72 63 3b  *pVal;.  int rc;
8bd0: 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 35 20  ..  if( objc!=5 
8be0: 29 20 67 6f 74 6f 20 62 61 64 5f 61 72 67 73 3b  ) goto bad_args;
8bf0: 0a 20 20 70 54 65 73 74 43 6f 6c 6c 61 74 65 49  .  pTestCollateI
8c00: 6e 74 65 72 70 20 3d 20 69 6e 74 65 72 70 3b 0a  nterp = interp;.
8c10: 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74    if( getDbPoint
8c20: 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
8c30: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
8c40: 29 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e  ), &db) ) return
8c50: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 69   TCL_ERROR;..  i
8c60: 66 28 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47  f( TCL_OK!=Tcl_G
8c70: 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a  etBooleanFromObj
8c80: 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d  (interp, objv[2]
8c90: 2c 20 26 76 61 6c 29 20 29 20 72 65 74 75 72 6e  , &val) ) return
8ca0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63   TCL_ERROR;.  rc
8cb0: 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74   = sqlite3_creat
8cc0: 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20  e_collation(db, 
8cd0: 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22 2c 20  "test_collate", 
8ce0: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 0a 20 20  SQLITE_UTF8, .  
8cf0: 20 20 20 20 20 20 20 20 28 76 6f 69 64 20 2a 29          (void *)
8d00: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 76 61 6c  SQLITE_UTF8, val
8d10: 3f 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 66 75  ?test_collate_fu
8d20: 6e 63 3a 30 29 3b 0a 20 20 69 66 28 20 72 63 3d  nc:0);.  if( rc=
8d30: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
8d40: 20 20 69 66 28 20 54 43 4c 5f 4f 4b 21 3d 54 63    if( TCL_OK!=Tc
8d50: 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d  l_GetBooleanFrom
8d60: 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
8d70: 5b 33 5d 2c 20 26 76 61 6c 29 20 29 20 72 65 74  [3], &val) ) ret
8d80: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
8d90: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
8da0: 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e  create_collation
8db0: 28 64 62 2c 20 22 74 65 73 74 5f 63 6f 6c 6c 61  (db, "test_colla
8dc0: 74 65 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  te", SQLITE_UTF1
8dd0: 36 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20  6LE, .          
8de0: 20 20 28 76 6f 69 64 20 2a 29 53 51 4c 49 54 45    (void *)SQLITE
8df0: 5f 55 54 46 31 36 4c 45 2c 20 76 61 6c 3f 74 65  _UTF16LE, val?te
8e00: 73 74 5f 63 6f 6c 6c 61 74 65 5f 66 75 6e 63 3a  st_collate_func:
8e10: 30 29 3b 0a 20 20 20 20 69 66 28 20 54 43 4c 5f  0);.    if( TCL_
8e20: 4f 4b 21 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c 65  OK!=Tcl_GetBoole
8e30: 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  anFromObj(interp
8e40: 2c 20 6f 62 6a 76 5b 34 5d 2c 20 26 76 61 6c 29  , objv[4], &val)
8e50: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
8e60: 52 4f 52 3b 0a 0a 20 20 20 20 70 56 61 6c 20 3d  ROR;..    pVal =
8e70: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77   sqlite3ValueNew
8e80: 28 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  ();.    sqlite3V
8e90: 61 6c 75 65 53 65 74 53 74 72 28 70 56 61 6c 2c  alueSetStr(pVal,
8ea0: 20 2d 31 2c 20 22 74 65 73 74 5f 63 6f 6c 6c 61   -1, "test_colla
8eb0: 74 65 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  te", SQLITE_UTF8
8ec0: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
8ed0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72  ;.    sqlite3_cr
8ee0: 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 31 36  eate_collation16
8ef0: 28 64 62 2c 20 73 71 6c 69 74 65 33 56 61 6c 75  (db, sqlite3Valu
8f00: 65 54 65 78 74 28 70 56 61 6c 2c 20 53 51 4c 49  eText(pVal, SQLI
8f10: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 29 2c  TE_UTF16NATIVE),
8f20: 20 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c 49   .          SQLI
8f30: 54 45 5f 55 54 46 31 36 42 45 2c 20 28 76 6f 69  TE_UTF16BE, (voi
8f40: 64 20 2a 29 53 51 4c 49 54 45 5f 55 54 46 31 36  d *)SQLITE_UTF16
8f50: 42 45 2c 20 76 61 6c 3f 74 65 73 74 5f 63 6f 6c  BE, val?test_col
8f60: 6c 61 74 65 5f 66 75 6e 63 3a 30 29 3b 0a 20 20  late_func:0);.  
8f70: 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72    sqlite3ValueFr
8f80: 65 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 20 20  ee(pVal);.  }.  
8f90: 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45  if( sqlite3TestE
8fa0: 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64  rrCode(interp, d
8fb0: 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20  b, rc) ) return 
8fc0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74  TCL_ERROR;.  ret
8fd0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 0a 62 61 64  urn TCL_OK;..bad
8fe0: 5f 61 72 67 73 3a 0a 20 20 54 63 6c 5f 41 70 70  _args:.  Tcl_App
8ff0: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
9000: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
9010: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a   should be \"",.
9020: 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
9030: 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b  ingFromObj(objv[
9040: 30 5d 2c 20 30 29 2c 20 22 20 3c 44 42 3e 20 3c  0], 0), " <DB> <
9050: 75 74 66 38 3e 20 3c 75 74 66 31 36 6c 65 3e 20  utf8> <utf16le> 
9060: 3c 75 74 66 31 36 62 65 3e 22 2c 20 30 29 3b 0a  <utf16be>", 0);.
9070: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
9080: 4f 52 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 76 6f  OR;.}..static vo
9090: 69 64 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f  id test_collate_
90a0: 6e 65 65 64 65 64 5f 63 62 28 0a 20 20 76 6f 69  needed_cb(.  voi
90b0: 64 20 2a 70 43 74 78 2c 20 0a 20 20 73 71 6c 69  d *pCtx, .  sqli
90c0: 74 65 33 20 2a 64 62 2c 0a 20 20 69 6e 74 20 65  te3 *db,.  int e
90d0: 54 65 78 74 52 65 70 2c 0a 20 20 63 6f 6e 73 74  TextRep,.  const
90e0: 20 76 6f 69 64 20 2a 6e 6f 74 55 73 65 64 0a 29   void *notUsed.)
90f0: 7b 0a 20 20 69 6e 74 20 65 6e 63 20 3d 20 64 62  {.  int enc = db
9100: 2d 3e 65 6e 63 3b 0a 20 20 73 71 6c 69 74 65 33  ->enc;.  sqlite3
9110: 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f  _create_collatio
9120: 6e 28 0a 20 20 20 20 20 20 64 62 2c 20 22 74 65  n(.      db, "te
9130: 73 74 5f 63 6f 6c 6c 61 74 65 22 2c 20 64 62 2d  st_collate", db-
9140: 3e 65 6e 63 2c 20 28 76 6f 69 64 20 2a 29 65 6e  >enc, (void *)en
9150: 63 2c 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f  c, test_collate_
9160: 66 75 6e 63 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  func);.}../*.** 
9170: 55 73 61 67 65 3a 20 61 64 64 5f 74 65 73 74 5f  Usage: add_test_
9180: 63 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64 20 44  collate_needed D
9190: 42 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  B.*/.static int 
91a0: 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65  test_collate_nee
91b0: 64 65 64 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  ded(.  void * cl
91c0: 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
91d0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
91e0: 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
91f0: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
9200: 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
9210: 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a   *db;.  int rc;.
9220: 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29  .  if( objc!=2 )
9230: 20 67 6f 74 6f 20 62 61 64 5f 61 72 67 73 3b 0a   goto bad_args;.
9240: 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74    if( getDbPoint
9250: 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
9260: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
9270: 29 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e  ), &db) ) return
9280: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63   TCL_ERROR;.  rc
9290: 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 6c 61   = sqlite3_colla
92a0: 74 69 6f 6e 5f 6e 65 65 64 65 64 31 36 28 64 62  tion_needed16(db
92b0: 2c 20 30 2c 20 74 65 73 74 5f 63 6f 6c 6c 61 74  , 0, test_collat
92c0: 65 5f 6e 65 65 64 65 64 5f 63 62 29 3b 0a 20 20  e_needed_cb);.  
92d0: 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45  if( sqlite3TestE
92e0: 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64  rrCode(interp, d
92f0: 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20  b, rc) ) return 
9300: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74  TCL_ERROR;.  ret
9310: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 0a 62 61 64  urn TCL_OK;..bad
9320: 5f 61 72 67 73 3a 0a 20 20 54 63 6c 5f 57 72 6f  _args:.  Tcl_Wro
9330: 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
9340: 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 44 42 22 29  , 1, objv, "DB")
9350: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ;.  return TCL_E
9360: 52 52 4f 52 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  RROR;.}.#endif /
9370: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  * SQLITE_OMIT_UT
9380: 46 31 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 55 73  F16 */../*.** Us
9390: 61 67 65 3a 20 61 64 64 5f 74 65 73 74 5f 66 75  age: add_test_fu
93a0: 6e 63 74 69 6f 6e 20 3c 64 62 20 70 74 72 3e 20  nction <db ptr> 
93b0: 3c 75 74 66 38 3e 20 3c 75 74 66 31 36 6c 65 3e  <utf8> <utf16le>
93c0: 20 3c 75 74 66 31 36 62 65 3e 0a 2a 2a 0a 2a 2a   <utf16be>.**.**
93d0: 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69   This function i
93e0: 73 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 74  s used to test t
93f0: 68 61 74 20 53 51 4c 69 74 65 20 73 65 6c 65 63  hat SQLite selec
9400: 74 73 20 74 68 65 20 63 6f 72 72 65 63 74 20 75  ts the correct u
9410: 73 65 72 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20  ser.** function 
9420: 63 61 6c 6c 62 61 63 6b 20 77 68 65 6e 20 6d 75  callback when mu
9430: 6c 74 69 70 6c 65 20 76 65 72 73 69 6f 6e 73 20  ltiple versions 
9440: 28 66 6f 72 20 64 69 66 66 65 72 65 6e 74 20 74  (for different t
9450: 65 78 74 20 65 6e 63 6f 64 69 6e 67 73 29 0a 2a  ext encodings).*
9460: 2a 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 2e  * are available.
9470: 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 69 6e 67 20 74  .**.** Calling t
9480: 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65 67 69  his routine regi
9490: 73 74 65 72 73 20 75 70 20 74 6f 20 74 68 72 65  sters up to thre
94a0: 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68  e versions of th
94b0: 65 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a  e user function.
94c0: 2a 2a 20 22 74 65 73 74 5f 66 75 6e 63 74 69 6f  ** "test_functio
94d0: 6e 22 20 77 69 74 68 20 64 61 74 61 62 61 73 65  n" with database
94e0: 20 68 61 6e 64 6c 65 20 3c 64 62 3e 2e 20 20 49   handle <db>.  I
94f0: 66 20 74 68 65 20 73 65 63 6f 6e 64 20 61 72 67  f the second arg
9500: 75 6d 65 6e 74 20 69 73 0a 2a 2a 20 74 72 75 65  ument is.** true
9510: 2c 20 74 68 65 6e 20 61 20 76 65 72 73 69 6f 6e  , then a version
9520: 20 6f 66 20 74 65 73 74 5f 66 75 6e 63 74 69 6f   of test_functio
9530: 6e 20 69 73 20 72 65 67 69 73 74 65 72 65 64 20  n is registered 
9540: 66 6f 72 20 55 54 46 2d 38 2c 20 69 66 20 74 68  for UTF-8, if th
9550: 65 0a 2a 2a 20 74 68 69 72 64 20 69 73 20 74 72  e.** third is tr
9560: 75 65 2c 20 61 20 76 65 72 73 69 6f 6e 20 69 73  ue, a version is
9570: 20 72 65 67 69 73 74 65 72 65 64 20 66 6f 72 20   registered for 
9580: 55 54 46 2d 31 36 6c 65 2c 20 69 66 20 74 68 65  UTF-16le, if the
9590: 20 66 6f 75 72 74 68 20 69 73 0a 2a 2a 20 74 72   fourth is.** tr
95a0: 75 65 2c 20 61 20 55 54 46 2d 31 36 62 65 20 76  ue, a UTF-16be v
95b0: 65 72 73 69 6f 6e 20 69 73 20 61 76 61 69 6c 61  ersion is availa
95c0: 62 6c 65 2e 20 20 50 72 65 76 69 6f 75 73 20 76  ble.  Previous v
95d0: 65 72 73 69 6f 6e 73 20 6f 66 0a 2a 2a 20 74 65  ersions of.** te
95e0: 73 74 5f 66 75 6e 63 74 69 6f 6e 20 61 72 65 20  st_function are 
95f0: 64 65 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  deleted..**.** T
9600: 68 65 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e  he user function
9610: 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20   is implemented 
9620: 62 79 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 66  by calling the f
9630: 6f 6c 6c 6f 77 69 6e 67 20 54 43 4c 20 73 63 72  ollowing TCL scr
9640: 69 70 74 3a 0a 2a 2a 0a 2a 2a 20 20 20 22 74 65  ipt:.**.**   "te
9650: 73 74 5f 66 75 6e 63 74 69 6f 6e 20 3c 65 6e 63  st_function <enc
9660: 3e 20 3c 61 72 67 3e 22 0a 2a 2a 0a 2a 2a 20 57  > <arg>".**.** W
9670: 68 65 72 65 20 3c 65 6e 63 3e 20 69 73 20 6f 6e  here <enc> is on
9680: 65 20 6f 66 20 55 54 46 2d 38 2c 20 55 54 46 2d  e of UTF-8, UTF-
9690: 31 36 4c 45 20 6f 72 20 55 54 46 31 36 42 45 2c  16LE or UTF16BE,
96a0: 20 61 6e 64 20 3c 61 72 67 3e 20 69 73 20 74 68   and <arg> is th
96b0: 65 0a 2a 2a 20 73 69 6e 67 6c 65 20 61 72 67 75  e.** single argu
96c0: 6d 65 6e 74 20 70 61 73 73 65 64 20 74 6f 20 74  ment passed to t
96d0: 68 65 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2e  he SQL function.
96e0: 20 54 68 65 20 76 61 6c 75 65 20 72 65 74 75 72   The value retur
96f0: 6e 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 54 43  ned by.** the TC
9700: 4c 20 73 63 72 69 70 74 20 69 73 20 75 73 65 64  L script is used
9710: 20 61 73 20 74 68 65 20 72 65 74 75 72 6e 20 76   as the return v
9720: 61 6c 75 65 20 6f 66 20 74 68 65 20 53 51 4c 20  alue of the SQL 
9730: 66 75 6e 63 74 69 6f 6e 2e 20 49 74 0a 2a 2a 20  function. It.** 
9740: 69 73 20 70 61 73 73 65 64 20 74 6f 20 53 51 4c  is passed to SQL
9750: 69 74 65 20 75 73 69 6e 67 20 55 54 46 2d 31 36  ite using UTF-16
9760: 42 45 20 66 6f 72 20 61 20 55 54 46 2d 38 20 74  BE for a UTF-8 t
9770: 65 73 74 5f 66 75 6e 63 74 69 6f 6e 28 29 2c 20  est_function(), 
9780: 55 54 46 2d 38 0a 2a 2a 20 66 6f 72 20 61 20 55  UTF-8.** for a U
9790: 54 46 2d 31 36 4c 45 20 74 65 73 74 5f 66 75 6e  TF-16LE test_fun
97a0: 63 74 69 6f 6e 28 29 2c 20 61 6e 64 20 55 54 46  ction(), and UTF
97b0: 2d 31 36 4c 45 20 66 6f 72 20 61 6e 20 69 6d 70  -16LE for an imp
97c0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 68 61 74  lementation that
97d0: 0a 2a 2a 20 70 72 65 66 65 72 73 20 55 54 46 2d  .** prefers UTF-
97e0: 31 36 42 45 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  16BE..*/.#ifndef
97f0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
9800: 31 36 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74  16.static void t
9810: 65 73 74 5f 66 75 6e 63 74 69 6f 6e 5f 75 74 66  est_function_utf
9820: 38 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  8(.  sqlite3_con
9830: 74 65 78 74 20 2a 70 43 74 78 2c 20 0a 20 20 69  text *pCtx, .  i
9840: 6e 74 20 6e 41 72 67 2c 0a 20 20 73 71 6c 69 74  nt nArg,.  sqlit
9850: 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76 0a  e3_value **argv.
9860: 29 7b 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  ){.  Tcl_Interp 
9870: 2a 69 6e 74 65 72 70 3b 0a 20 20 54 63 6c 5f 4f  *interp;.  Tcl_O
9880: 62 6a 20 2a 70 58 3b 0a 20 20 73 71 6c 69 74 65  bj *pX;.  sqlite
9890: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 3b 0a 20  3_value *pVal;. 
98a0: 20 69 6e 74 65 72 70 20 3d 20 28 54 63 6c 5f 49   interp = (Tcl_I
98b0: 6e 74 65 72 70 20 2a 29 73 71 6c 69 74 65 33 5f  nterp *)sqlite3_
98c0: 75 73 65 72 5f 64 61 74 61 28 70 43 74 78 29 3b  user_data(pCtx);
98d0: 0a 20 20 70 58 20 3d 20 54 63 6c 5f 4e 65 77 53  .  pX = Tcl_NewS
98e0: 74 72 69 6e 67 4f 62 6a 28 22 74 65 73 74 5f 66  tringObj("test_f
98f0: 75 6e 63 74 69 6f 6e 22 2c 20 2d 31 29 3b 0a 20  unction", -1);. 
9900: 20 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e   Tcl_IncrRefCoun
9910: 74 28 70 58 29 3b 0a 20 20 54 63 6c 5f 4c 69 73  t(pX);.  Tcl_Lis
9920: 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e  tObjAppendElemen
9930: 74 28 69 6e 74 65 72 70 2c 20 70 58 2c 20 54 63  t(interp, pX, Tc
9940: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22  l_NewStringObj("
9950: 55 54 46 2d 38 22 2c 20 2d 31 29 29 3b 0a 20 20  UTF-8", -1));.  
9960: 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e  Tcl_ListObjAppen
9970: 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c  dElement(interp,
9980: 20 70 58 2c 20 0a 20 20 20 20 20 20 54 63 6c 5f   pX, .      Tcl_
9990: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 73 71 6c  NewStringObj(sql
99a0: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
99b0: 61 72 67 76 5b 30 5d 29 2c 20 2d 31 29 29 3b 0a  argv[0]), -1));.
99c0: 20 20 54 63 6c 5f 45 76 61 6c 4f 62 6a 45 78 28    Tcl_EvalObjEx(
99d0: 69 6e 74 65 72 70 2c 20 70 58 2c 20 30 29 3b 0a  interp, pX, 0);.
99e0: 20 20 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75    Tcl_DecrRefCou
99f0: 6e 74 28 70 58 29 3b 0a 20 20 73 71 6c 69 74 65  nt(pX);.  sqlite
9a00: 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 70 43  3_result_text(pC
9a10: 74 78 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  tx, Tcl_GetStrin
9a20: 67 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29 2c  gResult(interp),
9a30: 20 2d 31 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e   -1, SQLITE_TRAN
9a40: 53 49 45 4e 54 29 3b 0a 20 20 70 56 61 6c 20 3d  SIENT);.  pVal =
9a50: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77   sqlite3ValueNew
9a60: 28 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c  ();.  sqlite3Val
9a70: 75 65 53 65 74 53 74 72 28 70 56 61 6c 2c 20 2d  ueSetStr(pVal, -
9a80: 31 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  1, Tcl_GetString
9a90: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29 2c 20  Result(interp), 
9aa0: 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 55 54  .      SQLITE_UT
9ab0: 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  F8, SQLITE_STATI
9ac0: 43 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65  C);.  sqlite3_re
9ad0: 73 75 6c 74 5f 74 65 78 74 31 36 62 65 28 70 43  sult_text16be(pC
9ae0: 74 78 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  tx, sqlite3_valu
9af0: 65 5f 74 65 78 74 31 36 62 65 28 70 56 61 6c 29  e_text16be(pVal)
9b00: 2c 0a 20 20 20 20 20 20 2d 31 2c 20 53 51 4c 49  ,.      -1, SQLI
9b10: 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20  TE_TRANSIENT);. 
9b20: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65   sqlite3ValueFre
9b30: 65 28 70 56 61 6c 29 3b 0a 7d 0a 73 74 61 74 69  e(pVal);.}.stati
9b40: 63 20 76 6f 69 64 20 74 65 73 74 5f 66 75 6e 63  c void test_func
9b50: 74 69 6f 6e 5f 75 74 66 31 36 6c 65 28 0a 20 20  tion_utf16le(.  
9b60: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
9b70: 2a 70 43 74 78 2c 20 0a 20 20 69 6e 74 20 6e 41  *pCtx, .  int nA
9b80: 72 67 2c 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  rg,.  sqlite3_va
9b90: 6c 75 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20  lue **argv.){.  
9ba0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
9bb0: 72 70 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70  rp;.  Tcl_Obj *p
9bc0: 58 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  X;.  sqlite3_val
9bd0: 75 65 20 2a 70 56 61 6c 3b 0a 20 20 69 6e 74 65  ue *pVal;.  inte
9be0: 72 70 20 3d 20 28 54 63 6c 5f 49 6e 74 65 72 70  rp = (Tcl_Interp
9bf0: 20 2a 29 73 71 6c 69 74 65 33 5f 75 73 65 72 5f   *)sqlite3_user_
9c00: 64 61 74 61 28 70 43 74 78 29 3b 0a 20 20 70 58  data(pCtx);.  pX
9c10: 20 3d 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67   = Tcl_NewString
9c20: 4f 62 6a 28 22 74 65 73 74 5f 66 75 6e 63 74 69  Obj("test_functi
9c30: 6f 6e 22 2c 20 2d 31 29 3b 0a 20 20 54 63 6c 5f  on", -1);.  Tcl_
9c40: 49 6e 63 72 52 65 66 43 6f 75 6e 74 28 70 58 29  IncrRefCount(pX)
9c50: 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41  ;.  Tcl_ListObjA
9c60: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74  ppendElement(int
9c70: 65 72 70 2c 20 70 58 2c 20 54 63 6c 5f 4e 65 77  erp, pX, Tcl_New
9c80: 53 74 72 69 6e 67 4f 62 6a 28 22 55 54 46 2d 31  StringObj("UTF-1
9c90: 36 4c 45 22 2c 20 2d 31 29 29 3b 0a 20 20 54 63  6LE", -1));.  Tc
9ca0: 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45  l_ListObjAppendE
9cb0: 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 70  lement(interp, p
9cc0: 58 2c 20 0a 20 20 20 20 20 20 54 63 6c 5f 4e 65  X, .      Tcl_Ne
9cd0: 77 53 74 72 69 6e 67 4f 62 6a 28 73 71 6c 69 74  wStringObj(sqlit
9ce0: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72  e3_value_text(ar
9cf0: 67 76 5b 30 5d 29 2c 20 2d 31 29 29 3b 0a 20 20  gv[0]), -1));.  
9d00: 54 63 6c 5f 45 76 61 6c 4f 62 6a 45 78 28 69 6e  Tcl_EvalObjEx(in
9d10: 74 65 72 70 2c 20 70 58 2c 20 30 29 3b 0a 20 20  terp, pX, 0);.  
9d20: 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74  Tcl_DecrRefCount
9d30: 28 70 58 29 3b 0a 20 20 70 56 61 6c 20 3d 20 73  (pX);.  pVal = s
9d40: 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 29  qlite3ValueNew()
9d50: 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65  ;.  sqlite3Value
9d60: 53 65 74 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c  SetStr(pVal, -1,
9d70: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 52 65   Tcl_GetStringRe
9d80: 73 75 6c 74 28 69 6e 74 65 72 70 29 2c 20 0a 20  sult(interp), . 
9d90: 20 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38       SQLITE_UTF8
9da0: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
9db0: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75  ;.  sqlite3_resu
9dc0: 6c 74 5f 74 65 78 74 28 70 43 74 78 2c 73 71 6c  lt_text(pCtx,sql
9dd0: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
9de0: 70 56 61 6c 29 2c 2d 31 2c 53 51 4c 49 54 45 5f  pVal),-1,SQLITE_
9df0: 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 73 71  TRANSIENT);.  sq
9e00: 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 70  lite3ValueFree(p
9e10: 56 61 6c 29 3b 0a 7d 0a 73 74 61 74 69 63 20 76  Val);.}.static v
9e20: 6f 69 64 20 74 65 73 74 5f 66 75 6e 63 74 69 6f  oid test_functio
9e30: 6e 5f 75 74 66 31 36 62 65 28 0a 20 20 73 71 6c  n_utf16be(.  sql
9e40: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43  ite3_context *pC
9e50: 74 78 2c 20 0a 20 20 69 6e 74 20 6e 41 72 67 2c  tx, .  int nArg,
9e60: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
9e70: 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 54 63 6c   **argv.){.  Tcl
9e80: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 3b  _Interp *interp;
9e90: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 58 3b 0a  .  Tcl_Obj *pX;.
9ea0: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
9eb0: 2a 70 56 61 6c 3b 0a 20 20 69 6e 74 65 72 70 20  *pVal;.  interp 
9ec0: 3d 20 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 29  = (Tcl_Interp *)
9ed0: 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74  sqlite3_user_dat
9ee0: 61 28 70 43 74 78 29 3b 0a 20 20 70 58 20 3d 20  a(pCtx);.  pX = 
9ef0: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
9f00: 28 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22  ("test_function"
9f10: 2c 20 2d 31 29 3b 0a 20 20 54 63 6c 5f 49 6e 63  , -1);.  Tcl_Inc
9f20: 72 52 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a 20  rRefCount(pX);. 
9f30: 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65   Tcl_ListObjAppe
9f40: 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70  ndElement(interp
9f50: 2c 20 70 58 2c 20 54 63 6c 5f 4e 65 77 53 74 72  , pX, Tcl_NewStr
9f60: 69 6e 67 4f 62 6a 28 22 55 54 46 2d 31 36 42 45  ingObj("UTF-16BE
9f70: 22 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 4c  ", -1));.  Tcl_L
9f80: 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d  istObjAppendElem
9f90: 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 58 2c 20  ent(interp, pX, 
9fa0: 0a 20 20 20 20 20 20 54 63 6c 5f 4e 65 77 53 74  .      Tcl_NewSt
9fb0: 72 69 6e 67 4f 62 6a 28 73 71 6c 69 74 65 33 5f  ringObj(sqlite3_
9fc0: 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b  value_text(argv[
9fd0: 30 5d 29 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c  0]), -1));.  Tcl
9fe0: 5f 45 76 61 6c 4f 62 6a 45 78 28 69 6e 74 65 72  _EvalObjEx(inter
9ff0: 70 2c 20 70 58 2c 20 30 29 3b 0a 20 20 54 63 6c  p, pX, 0);.  Tcl
a000: 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28 70 58  _DecrRefCount(pX
a010: 29 3b 0a 20 20 70 56 61 6c 20 3d 20 73 71 6c 69  );.  pVal = sqli
a020: 74 65 33 56 61 6c 75 65 4e 65 77 28 29 3b 0a 20  te3ValueNew();. 
a030: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74   sqlite3ValueSet
a040: 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c 20 54 63  Str(pVal, -1, Tc
a050: 6c 5f 47 65 74 53 74 72 69 6e 67 52 65 73 75 6c  l_GetStringResul
a060: 74 28 69 6e 74 65 72 70 29 2c 20 0a 20 20 20 20  t(interp), .    
a070: 20 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53    SQLITE_UTF8, S
a080: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
a090: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
a0a0: 74 65 78 74 31 36 6c 65 28 70 43 74 78 2c 20 73  text16le(pCtx, s
a0b0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
a0c0: 74 31 36 6c 65 28 70 56 61 6c 29 2c 0a 20 20 20  t16le(pVal),.   
a0d0: 20 20 20 2d 31 2c 20 53 51 4c 49 54 45 5f 54 52     -1, SQLITE_TR
a0e0: 41 4e 53 49 45 4e 54 29 3b 0a 20 20 73 71 6c 69  ANSIENT);.  sqli
a0f0: 74 65 33 56 61 6c 75 65 46 72 65 65 28 70 56 61  te3ValueFree(pVa
a100: 6c 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  l);.}.#endif /* 
a110: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
a120: 36 20 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  6 */.static int 
a130: 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 28 0a 20  test_function(. 
a140: 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
a150: 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
a160: 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
a170: 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
a180: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
a190: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
a1a0: 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 73 71 6c  OMIT_UTF16.  sql
a1b0: 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20  ite3 *db;.  int 
a1c0: 76 61 6c 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63  val;..  if( objc
a1d0: 21 3d 35 20 29 20 67 6f 74 6f 20 62 61 64 5f 61  !=5 ) goto bad_a
a1e0: 72 67 73 3b 0a 20 20 69 66 28 20 67 65 74 44 62  rgs;.  if( getDb
a1f0: 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
a200: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
a210: 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72  jv[1]), &db) ) r
a220: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
a230: 0a 0a 20 20 69 66 28 20 54 43 4c 5f 4f 4b 21 3d  ..  if( TCL_OK!=
a240: 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72  Tcl_GetBooleanFr
a250: 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
a260: 6a 76 5b 32 5d 2c 20 26 76 61 6c 29 20 29 20 72  jv[2], &val) ) r
a270: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
a280: 0a 20 20 69 66 28 20 76 61 6c 20 29 7b 0a 20 20  .  if( val ){.  
a290: 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65    sqlite3_create
a2a0: 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22 74  _function(db, "t
a2b0: 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 31  est_function", 1
a2c0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 0a  , SQLITE_UTF8, .
a2d0: 20 20 20 20 20 20 20 20 69 6e 74 65 72 70 2c 20          interp, 
a2e0: 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 5f 75 74  test_function_ut
a2f0: 66 38 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 20  f8, 0, 0);.  }. 
a300: 20 69 66 28 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c   if( TCL_OK!=Tcl
a310: 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f  _GetBooleanFromO
a320: 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
a330: 33 5d 2c 20 26 76 61 6c 29 20 29 20 72 65 74 75  3], &val) ) retu
a340: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
a350: 69 66 28 20 76 61 6c 20 29 7b 0a 20 20 20 20 73  if( val ){.    s
a360: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
a370: 6e 63 74 69 6f 6e 28 64 62 2c 20 22 74 65 73 74  nction(db, "test
a380: 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 31 2c 20 53  _function", 1, S
a390: 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 2c 20 0a  QLITE_UTF16LE, .
a3a0: 20 20 20 20 20 20 20 20 69 6e 74 65 72 70 2c 20          interp, 
a3b0: 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 5f 75 74  test_function_ut
a3c0: 66 31 36 6c 65 2c 20 30 2c 20 30 29 3b 0a 20 20  f16le, 0, 0);.  
a3d0: 7d 0a 20 20 69 66 28 20 54 43 4c 5f 4f 4b 21 3d  }.  if( TCL_OK!=
a3e0: 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72  Tcl_GetBooleanFr
a3f0: 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
a400: 6a 76 5b 34 5d 2c 20 26 76 61 6c 29 20 29 20 72  jv[4], &val) ) r
a410: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
a420: 0a 20 20 69 66 28 20 76 61 6c 20 29 7b 0a 20 20  .  if( val ){.  
a430: 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65    sqlite3_create
a440: 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22 74  _function(db, "t
a450: 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 31  est_function", 1
a460: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  , SQLITE_UTF16BE
a470: 2c 20 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72  , .        inter
a480: 70 2c 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e  p, test_function
a490: 5f 75 74 66 31 36 62 65 2c 20 30 2c 20 30 29 3b  _utf16be, 0, 0);
a4a0: 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54  .  }..  return T
a4b0: 43 4c 5f 4f 4b 3b 0a 62 61 64 5f 61 72 67 73 3a  CL_OK;.bad_args:
a4c0: 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73  .  Tcl_AppendRes
a4d0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
a4e0: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
a4f0: 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20  d be \"",.      
a500: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f  Tcl_GetStringFro
a510: 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29  mObj(objv[0], 0)
a520: 2c 20 22 20 3c 44 42 3e 20 3c 75 74 66 38 3e 20  , " <DB> <utf8> 
a530: 3c 75 74 66 31 36 6c 65 3e 20 3c 75 74 66 31 36  <utf16le> <utf16
a540: 62 65 3e 22 2c 20 30 29 3b 0a 23 65 6e 64 69 66  be>", 0);.#endif
a550: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
a560: 55 54 46 31 36 20 2a 2f 0a 20 20 72 65 74 75 72  UTF16 */.  retur
a570: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 7d 0a 0a  n TCL_ERROR;.}..
a580: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 20  /*.** Usage:    
a590: 20 20 20 20 20 74 65 73 74 5f 65 72 72 73 74 72       test_errstr
a5a0: 20 3c 65 72 72 20 63 6f 64 65 3e 0a 2a 2a 0a 2a   <err code>.**.*
a5b0: 2a 20 54 65 73 74 20 74 68 61 74 20 74 68 65 20  * Test that the 
a5c0: 65 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65  english language
a5d0: 20 73 74 72 69 6e 67 20 65 71 75 69 76 61 6c 65   string equivale
a5e0: 6e 74 73 20 66 6f 72 20 73 71 6c 69 74 65 20 65  nts for sqlite e
a5f0: 72 72 6f 72 20 63 6f 64 65 73 0a 2a 2a 20 61 72  rror codes.** ar
a600: 65 20 73 61 6e 65 2e 20 54 68 65 20 70 61 72 61  e sane. The para
a610: 6d 65 74 65 72 20 69 73 20 61 6e 20 69 6e 74 65  meter is an inte
a620: 67 65 72 20 72 65 70 72 65 73 65 6e 74 69 6e 67  ger representing
a630: 20 61 6e 20 73 71 6c 69 74 65 20 65 72 72 6f 72   an sqlite error
a640: 20 63 6f 64 65 2e 0a 2a 2a 20 54 68 65 20 72 65   code..** The re
a650: 73 75 6c 74 20 69 73 20 61 20 6c 69 73 74 20 6f  sult is a list o
a660: 66 20 74 77 6f 20 65 6c 65 6d 65 6e 74 73 2c 20  f two elements, 
a670: 74 68 65 20 73 74 72 69 6e 67 20 72 65 70 72 65  the string repre
a680: 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
a690: 0a 2a 2a 20 65 72 72 6f 72 20 63 6f 64 65 20 61  .** error code a
a6a0: 6e 64 20 74 68 65 20 65 6e 67 6c 69 73 68 20 6c  nd the english l
a6b0: 61 6e 67 75 61 67 65 20 65 78 70 6c 61 6e 61 74  anguage explanat
a6c0: 69 6f 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ion..*/.static i
a6d0: 6e 74 20 74 65 73 74 5f 65 72 72 73 74 72 28 0a  nt test_errstr(.
a6e0: 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
a6f0: 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
a700: 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
a710: 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
a720: 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
a730: 7b 0a 20 20 63 68 61 72 20 2a 7a 43 6f 64 65 3b  {.  char *zCode;
a740: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 66 28 20  .  int i;.  if( 
a750: 6f 62 6a 63 21 3d 31 20 29 7b 0a 20 20 20 20 54  objc!=1 ){.    T
a760: 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28  cl_WrongNumArgs(
a770: 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c  interp, 1, objv,
a780: 20 22 3c 65 72 72 6f 72 20 63 6f 64 65 3e 22 29   "<error code>")
a790: 3b 0a 20 20 7d 0a 0a 20 20 7a 43 6f 64 65 20 3d  ;.  }..  zCode =
a7a0: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
a7b0: 62 6a 76 5b 31 5d 29 3b 0a 20 20 66 6f 72 28 69  bjv[1]);.  for(i
a7c0: 3d 30 3b 20 69 3c 32 30 30 3b 20 69 2b 2b 29 7b  =0; i<200; i++){
a7d0: 0a 20 20 20 20 69 66 28 20 30 3d 3d 73 74 72 63  .    if( 0==strc
a7e0: 6d 70 28 65 72 72 6f 72 4e 61 6d 65 28 69 29 2c  mp(errorName(i),
a7f0: 20 7a 43 6f 64 65 29 20 29 20 62 72 65 61 6b 3b   zCode) ) break;
a800: 0a 20 20 7d 0a 20 20 54 63 6c 5f 53 65 74 52 65  .  }.  Tcl_SetRe
a810: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68  sult(interp, (ch
a820: 61 72 20 2a 29 73 71 6c 69 74 65 33 45 72 72 53  ar *)sqlite3ErrS
a830: 74 72 28 69 29 2c 20 30 29 3b 0a 20 20 72 65 74  tr(i), 0);.  ret
a840: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
a850: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 20 62  *.** Usage:    b
a860: 72 65 61 6b 70 6f 69 6e 74 0a 2a 2a 0a 2a 2a 20  reakpoint.**.** 
a870: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 65 78 69  This routine exi
a880: 73 74 73 20 66 6f 72 20 6f 6e 65 20 70 75 72 70  sts for one purp
a890: 6f 73 65 20 2d 20 74 6f 20 70 72 6f 76 69 64 65  ose - to provide
a8a0: 20 61 20 70 6c 61 63 65 20 74 6f 20 70 75 74 20   a place to put 
a8b0: 61 0a 2a 2a 20 62 72 65 61 6b 70 6f 69 6e 74 20  a.** breakpoint 
a8c0: 77 69 74 68 20 47 44 42 20 74 68 61 74 20 63 61  with GDB that ca
a8d0: 6e 20 62 65 20 74 72 69 67 67 65 72 65 64 20 75  n be triggered u
a8e0: 73 69 6e 67 20 54 43 4c 20 63 6f 64 65 2e 20 20  sing TCL code.  
a8f0: 54 68 65 20 75 73 65 0a 2a 2a 20 66 6f 72 20 74  The use.** for t
a900: 68 69 73 20 69 73 20 77 68 65 6e 20 61 20 70 61  his is when a pa
a910: 72 74 69 63 75 6c 61 72 20 74 65 73 74 20 66 61  rticular test fa
a920: 69 6c 73 20 6f 6e 20 28 73 61 79 29 20 74 68 65  ils on (say) the
a930: 20 31 34 38 35 74 68 20 69 74 65 72 61 74 69 6f   1485th iteratio
a940: 6e 2e 0a 2a 2a 20 49 6e 20 74 68 65 20 54 43 4c  n..** In the TCL
a950: 20 74 65 73 74 20 73 63 72 69 70 74 2c 20 77 65   test script, we
a960: 20 63 61 6e 20 61 64 64 20 63 6f 64 65 20 6c 69   can add code li
a970: 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20  ke this:.**.**  
a980: 20 20 20 69 66 20 7b 24 69 3d 3d 31 34 38 35 7d     if {$i==1485}
a990: 20 62 72 65 61 6b 70 6f 69 6e 74 0a 2a 2a 0a 2a   breakpoint.**.*
a9a0: 2a 20 54 68 65 6e 20 72 75 6e 20 74 65 73 74 66  * Then run testf
a9b0: 69 78 74 75 72 65 20 69 6e 20 74 68 65 20 64 65  ixture in the de
a9c0: 62 75 67 67 65 72 20 61 6e 64 20 77 61 69 74 20  bugger and wait 
a9d0: 66 6f 72 20 74 68 65 20 62 72 65 61 6b 70 6f 69  for the breakpoi
a9e0: 6e 74 20 74 6f 0a 2a 2a 20 66 69 72 65 2e 20 20  nt to.** fire.  
a9f0: 54 68 65 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20  Then additional 
aa00: 62 72 65 61 6b 70 6f 69 6e 74 73 20 63 61 6e 20  breakpoints can 
aa10: 62 65 20 73 65 74 20 74 6f 20 74 72 61 63 65 20  be set to trace 
aa20: 64 6f 77 6e 20 74 68 65 20 62 75 67 2e 0a 2a 2f  down the bug..*/
aa30: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
aa40: 5f 62 72 65 61 6b 70 6f 69 6e 74 28 0a 20 20 76  _breakpoint(.  v
aa50: 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20  oid *NotUsed,.  
aa60: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
aa70: 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43  rp,    /* The TC
aa80: 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68  L interpreter th
aa90: 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20  at invoked this 
aaa0: 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74  command */.  int
aab0: 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20   argc,          
aac0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
aad0: 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
aae0: 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20  char **argv     
aaf0: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f         /* Text o
ab00: 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20  f each argument 
ab10: 2a 2f 0a 29 7b 0a 20 20 72 65 74 75 72 6e 20 54  */.){.  return T
ab20: 43 4c 5f 4f 4b 3b 20 20 20 20 20 20 20 20 20 2f  CL_OK;         /
ab30: 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 20 2a 2f 0a  * Do nothing */.
ab40: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
ab50: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69    sqlite3_bind_i
ab60: 6e 74 20 20 53 54 4d 54 20 4e 20 56 41 4c 55 45  nt  STMT N VALUE
ab70: 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65 20  .**.** Test the 
ab80: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
ab90: 20 69 6e 74 65 72 66 61 63 65 2e 20 20 53 54 4d   interface.  STM
aba0: 54 20 69 73 20 61 20 70 72 65 70 61 72 65 64 20  T is a prepared 
abb0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20  statement..** N 
abc0: 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
abd0: 61 20 77 69 6c 64 63 61 72 64 20 69 6e 20 74 68  a wildcard in th
abe0: 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
abf0: 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d  ment.  This comm
ac00: 61 6e 64 0a 2a 2a 20 62 69 6e 64 73 20 61 20 33  and.** binds a 3
ac10: 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 56 41  2-bit integer VA
ac20: 4c 55 45 20 74 6f 20 74 68 61 74 20 77 69 6c 64  LUE to that wild
ac30: 63 61 72 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  card..*/.static 
ac40: 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f 69 6e  int test_bind_in
ac50: 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  t(.  void * clie
ac60: 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
ac70: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
ac80: 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
ac90: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
aca0: 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ].){.  sqlite3_s
acb0: 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e  tmt *pStmt;.  in
acc0: 74 20 69 64 78 3b 0a 20 20 69 6e 74 20 76 61 6c  t idx;.  int val
acd0: 75 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20  ue;.  int rc;.. 
ace0: 20 69 66 28 20 6f 62 6a 63 21 3d 34 20 29 7b 0a   if( objc!=4 ){.
acf0: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
ad00: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
ad10: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
ad20: 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20  ld be \"",.     
ad30: 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
ad40: 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c  FromObj(objv[0],
ad50: 20 30 29 2c 20 22 20 53 54 4d 54 20 4e 20 56 41   0), " STMT N VA
ad60: 4c 55 45 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  LUE", 0);.    re
ad70: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
ad80: 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74    }..  if( getSt
ad90: 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  mtPointer(interp
ada0: 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
adb0: 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74  objv[1]), &pStmt
adc0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
add0: 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f  RROR;.  if( Tcl_
ade0: 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e  GetIntFromObj(in
adf0: 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26  terp, objv[2], &
ae00: 69 64 78 29 20 29 20 72 65 74 75 72 6e 20 54 43  idx) ) return TC
ae10: 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54  L_ERROR;.  if( T
ae20: 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a  cl_GetIntFromObj
ae30: 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d  (interp, objv[3]
ae40: 2c 20 26 76 61 6c 75 65 29 20 29 20 72 65 74 75  , &value) ) retu
ae50: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20  rn TCL_ERROR;.. 
ae60: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69   rc = sqlite3_bi
ae70: 6e 64 5f 69 6e 74 28 70 53 74 6d 74 2c 20 69 64  nd_int(pStmt, id
ae80: 78 2c 20 76 61 6c 75 65 29 3b 0a 20 20 69 66 28  x, value);.  if(
ae90: 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43   sqlite3TestErrC
aea0: 6f 64 65 28 69 6e 74 65 72 70 2c 20 53 74 6d 74  ode(interp, Stmt
aeb0: 54 6f 44 62 28 70 53 74 6d 74 29 2c 20 72 63 29  ToDb(pStmt), rc)
aec0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
aed0: 52 4f 52 3b 0a 20 20 69 66 28 20 72 63 21 3d 53  ROR;.  if( rc!=S
aee0: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
aef0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
af00: 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20  ;.  }..  return 
af10: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a  TCL_OK;.}.../*.*
af20: 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74  * Usage:   sqlit
af30: 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 20 20 53  e3_bind_int64  S
af40: 54 4d 54 20 4e 20 56 41 4c 55 45 0a 2a 2a 0a 2a  TMT N VALUE.**.*
af50: 2a 20 54 65 73 74 20 74 68 65 20 73 71 6c 69 74  * Test the sqlit
af60: 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 20 69 6e  e3_bind_int64 in
af70: 74 65 72 66 61 63 65 2e 20 20 53 54 4d 54 20 69  terface.  STMT i
af80: 73 20 61 20 70 72 65 70 61 72 65 64 20 73 74 61  s a prepared sta
af90: 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20  tement..** N is 
afa0: 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20 77  the index of a w
afb0: 69 6c 64 63 61 72 64 20 69 6e 20 74 68 65 20 70  ildcard in the p
afc0: 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
afd0: 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64  t.  This command
afe0: 0a 2a 2a 20 62 69 6e 64 73 20 61 20 36 34 2d 62  .** binds a 64-b
aff0: 69 74 20 69 6e 74 65 67 65 72 20 56 41 4c 55 45  it integer VALUE
b000: 20 74 6f 20 74 68 61 74 20 77 69 6c 64 63 61 72   to that wildcar
b010: 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  d..*/.static int
b020: 20 74 65 73 74 5f 62 69 6e 64 5f 69 6e 74 36 34   test_bind_int64
b030: 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
b040: 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
b050: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
b060: 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
b070: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
b080: 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  .){.  sqlite3_st
b090: 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74  mt *pStmt;.  int
b0a0: 20 69 64 78 3b 0a 20 20 69 36 34 20 76 61 6c 75   idx;.  i64 valu
b0b0: 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20  e;.  int rc;..  
b0c0: 69 66 28 20 6f 62 6a 63 21 3d 34 20 29 7b 0a 20  if( objc!=4 ){. 
b0d0: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
b0e0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
b0f0: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
b100: 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20  d be \"",.      
b110: 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46    Tcl_GetStringF
b120: 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20  romObj(objv[0], 
b130: 30 29 2c 20 22 20 53 54 4d 54 20 4e 20 56 41 4c  0), " STMT N VAL
b140: 55 45 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  UE", 0);.    ret
b150: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
b160: 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d   }..  if( getStm
b170: 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  tPointer(interp,
b180: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
b190: 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29  bjv[1]), &pStmt)
b1a0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
b1b0: 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47  ROR;.  if( Tcl_G
b1c0: 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
b1d0: 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 69  erp, objv[2], &i
b1e0: 64 78 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  dx) ) return TCL
b1f0: 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63  _ERROR;.  if( Tc
b200: 6c 5f 47 65 74 57 69 64 65 49 6e 74 46 72 6f 6d  l_GetWideIntFrom
b210: 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
b220: 5b 33 5d 2c 20 26 76 61 6c 75 65 29 20 29 20 72  [3], &value) ) r
b230: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
b240: 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ..  rc = sqlite3
b250: 5f 62 69 6e 64 5f 69 6e 74 36 34 28 70 53 74 6d  _bind_int64(pStm
b260: 74 2c 20 69 64 78 2c 20 76 61 6c 75 65 29 3b 0a  t, idx, value);.
b270: 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73    if( sqlite3Tes
b280: 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c  tErrCode(interp,
b290: 20 53 74 6d 74 54 6f 44 62 28 70 53 74 6d 74 29   StmtToDb(pStmt)
b2a0: 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54  , rc) ) return T
b2b0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
b2c0: 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
b2d0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
b2e0: 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72 65  ERROR;.  }..  re
b2f0: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
b300: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20  ./*.** Usage:   
b310: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75  sqlite3_bind_dou
b320: 62 6c 65 20 20 53 54 4d 54 20 4e 20 56 41 4c 55  ble  STMT N VALU
b330: 45 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65  E.**.** Test the
b340: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f   sqlite3_bind_do
b350: 75 62 6c 65 20 69 6e 74 65 72 66 61 63 65 2e 20  uble interface. 
b360: 20 53 54 4d 54 20 69 73 20 61 20 70 72 65 70 61   STMT is a prepa
b370: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  red statement..*
b380: 2a 20 4e 20 69 73 20 74 68 65 20 69 6e 64 65 78  * N is the index
b390: 20 6f 66 20 61 20 77 69 6c 64 63 61 72 64 20 69   of a wildcard i
b3a0: 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  n the prepared s
b3b0: 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 69 73 20  tatement.  This 
b3c0: 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64 73  command.** binds
b3d0: 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65   a 64-bit intege
b3e0: 72 20 56 41 4c 55 45 20 74 6f 20 74 68 61 74 20  r VALUE to that 
b3f0: 77 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73 74 61  wildcard..*/.sta
b400: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e  tic int test_bin
b410: 64 5f 64 6f 75 62 6c 65 28 0a 20 20 76 6f 69 64  d_double(.  void
b420: 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
b430: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
b440: 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
b450: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
b460: 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
b470: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
b480: 74 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20  t;.  int idx;.  
b490: 64 6f 75 62 6c 65 20 76 61 6c 75 65 3b 0a 20 20  double value;.  
b4a0: 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f  int rc;..  if( o
b4b0: 62 6a 63 21 3d 34 20 29 7b 0a 20 20 20 20 54 63  bjc!=4 ){.    Tc
b4c0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
b4d0: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
b4e0: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
b4f0: 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c  \"",.        Tcl
b500: 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62  _GetStringFromOb
b510: 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22  j(objv[0], 0), "
b520: 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 22 2c 20   STMT N VALUE", 
b530: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
b540: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
b550: 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
b560: 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
b570: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
b580: 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
b590: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
b5a0: 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
b5b0: 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
b5c0: 6f 62 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20 29  objv[2], &idx) )
b5d0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
b5e0: 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  R;.  if( Tcl_Get
b5f0: 44 6f 75 62 6c 65 46 72 6f 6d 4f 62 6a 28 69 6e  DoubleFromObj(in
b600: 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26  terp, objv[3], &
b610: 76 61 6c 75 65 29 20 29 20 72 65 74 75 72 6e 20  value) ) return 
b620: 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63  TCL_ERROR;..  rc
b630: 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f   = sqlite3_bind_
b640: 64 6f 75 62 6c 65 28 70 53 74 6d 74 2c 20 69 64  double(pStmt, id
b650: 78 2c 20 76 61 6c 75 65 29 3b 0a 20 20 69 66 28  x, value);.  if(
b660: 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43   sqlite3TestErrC
b670: 6f 64 65 28 69 6e 74 65 72 70 2c 20 53 74 6d 74  ode(interp, Stmt
b680: 54 6f 44 62 28 70 53 74 6d 74 29 2c 20 72 63 29  ToDb(pStmt), rc)
b690: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
b6a0: 52 4f 52 3b 0a 20 20 69 66 28 20 72 63 21 3d 53  ROR;.  if( rc!=S
b6b0: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
b6c0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
b6d0: 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20  ;.  }..  return 
b6e0: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
b6f0: 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65   Usage:   sqlite
b700: 33 5f 62 69 6e 64 5f 6e 75 6c 6c 20 20 53 54 4d  3_bind_null  STM
b710: 54 20 4e 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74  T N.**.** Test t
b720: 68 65 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  he sqlite3_bind_
b730: 6e 75 6c 6c 20 69 6e 74 65 72 66 61 63 65 2e 20  null interface. 
b740: 20 53 54 4d 54 20 69 73 20 61 20 70 72 65 70 61   STMT is a prepa
b750: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  red statement..*
b760: 2a 20 4e 20 69 73 20 74 68 65 20 69 6e 64 65 78  * N is the index
b770: 20 6f 66 20 61 20 77 69 6c 64 63 61 72 64 20 69   of a wildcard i
b780: 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  n the prepared s
b790: 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 69 73 20  tatement.  This 
b7a0: 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64 73  command.** binds
b7b0: 20 61 20 4e 55 4c 4c 20 74 6f 20 74 68 65 20 77   a NULL to the w
b7c0: 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73 74 61 74  ildcard..*/.stat
b7d0: 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64  ic int test_bind
b7e0: 5f 6e 75 6c 6c 28 0a 20 20 76 6f 69 64 20 2a 20  _null(.  void * 
b7f0: 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
b800: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
b810: 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
b820: 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
b830: 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74  bjv[].){.  sqlit
b840: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a  e3_stmt *pStmt;.
b850: 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 69 6e 74    int idx;.  int
b860: 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63   rc;..  if( objc
b870: 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=3 ){.    Tcl_A
b880: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
b890: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
b8a0: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
b8b0: 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65  ,.        Tcl_Ge
b8c0: 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f  tStringFromObj(o
b8d0: 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 53 54  bjv[0], 0), " ST
b8e0: 4d 54 20 4e 22 2c 20 30 29 3b 0a 20 20 20 20 72  MT N", 0);.    r
b8f0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
b900: 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53  .  }..  if( getS
b910: 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tmtPointer(inter
b920: 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
b930: 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d  (objv[1]), &pStm
b940: 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  t) ) return TCL_
b950: 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c  ERROR;.  if( Tcl
b960: 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
b970: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20  nterp, objv[2], 
b980: 26 69 64 78 29 20 29 20 72 65 74 75 72 6e 20 54  &idx) ) return T
b990: 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20  CL_ERROR;..  rc 
b9a0: 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e  = sqlite3_bind_n
b9b0: 75 6c 6c 28 70 53 74 6d 74 2c 20 69 64 78 29 3b  ull(pStmt, idx);
b9c0: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65  .  if( sqlite3Te
b9d0: 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70  stErrCode(interp
b9e0: 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74 6d 74  , StmtToDb(pStmt
b9f0: 29 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20  ), rc) ) return 
ba00: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  TCL_ERROR;.  if(
ba10: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
ba20: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  {.    return TCL
ba30: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72  _ERROR;.  }..  r
ba40: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
ba50: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20  ./*.** Usage:   
ba60: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
ba70: 74 20 20 53 54 4d 54 20 4e 20 53 54 52 49 4e 47  t  STMT N STRING
ba80: 20 42 59 54 45 53 0a 2a 2a 0a 2a 2a 20 54 65 73   BYTES.**.** Tes
ba90: 74 20 74 68 65 20 73 71 6c 69 74 65 33 5f 62 69  t the sqlite3_bi
baa0: 6e 64 5f 74 65 78 74 20 69 6e 74 65 72 66 61 63  nd_text interfac
bab0: 65 2e 20 20 53 54 4d 54 20 69 73 20 61 20 70 72  e.  STMT is a pr
bac0: 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
bad0: 2e 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20 69 6e  ..** N is the in
bae0: 64 65 78 20 6f 66 20 61 20 77 69 6c 64 63 61 72  dex of a wildcar
baf0: 64 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65  d in the prepare
bb00: 64 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  d statement.  Th
bb10: 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69  is command.** bi
bb20: 6e 64 73 20 61 20 55 54 46 2d 38 20 73 74 72 69  nds a UTF-8 stri
bb30: 6e 67 20 53 54 52 49 4e 47 20 74 6f 20 74 68 65  ng STRING to the
bb40: 20 77 69 6c 64 63 61 72 64 2e 20 20 54 68 65 20   wildcard.  The 
bb50: 73 74 72 69 6e 67 20 69 73 20 42 59 54 45 53 20  string is BYTES 
bb60: 62 79 74 65 73 0a 2a 2a 20 6c 6f 6e 67 2e 0a 2a  bytes.** long..*
bb70: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
bb80: 74 5f 62 69 6e 64 5f 74 65 78 74 28 0a 20 20 76  t_bind_text(.  v
bb90: 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
bba0: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
bbb0: 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
bbc0: 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
bbd0: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
bbe0: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
bbf0: 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78 3b  Stmt;.  int idx;
bc00: 0a 20 20 69 6e 74 20 62 79 74 65 73 3b 0a 20 20  .  int bytes;.  
bc10: 63 68 61 72 20 2a 76 61 6c 75 65 3b 0a 20 20 69  char *value;.  i
bc20: 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62  nt rc;..  if( ob
bc30: 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=5 ){.    Tcl
bc40: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
bc50: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
bc60: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
bc70: 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f  "",.        Tcl_
bc80: 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a  GetStringFromObj
bc90: 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20  (objv[0], 0), " 
bca0: 53 54 4d 54 20 4e 20 56 41 4c 55 45 20 42 59 54  STMT N VALUE BYT
bcb0: 45 53 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  ES", 0);.    ret
bcc0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
bcd0: 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d   }..  if( getStm
bce0: 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  tPointer(interp,
bcf0: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
bd00: 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29  bjv[1]), &pStmt)
bd10: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
bd20: 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47  ROR;.  if( Tcl_G
bd30: 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
bd40: 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 69  erp, objv[2], &i
bd50: 64 78 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  dx) ) return TCL
bd60: 5f 45 52 52 4f 52 3b 0a 20 20 76 61 6c 75 65 20  _ERROR;.  value 
bd70: 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  = Tcl_GetString(
bd80: 6f 62 6a 76 5b 33 5d 29 3b 0a 20 20 69 66 28 20  objv[3]);.  if( 
bd90: 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62  Tcl_GetIntFromOb
bda0: 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 34  j(interp, objv[4
bdb0: 5d 2c 20 26 62 79 74 65 73 29 20 29 20 72 65 74  ], &bytes) ) ret
bdc0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a  urn TCL_ERROR;..
bdd0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62    rc = sqlite3_b
bde0: 69 6e 64 5f 74 65 78 74 28 70 53 74 6d 74 2c 20  ind_text(pStmt, 
bdf0: 69 64 78 2c 20 76 61 6c 75 65 2c 20 62 79 74 65  idx, value, byte
be00: 73 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49  s, SQLITE_TRANSI
be10: 45 4e 54 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  ENT);.  if( sqli
be20: 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69  te3TestErrCode(i
be30: 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62 28  nterp, StmtToDb(
be40: 70 53 74 6d 74 29 2c 20 72 63 29 20 29 20 72 65  pStmt), rc) ) re
be50: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
be60: 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
be70: 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  _OK ){.    Tcl_A
be80: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
be90: 72 70 2c 20 73 71 6c 69 74 65 33 54 65 73 74 45  rp, sqlite3TestE
bea0: 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 30 29  rrorName(rc), 0)
beb0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
bec0: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72  _ERROR;.  }..  r
bed0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
bee0: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20  ./*.** Usage:   
bef0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
bf00: 74 31 36 20 20 53 54 4d 54 20 4e 20 53 54 52 49  t16  STMT N STRI
bf10: 4e 47 20 42 59 54 45 53 0a 2a 2a 0a 2a 2a 20 54  NG BYTES.**.** T
bf20: 65 73 74 20 74 68 65 20 73 71 6c 69 74 65 33 5f  est the sqlite3_
bf30: 62 69 6e 64 5f 74 65 78 74 31 36 20 69 6e 74 65  bind_text16 inte
bf40: 72 66 61 63 65 2e 20 20 53 54 4d 54 20 69 73 20  rface.  STMT is 
bf50: 61 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  a prepared state
bf60: 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20 74 68  ment..** N is th
bf70: 65 20 69 6e 64 65 78 20 6f 66 20 61 20 77 69 6c  e index of a wil
bf80: 64 63 61 72 64 20 69 6e 20 74 68 65 20 70 72 65  dcard in the pre
bf90: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e  pared statement.
bfa0: 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a    This command.*
bfb0: 2a 20 62 69 6e 64 73 20 61 20 55 54 46 2d 31 36  * binds a UTF-16
bfc0: 20 73 74 72 69 6e 67 20 53 54 52 49 4e 47 20 74   string STRING t
bfd0: 6f 20 74 68 65 20 77 69 6c 64 63 61 72 64 2e 20  o the wildcard. 
bfe0: 20 54 68 65 20 73 74 72 69 6e 67 20 69 73 20 42   The string is B
bff0: 59 54 45 53 20 62 79 74 65 73 0a 2a 2a 20 6c 6f  YTES bytes.** lo
c000: 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ng..*/.static in
c010: 74 20 74 65 73 74 5f 62 69 6e 64 5f 74 65 78 74  t test_bind_text
c020: 31 36 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  16(.  void * cli
c030: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
c040: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
c050: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
c060: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
c070: 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20 53 51  [].){.#ifndef SQ
c080: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
c090: 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
c0a0: 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78  pStmt;.  int idx
c0b0: 3b 0a 20 20 69 6e 74 20 62 79 74 65 73 3b 0a 20  ;.  int bytes;. 
c0c0: 20 63 68 61 72 20 2a 76 61 6c 75 65 3b 0a 20 20   char *value;.  
c0d0: 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f  int rc;..  if( o
c0e0: 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63  bjc!=5 ){.    Tc
c0f0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
c100: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
c110: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
c120: 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c  \"",.        Tcl
c130: 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62  _GetStringFromOb
c140: 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22  j(objv[0], 0), "
c150: 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 20 42 59   STMT N VALUE BY
c160: 54 45 53 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  TES", 0);.    re
c170: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
c180: 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74    }..  if( getSt
c190: 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  mtPointer(interp
c1a0: 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
c1b0: 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74  objv[1]), &pStmt
c1c0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
c1d0: 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f  RROR;.  if( Tcl_
c1e0: 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e  GetIntFromObj(in
c1f0: 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26  terp, objv[2], &
c200: 69 64 78 29 20 29 20 72 65 74 75 72 6e 20 54 43  idx) ) return TC
c210: 4c 5f 45 52 52 4f 52 3b 0a 20 20 76 61 6c 75 65  L_ERROR;.  value
c220: 20 3d 20 54 63 6c 5f 47 65 74 42 79 74 65 41 72   = Tcl_GetByteAr
c230: 72 61 79 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b  rayFromObj(objv[
c240: 33 5d 2c 20 30 29 3b 0a 20 20 69 66 28 20 54 63  3], 0);.  if( Tc
c250: 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
c260: 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c  interp, objv[4],
c270: 20 26 62 79 74 65 73 29 20 29 20 72 65 74 75 72   &bytes) ) retur
c280: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
c290: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e  rc = sqlite3_bin
c2a0: 64 5f 74 65 78 74 31 36 28 70 53 74 6d 74 2c 20  d_text16(pStmt, 
c2b0: 69 64 78 2c 20 28 76 6f 69 64 20 2a 29 76 61 6c  idx, (void *)val
c2c0: 75 65 2c 20 62 79 74 65 73 2c 20 53 51 4c 49 54  ue, bytes, SQLIT
c2d0: 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20  E_TRANSIENT);.  
c2e0: 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45  if( sqlite3TestE
c2f0: 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 53  rrCode(interp, S
c300: 74 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 2c 20  tmtToDb(pStmt), 
c310: 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  rc) ) return TCL
c320: 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 63  _ERROR;.  if( rc
c330: 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
c340: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
c350: 52 4f 52 3b 0a 20 20 7d 0a 0a 23 65 6e 64 69 66  ROR;.  }..#endif
c360: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
c370: 55 54 46 31 36 20 2a 2f 0a 20 20 72 65 74 75 72  UTF16 */.  retur
c380: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
c390: 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69  ** Usage:   sqli
c3a0: 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 20 20 53  te3_bind_blob  S
c3b0: 54 4d 54 20 4e 20 44 41 54 41 20 42 59 54 45 53  TMT N DATA BYTES
c3c0: 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65 20  .**.** Test the 
c3d0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f  sqlite3_bind_blo
c3e0: 62 20 69 6e 74 65 72 66 61 63 65 2e 20 20 53 54  b interface.  ST
c3f0: 4d 54 20 69 73 20 61 20 70 72 65 70 61 72 65 64  MT is a prepared
c400: 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e   statement..** N
c410: 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66   is the index of
c420: 20 61 20 77 69 6c 64 63 61 72 64 20 69 6e 20 74   a wildcard in t
c430: 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74  he prepared stat
c440: 65 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 6f 6d  ement.  This com
c450: 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64 73 20 61 20  mand.** binds a 
c460: 42 4c 4f 42 20 74 6f 20 74 68 65 20 77 69 6c 64  BLOB to the wild
c470: 63 61 72 64 2e 20 20 54 68 65 20 42 4c 4f 42 20  card.  The BLOB 
c480: 69 73 20 42 59 54 45 53 20 62 79 74 65 73 20 69  is BYTES bytes i
c490: 6e 20 73 69 7a 65 2e 0a 2a 2f 0a 73 74 61 74 69  n size..*/.stati
c4a0: 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f  c int test_bind_
c4b0: 62 6c 6f 62 28 0a 20 20 76 6f 69 64 20 2a 20 63  blob(.  void * c
c4c0: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
c4d0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
c4e0: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
c4f0: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
c500: 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
c510: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
c520: 20 69 6e 74 20 69 64 78 3b 0a 20 20 69 6e 74 20   int idx;.  int 
c530: 62 79 74 65 73 3b 0a 20 20 63 68 61 72 20 2a 76  bytes;.  char *v
c540: 61 6c 75 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a  alue;.  int rc;.
c550: 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 35 20 29  .  if( objc!=5 )
c560: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
c570: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
c580: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
c590: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20  ould be \"",.   
c5a0: 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
c5b0: 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30  ngFromObj(objv[0
c5c0: 5d 2c 20 30 29 2c 20 22 20 53 54 4d 54 20 4e 20  ], 0), " STMT N 
c5d0: 44 41 54 41 20 42 59 54 45 53 22 2c 20 30 29 3b  DATA BYTES", 0);
c5e0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
c5f0: 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66  ERROR;.  }..  if
c600: 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
c610: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
c620: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
c630: 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
c640: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
c650: 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f  f( Tcl_GetIntFro
c660: 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
c670: 76 5b 32 5d 2c 20 26 69 64 78 29 20 29 20 72 65  v[2], &idx) ) re
c680: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
c690: 20 20 76 61 6c 75 65 20 3d 20 54 63 6c 5f 47 65    value = Tcl_Ge
c6a0: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 33 5d 29  tString(objv[3])
c6b0: 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49  ;.  if( Tcl_GetI
c6c0: 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  ntFromObj(interp
c6d0: 2c 20 6f 62 6a 76 5b 34 5d 2c 20 26 62 79 74 65  , objv[4], &byte
c6e0: 73 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  s) ) return TCL_
c6f0: 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73  ERROR;..  rc = s
c700: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62  qlite3_bind_blob
c710: 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 76 61 6c  (pStmt, idx, val
c720: 75 65 2c 20 62 79 74 65 73 2c 20 53 51 4c 49 54  ue, bytes, SQLIT
c730: 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20  E_TRANSIENT);.  
c740: 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45  if( sqlite3TestE
c750: 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 53  rrCode(interp, S
c760: 74 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 2c 20  tmtToDb(pStmt), 
c770: 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  rc) ) return TCL
c780: 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 63  _ERROR;.  if( rc
c790: 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
c7a0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
c7b0: 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75  ROR;.  }..  retu
c7c0: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
c7d0: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c  .** Usage:   sql
c7e0: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
c7f0: 74 65 72 5f 63 6f 75 6e 74 20 20 53 54 4d 54 0a  ter_count  STMT.
c800: 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  **.** Return the
c810: 20 6e 75 6d 62 65 72 20 6f 66 20 77 69 6c 64 63   number of wildc
c820: 61 72 64 73 20 69 6e 20 74 68 65 20 67 69 76 65  ards in the give
c830: 6e 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a  n statement..*/.
c840: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
c850: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 63  bind_parameter_c
c860: 6f 75 6e 74 28 0a 20 20 76 6f 69 64 20 2a 20 63  ount(.  void * c
c870: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
c880: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
c890: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
c8a0: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
c8b0: 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
c8c0: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 0a  3_stmt *pStmt;..
c8d0: 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b    if( objc!=2 ){
c8e0: 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75  .    Tcl_WrongNu
c8f0: 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c  mArgs(interp, 1,
c900: 20 6f 62 6a 76 2c 20 22 53 54 4d 54 22 29 3b 0a   objv, "STMT");.
c910: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
c920: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
c930: 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69  getStmtPointer(i
c940: 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
c950: 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
c960: 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20  pStmt) ) return 
c970: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c  TCL_ERROR;.  Tcl
c980: 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
c990: 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74  terp, Tcl_NewInt
c9a0: 4f 62 6a 28 73 71 6c 69 74 65 33 5f 62 69 6e 64  Obj(sqlite3_bind
c9b0: 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74  _parameter_count
c9c0: 28 70 53 74 6d 74 29 29 29 3b 0a 20 20 72 65 74  (pStmt)));.  ret
c9d0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
c9e0: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71  *.** Usage:   sq
c9f0: 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
ca00: 65 74 65 72 5f 6e 61 6d 65 20 20 53 54 4d 54 20  eter_name  STMT 
ca10: 20 4e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20   N.**.** Return 
ca20: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
ca30: 4e 74 68 20 77 69 6c 64 63 61 72 64 2e 20 20 54  Nth wildcard.  T
ca40: 68 65 20 66 69 72 73 74 20 77 69 6c 64 63 61 72  he first wildcar
ca50: 64 20 69 73 20 31 2e 0a 2a 2a 20 41 6e 20 65 6d  d is 1..** An em
ca60: 70 74 79 20 73 74 72 69 6e 67 20 69 73 20 72 65  pty string is re
ca70: 74 75 72 6e 65 64 20 69 66 20 4e 20 69 73 20 6f  turned if N is o
ca80: 75 74 20 6f 66 20 72 61 6e 67 65 20 6f 72 20 69  ut of range or i
ca90: 66 20 74 68 65 20 77 69 6c 64 63 61 72 64 0a 2a  f the wildcard.*
caa0: 2a 20 69 73 20 6e 61 6d 65 6c 65 73 73 2e 0a 2a  * is nameless..*
cab0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
cac0: 74 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  t_bind_parameter
cad0: 5f 6e 61 6d 65 28 0a 20 20 76 6f 69 64 20 2a 20  _name(.  void * 
cae0: 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
caf0: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
cb00: 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
cb10: 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
cb20: 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74  bjv[].){.  sqlit
cb30: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a  e3_stmt *pStmt;.
cb40: 20 20 69 6e 74 20 69 3b 0a 0a 20 20 69 66 28 20    int i;..  if( 
cb50: 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54  objc!=3 ){.    T
cb60: 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28  cl_WrongNumArgs(
cb70: 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c  interp, 1, objv,
cb80: 20 22 53 54 4d 54 20 4e 22 29 3b 0a 20 20 20 20   "STMT N");.    
cb90: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
cba0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 53  ;.  }.  if( getS
cbb0: 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tmtPointer(inter
cbc0: 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
cbd0: 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d  (objv[1]), &pStm
cbe0: 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  t) ) return TCL_
cbf0: 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c  ERROR;.  if( Tcl
cc00: 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
cc10: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20  nterp, objv[2], 
cc20: 26 69 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  &i) ) return TCL
cc30: 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53 65  _ERROR;.  Tcl_Se
cc40: 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
cc50: 70 2c 20 0a 20 20 20 20 20 54 63 6c 5f 4e 65 77  p, .     Tcl_New
cc60: 53 74 72 69 6e 67 4f 62 6a 28 73 71 6c 69 74 65  StringObj(sqlite
cc70: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
cc80: 5f 6e 61 6d 65 28 70 53 74 6d 74 2c 69 29 2c 2d  _name(pStmt,i),-
cc90: 31 29 0a 20 20 29 3b 0a 20 20 72 65 74 75 72 6e  1).  );.  return
cca0: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
ccb0: 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74  * Usage:   sqlit
ccc0: 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
ccd0: 72 5f 69 6e 64 65 78 20 20 53 54 4d 54 20 20 4e  r_index  STMT  N
cce0: 41 4d 45 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e  AME.**.** Return
ccf0: 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
cd00: 65 20 77 69 6c 64 63 61 72 64 20 63 61 6c 6c 65  e wildcard calle
cd10: 64 20 4e 41 4d 45 2e 20 20 52 65 74 75 72 6e 20  d NAME.  Return 
cd20: 30 20 69 66 20 74 68 65 72 65 20 69 73 0a 2a 2a  0 if there is.**
cd30: 20 6e 6f 20 73 75 63 68 20 77 69 6c 64 63 61 72   no such wildcar
cd40: 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  d..*/.static int
cd50: 20 74 65 73 74 5f 62 69 6e 64 5f 70 61 72 61 6d   test_bind_param
cd60: 65 74 65 72 5f 69 6e 64 65 78 28 0a 20 20 76 6f  eter_index(.  vo
cd70: 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
cd80: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
cd90: 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
cda0: 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
cdb0: 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
cdc0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
cdd0: 74 6d 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63  tmt;..  if( objc
cde0: 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57  !=3 ){.    Tcl_W
cdf0: 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65  rongNumArgs(inte
ce00: 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 53 54  rp, 1, objv, "ST
ce10: 4d 54 20 4e 41 4d 45 22 29 3b 0a 20 20 20 20 72  MT NAME");.    r
ce20: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
ce30: 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 53 74  .  }.  if( getSt
ce40: 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  mtPointer(interp
ce50: 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
ce60: 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74  objv[1]), &pStmt
ce70: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
ce80: 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74 4f  RROR;.  Tcl_SetO
ce90: 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
cea0: 20 0a 20 20 20 20 20 54 63 6c 5f 4e 65 77 49 6e   .     Tcl_NewIn
ceb0: 74 4f 62 6a 28 0a 20 20 20 20 20 20 20 73 71 6c  tObj(.       sql
cec0: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
ced0: 74 65 72 5f 69 6e 64 65 78 28 70 53 74 6d 74 2c  ter_index(pStmt,
cee0: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
cef0: 6a 76 5b 32 5d 29 29 0a 20 20 20 20 20 29 0a 20  jv[2])).     ). 
cf00: 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c   );.  return TCL
cf10: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
cf20: 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 63  age:   sqlite3_c
cf30: 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73 20 53 54  lear_bindings ST
cf40: 4d 54 0a 2a 2a 0a 2a 2f 0a 23 69 66 20 30 0a 73  MT.**.*/.#if 0.s
cf50: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63  tatic int test_c
cf60: 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73 28 0a 20  lear_bindings(. 
cf70: 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
cf80: 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
cf90: 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
cfa0: 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
cfb0: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
cfc0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
cfd0: 2a 70 53 74 6d 74 3b 0a 0a 20 20 69 66 28 20 6f  *pStmt;..  if( o
cfe0: 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  bjc!=2 ){.    Tc
cff0: 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69  l_WrongNumArgs(i
d000: 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20  nterp, 1, objv, 
d010: 22 53 54 4d 54 22 29 3b 0a 20 20 20 20 72 65 74  "STMT");.    ret
d020: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
d030: 20 7d 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74   }.  if( getStmt
d040: 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
d050: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
d060: 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20  jv[1]), &pStmt) 
d070: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
d080: 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a  OR;.  Tcl_SetObj
d090: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
d0a0: 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c  cl_NewIntObj(sql
d0b0: 69 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69  ite3_clear_bindi
d0c0: 6e 67 73 28 70 53 74 6d 74 29 29 29 3b 0a 20 20  ngs(pStmt)));.  
d0d0: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
d0e0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 55  .#endif../*.** U
d0f0: 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 65 72  sage: sqlite3_er
d100: 72 63 6f 64 65 20 44 42 0a 2a 2a 0a 2a 2a 20 52  rcode DB.**.** R
d110: 65 74 75 72 6e 20 74 68 65 20 73 74 72 69 6e 67  eturn the string
d120: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
d130: 6f 66 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  of the most rece
d140: 6e 74 20 73 71 6c 69 74 65 33 5f 2a 20 41 50 49  nt sqlite3_* API
d150: 0a 2a 2a 20 65 72 72 6f 72 20 63 6f 64 65 2e 20  .** error code. 
d160: 65 2e 67 2e 20 22 53 51 4c 49 54 45 5f 45 52 52  e.g. "SQLITE_ERR
d170: 4f 52 22 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  OR"..*/.static i
d180: 6e 74 20 74 65 73 74 5f 65 72 72 63 6f 64 65 28  nt test_errcode(
d190: 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
d1a0: 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
d1b0: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
d1c0: 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
d1d0: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
d1e0: 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
d1f0: 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32  ;..  if( objc!=2
d200: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
d210: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
d220: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
d230: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a  should be \"", .
d240: 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
d250: 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22  ring(objv[0]), "
d260: 20 44 42 22 2c 20 30 29 3b 0a 20 20 20 20 72 65   DB", 0);.    re
d270: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
d280: 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
d290: 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
d2a0: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
d2b0: 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65  v[1]), &db) ) re
d2c0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
d2d0: 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28    Tcl_SetResult(
d2e0: 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29  interp, (char *)
d2f0: 65 72 72 6f 72 4e 61 6d 65 28 73 71 6c 69 74 65  errorName(sqlite
d300: 33 5f 65 72 72 63 6f 64 65 28 64 62 29 29 2c 20  3_errcode(db)), 
d310: 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  0);.  return TCL
d320: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
d330: 61 67 65 3a 20 20 20 74 65 73 74 5f 65 72 72 6d  age:   test_errm
d340: 73 67 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75  sg DB.**.** Retu
d350: 72 6e 73 20 74 68 65 20 55 54 46 2d 38 20 72 65  rns the UTF-8 re
d360: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
d370: 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  the error messag
d380: 65 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65  e string for the
d390: 0a 2a 2a 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  .** most recent 
d3a0: 73 71 6c 69 74 65 33 5f 2a 20 41 50 49 20 63 61  sqlite3_* API ca
d3b0: 6c 6c 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ll..*/.static in
d3c0: 74 20 74 65 73 74 5f 65 72 72 6d 73 67 28 0a 20  t test_errmsg(. 
d3d0: 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
d3e0: 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
d3f0: 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
d400: 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
d410: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
d420: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a  .  sqlite3 *db;.
d430: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45    const char *zE
d440: 72 72 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  rr;..  if( objc!
d450: 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =2 ){.    Tcl_Ap
d460: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
d470: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
d480: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
d490: 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74   .       Tcl_Get
d4a0: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c  String(objv[0]),
d4b0: 20 22 20 44 42 22 2c 20 30 29 3b 0a 20 20 20 20   " DB", 0);.    
d4c0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
d4d0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44  ;.  }.  if( getD
d4e0: 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  bPointer(interp,
d4f0: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
d500: 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20  bjv[1]), &db) ) 
d510: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
d520: 3b 0a 0a 20 20 7a 45 72 72 20 3d 20 73 71 6c 69  ;..  zErr = sqli
d530: 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29 3b 0a  te3_errmsg(db);.
d540: 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
d550: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
d560: 65 77 53 74 72 69 6e 67 4f 62 6a 28 7a 45 72 72  ewStringObj(zErr
d570: 2c 20 2d 31 29 29 3b 0a 20 20 72 65 74 75 72 6e  , -1));.  return
d580: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
d590: 2a 20 55 73 61 67 65 3a 20 20 20 74 65 73 74 5f  * Usage:   test_
d5a0: 65 72 72 6d 73 67 31 36 20 44 42 0a 2a 2a 0a 2a  errmsg16 DB.**.*
d5b0: 2a 20 52 65 74 75 72 6e 73 20 74 68 65 20 55 54  * Returns the UT
d5c0: 46 2d 31 36 20 72 65 70 72 65 73 65 6e 74 61 74  F-16 representat
d5d0: 69 6f 6e 20 6f 66 20 74 68 65 20 65 72 72 6f 72  ion of the error
d5e0: 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e 67 20   message string 
d5f0: 66 6f 72 20 74 68 65 0a 2a 2a 20 6d 6f 73 74 20  for the.** most 
d600: 72 65 63 65 6e 74 20 73 71 6c 69 74 65 33 5f 2a  recent sqlite3_*
d610: 20 41 50 49 20 63 61 6c 6c 2e 20 54 68 69 73 20   API call. This 
d620: 69 73 20 61 20 62 79 74 65 20 61 72 72 61 79 20  is a byte array 
d630: 6f 62 6a 65 63 74 20 61 74 20 74 68 65 20 54 43  object at the TC
d640: 4c 20 0a 2a 2a 20 6c 65 76 65 6c 2c 20 61 6e 64  L .** level, and
d650: 20 69 74 20 69 6e 63 6c 75 64 65 73 20 74 68 65   it includes the
d660: 20 30 78 30 30 20 30 78 30 30 20 74 65 72 6d 69   0x00 0x00 termi
d670: 6e 61 74 6f 72 20 62 79 74 65 73 20 61 74 20 74  nator bytes at t
d680: 68 65 20 65 6e 64 20 6f 66 20 74 68 65 0a 2a 2a  he end of the.**
d690: 20 55 54 46 2d 31 36 20 73 74 72 69 6e 67 2e 0a   UTF-16 string..
d6a0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
d6b0: 73 74 5f 65 72 72 6d 73 67 31 36 28 0a 20 20 76  st_errmsg16(.  v
d6c0: 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
d6d0: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
d6e0: 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
d6f0: 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
d700: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23  ONST objv[].){.#
d710: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
d720: 49 54 5f 55 54 46 31 36 0a 20 20 73 71 6c 69 74  IT_UTF16.  sqlit
d730: 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20  e3 *db;.  const 
d740: 76 6f 69 64 20 2a 7a 45 72 72 3b 0a 20 20 69 6e  void *zErr;.  in
d750: 74 20 62 79 74 65 73 3b 0a 0a 20 20 69 66 28 20  t bytes;..  if( 
d760: 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  objc!=2 ){.    T
d770: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
d780: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
d790: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
d7a0: 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63   \"", .       Tc
d7b0: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
d7c0: 5b 30 5d 29 2c 20 22 20 44 42 22 2c 20 30 29 3b  [0]), " DB", 0);
d7d0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
d7e0: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
d7f0: 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e   getDbPointer(in
d800: 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
d810: 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64  ing(objv[1]), &d
d820: 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
d830: 45 52 52 4f 52 3b 0a 0a 20 20 7a 45 72 72 20 3d  ERROR;..  zErr =
d840: 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31   sqlite3_errmsg1
d850: 36 28 64 62 29 3b 0a 20 20 62 79 74 65 73 20 3d  6(db);.  bytes =
d860: 20 73 71 6c 69 74 65 33 75 74 66 31 36 42 79 74   sqlite3utf16Byt
d870: 65 4c 65 6e 28 7a 45 72 72 2c 20 2d 31 29 3b 0a  eLen(zErr, -1);.
d880: 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
d890: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
d8a0: 65 77 42 79 74 65 41 72 72 61 79 4f 62 6a 28 7a  ewByteArrayObj(z
d8b0: 45 72 72 2c 20 62 79 74 65 73 29 29 3b 0a 23 65  Err, bytes));.#e
d8c0: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
d8d0: 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 20 20 72  MIT_UTF16 */.  r
d8e0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
d8f0: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  ./*.** Usage: sq
d900: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 44 42  lite3_prepare DB
d910: 20 73 71 6c 20 62 79 74 65 73 20 74 61 69 6c 76   sql bytes tailv
d920: 61 72 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 69 6c 65  ar.**.** Compile
d930: 20 75 70 20 74 6f 20 3c 62 79 74 65 73 3e 20 62   up to <bytes> b
d940: 79 74 65 73 20 6f 66 20 74 68 65 20 73 75 70 70  ytes of the supp
d950: 6c 69 65 64 20 53 51 4c 20 73 74 72 69 6e 67 20  lied SQL string 
d960: 3c 73 71 6c 3e 20 75 73 69 6e 67 0a 2a 2a 20 64  <sql> using.** d
d970: 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 3c  atabase handle <
d980: 44 42 3e 2e 20 54 68 65 20 70 61 72 61 6d 65 74  DB>. The paramet
d990: 65 72 20 3c 74 61 69 6c 76 61 6c 3e 20 69 73 20  er <tailval> is 
d9a0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 67 6c  the name of a gl
d9b0: 6f 62 61 6c 0a 2a 2a 20 76 61 72 69 61 62 6c 65  obal.** variable
d9c0: 20 74 68 61 74 20 69 73 20 73 65 74 20 74 6f 20   that is set to 
d9d0: 74 68 65 20 75 6e 75 73 65 64 20 70 6f 72 74 69  the unused porti
d9e0: 6f 6e 20 6f 66 20 3c 73 71 6c 3e 20 28 69 66 20  on of <sql> (if 
d9f0: 61 6e 79 29 2e 20 41 0a 2a 2a 20 53 54 4d 54 20  any). A.** STMT 
da00: 68 61 6e 64 6c 65 20 69 73 20 72 65 74 75 72 6e  handle is return
da10: 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ed..*/.static in
da20: 74 20 74 65 73 74 5f 70 72 65 70 61 72 65 28 0a  t test_prepare(.
da30: 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
da40: 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
da50: 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
da60: 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
da70: 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
da80: 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
da90: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
daa0: 53 71 6c 3b 0a 20 20 69 6e 74 20 62 79 74 65 73  Sql;.  int bytes
dab0: 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
dac0: 7a 54 61 69 6c 20 3d 20 30 3b 0a 20 20 73 71 6c  zTail = 0;.  sql
dad0: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
dae0: 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 7a 42 75   = 0;.  char zBu
daf0: 66 5b 35 30 5d 3b 0a 20 20 69 6e 74 20 72 63 3b  f[50];.  int rc;
db00: 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 35 20  ..  if( objc!=5 
db10: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
db20: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
db30: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
db40: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20  hould be \"", . 
db50: 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
db60: 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20  ing(objv[0]), " 
db70: 44 42 20 73 71 6c 20 62 79 74 65 73 20 74 61 69  DB sql bytes tai
db80: 6c 76 61 72 22 2c 20 30 29 3b 0a 20 20 20 20 72  lvar", 0);.    r
db90: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
dba0: 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
dbb0: 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
dbc0: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
dbd0: 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72  jv[1]), &db) ) r
dbe0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
dbf0: 0a 20 20 7a 53 71 6c 20 3d 20 54 63 6c 5f 47 65  .  zSql = Tcl_Ge
dc00: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29  tString(objv[2])
dc10: 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49  ;.  if( Tcl_GetI
dc20: 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  ntFromObj(interp
dc30: 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 62 79 74 65  , objv[3], &byte
dc40: 73 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  s) ) return TCL_
dc50: 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73  ERROR;..  rc = s
dc60: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 64  qlite3_prepare(d
dc70: 62 2c 20 7a 53 71 6c 2c 20 62 79 74 65 73 2c 20  b, zSql, bytes, 
dc80: 26 70 53 74 6d 74 2c 20 26 7a 54 61 69 6c 29 3b  &pStmt, &zTail);
dc90: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65  .  if( sqlite3Te
dca0: 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70  stErrCode(interp
dcb0: 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65 74 75  , db, rc) ) retu
dcc0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
dcd0: 69 66 28 20 7a 54 61 69 6c 20 29 7b 0a 20 20 20  if( zTail ){.   
dce0: 20 69 66 28 20 62 79 74 65 73 3e 3d 30 20 29 7b   if( bytes>=0 ){
dcf0: 0a 20 20 20 20 20 20 62 79 74 65 73 20 3d 20 62  .      bytes = b
dd00: 79 74 65 73 20 2d 20 28 7a 54 61 69 6c 2d 7a 53  ytes - (zTail-zS
dd10: 71 6c 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 54  ql);.    }.    T
dd20: 63 6c 5f 4f 62 6a 53 65 74 56 61 72 32 28 69 6e  cl_ObjSetVar2(in
dd30: 74 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 30  terp, objv[4], 0
dd40: 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
dd50: 62 6a 28 7a 54 61 69 6c 2c 20 62 79 74 65 73 29  bj(zTail, bytes)
dd60: 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  , 0);.  }.  if( 
dd70: 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
dd80: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 53 74  .    assert( pSt
dd90: 6d 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 70 72  mt==0 );.    spr
dda0: 69 6e 74 66 28 7a 42 75 66 2c 20 22 28 25 64 29  intf(zBuf, "(%d)
ddb0: 20 22 2c 20 72 63 29 3b 0a 20 20 20 20 54 63 6c   ", rc);.    Tcl
ddc0: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
ddd0: 74 65 72 70 2c 20 7a 42 75 66 2c 20 73 71 6c 69  terp, zBuf, sqli
dde0: 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29 2c 20  te3_errmsg(db), 
ddf0: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
de00: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
de10: 20 69 66 28 20 70 53 74 6d 74 20 29 7b 0a 20 20   if( pStmt ){.  
de20: 20 20 69 66 28 20 6d 61 6b 65 50 6f 69 6e 74 65    if( makePointe
de30: 72 53 74 72 28 69 6e 74 65 72 70 2c 20 7a 42 75  rStr(interp, zBu
de40: 66 2c 20 70 53 74 6d 74 29 20 29 20 72 65 74 75  f, pStmt) ) retu
de50: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
de60: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
de70: 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c  lt(interp, zBuf,
de80: 20 30 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72   0);.  }.  retur
de90: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
dea0: 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65  ** Usage: sqlite
deb0: 33 5f 70 72 65 70 61 72 65 20 44 42 20 73 71 6c  3_prepare DB sql
dec0: 20 62 79 74 65 73 20 74 61 69 6c 76 61 72 0a 2a   bytes tailvar.*
ded0: 2a 0a 2a 2a 20 43 6f 6d 70 69 6c 65 20 75 70 20  *.** Compile up 
dee0: 74 6f 20 3c 62 79 74 65 73 3e 20 62 79 74 65 73  to <bytes> bytes
def0: 20 6f 66 20 74 68 65 20 73 75 70 70 6c 69 65 64   of the supplied
df00: 20 53 51 4c 20 73 74 72 69 6e 67 20 3c 73 71 6c   SQL string <sql
df10: 3e 20 75 73 69 6e 67 0a 2a 2a 20 64 61 74 61 62  > using.** datab
df20: 61 73 65 20 68 61 6e 64 6c 65 20 3c 44 42 3e 2e  ase handle <DB>.
df30: 20 54 68 65 20 70 61 72 61 6d 65 74 65 72 20 3c   The parameter <
df40: 74 61 69 6c 76 61 6c 3e 20 69 73 20 74 68 65 20  tailval> is the 
df50: 6e 61 6d 65 20 6f 66 20 61 20 67 6c 6f 62 61 6c  name of a global
df60: 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 74 68 61  .** variable tha
df70: 74 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  t is set to the 
df80: 75 6e 75 73 65 64 20 70 6f 72 74 69 6f 6e 20 6f  unused portion o
df90: 66 20 3c 73 71 6c 3e 20 28 69 66 20 61 6e 79 29  f <sql> (if any)
dfa0: 2e 20 41 0a 2a 2a 20 53 54 4d 54 20 68 61 6e 64  . A.** STMT hand
dfb0: 6c 65 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a  le is returned..
dfc0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
dfd0: 73 74 5f 70 72 65 70 61 72 65 31 36 28 0a 20 20  st_prepare16(.  
dfe0: 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
dff0: 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
e000: 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
e010: 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
e020: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
e030: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
e040: 4d 49 54 5f 55 54 46 31 36 0a 20 20 73 71 6c 69  MIT_UTF16.  sqli
e050: 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74  te3 *db;.  const
e060: 20 76 6f 69 64 20 2a 7a 53 71 6c 3b 0a 20 20 63   void *zSql;.  c
e070: 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 54 61 69 6c  onst void *zTail
e080: 20 3d 20 30 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20   = 0;.  Tcl_Obj 
e090: 2a 70 54 61 69 6c 20 3d 20 30 3b 0a 20 20 73 71  *pTail = 0;.  sq
e0a0: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
e0b0: 74 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 7a 42  t = 0;.  char zB
e0c0: 75 66 5b 35 30 5d 3b 20 0a 20 20 69 6e 74 20 72  uf[50]; .  int r
e0d0: 63 3b 0a 20 20 69 6e 74 20 62 79 74 65 73 3b 20  c;.  int bytes; 
e0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e0f0: 2a 20 54 68 65 20 69 6e 74 65 67 65 72 20 73 70  * The integer sp
e100: 65 63 69 66 69 65 64 20 61 73 20 61 72 67 20 33  ecified as arg 3
e110: 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 6c 65 6e   */.  int objlen
e120: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
e130: 2f 2a 20 54 68 65 20 62 79 74 65 2d 61 72 72 61  /* The byte-arra
e140: 79 20 6c 65 6e 67 74 68 20 6f 66 20 61 72 67 20  y length of arg 
e150: 32 20 2a 2f 0a 0a 20 20 69 66 28 20 6f 62 6a 63  2 */..  if( objc
e160: 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=5 ){.    Tcl_A
e170: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
e180: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
e190: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
e1a0: 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65  , .       Tcl_Ge
e1b0: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29  tString(objv[0])
e1c0: 2c 20 22 20 44 42 20 73 71 6c 20 62 79 74 65 73  , " DB sql bytes
e1d0: 20 74 61 69 6c 76 61 72 22 2c 20 30 29 3b 0a 20   tailvar", 0);. 
e1e0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
e1f0: 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67  ROR;.  }.  if( g
e200: 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65  etDbPointer(inte
e210: 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
e220: 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29  g(objv[1]), &db)
e230: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
e240: 52 4f 52 3b 0a 20 20 7a 53 71 6c 20 3d 20 54 63  ROR;.  zSql = Tc
e250: 6c 5f 47 65 74 42 79 74 65 41 72 72 61 79 46 72  l_GetByteArrayFr
e260: 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 32 5d 2c 20 26  omObj(objv[2], &
e270: 6f 62 6a 6c 65 6e 29 3b 0a 20 20 69 66 28 20 54  objlen);.  if( T
e280: 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a  cl_GetIntFromObj
e290: 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d  (interp, objv[3]
e2a0: 2c 20 26 62 79 74 65 73 29 20 29 20 72 65 74 75  , &bytes) ) retu
e2b0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20  rn TCL_ERROR;.. 
e2c0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72   rc = sqlite3_pr
e2d0: 65 70 61 72 65 31 36 28 64 62 2c 20 7a 53 71 6c  epare16(db, zSql
e2e0: 2c 20 62 79 74 65 73 2c 20 26 70 53 74 6d 74 2c  , bytes, &pStmt,
e2f0: 20 26 7a 54 61 69 6c 29 3b 0a 20 20 69 66 28 20   &zTail);.  if( 
e300: 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f  sqlite3TestErrCo
e310: 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72  de(interp, db, r
e320: 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  c) ) return TCL_
e330: 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 63 20  ERROR;.  if( rc 
e340: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  ){.    return TC
e350: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
e360: 69 66 28 20 7a 54 61 69 6c 20 29 7b 0a 20 20 20  if( zTail ){.   
e370: 20 6f 62 6a 6c 65 6e 20 3d 20 6f 62 6a 6c 65 6e   objlen = objlen
e380: 20 2d 20 28 28 75 38 20 2a 29 7a 54 61 69 6c 2d   - ((u8 *)zTail-
e390: 28 75 38 20 2a 29 7a 53 71 6c 29 3b 0a 20 20 7d  (u8 *)zSql);.  }
e3a0: 65 6c 73 65 7b 0a 20 20 20 20 6f 62 6a 6c 65 6e  else{.    objlen
e3b0: 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 70 54 61 69   = 0;.  }.  pTai
e3c0: 6c 20 3d 20 54 63 6c 5f 4e 65 77 42 79 74 65 41  l = Tcl_NewByteA
e3d0: 72 72 61 79 4f 62 6a 28 28 75 38 20 2a 29 7a 54  rrayObj((u8 *)zT
e3e0: 61 69 6c 2c 20 6f 62 6a 6c 65 6e 29 3b 0a 20 20  ail, objlen);.  
e3f0: 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74  Tcl_IncrRefCount
e400: 28 70 54 61 69 6c 29 3b 0a 20 20 54 63 6c 5f 4f  (pTail);.  Tcl_O
e410: 62 6a 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  bjSetVar2(interp
e420: 2c 20 6f 62 6a 76 5b 34 5d 2c 20 30 2c 20 70 54  , objv[4], 0, pT
e430: 61 69 6c 2c 20 30 29 3b 0a 20 20 54 63 6c 5f 44  ail, 0);.  Tcl_D
e440: 65 63 72 52 65 66 43 6f 75 6e 74 28 70 54 61 69  ecrRefCount(pTai
e450: 6c 29 3b 0a 0a 20 20 69 66 28 20 70 53 74 6d 74  l);..  if( pStmt
e460: 20 29 7b 0a 20 20 20 20 69 66 28 20 6d 61 6b 65   ){.    if( make
e470: 50 6f 69 6e 74 65 72 53 74 72 28 69 6e 74 65 72  PointerStr(inter
e480: 70 2c 20 7a 42 75 66 2c 20 70 53 74 6d 74 29 20  p, zBuf, pStmt) 
e490: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
e4a0: 4f 52 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 41 70  OR;.  }.  Tcl_Ap
e4b0: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
e4c0: 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 23 65 6e  p, zBuf, 0);.#en
e4d0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
e4e0: 49 54 5f 55 54 46 31 36 20 2a 2f 0a 20 20 72 65  IT_UTF16 */.  re
e4f0: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
e500: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  /*.** Usage: sql
e510: 69 74 65 33 5f 6f 70 65 6e 20 66 69 6c 65 6e 61  ite3_open filena
e520: 6d 65 20 3f 6f 70 74 69 6f 6e 73 2d 6c 69 73 74  me ?options-list
e530: 3f 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ?.*/.static int 
e540: 74 65 73 74 5f 6f 70 65 6e 28 0a 20 20 76 6f 69  test_open(.  voi
e550: 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
e560: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
e570: 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
e580: 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
e590: 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 63  ST objv[].){.  c
e5a0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65  onst char *zFile
e5b0: 6e 61 6d 65 3b 0a 20 20 73 71 6c 69 74 65 33 20  name;.  sqlite3 
e5c0: 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  *db;.  int rc;. 
e5d0: 20 63 68 61 72 20 7a 42 75 66 5b 31 30 30 5d 3b   char zBuf[100];
e5e0: 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20  ..  if( objc!=3 
e5f0: 26 26 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20  && objc!=2 ){.  
e600: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
e610: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
e620: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
e630: 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20   be \"", .      
e640: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
e650: 62 6a 76 5b 30 5d 29 2c 20 22 20 66 69 6c 65 6e  bjv[0]), " filen
e660: 61 6d 65 20 6f 70 74 69 6f 6e 73 2d 6c 69 73 74  ame options-list
e670: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
e680: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
e690: 0a 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20  ..  zFilename = 
e6a0: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
e6b0: 6a 76 5b 31 5d 29 3b 0a 20 20 72 63 20 3d 20 73  jv[1]);.  rc = s
e6c0: 71 6c 69 74 65 33 5f 6f 70 65 6e 28 7a 46 69 6c  qlite3_open(zFil
e6d0: 65 6e 61 6d 65 2c 20 26 64 62 29 3b 0a 20 20 0a  ename, &db);.  .
e6e0: 20 20 69 66 28 20 6d 61 6b 65 50 6f 69 6e 74 65    if( makePointe
e6f0: 72 53 74 72 28 69 6e 74 65 72 70 2c 20 7a 42 75  rStr(interp, zBu
e700: 66 2c 20 64 62 29 20 29 20 72 65 74 75 72 6e 20  f, db) ) return 
e710: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c  TCL_ERROR;.  Tcl
e720: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
e730: 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a  terp, zBuf, 0);.
e740: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
e750: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
e760: 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 20   sqlite3_open16 
e770: 66 69 6c 65 6e 61 6d 65 20 6f 70 74 69 6f 6e 73  filename options
e780: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
e790: 65 73 74 5f 6f 70 65 6e 31 36 28 0a 20 20 76 6f  est_open16(.  vo
e7a0: 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
e7b0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
e7c0: 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
e7d0: 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
e7e0: 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69  NST objv[].){.#i
e7f0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
e800: 54 5f 55 54 46 31 36 0a 20 20 63 6f 6e 73 74 20  T_UTF16.  const 
e810: 76 6f 69 64 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b  void *zFilename;
e820: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a  .  sqlite3 *db;.
e830: 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 68 61 72    int rc;.  char
e840: 20 7a 42 75 66 5b 31 30 30 5d 3b 0a 0a 20 20 69   zBuf[100];..  i
e850: 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20  f( objc!=3 ){.  
e860: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
e870: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
e880: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
e890: 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20   be \"", .      
e8a0: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
e8b0: 62 6a 76 5b 30 5d 29 2c 20 22 20 66 69 6c 65 6e  bjv[0]), " filen
e8c0: 61 6d 65 20 6f 70 74 69 6f 6e 73 2d 6c 69 73 74  ame options-list
e8d0: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
e8e0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
e8f0: 0a 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20  ..  zFilename = 
e900: 54 63 6c 5f 47 65 74 42 79 74 65 41 72 72 61 79  Tcl_GetByteArray
e910: 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 31 5d 2c  FromObj(objv[1],
e920: 20 30 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69   0);.  rc = sqli
e930: 74 65 33 5f 6f 70 65 6e 31 36 28 7a 46 69 6c 65  te3_open16(zFile
e940: 6e 61 6d 65 2c 20 26 64 62 29 3b 0a 20 20 0a 20  name, &db);.  . 
e950: 20 69 66 28 20 6d 61 6b 65 50 6f 69 6e 74 65 72   if( makePointer
e960: 53 74 72 28 69 6e 74 65 72 70 2c 20 7a 42 75 66  Str(interp, zBuf
e970: 2c 20 64 62 29 20 29 20 72 65 74 75 72 6e 20 54  , db) ) return T
e980: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f  CL_ERROR;.  Tcl_
e990: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
e9a0: 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 23  erp, zBuf, 0);.#
e9b0: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
e9c0: 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 20 20  OMIT_UTF16 */.  
e9d0: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
e9e0: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
e9f0: 71 6c 69 74 65 33 5f 63 6f 6d 70 6c 65 74 65 31  qlite3_complete1
ea00: 36 20 3c 55 54 46 2d 31 36 20 73 74 72 69 6e 67  6 <UTF-16 string
ea10: 3e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 31  >.**.** Return 1
ea20: 20 69 66 20 74 68 65 20 73 75 70 70 6c 69 65 64   if the supplied
ea30: 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 63   argument is a c
ea40: 6f 6d 70 6c 65 74 65 20 53 51 4c 20 73 74 61 74  omplete SQL stat
ea50: 65 6d 65 6e 74 2c 20 6f 72 20 7a 65 72 6f 0a 2a  ement, or zero.*
ea60: 2a 20 6f 74 68 65 72 77 69 73 65 2e 0a 2a 2f 0a  * otherwise..*/.
ea70: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
ea80: 63 6f 6d 70 6c 65 74 65 31 36 28 0a 20 20 76 6f  complete16(.  vo
ea90: 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
eaa0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
eab0: 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
eac0: 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
ead0: 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69  NST objv[].){.#i
eae0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
eaf0: 45 5f 4f 4d 49 54 5f 43 4f 4d 50 4c 45 54 45 29  E_OMIT_COMPLETE)
eb00: 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
eb10: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 29 0a  ITE_OMIT_UTF16).
eb20: 20 20 63 68 61 72 20 2a 7a 42 75 66 3b 0a 0a 20    char *zBuf;.. 
eb30: 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a   if( objc!=2 ){.
eb40: 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d      Tcl_WrongNum
eb50: 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20  Args(interp, 1, 
eb60: 6f 62 6a 76 2c 20 22 3c 75 74 66 2d 31 36 20 73  objv, "<utf-16 s
eb70: 71 6c 3e 22 29 3b 0a 20 20 20 20 72 65 74 75 72  ql>");.    retur
eb80: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
eb90: 0a 0a 20 20 7a 42 75 66 20 3d 20 54 63 6c 5f 47  ..  zBuf = Tcl_G
eba0: 65 74 42 79 74 65 41 72 72 61 79 46 72 6f 6d 4f  etByteArrayFromO
ebb0: 62 6a 28 6f 62 6a 76 5b 31 5d 2c 20 30 29 3b 0a  bj(objv[1], 0);.
ebc0: 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
ebd0: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
ebe0: 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33  ewIntObj(sqlite3
ebf0: 5f 63 6f 6d 70 6c 65 74 65 31 36 28 7a 42 75 66  _complete16(zBuf
ec00: 29 29 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  )));.#endif /* S
ec10: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 4c  QLITE_OMIT_COMPL
ec20: 45 54 45 20 26 26 20 53 51 4c 49 54 45 5f 4f 4d  ETE && SQLITE_OM
ec30: 49 54 5f 55 54 46 31 36 20 2a 2f 0a 20 20 72 65  IT_UTF16 */.  re
ec40: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
ec50: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  /*.** Usage: sql
ec60: 69 74 65 33 5f 73 74 65 70 20 53 54 4d 54 0a 2a  ite3_step STMT.*
ec70: 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 74 68 65  *.** Advance the
ec80: 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 74 68   statement to th
ec90: 65 20 6e 65 78 74 20 72 6f 77 2e 0a 2a 2f 0a 73  e next row..*/.s
eca0: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 73  tatic int test_s
ecb0: 74 65 70 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  tep(.  void * cl
ecc0: 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
ecd0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
ece0: 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
ecf0: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
ed00: 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
ed10: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20  _stmt *pStmt;.  
ed20: 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f  int rc;..  if( o
ed30: 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  bjc!=2 ){.    Tc
ed40: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
ed50: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
ed60: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
ed70: 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c  \"", .       Tcl
ed80: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
ed90: 30 5d 29 2c 20 22 20 53 54 4d 54 22 2c 20 30 29  0]), " STMT", 0)
eda0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
edb0: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69  _ERROR;.  }..  i
edc0: 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
edd0: 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
ede0: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
edf0: 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
ee00: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
ee10: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 65  rc = sqlite3_ste
ee20: 70 28 70 53 74 6d 74 29 3b 0a 0a 20 20 2f 2a 20  p(pStmt);..  /* 
ee30: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 44  if( rc!=SQLITE_D
ee40: 4f 4e 45 20 26 26 20 72 63 21 3d 53 51 4c 49 54  ONE && rc!=SQLIT
ee50: 45 5f 52 4f 57 20 29 20 72 65 74 75 72 6e 20 54  E_ROW ) return T
ee60: 43 4c 5f 45 52 52 4f 52 3b 20 2a 2f 0a 20 20 54  CL_ERROR; */.  T
ee70: 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74  cl_SetResult(int
ee80: 65 72 70 2c 20 28 63 68 61 72 20 2a 29 65 72 72  erp, (char *)err
ee90: 6f 72 4e 61 6d 65 28 72 63 29 2c 20 30 29 3b 0a  orName(rc), 0);.
eea0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
eeb0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
eec0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
eed0: 63 6f 75 6e 74 20 53 54 4d 54 20 0a 2a 2a 0a 2a  count STMT .**.*
eee0: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d  * Return the num
eef0: 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 72  ber of columns r
ef00: 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 73  eturned by the s
ef10: 71 6c 20 73 74 61 74 65 6d 65 6e 74 20 53 54 4d  ql statement STM
ef20: 54 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  T..*/.static int
ef30: 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 63 6f 75   test_column_cou
ef40: 6e 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  nt(.  void * cli
ef50: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
ef60: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
ef70: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
ef80: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
ef90: 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  [].){.  sqlite3_
efa0: 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 0a 20 20  stmt *pStmt;..  
efb0: 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20  if( objc!=2 ){. 
efc0: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
efd0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
efe0: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
eff0: 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20  d be \"", .     
f000: 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28    Tcl_GetString(
f010: 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54  objv[0]), " STMT
f020: 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20   column", 0);.  
f030: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
f040: 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67  OR;.  }..  if( g
f050: 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e  etStmtPointer(in
f060: 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
f070: 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70  ing(objv[1]), &p
f080: 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
f090: 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 54 63 6c  CL_ERROR;..  Tcl
f0a0: 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
f0b0: 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74  terp, Tcl_NewInt
f0c0: 4f 62 6a 28 73 71 6c 69 74 65 33 5f 63 6f 6c 75  Obj(sqlite3_colu
f0d0: 6d 6e 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29 29  mn_count(pStmt))
f0e0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
f0f0: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
f100: 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ge: sqlite3_colu
f110: 6d 6e 5f 74 79 70 65 20 53 54 4d 54 20 63 6f 6c  mn_type STMT col
f120: 75 6d 6e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e  umn.**.** Return
f130: 20 74 68 65 20 74 79 70 65 20 6f 66 20 74 68 65   the type of the
f140: 20 64 61 74 61 20 69 6e 20 63 6f 6c 75 6d 6e 20   data in column 
f150: 27 63 6f 6c 75 6d 6e 27 20 6f 66 20 74 68 65 20  'column' of the 
f160: 63 75 72 72 65 6e 74 20 72 6f 77 2e 0a 2a 2f 0a  current row..*/.
f170: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
f180: 63 6f 6c 75 6d 6e 5f 74 79 70 65 28 0a 20 20 76  column_type(.  v
f190: 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
f1a0: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
f1b0: 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
f1c0: 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
f1d0: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
f1e0: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
f1f0: 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b  Stmt;.  int col;
f200: 0a 20 20 69 6e 74 20 74 70 3b 0a 0a 20 20 69 66  .  int tp;..  if
f210: 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20  ( objc!=3 ){.   
f220: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
f230: 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
f240: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
f250: 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20  be \"", .       
f260: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
f270: 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20 63  jv[0]), " STMT c
f280: 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20  olumn", 0);.    
f290: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
f2a0: 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
f2b0: 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
f2c0: 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
f2d0: 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
f2e0: 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
f2f0: 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63  _ERROR;.  if( Tc
f300: 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
f310: 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c  interp, objv[2],
f320: 20 26 63 6f 6c 29 20 29 20 72 65 74 75 72 6e 20   &col) ) return 
f330: 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 74 70  TCL_ERROR;..  tp
f340: 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d   = sqlite3_colum
f350: 6e 5f 74 79 70 65 28 70 53 74 6d 74 2c 20 63 6f  n_type(pStmt, co
f360: 6c 29 3b 0a 20 20 73 77 69 74 63 68 28 20 74 70  l);.  switch( tp
f370: 20 29 7b 0a 20 20 20 20 63 61 73 65 20 53 51 4c   ){.    case SQL
f380: 49 54 45 5f 49 4e 54 45 47 45 52 3a 20 0a 20 20  ITE_INTEGER: .  
f390: 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c      Tcl_SetResul
f3a0: 74 28 69 6e 74 65 72 70 2c 20 22 49 4e 54 45 47  t(interp, "INTEG
f3b0: 45 52 22 2c 20 54 43 4c 5f 53 54 41 54 49 43 29  ER", TCL_STATIC)
f3c0: 3b 20 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  ; .      break;.
f3d0: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
f3e0: 4e 55 4c 4c 3a 0a 20 20 20 20 20 20 54 63 6c 5f  NULL:.      Tcl_
f3f0: 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70  SetResult(interp
f400: 2c 20 22 4e 55 4c 4c 22 2c 20 54 43 4c 5f 53 54  , "NULL", TCL_ST
f410: 41 54 49 43 29 3b 20 0a 20 20 20 20 20 20 62 72  ATIC); .      br
f420: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
f430: 4c 49 54 45 5f 46 4c 4f 41 54 3a 0a 20 20 20 20  LITE_FLOAT:.    
f440: 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28    Tcl_SetResult(
f450: 69 6e 74 65 72 70 2c 20 22 46 4c 4f 41 54 22 2c  interp, "FLOAT",
f460: 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 20 0a 20   TCL_STATIC); . 
f470: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
f480: 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45 58 54  case SQLITE_TEXT
f490: 3a 0a 20 20 20 20 20 20 54 63 6c 5f 53 65 74 52  :.      Tcl_SetR
f4a0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 54  esult(interp, "T
f4b0: 45 58 54 22 2c 20 54 43 4c 5f 53 54 41 54 49 43  EXT", TCL_STATIC
f4c0: 29 3b 20 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  ); .      break;
f4d0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
f4e0: 5f 42 4c 4f 42 3a 0a 20 20 20 20 20 20 54 63 6c  _BLOB:.      Tcl
f4f0: 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
f500: 70 2c 20 22 42 4c 4f 42 22 2c 20 54 43 4c 5f 53  p, "BLOB", TCL_S
f510: 54 41 54 49 43 29 3b 20 0a 20 20 20 20 20 20 62  TATIC); .      b
f520: 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c  reak;.    defaul
f530: 74 3a 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  t:.      assert(
f540: 30 29 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72  0);.  }..  retur
f550: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
f560: 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65  ** Usage: sqlite
f570: 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 20 53  3_column_int64 S
f580: 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a  TMT column.**.**
f590: 20 52 65 74 75 72 6e 20 74 68 65 20 64 61 74 61   Return the data
f5a0: 20 69 6e 20 63 6f 6c 75 6d 6e 20 27 63 6f 6c 75   in column 'colu
f5b0: 6d 6e 27 20 6f 66 20 74 68 65 20 63 75 72 72 65  mn' of the curre
f5c0: 6e 74 20 72 6f 77 20 63 61 73 74 20 61 73 20 61  nt row cast as a
f5d0: 6e 0a 2a 2a 20 77 69 64 65 20 28 36 34 2d 62 69  n.** wide (64-bi
f5e0: 74 29 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 73  t) integer..*/.s
f5f0: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63  tatic int test_c
f600: 6f 6c 75 6d 6e 5f 69 6e 74 36 34 28 0a 20 20 76  olumn_int64(.  v
f610: 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
f620: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
f630: 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
f640: 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
f650: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
f660: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
f670: 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b  Stmt;.  int col;
f680: 0a 20 20 69 36 34 20 69 56 61 6c 3b 0a 0a 20 20  .  i64 iVal;..  
f690: 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20  if( objc!=3 ){. 
f6a0: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
f6b0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
f6c0: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
f6d0: 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20  d be \"", .     
f6e0: 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28    Tcl_GetString(
f6f0: 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54  objv[0]), " STMT
f700: 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20   column", 0);.  
f710: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
f720: 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67  OR;.  }..  if( g
f730: 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e  etStmtPointer(in
f740: 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
f750: 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70  ing(objv[1]), &p
f760: 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
f770: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
f780: 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62  Tcl_GetIntFromOb
f790: 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32  j(interp, objv[2
f7a0: 5d 2c 20 26 63 6f 6c 29 20 29 20 72 65 74 75 72  ], &col) ) retur
f7b0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
f7c0: 69 56 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63  iVal = sqlite3_c
f7d0: 6f 6c 75 6d 6e 5f 69 6e 74 36 34 28 70 53 74 6d  olumn_int64(pStm
f7e0: 74 2c 20 63 6f 6c 29 3b 0a 20 20 54 63 6c 5f 53  t, col);.  Tcl_S
f7f0: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
f800: 72 70 2c 20 54 63 6c 5f 4e 65 77 57 69 64 65 49  rp, Tcl_NewWideI
f810: 6e 74 4f 62 6a 28 69 56 61 6c 29 29 3b 0a 20 20  ntObj(iVal));.  
f820: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
f830: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
f840: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c  qlite3_column_bl
f850: 6f 62 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a  ob STMT column.*
f860: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
f870: 74 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 0a 20  t_column_blob(. 
f880: 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
f890: 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
f8a0: 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
f8b0: 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
f8c0: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
f8d0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
f8e0: 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63 6f  *pStmt;.  int co
f8f0: 6c 3b 0a 0a 20 20 69 6e 74 20 6c 65 6e 3b 0a 20  l;..  int len;. 
f900: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 42 6c   const void *pBl
f910: 6f 62 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  ob;..  if( objc!
f920: 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =3 ){.    Tcl_Ap
f930: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
f940: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
f950: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
f960: 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74   .       Tcl_Get
f970: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c  String(objv[0]),
f980: 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c   " STMT column",
f990: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
f9a0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
f9b0: 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
f9c0: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
f9d0: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
f9e0: 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72  1]), &pStmt) ) r
f9f0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
fa00: 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e  .  if( Tcl_GetIn
fa10: 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
fa20: 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20   objv[2], &col) 
fa30: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
fa40: 4f 52 3b 0a 0a 20 20 70 42 6c 6f 62 20 3d 20 73  OR;..  pBlob = s
fa50: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c  qlite3_column_bl
fa60: 6f 62 28 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a  ob(pStmt, col);.
fa70: 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 5f    len = sqlite3_
fa80: 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 70 53 74  column_bytes(pSt
fa90: 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20 54 63 6c 5f  mt, col);.  Tcl_
faa0: 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
fab0: 65 72 70 2c 20 54 63 6c 5f 4e 65 77 42 79 74 65  erp, Tcl_NewByte
fac0: 41 72 72 61 79 4f 62 6a 28 70 42 6c 6f 62 2c 20  ArrayObj(pBlob, 
fad0: 6c 65 6e 29 29 3b 0a 20 20 72 65 74 75 72 6e 20  len));.  return 
fae0: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
faf0: 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
fb00: 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 20 53 54  column_double ST
fb10: 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20  MT column.**.** 
fb20: 52 65 74 75 72 6e 20 74 68 65 20 64 61 74 61 20  Return the data 
fb30: 69 6e 20 63 6f 6c 75 6d 6e 20 27 63 6f 6c 75 6d  in column 'colum
fb40: 6e 27 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  n' of the curren
fb50: 74 20 72 6f 77 20 63 61 73 74 20 61 73 20 61 20  t row cast as a 
fb60: 64 6f 75 62 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69  double..*/.stati
fb70: 63 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c 75 6d  c int test_colum
fb80: 6e 5f 64 6f 75 62 6c 65 28 0a 20 20 76 6f 69 64  n_double(.  void
fb90: 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
fba0: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
fbb0: 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
fbc0: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
fbd0: 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
fbe0: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
fbf0: 74 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a 20 20  t;.  int col;.  
fc00: 64 6f 75 62 6c 65 20 72 56 61 6c 3b 0a 0a 20 20  double rVal;..  
fc10: 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20  if( objc!=3 ){. 
fc20: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
fc30: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
fc40: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
fc50: 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20  d be \"", .     
fc60: 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28    Tcl_GetString(
fc70: 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54  objv[0]), " STMT
fc80: 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20   column", 0);.  
fc90: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
fca0: 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67  OR;.  }..  if( g
fcb0: 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e  etStmtPointer(in
fcc0: 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
fcd0: 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70  ing(objv[1]), &p
fce0: 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
fcf0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
fd00: 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62  Tcl_GetIntFromOb
fd10: 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32  j(interp, objv[2
fd20: 5d 2c 20 26 63 6f 6c 29 20 29 20 72 65 74 75 72  ], &col) ) retur
fd30: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
fd40: 72 56 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63  rVal = sqlite3_c
fd50: 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28 70 53 74  olumn_double(pSt
fd60: 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20 54 63 6c 5f  mt, col);.  Tcl_
fd70: 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
fd80: 65 72 70 2c 20 54 63 6c 5f 4e 65 77 44 6f 75 62  erp, Tcl_NewDoub
fd90: 6c 65 4f 62 6a 28 72 56 61 6c 29 29 3b 0a 20 20  leObj(rVal));.  
fda0: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
fdb0: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
fdc0: 71 6c 69 74 65 33 5f 64 61 74 61 5f 63 6f 75 6e  qlite3_data_coun
fdd0: 74 20 53 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 52 65  t STMT .**.** Re
fde0: 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  turn the number 
fdf0: 6f 66 20 63 6f 6c 75 6d 6e 73 20 72 65 74 75 72  of columns retur
fe00: 6e 65 64 20 62 79 20 74 68 65 20 73 71 6c 20 73  ned by the sql s
fe10: 74 61 74 65 6d 65 6e 74 20 53 54 4d 54 2e 0a 2a  tatement STMT..*
fe20: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
fe30: 74 5f 64 61 74 61 5f 63 6f 75 6e 74 28 0a 20 20  t_data_count(.  
fe40: 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
fe50: 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
fe60: 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
fe70: 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
fe80: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
fe90: 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
fea0: 70 53 74 6d 74 3b 0a 0a 20 20 69 66 28 20 6f 62  pStmt;..  if( ob
feb0: 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=2 ){.    Tcl
fec0: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
fed0: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
fee0: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
fef0: 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f  "", .       Tcl_
ff00: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30  GetString(objv[0
ff10: 5d 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d  ]), " STMT colum
ff20: 6e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  n", 0);.    retu
ff30: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
ff40: 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74  }..  if( getStmt
ff50: 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
ff60: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
ff70: 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20  jv[1]), &pStmt) 
ff80: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
ff90: 4f 52 3b 0a 0a 20 20 54 63 6c 5f 53 65 74 4f 62  OR;..  Tcl_SetOb
ffa0: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
ffb0: 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71  Tcl_NewIntObj(sq
ffc0: 6c 69 74 65 33 5f 64 61 74 61 5f 63 6f 75 6e 74  lite3_data_count
ffd0: 28 70 53 74 6d 74 29 29 29 3b 0a 20 20 72 65 74  (pStmt)));.  ret
ffe0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
fff0: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69  *.** Usage: sqli
10000 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 20  te3_column_text 
10010 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a  STMT column.**.*
10020 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33  * Usage: sqlite3
10030 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65  _column_decltype
10040 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a   STMT column.**.
10050 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65  ** Usage: sqlite
10060 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 20 53 54  3_column_name ST
10070 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2f 0a 73 74 61  MT column.*/.sta
10080 74 69 63 20 69 6e 74 20 74 65 73 74 5f 73 74 6d  tic int test_stm
10090 74 5f 75 74 66 38 28 0a 20 20 76 6f 69 64 20 2a  t_utf8(.  void *
100a0 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 20 20 20   clientData,    
100b0 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
100c0 6f 20 53 51 4c 69 74 65 20 41 50 49 20 66 75 6e  o SQLite API fun
100d0 63 74 69 6f 6e 20 74 6f 20 62 65 20 69 6e 76 6f  ction to be invo
100e0 6b 65 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65  ke */.  Tcl_Inte
100f0 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
10100 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
10110 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
10120 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
10130 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20  t *pStmt;.  int 
10140 63 6f 6c 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  col;.  const cha
10150 72 20 2a 28 2a 78 46 75 6e 63 29 28 73 71 6c 69  r *(*xFunc)(sqli
10160 74 65 33 5f 73 74 6d 74 2a 2c 20 69 6e 74 29 20  te3_stmt*, int) 
10170 3d 20 63 6c 69 65 6e 74 44 61 74 61 3b 0a 20 20  = clientData;.  
10180 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 52 65 74  const char *zRet
10190 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33  ;..  if( objc!=3
101a0 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
101b0 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
101c0 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
101d0 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a  should be \"", .
101e0 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
101f0 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22  ring(objv[0]), "
10200 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30   STMT column", 0
10210 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
10220 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
10230 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  if( getStmtPoint
10240 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
10250 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
10260 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74  ), &pStmt) ) ret
10270 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
10280 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46   if( Tcl_GetIntF
10290 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
102a0 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20 29 20  bjv[2], &col) ) 
102b0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
102c0 3b 0a 20 20 7a 52 65 74 20 3d 20 78 46 75 6e 63  ;.  zRet = xFunc
102d0 28 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20  (pStmt, col);.  
102e0 69 66 28 20 7a 52 65 74 20 29 7b 0a 20 20 20 20  if( zRet ){.    
102f0 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
10300 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 7a 52  terp, (char *)zR
10310 65 74 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 72 65  et, 0);.  }.  re
10320 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
10330 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
10340 67 6c 6f 62 61 6c 5f 72 65 63 6f 76 65 72 28 0a  global_recover(.
10350 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
10360 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
10370 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
10380 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
10390 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
103a0 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  {.#ifndef SQLITE
103b0 5f 4f 4d 49 54 5f 47 4c 4f 42 41 4c 52 45 43 4f  _OMIT_GLOBALRECO
103c0 56 45 52 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  VER.  int rc;.  
103d0 69 66 28 20 6f 62 6a 63 21 3d 31 20 29 7b 0a 20  if( objc!=1 ){. 
103e0 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41     Tcl_WrongNumA
103f0 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f  rgs(interp, 1, o
10400 62 6a 76 2c 20 22 22 29 3b 0a 20 20 20 20 72 65  bjv, "");.    re
10410 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
10420 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
10430 65 33 5f 67 6c 6f 62 61 6c 5f 72 65 63 6f 76 65  e3_global_recove
10440 72 28 29 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65  r();.  Tcl_SetRe
10450 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68  sult(interp, (ch
10460 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72  ar *)errorName(r
10470 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b  c), TCL_STATIC);
10480 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e  .#endif.  return
10490 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
104a0 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33  * Usage: sqlite3
104b0 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 53 54 4d  _column_text STM
104c0 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55  T column.**.** U
104d0 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f  sage: sqlite3_co
104e0 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 20 53 54  lumn_decltype ST
104f0 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20  MT column.**.** 
10500 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63  Usage: sqlite3_c
10510 6f 6c 75 6d 6e 5f 6e 61 6d 65 20 53 54 4d 54 20  olumn_name STMT 
10520 63 6f 6c 75 6d 6e 0a 2a 2f 0a 73 74 61 74 69 63  column.*/.static
10530 20 69 6e 74 20 74 65 73 74 5f 73 74 6d 74 5f 75   int test_stmt_u
10540 74 66 31 36 28 0a 20 20 76 6f 69 64 20 2a 20 63  tf16(.  void * c
10550 6c 69 65 6e 74 44 61 74 61 2c 20 20 20 20 20 2f  lientData,     /
10560 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 53 51 4c  * Pointer to SQL
10570 69 74 65 20 41 50 49 20 66 75 6e 63 74 69 6f 6e  ite API function
10580 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64 20 2a   to be invoked *
10590 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  /.  Tcl_Interp *
105a0 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
105b0 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
105c0 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23  ONST objv[].){.#
105d0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
105e0 49 54 5f 55 54 46 31 36 0a 20 20 73 71 6c 69 74  IT_UTF16.  sqlit
105f0 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a  e3_stmt *pStmt;.
10600 20 20 69 6e 74 20 63 6f 6c 3b 0a 20 20 54 63 6c    int col;.  Tcl
10610 5f 4f 62 6a 20 2a 70 52 65 74 3b 0a 20 20 63 6f  _Obj *pRet;.  co
10620 6e 73 74 20 76 6f 69 64 20 2a 7a 4e 61 6d 65 31  nst void *zName1
10630 36 3b 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20  6;.  const void 
10640 2a 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74 65  *(*xFunc)(sqlite
10650 33 5f 73 74 6d 74 2a 2c 20 69 6e 74 29 20 3d 20  3_stmt*, int) = 
10660 63 6c 69 65 6e 74 44 61 74 61 3b 0a 0a 20 20 69  clientData;..  i
10670 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20  f( objc!=3 ){.  
10680 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
10690 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
106a0 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
106b0 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20   be \"", .      
106c0 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
106d0 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20  bjv[0]), " STMT 
106e0 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20  column", 0);.   
106f0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
10700 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65  R;.  }..  if( ge
10710 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74  tStmtPointer(int
10720 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
10730 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53  ng(objv[1]), &pS
10740 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43  tmt) ) return TC
10750 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54  L_ERROR;.  if( T
10760 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a  cl_GetIntFromObj
10770 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d  (interp, objv[2]
10780 2c 20 26 63 6f 6c 29 20 29 20 72 65 74 75 72 6e  , &col) ) return
10790 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 7a   TCL_ERROR;..  z
107a0 4e 61 6d 65 31 36 20 3d 20 78 46 75 6e 63 28 70  Name16 = xFunc(p
107b0 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20 69 66  Stmt, col);.  if
107c0 28 20 7a 4e 61 6d 65 31 36 20 29 7b 0a 20 20 20  ( zName16 ){.   
107d0 20 70 52 65 74 20 3d 20 54 63 6c 5f 4e 65 77 42   pRet = Tcl_NewB
107e0 79 74 65 41 72 72 61 79 4f 62 6a 28 7a 4e 61 6d  yteArrayObj(zNam
107f0 65 31 36 2c 20 73 71 6c 69 74 65 33 75 74 66 31  e16, sqlite3utf1
10800 36 42 79 74 65 4c 65 6e 28 7a 4e 61 6d 65 31 36  6ByteLen(zName16
10810 2c 20 2d 31 29 2b 32 29 3b 0a 20 20 20 20 54 63  , -1)+2);.    Tc
10820 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
10830 6e 74 65 72 70 2c 20 70 52 65 74 29 3b 0a 20 20  nterp, pRet);.  
10840 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
10850 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f  TE_OMIT_UTF16 */
10860 0a 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ..  return TCL_O
10870 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
10880 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  e: sqlite3_colum
10890 6e 5f 69 6e 74 20 53 54 4d 54 20 63 6f 6c 75 6d  n_int STMT colum
108a0 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  n.**.** Usage: s
108b0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79  qlite3_column_by
108c0 74 65 73 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a  tes STMT column.
108d0 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  **.** Usage: sql
108e0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65  ite3_column_byte
108f0 73 31 36 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a  s16 STMT column.
10900 2a 2a 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  **.*/.static int
10910 20 74 65 73 74 5f 73 74 6d 74 5f 69 6e 74 28 0a   test_stmt_int(.
10920 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
10930 61 74 61 2c 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ata,    /* Point
10940 65 72 20 74 6f 20 53 51 4c 69 74 65 20 41 50 49  er to SQLite API
10950 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20   function to be 
10960 69 6e 76 6f 6b 65 64 20 2a 2f 0a 20 20 54 63 6c  invoked */.  Tcl
10970 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
10980 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
10990 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
109a0 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
109b0 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
109c0 20 69 6e 74 20 63 6f 6c 3b 0a 20 20 69 6e 74 20   int col;.  int 
109d0 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33  (*xFunc)(sqlite3
109e0 5f 73 74 6d 74 2a 2c 20 69 6e 74 29 20 3d 20 63  _stmt*, int) = c
109f0 6c 69 65 6e 74 44 61 74 61 3b 0a 0a 20 20 69 66  lientData;..  if
10a00 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20  ( objc!=3 ){.   
10a10 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
10a20 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
10a30 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
10a40 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20  be \"", .       
10a50 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
10a60 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20 63  jv[0]), " STMT c
10a70 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20  olumn", 0);.    
10a80 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
10a90 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
10aa0 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
10ab0 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
10ac0 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
10ad0 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
10ae0 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63  _ERROR;.  if( Tc
10af0 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
10b00 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c  interp, objv[2],
10b10 20 26 63 6f 6c 29 20 29 20 72 65 74 75 72 6e 20   &col) ) return 
10b20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 54 63  TCL_ERROR;..  Tc
10b30 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
10b40 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e  nterp, Tcl_NewIn
10b50 74 4f 62 6a 28 78 46 75 6e 63 28 70 53 74 6d 74  tObj(xFunc(pStmt
10b60 2c 20 63 6f 6c 29 29 29 3b 0a 20 20 72 65 74 75  , col)));.  retu
10b70 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 23 69  rn TCL_OK;.}..#i
10b80 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
10b90 54 5f 44 49 53 4b 49 4f 0a 2f 2a 0a 2a 2a 20 55  T_DISKIO./*.** U
10ba0 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 4f 73  sage:  sqlite3Os
10bb0 4f 70 65 6e 52 65 61 64 57 72 69 74 65 20 3c 66  OpenReadWrite <f
10bc0 69 6c 65 6e 61 6d 65 3e 0a 2a 2f 0a 73 74 61 74  ilename>.*/.stat
10bd0 69 63 20 69 6e 74 20 74 65 73 74 5f 73 71 6c 69  ic int test_sqli
10be0 74 65 33 4f 73 4f 70 65 6e 52 65 61 64 57 72 69  te3OsOpenReadWri
10bf0 74 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  te(.  void * cli
10c00 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
10c10 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
10c20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
10c30 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
10c40 5b 5d 0a 29 7b 0a 20 20 4f 73 46 69 6c 65 20 2a  [].){.  OsFile *
10c50 70 46 69 6c 65 3b 0a 20 20 69 6e 74 20 72 63 3b  pFile;.  int rc;
10c60 0a 20 20 69 6e 74 20 64 75 6d 6d 79 3b 0a 20 20  .  int dummy;.  
10c70 63 68 61 72 20 7a 42 75 66 5b 31 30 30 5d 3b 0a  char zBuf[100];.
10c80 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29  .  if( objc!=2 )
10c90 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
10ca0 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
10cb0 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
10cc0 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20  ould be \"", .  
10cd0 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
10ce0 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 66  ng(objv[0]), " f
10cf0 69 6c 65 6e 61 6d 65 22 2c 20 30 29 3b 0a 20 20  ilename", 0);.  
10d00 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
10d10 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72 63 20 3d 20  OR;.  }..  rc = 
10d20 73 71 6c 69 74 65 33 4f 73 2e 78 4f 70 65 6e 52  sqlite3Os.xOpenR
10d30 65 61 64 57 72 69 74 65 28 54 63 6c 5f 47 65 74  eadWrite(Tcl_Get
10d40 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
10d50 20 26 70 46 69 6c 65 2c 20 26 64 75 6d 6d 79 29   &pFile, &dummy)
10d60 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ;.  if( rc!=SQLI
10d70 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c  TE_OK ){.    Tcl
10d80 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
10d90 70 2c 20 28 63 68 61 72 20 2a 29 65 72 72 6f 72  p, (char *)error
10da0 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54  Name(rc), TCL_ST
10db0 41 54 49 43 29 3b 0a 20 20 20 20 72 65 74 75 72  ATIC);.    retur
10dc0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
10dd0 0a 20 20 6d 61 6b 65 50 6f 69 6e 74 65 72 53 74  .  makePointerSt
10de0 72 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20  r(interp, zBuf, 
10df0 70 46 69 6c 65 29 3b 0a 20 20 54 63 6c 5f 53 65  pFile);.  Tcl_Se
10e00 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  tResult(interp, 
10e10 7a 42 75 66 2c 20 30 29 3b 0a 20 20 72 65 74 75  zBuf, 0);.  retu
10e20 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 7d 0a  rn TCL_ERROR;.}.
10e30 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
10e40 71 6c 69 74 65 33 4f 73 43 6c 6f 73 65 20 3c 66  qlite3OsClose <f
10e50 69 6c 65 20 68 61 6e 64 6c 65 3e 0a 2a 2f 0a 73  ile handle>.*/.s
10e60 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 73  tatic int test_s
10e70 71 6c 69 74 65 33 4f 73 43 6c 6f 73 65 28 0a 20  qlite3OsClose(. 
10e80 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
10e90 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
10ea0 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
10eb0 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
10ec0 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
10ed0 0a 20 20 4f 73 46 69 6c 65 20 2a 70 46 69 6c 65  .  OsFile *pFile
10ee0 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69  ;.  int rc;..  i
10ef0 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20  f( objc!=2 ){.  
10f00 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
10f10 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
10f20 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
10f30 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20   be \"", .      
10f40 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
10f50 62 6a 76 5b 30 5d 29 2c 20 22 20 66 69 6c 65 68  bjv[0]), " fileh
10f60 61 6e 64 6c 65 22 2c 20 30 29 3b 0a 20 20 20 20  andle", 0);.    
10f70 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
10f80 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
10f90 46 69 6c 65 50 6f 69 6e 74 65 72 28 69 6e 74 65  FilePointer(inte
10fa0 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
10fb0 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 46 69  g(objv[1]), &pFi
10fc0 6c 65 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72  le) ){.    retur
10fd0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
10fe0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f  .  rc = sqlite3O
10ff0 73 43 6c 6f 73 65 28 26 70 46 69 6c 65 29 3b 0a  sClose(&pFile);.
11000 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
11010 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53  _OK ){.    Tcl_S
11020 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
11030 20 28 63 68 61 72 20 2a 29 65 72 72 6f 72 4e 61   (char *)errorNa
11040 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54  me(rc), TCL_STAT
11050 49 43 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  IC);.    return 
11060 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
11070 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
11080 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
11090 20 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b 20 3c   sqlite3OsLock <
110a0 66 69 6c 65 20 68 61 6e 64 6c 65 3e 20 3c 6c 6f  file handle> <lo
110b0 63 6b 74 79 70 65 3e 0a 2a 2f 0a 73 74 61 74 69  cktype>.*/.stati
110c0 63 20 69 6e 74 20 74 65 73 74 5f 73 71 6c 69 74  c int test_sqlit
110d0 65 33 4f 73 4c 6f 63 6b 28 0a 20 20 76 6f 69 64  e3OsLock(.  void
110e0 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
110f0 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
11100 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
11110 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
11120 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 4f 73  T objv[].){.  Os
11130 46 69 6c 65 20 2a 20 70 46 69 6c 65 3b 0a 20 20  File * pFile;.  
11140 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f  int rc;..  if( o
11150 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63  bjc!=3 ){.    Tc
11160 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
11170 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
11180 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
11190 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 20 54 63  \"", .        Tc
111a0 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
111b0 5b 30 5d 29 2c 20 0a 20 20 20 20 20 20 20 20 22  [0]), .        "
111c0 20 66 69 6c 65 68 61 6e 64 6c 65 20 28 53 48 41   filehandle (SHA
111d0 52 45 44 7c 52 45 53 45 52 56 45 44 7c 50 45 4e  RED|RESERVED|PEN
111e0 44 49 4e 47 7c 45 58 43 4c 55 53 49 56 45 29 22  DING|EXCLUSIVE)"
111f0 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
11200 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
11210 0a 20 20 69 66 28 20 67 65 74 46 69 6c 65 50 6f  .  if( getFilePo
11220 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
11230 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
11240 5b 31 5d 29 2c 20 26 70 46 69 6c 65 29 20 29 7b  [1]), &pFile) ){
11250 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
11260 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66  ERROR;.  }..  if
11270 28 20 30 3d 3d 73 74 72 63 6d 70 28 22 53 48 41  ( 0==strcmp("SHA
11280 52 45 44 22 2c 20 54 63 6c 5f 47 65 74 53 74 72  RED", Tcl_GetStr
11290 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 29 20 29 7b  ing(objv[2])) ){
112a0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
112b0 33 4f 73 4c 6f 63 6b 28 70 46 69 6c 65 2c 20 53  3OsLock(pFile, S
112c0 48 41 52 45 44 5f 4c 4f 43 4b 29 3b 0a 20 20 7d  HARED_LOCK);.  }
112d0 0a 20 20 65 6c 73 65 20 69 66 28 20 30 3d 3d 73  .  else if( 0==s
112e0 74 72 63 6d 70 28 22 52 45 53 45 52 56 45 44 22  trcmp("RESERVED"
112f0 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
11300 6f 62 6a 76 5b 32 5d 29 29 20 29 7b 0a 20 20 20  objv[2])) ){.   
11310 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 4c   rc = sqlite3OsL
11320 6f 63 6b 28 70 46 69 6c 65 2c 20 52 45 53 45 52  ock(pFile, RESER
11330 56 45 44 5f 4c 4f 43 4b 29 3b 0a 20 20 7d 0a 20  VED_LOCK);.  }. 
11340 20 65 6c 73 65 20 69 66 28 20 30 3d 3d 73 74 72   else if( 0==str
11350 63 6d 70 28 22 50 45 4e 44 49 4e 47 22 2c 20 54  cmp("PENDING", T
11360 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
11370 76 5b 32 5d 29 29 20 29 7b 0a 20 20 20 20 72 63  v[2])) ){.    rc
11380 20 3d 20 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b   = sqlite3OsLock
11390 28 70 46 69 6c 65 2c 20 50 45 4e 44 49 4e 47 5f  (pFile, PENDING_
113a0 4c 4f 43 4b 29 3b 0a 20 20 7d 0a 20 20 65 6c 73  LOCK);.  }.  els
113b0 65 20 69 66 28 20 30 3d 3d 73 74 72 63 6d 70 28  e if( 0==strcmp(
113c0 22 45 58 43 4c 55 53 49 56 45 22 2c 20 54 63 6c  "EXCLUSIVE", Tcl
113d0 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
113e0 32 5d 29 29 20 29 7b 0a 20 20 20 20 72 63 20 3d  2])) ){.    rc =
113f0 20 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b 28 70   sqlite3OsLock(p
11400 46 69 6c 65 2c 20 45 58 43 4c 55 53 49 56 45 5f  File, EXCLUSIVE_
11410 4c 4f 43 4b 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  LOCK);.  }else{.
11420 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
11430 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
11440 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
11450 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20  ld be \"", .    
11460 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
11470 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 0a 20 20 20  g(objv[0]), .   
11480 20 20 20 20 20 22 20 66 69 6c 65 68 61 6e 64 6c       " filehandl
11490 65 20 28 53 48 41 52 45 44 7c 52 45 53 45 52 56  e (SHARED|RESERV
114a0 45 44 7c 50 45 4e 44 49 4e 47 7c 45 58 43 4c 55  ED|PENDING|EXCLU
114b0 53 49 56 45 29 22 2c 20 30 29 3b 0a 20 20 20 20  SIVE)", 0);.    
114c0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
114d0 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 72 63 21  ;.  }..  if( rc!
114e0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
114f0 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28    Tcl_SetResult(
11500 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29  interp, (char *)
11510 65 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54  errorName(rc), T
11520 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  CL_STATIC);.    
11530 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
11540 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54  ;.  }.  return T
11550 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
11560 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 4f  Usage:  sqlite3O
11570 73 55 6e 6c 6f 63 6b 20 3c 66 69 6c 65 20 68 61  sUnlock <file ha
11580 6e 64 6c 65 3e 0a 2a 2f 0a 73 74 61 74 69 63 20  ndle>.*/.static 
11590 69 6e 74 20 74 65 73 74 5f 73 71 6c 69 74 65 33  int test_sqlite3
115a0 4f 73 55 6e 6c 6f 63 6b 28 0a 20 20 76 6f 69 64  OsUnlock(.  void
115b0 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
115c0 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
115d0 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
115e0 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
115f0 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 4f 73  T objv[].){.  Os
11600 46 69 6c 65 20 2a 20 70 46 69 6c 65 3b 0a 20 20  File * pFile;.  
11610 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f  int rc;..  if( o
11620 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  bjc!=2 ){.    Tc
11630 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
11640 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
11650 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
11660 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c  \"", .       Tcl
11670 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
11680 30 5d 29 2c 20 22 20 66 69 6c 65 68 61 6e 64 6c  0]), " filehandl
11690 65 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  e", 0);.    retu
116a0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
116b0 7d 0a 0a 20 20 69 66 28 20 67 65 74 46 69 6c 65  }..  if( getFile
116c0 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
116d0 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
116e0 6a 76 5b 31 5d 29 2c 20 26 70 46 69 6c 65 29 20  jv[1]), &pFile) 
116f0 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  ){.    return TC
11700 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72  L_ERROR;.  }.  r
11710 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 55 6e 6c  c = sqlite3OsUnl
11720 6f 63 6b 28 70 46 69 6c 65 2c 20 4e 4f 5f 4c 4f  ock(pFile, NO_LO
11730 43 4b 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53  CK);.  if( rc!=S
11740 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
11750 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
11760 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 65 72  terp, (char *)er
11770 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c  rorName(rc), TCL
11780 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 72 65  _STATIC);.    re
11790 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
117a0 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c    }.  return TCL
117b0 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
117c0 61 67 65 3a 20 20 73 71 6c 69 74 65 33 4f 73 54  age:  sqlite3OsT
117d0 65 6d 70 46 69 6c 65 4e 61 6d 65 0a 2a 2f 0a 73  empFileName.*/.s
117e0 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 73  tatic int test_s
117f0 71 6c 69 74 65 33 4f 73 54 65 6d 70 46 69 6c 65  qlite3OsTempFile
11800 4e 61 6d 65 28 0a 20 20 76 6f 69 64 20 2a 20 63  Name(.  void * c
11810 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
11820 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
11830 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
11840 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
11850 6a 76 5b 5d 0a 29 7b 0a 20 20 63 68 61 72 20 7a  jv[].){.  char z
11860 46 69 6c 65 5b 53 51 4c 49 54 45 5f 54 45 4d 50  File[SQLITE_TEMP
11870 4e 41 4d 45 5f 53 49 5a 45 5d 3b 0a 20 20 69 6e  NAME_SIZE];.  in
11880 74 20 72 63 3b 0a 0a 20 20 72 63 20 3d 20 73 71  t rc;..  rc = sq
11890 6c 69 74 65 33 4f 73 2e 78 54 65 6d 70 46 69 6c  lite3Os.xTempFil
118a0 65 4e 61 6d 65 28 7a 46 69 6c 65 29 3b 0a 20 20  eName(zFile);.  
118b0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
118c0 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74  K ){.    Tcl_Set
118d0 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28  Result(interp, (
118e0 63 68 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65  char *)errorName
118f0 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43  (rc), TCL_STATIC
11900 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
11910 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 54  L_ERROR;.  }.  T
11920 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
11930 69 6e 74 65 72 70 2c 20 7a 46 69 6c 65 2c 20 30  interp, zFile, 0
11940 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
11950 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OK;.}.#endif../*
11960 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
11970 74 65 5f 73 65 74 5f 6d 61 67 69 63 20 20 44 42  te_set_magic  DB
11980 20 20 4d 41 47 49 43 2d 4e 55 4d 42 45 52 0a 2a    MAGIC-NUMBER.*
11990 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 64 62 2d  *.** Set the db-
119a0 3e 6d 61 67 69 63 20 76 61 6c 75 65 2e 20 20 54  >magic value.  T
119b0 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20 74  his is used to t
119c0 65 73 74 20 65 72 72 6f 72 20 72 65 63 6f 76 65  est error recove
119d0 72 79 20 6c 6f 67 69 63 2e 0a 2a 2f 0a 73 74 61  ry logic..*/.sta
119e0 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65 5f 73  tic int sqlite_s
119f0 65 74 5f 6d 61 67 69 63 28 0a 20 20 76 6f 69 64  et_magic(.  void
11a00 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
11a10 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
11a20 65 72 70 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c  erp,.  int argc,
11a30 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 0a 29  .  char **argv.)
11a40 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
11a50 0a 20 20 69 66 28 20 61 72 67 63 21 3d 33 20 29  .  if( argc!=3 )
11a60 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
11a70 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
11a80 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
11a90 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
11aa0 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 20 20 22  v[0],.         "
11ab0 20 44 42 20 4d 41 47 49 43 22 2c 20 30 29 3b 0a   DB MAGIC", 0);.
11ac0 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
11ad0 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
11ae0 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
11af0 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64  erp, argv[1], &d
11b00 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
11b10 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 73 74 72  ERROR;.  if( str
11b20 63 6d 70 28 61 72 67 76 5b 32 5d 2c 20 22 53 51  cmp(argv[2], "SQ
11b30 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 22  LITE_MAGIC_OPEN"
11b40 29 3d 3d 30 20 29 7b 0a 20 20 20 20 64 62 2d 3e  )==0 ){.    db->
11b50 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d  magic = SQLITE_M
11b60 41 47 49 43 5f 4f 50 45 4e 3b 0a 20 20 7d 65 6c  AGIC_OPEN;.  }el
11b70 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 61 72  se if( strcmp(ar
11b80 67 76 5b 32 5d 2c 20 22 53 51 4c 49 54 45 5f 4d  gv[2], "SQLITE_M
11b90 41 47 49 43 5f 43 4c 4f 53 45 44 22 29 3d 3d 30  AGIC_CLOSED")==0
11ba0 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69   ){.    db->magi
11bb0 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  c = SQLITE_MAGIC
11bc0 5f 43 4c 4f 53 45 44 3b 0a 20 20 7d 65 6c 73 65  _CLOSED;.  }else
11bd0 20 69 66 28 20 73 74 72 63 6d 70 28 61 72 67 76   if( strcmp(argv
11be0 5b 32 5d 2c 20 22 53 51 4c 49 54 45 5f 4d 41 47  [2], "SQLITE_MAG
11bf0 49 43 5f 42 55 53 59 22 29 3d 3d 30 20 29 7b 0a  IC_BUSY")==0 ){.
11c00 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20      db->magic = 
11c10 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53  SQLITE_MAGIC_BUS
11c20 59 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73  Y;.  }else if( s
11c30 74 72 63 6d 70 28 61 72 67 76 5b 32 5d 2c 20 22  trcmp(argv[2], "
11c40 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52  SQLITE_MAGIC_ERR
11c50 4f 52 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 64  OR")==0 ){.    d
11c60 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54  b->magic = SQLIT
11c70 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 3b 0a 20  E_MAGIC_ERROR;. 
11c80 20 7d 65 6c 73 65 20 69 66 28 20 54 63 6c 5f 47   }else if( Tcl_G
11c90 65 74 49 6e 74 28 69 6e 74 65 72 70 2c 20 61 72  etInt(interp, ar
11ca0 67 76 5b 32 5d 2c 20 26 64 62 2d 3e 6d 61 67 69  gv[2], &db->magi
11cb0 63 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  c) ){.    return
11cc0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
11cd0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
11ce0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
11cf0 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72    sqlite3_interr
11d00 75 70 74 20 20 44 42 20 0a 2a 2a 0a 2a 2a 20 54  upt  DB .**.** T
11d10 72 69 67 67 65 72 20 61 6e 20 69 6e 74 65 72 72  rigger an interr
11d20 75 70 74 20 6f 6e 20 44 42 0a 2a 2f 0a 73 74 61  upt on DB.*/.sta
11d30 74 69 63 20 69 6e 74 20 74 65 73 74 5f 69 6e 74  tic int test_int
11d40 65 72 72 75 70 74 28 0a 20 20 76 6f 69 64 20 2a  errupt(.  void *
11d50 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
11d60 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
11d70 70 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a 20  p,.  int argc,. 
11d80 20 63 68 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a   char **argv.){.
11d90 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
11da0 20 69 66 28 20 61 72 67 63 21 3d 32 20 29 7b 0a   if( argc!=2 ){.
11db0 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
11dc0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
11dd0 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
11de0 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
11df0 30 5d 2c 20 22 20 44 42 22 2c 20 30 29 3b 0a 20  0], " DB", 0);. 
11e00 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
11e10 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67  ROR;.  }.  if( g
11e20 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65  etDbPointer(inte
11e30 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62  rp, argv[1], &db
11e40 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
11e50 52 52 4f 52 3b 0a 20 20 73 71 6c 69 74 65 33 5f  RROR;.  sqlite3_
11e60 69 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a 20  interrupt(db);. 
11e70 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
11e80 7d 0a 0a 73 74 61 74 69 63 20 75 38 20 2a 73 71  }..static u8 *sq
11e90 6c 69 74 65 33 5f 73 74 61 63 6b 5f 62 61 73 65  lite3_stack_base
11ea0 6c 69 6e 65 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a  line = 0;../*.**
11eb0 20 46 69 6c 6c 20 74 68 65 20 73 74 61 63 6b 20   Fill the stack 
11ec0 77 69 74 68 20 61 20 6b 6e 6f 77 6e 20 62 69 74  with a known bit
11ed0 70 61 74 74 65 72 6e 2e 0a 2a 2f 0a 73 74 61 74  pattern..*/.stat
11ee0 69 63 20 76 6f 69 64 20 70 72 65 70 53 74 61 63  ic void prepStac
11ef0 6b 28 76 6f 69 64 29 7b 0a 20 20 69 6e 74 20 69  k(void){.  int i
11f00 3b 0a 20 20 75 33 32 20 62 69 67 42 75 66 5b 36  ;.  u32 bigBuf[6
11f10 35 35 33 36 5d 3b 0a 20 20 66 6f 72 28 69 3d 30  5536];.  for(i=0
11f20 3b 20 69 3c 73 69 7a 65 6f 66 28 62 69 67 42 75  ; i<sizeof(bigBu
11f30 66 29 3b 20 69 2b 2b 29 20 62 69 67 42 75 66 5b  f); i++) bigBuf[
11f40 69 5d 20 3d 20 30 78 64 65 61 64 62 65 65 66 3b  i] = 0xdeadbeef;
11f50 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 61 63 6b  .  sqlite3_stack
11f60 5f 62 61 73 65 6c 69 6e 65 20 3d 20 28 75 38 2a  _baseline = (u8*
11f70 29 26 62 69 67 42 75 66 5b 36 35 35 33 36 5d 3b  )&bigBuf[65536];
11f80 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47 65 74 20 74 68  .}../*.** Get th
11f90 65 20 63 75 72 72 65 6e 74 20 73 74 61 63 6b 20  e current stack 
11fa0 64 65 70 74 68 2e 20 20 55 73 65 64 20 66 6f 72  depth.  Used for
11fb0 20 64 65 62 75 67 67 69 6e 67 20 6f 6e 6c 79 2e   debugging only.
11fc0 0a 2a 2f 0a 75 36 34 20 73 71 6c 69 74 65 33 53  .*/.u64 sqlite3S
11fd0 74 61 63 6b 44 65 70 74 68 28 76 6f 69 64 29 7b  tackDepth(void){
11fe0 0a 20 20 75 38 20 78 3b 0a 20 20 72 65 74 75 72  .  u8 x;.  retur
11ff0 6e 20 28 75 36 34 29 28 73 71 6c 69 74 65 33 5f  n (u64)(sqlite3_
12000 73 74 61 63 6b 5f 62 61 73 65 6c 69 6e 65 20 2d  stack_baseline -
12010 20 26 78 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55   &x);.}../*.** U
12020 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 73  sage:  sqlite3_s
12030 74 61 63 6b 5f 75 73 65 64 20 44 42 20 53 51 4c  tack_used DB SQL
12040 0a 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 6d 65  .**.** Try to me
12050 61 73 75 72 65 20 74 68 65 20 61 6d 6f 75 6e 74  asure the amount
12060 20 6f 66 20 73 74 61 63 6b 20 73 70 61 63 65 20   of stack space 
12070 75 73 65 64 20 62 79 20 61 20 63 61 6c 6c 20 74  used by a call t
12080 6f 20 73 71 6c 69 74 65 33 5f 65 78 65 63 0a 2a  o sqlite3_exec.*
12090 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
120a0 74 5f 73 74 61 63 6b 5f 75 73 65 64 28 0a 20 20  t_stack_used(.  
120b0 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
120c0 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
120d0 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 61  *interp,.  int a
120e0 72 67 63 2c 0a 20 20 63 68 61 72 20 2a 2a 61 72  rgc,.  char **ar
120f0 67 76 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  gv.){.  sqlite3 
12100 2a 64 62 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  *db;.  int i;.  
12110 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20  if( argc!=3 ){. 
12120 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
12130 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
12140 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
12150 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30  d be \"", argv[0
12160 5d 2c 20 0a 20 20 20 20 20 20 20 20 22 20 44 42  ], .        " DB
12170 20 53 51 4c 22 2c 20 30 29 3b 0a 20 20 20 20 72   SQL", 0);.    r
12180 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
12190 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
121a0 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
121b0 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20  argv[1], &db) ) 
121c0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
121d0 3b 0a 20 20 70 72 65 70 53 74 61 63 6b 28 29 3b  ;.  prepStack();
121e0 0a 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28  .  sqlite3_exec(
121f0 64 62 2c 20 61 72 67 76 5b 32 5d 2c 20 30 2c 20  db, argv[2], 0, 
12200 30 2c 20 30 29 3b 0a 20 20 66 6f 72 28 69 3d 36  0, 0);.  for(i=6
12210 35 35 33 35 3b 20 69 3e 3d 30 20 26 26 20 28 28  5535; i>=0 && ((
12220 75 33 32 2a 29 73 71 6c 69 74 65 33 5f 73 74 61  u32*)sqlite3_sta
12230 63 6b 5f 62 61 73 65 6c 69 6e 65 29 5b 2d 69 5d  ck_baseline)[-i]
12240 3d 3d 30 78 64 65 61 64 62 65 65 66 3b 20 69 2d  ==0xdeadbeef; i-
12250 2d 29 7b 7d 0a 20 20 54 63 6c 5f 53 65 74 4f 62  -){}.  Tcl_SetOb
12260 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
12270 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 69 2a  Tcl_NewIntObj(i*
12280 34 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  4));.  return TC
12290 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
122a0 73 61 67 65 3a 20 73 71 6c 69 74 65 5f 64 65 6c  sage: sqlite_del
122b0 65 74 65 5f 66 75 6e 63 74 69 6f 6e 20 44 42 20  ete_function DB 
122c0 66 75 6e 63 74 69 6f 6e 2d 6e 61 6d 65 0a 2a 2a  function-name.**
122d0 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68 65 20 75  .** Delete the u
122e0 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 27 66 75  ser function 'fu
122f0 6e 63 74 69 6f 6e 2d 6e 61 6d 65 27 20 66 72 6f  nction-name' fro
12300 6d 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  m database handl
12310 65 20 44 42 2e 20 49 74 0a 2a 2a 20 69 73 20 61  e DB. It.** is a
12320 73 73 75 6d 65 64 20 74 68 61 74 20 74 68 65 20  ssumed that the 
12330 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 77 61  user function wa
12340 73 20 63 72 65 61 74 65 64 20 61 73 20 55 54 46  s created as UTF
12350 38 2c 20 61 6e 79 20 6e 75 6d 62 65 72 20 6f 66  8, any number of
12360 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 73 20 28 74  .** arguments (t
12370 68 65 20 77 61 79 20 74 68 65 20 54 43 4c 20 69  he way the TCL i
12380 6e 74 65 72 66 61 63 65 20 64 6f 65 73 20 69 74  nterface does it
12390 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  )..*/.static int
123a0 20 64 65 6c 65 74 65 5f 66 75 6e 63 74 69 6f 6e   delete_function
123b0 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
123c0 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
123d0 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
123e0 6e 74 20 61 72 67 63 2c 0a 20 20 63 68 61 72 20  nt argc,.  char 
123f0 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 69 6e 74 20  **argv.){.  int 
12400 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  rc;.  sqlite3 *d
12410 62 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 33  b;.  if( argc!=3
12420 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
12430 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
12440 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
12450 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61  should be \"", a
12460 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20  rgv[0], .       
12470 20 22 20 44 42 20 66 75 6e 63 74 69 6f 6e 2d 6e   " DB function-n
12480 61 6d 65 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  ame", 0);.    re
12490 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
124a0 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
124b0 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61  ointer(interp, a
124c0 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72  rgv[1], &db) ) r
124d0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
124e0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
124f0 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
12500 64 62 2c 20 61 72 67 76 5b 32 5d 2c 20 2d 31 2c  db, argv[2], -1,
12510 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c   SQLITE_UTF8, 0,
12520 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 54 63 6c   0, 0, 0);.  Tcl
12530 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
12540 70 2c 20 28 63 68 61 72 20 2a 29 65 72 72 6f 72  p, (char *)error
12550 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54  Name(rc), TCL_ST
12560 41 54 49 43 29 3b 0a 20 20 72 65 74 75 72 6e 20  ATIC);.  return 
12570 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
12580 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 5f 64   Usage: sqlite_d
12590 65 6c 65 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 20  elete_collation 
125a0 44 42 20 63 6f 6c 6c 61 74 69 6f 6e 2d 6e 61 6d  DB collation-nam
125b0 65 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74  e.**.** Delete t
125c0 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
125d0 75 65 6e 63 65 20 27 63 6f 6c 6c 61 74 69 6f 6e  uence 'collation
125e0 2d 6e 61 6d 65 27 20 66 72 6f 6d 20 64 61 74 61  -name' from data
125f0 62 61 73 65 20 68 61 6e 64 6c 65 20 0a 2a 2a 20  base handle .** 
12600 44 42 2e 20 49 74 20 69 73 20 61 73 73 75 6d 65  DB. It is assume
12610 64 20 74 68 61 74 20 74 68 65 20 63 6f 6c 6c 61  d that the colla
12620 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 61  tion sequence wa
12630 73 20 63 72 65 61 74 65 64 20 61 73 20 55 54 46  s created as UTF
12640 38 20 28 74 68 65 20 0a 2a 2a 20 77 61 79 20 74  8 (the .** way t
12650 68 65 20 54 43 4c 20 69 6e 74 65 72 66 61 63 65  he TCL interface
12660 20 64 6f 65 73 20 69 74 29 2e 0a 2a 2f 0a 73 74   does it)..*/.st
12670 61 74 69 63 20 69 6e 74 20 64 65 6c 65 74 65 5f  atic int delete_
12680 63 6f 6c 6c 61 74 69 6f 6e 28 0a 20 20 76 6f 69  collation(.  voi
12690 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
126a0 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
126b0 74 65 72 70 2c 0a 20 20 69 6e 74 20 61 72 67 63  terp,.  int argc
126c0 2c 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 0a  ,.  char **argv.
126d0 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 73  ){.  int rc;.  s
126e0 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 66  qlite3 *db;.  if
126f0 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20  ( argc!=3 ){.   
12700 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
12710 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
12720 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
12730 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c  be \"", argv[0],
12740 20 0a 20 20 20 20 20 20 20 20 22 20 44 42 20 66   .        " DB f
12750 75 6e 63 74 69 6f 6e 2d 6e 61 6d 65 22 2c 20 30  unction-name", 0
12760 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
12770 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
12780 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
12790 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c  interp, argv[1],
127a0 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
127b0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d  CL_ERROR;.  rc =
127c0 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
127d0 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 61 72  collation(db, ar
127e0 67 76 5b 32 5d 2c 20 53 51 4c 49 54 45 5f 55 54  gv[2], SQLITE_UT
127f0 46 38 2c 20 30 2c 20 30 29 3b 0a 20 20 54 63 6c  F8, 0, 0);.  Tcl
12800 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
12810 70 2c 20 28 63 68 61 72 20 2a 29 65 72 72 6f 72  p, (char *)error
12820 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54  Name(rc), TCL_ST
12830 41 54 49 43 29 3b 0a 20 20 72 65 74 75 72 6e 20  ATIC);.  return 
12840 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
12850 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
12860 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 44  get_autocommit D
12870 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  B.**.** Return t
12880 72 75 65 20 69 66 20 74 68 65 20 64 61 74 61 62  rue if the datab
12890 61 73 65 20 44 42 20 69 73 20 63 75 72 72 65 6e  ase DB is curren
128a0 74 6c 79 20 69 6e 20 61 75 74 6f 2d 63 6f 6d 6d  tly in auto-comm
128b0 69 74 20 6d 6f 64 65 2e 0a 2a 2a 20 52 65 74 75  it mode..** Retu
128c0 72 6e 20 66 61 6c 73 65 20 69 66 20 6e 6f 74 2e  rn false if not.
128d0 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 67  .*/.static int g
128e0 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 28 0a 20  et_autocommit(. 
128f0 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
12900 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
12910 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
12920 61 72 67 63 2c 0a 20 20 63 68 61 72 20 2a 2a 61  argc,.  char **a
12930 72 67 76 0a 29 7b 0a 20 20 63 68 61 72 20 7a 42  rgv.){.  char zB
12940 75 66 5b 33 30 5d 3b 0a 20 20 73 71 6c 69 74 65  uf[30];.  sqlite
12950 33 20 2a 64 62 3b 0a 20 20 69 66 28 20 61 72 67  3 *db;.  if( arg
12960 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
12970 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
12980 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
12990 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
129a0 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20  ", argv[0], .   
129b0 20 20 20 20 20 22 20 44 42 22 2c 20 30 29 3b 0a       " DB", 0);.
129c0 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
129d0 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
129e0 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
129f0 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64  erp, argv[1], &d
12a00 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
12a10 45 52 52 4f 52 3b 0a 20 20 73 70 72 69 6e 74 66  ERROR;.  sprintf
12a20 28 7a 42 75 66 2c 20 22 25 64 22 2c 20 73 71 6c  (zBuf, "%d", sql
12a30 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d  ite3_get_autocom
12a40 6d 69 74 28 64 62 29 29 3b 0a 20 20 54 63 6c 5f  mit(db));.  Tcl_
12a50 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
12a60 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 20  erp, zBuf, 0);. 
12a70 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
12a80 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
12a90 20 74 63 6c 5f 76 61 72 69 61 62 6c 65 5f 74 79   tcl_variable_ty
12aa0 70 65 20 56 41 52 49 41 42 4c 45 4e 41 4d 45 0a  pe VARIABLENAME.
12ab0 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  **.** Return the
12ac0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 69 6e 74   name of the int
12ad0 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
12ae0 74 69 6f 6e 20 66 6f 72 20 74 68 65 0a 2a 2a 20  tion for the.** 
12af0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 67 69 76  value of the giv
12b00 65 6e 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2f 0a  en variable..*/.
12b10 73 74 61 74 69 63 20 69 6e 74 20 74 63 6c 5f 76  static int tcl_v
12b20 61 72 69 61 62 6c 65 5f 74 79 70 65 28 0a 20 20  ariable_type(.  
12b30 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
12b40 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
12b50 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
12b60 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
12b70 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
12b80 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 56 61 72 3b    Tcl_Obj *pVar;
12b90 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29  .  if( objc!=2 )
12ba0 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e  {.    Tcl_WrongN
12bb0 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31  umArgs(interp, 1
12bc0 2c 20 6f 62 6a 76 2c 20 22 56 41 52 49 41 42 4c  , objv, "VARIABL
12bd0 45 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  E");.    return 
12be0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
12bf0 20 70 56 61 72 20 3d 20 54 63 6c 5f 47 65 74 56   pVar = Tcl_GetV
12c00 61 72 32 45 78 28 69 6e 74 65 72 70 2c 20 54 63  ar2Ex(interp, Tc
12c10 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
12c20 5b 31 5d 29 2c 20 30 2c 20 54 43 4c 5f 4c 45 41  [1]), 0, TCL_LEA
12c30 56 45 5f 45 52 52 5f 4d 53 47 29 3b 0a 20 20 69  VE_ERR_MSG);.  i
12c40 66 28 20 70 56 61 72 3d 3d 30 20 29 20 72 65 74  f( pVar==0 ) ret
12c50 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
12c60 20 69 66 28 20 70 56 61 72 2d 3e 74 79 70 65 50   if( pVar->typeP
12c70 74 72 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65  tr ){.    Tcl_Se
12c80 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
12c90 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  p, Tcl_NewString
12ca0 4f 62 6a 28 70 56 61 72 2d 3e 74 79 70 65 50 74  Obj(pVar->typePt
12cb0 72 2d 3e 6e 61 6d 65 2c 20 2d 31 29 29 3b 0a 20  r->name, -1));. 
12cc0 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f   }.  return TCL_
12cd0 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  OK;.}../*.** Thi
12ce0 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20 65  s routine sets e
12cf0 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 67 6c  ntries in the gl
12d00 6f 62 61 6c 20 3a 3a 73 71 6c 69 74 65 5f 6f 70  obal ::sqlite_op
12d10 74 69 6f 6e 73 28 29 20 61 72 72 61 79 20 76 61  tions() array va
12d20 72 69 61 62 6c 65 0a 2a 2a 20 61 63 63 6f 72 64  riable.** accord
12d30 69 6e 67 20 74 6f 20 74 68 65 20 63 6f 6d 70 69  ing to the compi
12d40 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75 72  le-time configur
12d50 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74  ation of the dat
12d60 61 62 61 73 65 2e 20 20 54 65 73 74 0a 2a 2a 20  abase.  Test.** 
12d70 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20 74  procedures use t
12d80 68 69 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  his to determine
12d90 20 77 68 65 6e 20 74 65 73 74 73 20 73 68 6f 75   when tests shou
12da0 6c 64 20 62 65 20 6f 6d 69 74 74 65 64 2e 0a 2a  ld be omitted..*
12db0 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 65  /.static void se
12dc0 74 5f 6f 70 74 69 6f 6e 73 28 54 63 6c 5f 49 6e  t_options(Tcl_In
12dd0 74 65 72 70 20 2a 69 6e 74 65 72 70 29 7b 0a 23  terp *interp){.#
12de0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 33 32 42  ifdef SQLITE_32B
12df0 49 54 5f 52 4f 57 49 44 0a 20 20 54 63 6c 5f 53  IT_ROWID.  Tcl_S
12e00 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
12e10 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
12e20 20 22 72 6f 77 69 64 33 32 22 2c 20 22 31 22 2c   "rowid32", "1",
12e30 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
12e40 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
12e50 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
12e60 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
12e70 20 22 72 6f 77 69 64 33 32 22 2c 20 22 30 22 2c   "rowid32", "0",
12e80 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
12e90 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
12ea0 66 20 53 51 4c 49 54 45 5f 43 41 53 45 5f 53 45  f SQLITE_CASE_SE
12eb0 4e 53 49 54 49 56 45 5f 4c 49 4b 45 0a 20 20 54  NSITIVE_LIKE.  T
12ec0 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
12ed0 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
12ee0 6e 73 22 2c 22 63 61 73 65 73 65 6e 73 69 74 69  ns","casesensiti
12ef0 76 65 6c 69 6b 65 22 2c 22 31 22 2c 54 43 4c 5f  velike","1",TCL_
12f00 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
12f10 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
12f20 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
12f30 65 5f 6f 70 74 69 6f 6e 73 22 2c 22 63 61 73 65  e_options","case
12f40 73 65 6e 73 69 74 69 76 65 6c 69 6b 65 22 2c 22  sensitivelike","
12f50 30 22 2c 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  0",TCL_GLOBAL_ON
12f60 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
12f70 64 65 66 20 53 51 4c 49 54 45 5f 44 49 53 41 42  def SQLITE_DISAB
12f80 4c 45 5f 44 49 52 53 59 4e 43 0a 20 20 54 63 6c  LE_DIRSYNC.  Tcl
12f90 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
12fa0 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
12fb0 22 2c 20 22 64 69 72 73 79 6e 63 22 2c 20 22 30  ", "dirsync", "0
12fc0 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
12fd0 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
12fe0 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
12ff0 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
13000 22 2c 20 22 64 69 72 73 79 6e 63 22 2c 20 22 31  ", "dirsync", "1
13010 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
13020 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
13030 64 65 66 20 53 51 4c 49 54 45 5f 44 49 53 41 42  def SQLITE_DISAB
13040 4c 45 5f 4c 46 53 0a 20 20 54 63 6c 5f 53 65 74  LE_LFS.  Tcl_Set
13050 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
13060 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
13070 6c 66 73 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  lfs", "0", TCL_G
13080 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
13090 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
130a0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
130b0 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 6c 66 73 22  _options", "lfs"
130c0 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
130d0 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
130e0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
130f0 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20  MIT_ALTERTABLE. 
13100 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
13110 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
13120 69 6f 6e 73 22 2c 20 22 61 6c 74 65 72 74 61 62  ions", "altertab
13130 6c 65 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  le", "0", TCL_GL
13140 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
13150 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
13160 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
13170 6f 70 74 69 6f 6e 73 22 2c 20 22 61 6c 74 65 72  options", "alter
13180 74 61 62 6c 65 22 2c 20 22 31 22 2c 20 54 43 4c  table", "1", TCL
13190 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
131a0 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
131b0 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a  LITE_OMIT_ANALYZ
131c0 45 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  E.  Tcl_SetVar2(
131d0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
131e0 6f 70 74 69 6f 6e 73 22 2c 20 22 61 6e 61 6c 79  options", "analy
131f0 7a 65 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  ze", "0", TCL_GL
13200 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
13210 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
13220 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
13230 6f 70 74 69 6f 6e 73 22 2c 20 22 61 6e 61 6c 79  options", "analy
13240 7a 65 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  ze", "1", TCL_GL
13250 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
13260 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
13270 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41  E_OMIT_AUTHORIZA
13280 54 49 4f 4e 0a 20 20 54 63 6c 5f 53 65 74 56 61  TION.  Tcl_SetVa
13290 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
132a0 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 61 75  te_options", "au
132b0 74 68 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  th", "0", TCL_GL
132c0 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
132d0 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
132e0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
132f0 6f 70 74 69 6f 6e 73 22 2c 20 22 61 75 74 68 22  options", "auth"
13300 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
13310 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
13320 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
13330 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
13340 54 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  T.  Tcl_SetVar2(
13350 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
13360 6f 70 74 69 6f 6e 73 22 2c 20 22 61 75 74 6f 69  options", "autoi
13370 6e 63 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  nc", "0", TCL_GL
13380 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
13390 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
133a0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
133b0 6f 70 74 69 6f 6e 73 22 2c 20 22 61 75 74 6f 69  options", "autoi
133c0 6e 63 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  nc", "1", TCL_GL
133d0 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
133e0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
133f0 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55  E_OMIT_AUTOVACUU
13400 4d 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  M.  Tcl_SetVar2(
13410 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
13420 6f 70 74 69 6f 6e 73 22 2c 20 22 61 75 74 6f 76  options", "autov
13430 61 63 75 75 6d 22 2c 20 22 30 22 2c 20 54 43 4c  acuum", "0", TCL
13440 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
13450 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
13460 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
13470 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 61 75  te_options", "au
13480 74 6f 76 61 63 75 75 6d 22 2c 20 22 31 22 2c 20  tovacuum", "1", 
13490 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
134a0 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
134b0 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
134c0 55 4d 20 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  UM */.#if !defin
134d0 65 64 28 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ed(SQLITE_DEFAUL
134e0 54 5f 41 55 54 4f 56 41 43 55 55 4d 29 20 7c 7c  T_AUTOVACUUM) ||
134f0 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
13500 41 55 54 4f 56 41 43 55 55 4d 3d 3d 30 0a 20 20  AUTOVACUUM==0.  
13510 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
13520 72 70 2c 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  rp,"sqlite_optio
13530 6e 73 22 2c 22 64 65 66 61 75 6c 74 5f 61 75 74  ns","default_aut
13540 6f 76 61 63 75 75 6d 22 2c 22 30 22 2c 54 43 4c  ovacuum","0",TCL
13550 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
13560 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
13570 72 32 28 69 6e 74 65 72 70 2c 22 73 71 6c 69 74  r2(interp,"sqlit
13580 65 5f 6f 70 74 69 6f 6e 73 22 2c 22 64 65 66 61  e_options","defa
13590 75 6c 74 5f 61 75 74 6f 76 61 63 75 75 6d 22 2c  ult_autovacuum",
135a0 22 31 22 2c 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  "1",TCL_GLOBAL_O
135b0 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
135c0 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
135d0 5f 42 45 54 57 45 45 4e 5f 4f 50 54 49 4d 49 5a  _BETWEEN_OPTIMIZ
135e0 41 54 49 4f 4e 0a 20 20 54 63 6c 5f 53 65 74 56  ATION.  Tcl_SetV
135f0 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
13600 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 62  ite_options", "b
13610 65 74 77 65 65 6e 5f 6f 70 74 22 2c 20 22 30 22  etween_opt", "0"
13620 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
13630 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
13640 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
13650 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
13660 2c 20 22 62 65 74 77 65 65 6e 5f 6f 70 74 22 2c  , "between_opt",
13670 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
13680 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
13690 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
136a0 49 54 5f 42 4c 4f 42 5f 4c 49 54 45 52 41 4c 0a  IT_BLOB_LITERAL.
136b0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
136c0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
136d0 74 69 6f 6e 73 22 2c 20 22 62 6c 6f 62 6c 69 74  tions", "bloblit
136e0 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
136f0 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
13700 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
13710 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
13720 74 69 6f 6e 73 22 2c 20 22 62 6c 6f 62 6c 69 74  tions", "bloblit
13730 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
13740 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
13750 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
13760 4f 4d 49 54 5f 43 41 53 54 0a 20 20 54 63 6c 5f  OMIT_CAST.  Tcl_
13770 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
13780 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
13790 2c 20 22 63 61 73 74 22 2c 20 22 30 22 2c 20 54  , "cast", "0", T
137a0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
137b0 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
137c0 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
137d0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
137e0 63 61 73 74 22 2c 20 22 31 22 2c 20 54 43 4c 5f  cast", "1", TCL_
137f0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
13800 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
13810 49 54 45 5f 4f 4d 49 54 5f 43 48 45 43 4b 0a 20  ITE_OMIT_CHECK. 
13820 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
13830 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
13840 69 6f 6e 73 22 2c 20 22 63 68 65 63 6b 22 2c 20  ions", "check", 
13850 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
13860 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
13870 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
13880 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
13890 6e 73 22 2c 20 22 63 68 65 63 6b 22 2c 20 22 31  ns", "check", "1
138a0 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
138b0 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
138c0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
138d0 43 4f 4d 50 4c 45 54 45 0a 20 20 54 63 6c 5f 53  COMPLETE.  Tcl_S
138e0 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
138f0 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
13900 20 22 63 6f 6d 70 6c 65 74 65 22 2c 20 22 30 22   "complete", "0"
13910 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
13920 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
13930 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
13940 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
13950 2c 20 22 63 6f 6d 70 6c 65 74 65 22 2c 20 22 31  , "complete", "1
13960 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
13970 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
13980 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
13990 43 4f 4d 50 4f 55 4e 44 5f 53 45 4c 45 43 54 0a  COMPOUND_SELECT.
139a0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
139b0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
139c0 74 69 6f 6e 73 22 2c 20 22 63 6f 6d 70 6f 75 6e  tions", "compoun
139d0 64 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  d", "0", TCL_GLO
139e0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
139f0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
13a00 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
13a10 70 74 69 6f 6e 73 22 2c 20 22 63 6f 6d 70 6f 75  ptions", "compou
13a20 6e 64 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  nd", "1", TCL_GL
13a30 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
13a40 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
13a50 45 5f 4f 4d 49 54 5f 43 4f 4e 46 4c 49 43 54 5f  E_OMIT_CONFLICT_
13a60 43 4c 41 55 53 45 0a 20 20 54 63 6c 5f 53 65 74  CLAUSE.  Tcl_Set
13a70 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
13a80 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
13a90 63 6f 6e 66 6c 69 63 74 22 2c 20 22 30 22 2c 20  conflict", "0", 
13aa0 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
13ab0 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
13ac0 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
13ad0 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
13ae0 22 63 6f 6e 66 6c 69 63 74 22 2c 20 22 31 22 2c  "conflict", "1",
13af0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
13b00 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
13b10 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 41  f SQLITE_OMIT_DA
13b20 54 45 54 49 4d 45 5f 46 55 4e 43 53 0a 20 20 54  TETIME_FUNCS.  T
13b30 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
13b40 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
13b50 6e 73 22 2c 20 22 64 61 74 65 74 69 6d 65 22 2c  ns", "datetime",
13b60 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
13b70 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
13b80 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
13b90 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
13ba0 6f 6e 73 22 2c 20 22 64 61 74 65 74 69 6d 65 22  ons", "datetime"
13bb0 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
13bc0 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
13bd0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
13be0 4d 49 54 5f 44 49 53 4b 49 4f 0a 20 20 54 63 6c  MIT_DISKIO.  Tcl
13bf0 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
13c00 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
13c10 22 2c 20 22 64 69 73 6b 69 6f 22 2c 20 22 30 22  ", "diskio", "0"
13c20 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
13c30 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
13c40 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
13c50 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
13c60 2c 20 22 64 69 73 6b 69 6f 22 2c 20 22 31 22 2c  , "diskio", "1",
13c70 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
13c80 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
13c90 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
13ca0 50 4c 41 49 4e 0a 20 20 54 63 6c 5f 53 65 74 56  PLAIN.  Tcl_SetV
13cb0 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
13cc0 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 65  ite_options", "e
13cd0 78 70 6c 61 69 6e 22 2c 20 22 30 22 2c 20 54 43  xplain", "0", TC
13ce0 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
13cf0 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
13d00 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
13d10 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 65  ite_options", "e
13d20 78 70 6c 61 69 6e 22 2c 20 22 31 22 2c 20 54 43  xplain", "1", TC
13d30 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
13d40 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
13d50 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
13d60 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 54 63 6c 5f  ING_POINT.  Tcl_
13d70 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
13d80 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
13d90 2c 20 22 66 6c 6f 61 74 69 6e 67 70 6f 69 6e 74  , "floatingpoint
13da0 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
13db0 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
13dc0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
13dd0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
13de0 74 69 6f 6e 73 22 2c 20 22 66 6c 6f 61 74 69 6e  tions", "floatin
13df0 67 70 6f 69 6e 74 22 2c 20 22 31 22 2c 20 54 43  gpoint", "1", TC
13e00 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
13e10 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
13e20 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
13e30 47 4e 5f 4b 45 59 0a 20 20 54 63 6c 5f 53 65 74  GN_KEY.  Tcl_Set
13e40 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
13e50 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
13e60 66 6f 72 65 69 67 6e 6b 65 79 22 2c 20 22 30 22  foreignkey", "0"
13e70 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
13e80 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
13e90 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
13ea0 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
13eb0 2c 20 22 66 6f 72 65 69 67 6e 6b 65 79 22 2c 20  , "foreignkey", 
13ec0 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
13ed0 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
13ee0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
13ef0 54 5f 47 4c 4f 42 41 4c 52 45 43 4f 56 45 52 0a  T_GLOBALRECOVER.
13f00 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
13f10 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
13f20 74 69 6f 6e 73 22 2c 20 22 67 6c 6f 62 61 6c 72  tions", "globalr
13f30 65 63 6f 76 65 72 22 2c 20 22 30 22 2c 20 54 43  ecover", "0", TC
13f40 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
13f50 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
13f60 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
13f70 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 67  ite_options", "g
13f80 6c 6f 62 61 6c 72 65 63 6f 76 65 72 22 2c 20 22  lobalrecover", "
13f90 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
13fa0 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
13fb0 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
13fc0 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
13fd0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
13fe0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
13ff0 70 74 69 6f 6e 73 22 2c 20 22 69 6e 74 65 67 72  ptions", "integr
14000 69 74 79 63 6b 22 2c 20 22 30 22 2c 20 54 43 4c  ityck", "0", TCL
14010 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
14020 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
14030 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
14040 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 69 6e  te_options", "in
14050 74 65 67 72 69 74 79 63 6b 22 2c 20 22 31 22 2c  tegrityck", "1",
14060 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
14070 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
14080 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 49  f SQLITE_OMIT_LI
14090 4b 45 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 0a  KE_OPTIMIZATION.
140a0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
140b0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
140c0 74 69 6f 6e 73 22 2c 20 22 6c 69 6b 65 5f 6f 70  tions", "like_op
140d0 74 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  t", "0", TCL_GLO
140e0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
140f0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
14100 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
14110 70 74 69 6f 6e 73 22 2c 20 22 6c 69 6b 65 5f 6f  ptions", "like_o
14120 70 74 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  pt", "1", TCL_GL
14130 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
14140 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
14150 45 5f 4f 4d 49 54 5f 4d 45 4d 4f 52 59 44 42 0a  E_OMIT_MEMORYDB.
14160 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
14170 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
14180 74 69 6f 6e 73 22 2c 20 22 6d 65 6d 6f 72 79 64  tions", "memoryd
14190 62 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  b", "0", TCL_GLO
141a0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
141b0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
141c0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
141d0 70 74 69 6f 6e 73 22 2c 20 22 6d 65 6d 6f 72 79  ptions", "memory
141e0 64 62 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  db", "1", TCL_GL
141f0 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
14200 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
14210 45 5f 4f 4d 49 54 5f 4f 52 5f 4f 50 54 49 4d 49  E_OMIT_OR_OPTIMI
14220 5a 41 54 49 4f 4e 0a 20 20 54 63 6c 5f 53 65 74  ZATION.  Tcl_Set
14230 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
14240 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
14250 6f 72 5f 6f 70 74 22 2c 20 22 30 22 2c 20 54 43  or_opt", "0", TC
14260 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
14270 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
14280 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
14290 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 6f  ite_options", "o
142a0 72 5f 6f 70 74 22 2c 20 22 31 22 2c 20 54 43 4c  r_opt", "1", TCL
142b0 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
142c0 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
142d0 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
142e0 50 52 41 47 4d 41 53 0a 20 20 54 63 6c 5f 53 65  PRAGMAS.  Tcl_Se
142f0 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
14300 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
14310 22 70 61 67 65 72 5f 70 72 61 67 6d 61 73 22 2c  "pager_pragmas",
14320 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
14330 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
14340 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
14350 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
14360 6f 6e 73 22 2c 20 22 70 61 67 65 72 5f 70 72 61  ons", "pager_pra
14370 67 6d 61 73 22 2c 20 22 31 22 2c 20 54 43 4c 5f  gmas", "1", TCL_
14380 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
14390 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
143a0 49 54 45 5f 4f 4d 49 54 5f 50 41 52 53 45 52 0a  ITE_OMIT_PARSER.
143b0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
143c0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
143d0 74 69 6f 6e 73 22 2c 20 22 70 61 72 73 65 72 22  tions", "parser"
143e0 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
143f0 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
14400 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
14410 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
14420 69 6f 6e 73 22 2c 20 22 70 61 72 73 65 72 22 2c  ions", "parser",
14430 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
14440 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
14450 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
14460 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 29 20  TE_OMIT_PRAGMA) 
14470 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
14480 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47  E_OMIT_FLAG_PRAG
14490 4d 41 53 29 0a 20 20 54 63 6c 5f 53 65 74 56 61  MAS).  Tcl_SetVa
144a0 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
144b0 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 70 72  te_options", "pr
144c0 61 67 6d 61 22 2c 20 22 30 22 2c 20 54 43 4c 5f  agma", "0", TCL_
144d0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 20 20  GLOBAL_ONLY);.  
144e0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
144f0 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
14500 6f 6e 73 22 2c 20 22 69 6e 74 65 67 72 69 74 79  ons", "integrity
14510 63 6b 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  ck", "0", TCL_GL
14520 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
14530 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
14540 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
14550 6f 70 74 69 6f 6e 73 22 2c 20 22 70 72 61 67 6d  options", "pragm
14560 61 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  a", "1", TCL_GLO
14570 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
14580 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
14590 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
145a0 41 4c 4c 42 41 43 4b 0a 20 20 54 63 6c 5f 53 65  ALLBACK.  Tcl_Se
145b0 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
145c0 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
145d0 22 70 72 6f 67 72 65 73 73 22 2c 20 22 30 22 2c  "progress", "0",
145e0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
145f0 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
14600 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
14610 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
14620 20 22 70 72 6f 67 72 65 73 73 22 2c 20 22 31 22   "progress", "1"
14630 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
14640 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  Y);.#endif..#ifd
14650 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 52  ef SQLITE_OMIT_R
14660 45 49 4e 44 45 58 0a 20 20 54 63 6c 5f 53 65 74  EINDEX.  Tcl_Set
14670 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
14680 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
14690 72 65 69 6e 64 65 78 22 2c 20 22 30 22 2c 20 54  reindex", "0", T
146a0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
146b0 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
146c0 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
146d0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
146e0 72 65 69 6e 64 65 78 22 2c 20 22 31 22 2c 20 54  reindex", "1", T
146f0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
14700 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
14710 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45  SQLITE_OMIT_SCHE
14720 4d 41 5f 50 52 41 47 4d 41 53 0a 20 20 54 63 6c  MA_PRAGMAS.  Tcl
14730 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
14740 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
14750 22 2c 20 22 73 63 68 65 6d 61 5f 70 72 61 67 6d  ", "schema_pragm
14760 61 73 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  as", "0", TCL_GL
14770 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
14780 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
14790 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
147a0 6f 70 74 69 6f 6e 73 22 2c 20 22 73 63 68 65 6d  options", "schem
147b0 61 5f 70 72 61 67 6d 61 73 22 2c 20 22 31 22 2c  a_pragmas", "1",
147c0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
147d0 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
147e0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43  f SQLITE_OMIT_SC
147f0 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41  HEMA_VERSION_PRA
14800 47 4d 41 53 0a 20 20 54 63 6c 5f 53 65 74 56 61  GMAS.  Tcl_SetVa
14810 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
14820 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 73 63  te_options", "sc
14830 68 65 6d 61 5f 76 65 72 73 69 6f 6e 22 2c 20 22  hema_version", "
14840 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
14850 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
14860 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
14870 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
14880 73 22 2c 20 22 73 63 68 65 6d 61 5f 76 65 72 73  s", "schema_vers
14890 69 6f 6e 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47  ion", "1", TCL_G
148a0 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
148b0 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
148c0 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59  TE_OMIT_SUBQUERY
148d0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
148e0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
148f0 70 74 69 6f 6e 73 22 2c 20 22 73 75 62 71 75 65  ptions", "subque
14900 72 79 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  ry", "0", TCL_GL
14910 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
14920 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
14930 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
14940 6f 70 74 69 6f 6e 73 22 2c 20 22 73 75 62 71 75  options", "subqu
14950 65 72 79 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47  ery", "1", TCL_G
14960 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
14970 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
14980 54 45 5f 4f 4d 49 54 5f 54 43 4c 5f 56 41 52 49  TE_OMIT_TCL_VARI
14990 41 42 4c 45 0a 20 20 54 63 6c 5f 53 65 74 56 61  ABLE.  Tcl_SetVa
149a0 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
149b0 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 74 63  te_options", "tc
149c0 6c 76 61 72 22 2c 20 22 30 22 2c 20 54 43 4c 5f  lvar", "0", TCL_
149d0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
149e0 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
149f0 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
14a00 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 74 63 6c  e_options", "tcl
14a10 76 61 72 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47  var", "1", TCL_G
14a20 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
14a30 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  dif..#if defined
14a40 28 54 48 52 45 41 44 53 41 46 45 29 20 26 26 20  (THREADSAFE) && 
14a50 54 48 52 45 41 44 53 41 46 45 0a 20 20 54 63 6c  THREADSAFE.  Tcl
14a60 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
14a70 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
14a80 22 2c 20 22 74 68 72 65 61 64 73 61 66 65 22 2c  ", "threadsafe",
14a90 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
14aa0 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
14ab0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
14ac0 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
14ad0 6f 6e 73 22 2c 20 22 74 68 72 65 61 64 73 61 66  ons", "threadsaf
14ae0 65 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  e", "0", TCL_GLO
14af0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
14b00 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
14b10 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 20 20 54 63  _OMIT_TRACE.  Tc
14b20 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
14b30 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
14b40 73 22 2c 20 22 74 72 61 63 65 22 2c 20 22 30 22  s", "trace", "0"
14b50 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
14b60 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
14b70 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
14b80 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
14b90 2c 20 22 74 72 61 63 65 22 2c 20 22 31 22 2c 20  , "trace", "1", 
14ba0 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
14bb0 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
14bc0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49   SQLITE_OMIT_TRI
14bd0 47 47 45 52 0a 20 20 54 63 6c 5f 53 65 74 56 61  GGER.  Tcl_SetVa
14be0 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
14bf0 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 74 72  te_options", "tr
14c00 69 67 67 65 72 22 2c 20 22 30 22 2c 20 54 43 4c  igger", "0", TCL
14c10 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
14c20 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
14c30 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
14c40 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 74 72  te_options", "tr
14c50 69 67 67 65 72 22 2c 20 22 31 22 2c 20 54 43 4c  igger", "1", TCL
14c60 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
14c70 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
14c80 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42  LITE_OMIT_TEMPDB
14c90 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
14ca0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
14cb0 70 74 69 6f 6e 73 22 2c 20 22 74 65 6d 70 64 62  ptions", "tempdb
14cc0 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
14cd0 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
14ce0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
14cf0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
14d00 74 69 6f 6e 73 22 2c 20 22 74 65 6d 70 64 62 22  tions", "tempdb"
14d10 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
14d20 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
14d30 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
14d40 4d 49 54 5f 55 54 46 31 36 0a 20 20 54 63 6c 5f  MIT_UTF16.  Tcl_
14d50 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
14d60 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
14d70 2c 20 22 75 74 66 31 36 22 2c 20 22 30 22 2c 20  , "utf16", "0", 
14d80 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
14d90 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
14da0 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
14db0 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
14dc0 22 75 74 66 31 36 22 2c 20 22 31 22 2c 20 54 43  "utf16", "1", TC
14dd0 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
14de0 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
14df0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55  QLITE_OMIT_VACUU
14e00 4d 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  M.  Tcl_SetVar2(
14e10 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
14e20 6f 70 74 69 6f 6e 73 22 2c 20 22 76 61 63 75 75  options", "vacuu
14e30 6d 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  m", "0", TCL_GLO
14e40 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
14e50 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
14e60 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
14e70 70 74 69 6f 6e 73 22 2c 20 22 76 61 63 75 75 6d  ptions", "vacuum
14e80 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
14e90 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
14ea0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
14eb0 4f 4d 49 54 5f 56 49 45 57 0a 20 20 54 63 6c 5f  OMIT_VIEW.  Tcl_
14ec0 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
14ed0 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
14ee0 2c 20 22 76 69 65 77 22 2c 20 22 30 22 2c 20 54  , "view", "0", T
14ef0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
14f00 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
14f10 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
14f20 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
14f30 76 69 65 77 22 2c 20 22 31 22 2c 20 54 43 4c 5f  view", "1", TCL_
14f40 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
14f50 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65  ndif.}../*.** Re
14f60 67 69 73 74 65 72 20 63 6f 6d 6d 61 6e 64 73 20  gister commands 
14f70 77 69 74 68 20 74 68 65 20 54 43 4c 20 69 6e 74  with the TCL int
14f80 65 72 70 72 65 74 65 72 2e 0a 2a 2f 0a 69 6e 74  erpreter..*/.int
14f90 20 53 71 6c 69 74 65 74 65 73 74 31 5f 49 6e 69   Sqlitetest1_Ini
14fa0 74 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e  t(Tcl_Interp *in
14fb0 74 65 72 70 29 7b 0a 20 20 65 78 74 65 72 6e 20  terp){.  extern 
14fc0 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 65 61 72  int sqlite3_sear
14fd0 63 68 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65  ch_count;.  exte
14fe0 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 69  rn int sqlite3_i
14ff0 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3b 0a  nterrupt_count;.
15000 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c    extern int sql
15010 69 74 65 33 5f 6f 70 65 6e 5f 66 69 6c 65 5f 63  ite3_open_file_c
15020 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20 69  ount;.  extern i
15030 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f  nt sqlite3_sort_
15040 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20  count;.  extern 
15050 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 75 72 72  int sqlite3_curr
15060 65 6e 74 5f 74 69 6d 65 3b 0a 20 20 73 74 61 74  ent_time;.  stat
15070 69 63 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20  ic struct {.    
15080 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20   char *zName;.  
15090 20 20 20 54 63 6c 5f 43 6d 64 50 72 6f 63 20 2a     Tcl_CmdProc *
150a0 78 50 72 6f 63 3b 0a 20 20 7d 20 61 43 6d 64 5b  xProc;.  } aCmd[
150b0 5d 20 3d 20 7b 0a 20 20 20 20 20 7b 20 22 73 71  ] = {.     { "sq
150c0 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e  lite3_mprintf_in
150d0 74 22 2c 20 20 20 20 20 20 20 20 20 20 20 28 54  t",           (T
150e0 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69  cl_CmdProc*)sqli
150f0 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 20  te3_mprintf_int 
15100 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71     },.     { "sq
15110 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e  lite3_mprintf_in
15120 74 36 34 22 2c 20 20 20 20 20 20 20 20 20 28 54  t64",         (T
15130 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69  cl_CmdProc*)sqli
15140 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 36  te3_mprintf_int6
15150 34 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  4  },.     { "sq
15160 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74  lite3_mprintf_st
15170 72 22 2c 20 20 20 20 20 20 20 20 20 20 20 28 54  r",           (T
15180 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69  cl_CmdProc*)sqli
15190 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72 20  te3_mprintf_str 
151a0 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71     },.     { "sq
151b0 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74  lite3_mprintf_st
151c0 72 6f 6e 6c 79 22 2c 20 20 20 20 20 20 20 28 54  ronly",       (T
151d0 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69  cl_CmdProc*)sqli
151e0 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72 6f  te3_mprintf_stro
151f0 6e 6c 79 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  nly},.     { "sq
15200 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 64 6f  lite3_mprintf_do
15210 75 62 6c 65 22 2c 20 20 20 20 20 20 20 20 28 54  uble",        (T
15220 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69  cl_CmdProc*)sqli
15230 74 65 33 5f 6d 70 72 69 6e 74 66 5f 64 6f 75 62  te3_mprintf_doub
15240 6c 65 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  le },.     { "sq
15250 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 63  lite3_mprintf_sc
15260 61 6c 65 64 22 2c 20 20 20 20 20 20 20 20 28 54  aled",        (T
15270 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69  cl_CmdProc*)sqli
15280 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 63 61 6c  te3_mprintf_scal
15290 65 64 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  ed },.     { "sq
152a0 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 68 65  lite3_mprintf_he
152b0 78 64 6f 75 62 6c 65 22 2c 20 20 20 28 54 63 6c  xdouble",   (Tcl
152c0 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65  _CmdProc*)sqlite
152d0 33 5f 6d 70 72 69 6e 74 66 5f 68 65 78 64 6f 75  3_mprintf_hexdou
152e0 62 6c 65 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  ble},.     { "sq
152f0 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 7a 5f  lite3_mprintf_z_
15300 74 65 73 74 22 2c 20 20 20 20 20 20 20 20 28 54  test",        (T
15310 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74  cl_CmdProc*)test
15320 5f 6d 70 72 69 6e 74 66 5f 7a 20 20 20 20 20 20  _mprintf_z      
15330 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c    },.     { "sql
15340 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74  ite3_last_insert
15350 5f 72 6f 77 69 64 22 2c 20 20 20 20 20 28 54 63  _rowid",     (Tc
15360 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f  l_CmdProc*)test_
15370 6c 61 73 74 5f 72 6f 77 69 64 20 20 20 20 20 20  last_rowid      
15380 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
15390 74 65 33 5f 65 78 65 63 5f 70 72 69 6e 74 66 22  te3_exec_printf"
153a0 2c 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c  ,           (Tcl
153b0 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 65  _CmdProc*)test_e
153c0 78 65 63 5f 70 72 69 6e 74 66 20 20 20 20 20 20  xec_printf      
153d0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
153e0 65 33 5f 67 65 74 5f 74 61 62 6c 65 5f 70 72 69  e3_get_table_pri
153f0 6e 74 66 22 2c 20 20 20 20 20 20 28 54 63 6c 5f  ntf",      (Tcl_
15400 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 67 65  CmdProc*)test_ge
15410 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74 66 20 7d  t_table_printf }
15420 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
15430 33 5f 63 6c 6f 73 65 22 2c 20 20 20 20 20 20 20  3_close",       
15440 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43            (Tcl_C
15450 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 5f 74  mdProc*)sqlite_t
15460 65 73 74 5f 63 6c 6f 73 65 20 20 20 20 20 7d 2c  est_close     },
15470 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
15480 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
15490 22 2c 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d  ",       (Tcl_Cm
154a0 64 50 72 6f 63 2a 29 74 65 73 74 5f 63 72 65 61  dProc*)test_crea
154b0 74 65 5f 66 75 6e 63 74 69 6f 6e 20 20 7d 2c 0a  te_function  },.
154c0 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
154d0 63 72 65 61 74 65 5f 61 67 67 72 65 67 61 74 65  create_aggregate
154e0 22 2c 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64  ",      (Tcl_Cmd
154f0 50 72 6f 63 2a 29 74 65 73 74 5f 63 72 65 61 74  Proc*)test_creat
15500 65 5f 61 67 67 72 65 67 61 74 65 20 7d 2c 0a 20  e_aggregate },. 
15510 20 20 20 20 7b 20 22 73 71 6c 69 74 65 5f 72 65      { "sqlite_re
15520 67 69 73 74 65 72 5f 74 65 73 74 5f 66 75 6e 63  gister_test_func
15530 74 69 6f 6e 22 2c 20 28 54 63 6c 5f 43 6d 64 50  tion", (Tcl_CmdP
15540 72 6f 63 2a 29 74 65 73 74 5f 72 65 67 69 73 74  roc*)test_regist
15550 65 72 5f 66 75 6e 63 20 20 20 20 7d 2c 0a 20 20  er_func    },.  
15560 20 20 20 7b 20 22 73 71 6c 69 74 65 5f 61 62 6f     { "sqlite_abo
15570 72 74 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  rt",            
15580 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72        (Tcl_CmdPr
15590 6f 63 2a 29 73 71 6c 69 74 65 5f 61 62 6f 72 74  oc*)sqlite_abort
155a0 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 23 69 66            },.#if
155b0 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45  def SQLITE_MEMDE
155c0 42 55 47 0a 20 20 20 20 20 7b 20 22 73 71 6c 69  BUG.     { "sqli
155d0 74 65 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 22 2c  te_malloc_fail",
155e0 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c              (Tcl
155f0 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65  _CmdProc*)sqlite
15600 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 20 20 20 20  _malloc_fail    
15610 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
15620 65 5f 6d 61 6c 6c 6f 63 5f 73 74 61 74 22 2c 20  e_malloc_stat", 
15630 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f             (Tcl_
15640 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 5f  CmdProc*)sqlite_
15650 6d 61 6c 6c 6f 63 5f 73 74 61 74 20 20 20 20 7d  malloc_stat    }
15660 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
15670 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74 61 6e 64  _malloc_outstand
15680 69 6e 67 22 2c 20 20 20 28 54 63 6c 5f 43 6d 64  ing",   (Tcl_Cmd
15690 50 72 6f 63 2a 29 73 71 6c 69 74 65 5f 6d 61 6c  Proc*)sqlite_mal
156a0 6c 6f 63 5f 6f 75 74 73 74 61 6e 64 69 6e 67 7d  loc_outstanding}
156b0 2c 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 7b 20  ,.#endif.     { 
156c0 22 73 71 6c 69 74 65 5f 62 69 6e 64 22 2c 20 20  "sqlite_bind",  
156d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156e0 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74   (Tcl_CmdProc*)t
156f0 65 73 74 5f 62 69 6e 64 20 20 20 20 20 20 20 20  est_bind        
15700 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22       },.     { "
15710 62 72 65 61 6b 70 6f 69 6e 74 22 2c 20 20 20 20  breakpoint",    
15720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15730 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65  (Tcl_CmdProc*)te
15740 73 74 5f 62 72 65 61 6b 70 6f 69 6e 74 20 20 20  st_breakpoint   
15750 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73      },.     { "s
15760 71 6c 69 74 65 33 5f 6b 65 79 22 2c 20 20 20 20  qlite3_key",    
15770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
15780 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73  Tcl_CmdProc*)tes
15790 74 5f 6b 65 79 20 20 20 20 20 20 20 20 20 20 20  t_key           
157a0 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71     },.     { "sq
157b0 6c 69 74 65 33 5f 72 65 6b 65 79 22 2c 20 20 20  lite3_rekey",   
157c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54                (T
157d0 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74  cl_CmdProc*)test
157e0 5f 72 65 6b 65 79 20 20 20 20 20 20 20 20 20 20  _rekey          
157f0 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c    },.     { "sql
15800 69 74 65 5f 73 65 74 5f 6d 61 67 69 63 22 2c 20  ite_set_magic", 
15810 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63               (Tc
15820 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74  l_CmdProc*)sqlit
15830 65 5f 73 65 74 5f 6d 61 67 69 63 20 20 20 20 20  e_set_magic     
15840 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
15850 74 65 33 5f 69 6e 74 65 72 72 75 70 74 22 2c 20  te3_interrupt", 
15860 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c              (Tcl
15870 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 69  _CmdProc*)test_i
15880 6e 74 65 72 72 75 70 74 20 20 20 20 20 20 20 20  nterrupt        
15890 7d 2c 0a 23 69 66 20 30 0a 20 20 20 20 20 7b 20  },.#if 0.     { 
158a0 22 73 71 6c 69 74 65 33 5f 73 6c 65 65 70 22 2c  "sqlite3_sleep",
158b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158c0 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74   (Tcl_CmdProc*)t
158d0 65 73 74 5f 73 6c 65 65 70 20 20 20 20 20 20 20  est_sleep       
158e0 20 20 20 20 20 7d 2c 0a 23 65 6e 64 69 66 0a 20       },.#endif. 
158f0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 5f 64 65      { "sqlite_de
15900 6c 65 74 65 5f 66 75 6e 63 74 69 6f 6e 22 2c 20  lete_function", 
15910 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
15920 72 6f 63 2a 29 64 65 6c 65 74 65 5f 66 75 6e 63  roc*)delete_func
15930 74 69 6f 6e 20 20 20 20 20 20 20 7d 2c 0a 20 20  tion       },.  
15940 20 20 20 7b 20 22 73 71 6c 69 74 65 5f 64 65 6c     { "sqlite_del
15950 65 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 22 2c 20  ete_collation", 
15960 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72        (Tcl_CmdPr
15970 6f 63 2a 29 64 65 6c 65 74 65 5f 63 6f 6c 6c 61  oc*)delete_colla
15980 74 69 6f 6e 20 20 20 20 20 20 7d 2c 0a 20 20 20  tion      },.   
15990 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 67 65 74    { "sqlite3_get
159a0 5f 61 75 74 6f 63 6f 6d 6d 69 74 22 2c 20 20 20  _autocommit",   
159b0 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f       (Tcl_CmdPro
159c0 63 2a 29 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69  c*)get_autocommi
159d0 74 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20  t        },.    
159e0 20 7b 20 22 73 71 6c 69 74 65 33 5f 73 74 61 63   { "sqlite3_stac
159f0 6b 5f 75 73 65 64 22 2c 20 20 20 20 20 20 20 20  k_used",        
15a00 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63      (Tcl_CmdProc
15a10 2a 29 74 65 73 74 5f 73 74 61 63 6b 5f 75 73 65  *)test_stack_use
15a20 64 20 20 20 20 20 20 20 7d 2c 0a 20 20 7d 3b 0a  d       },.  };.
15a30 20 20 73 74 61 74 69 63 20 73 74 72 75 63 74 20    static struct 
15a40 7b 0a 20 20 20 20 20 63 68 61 72 20 2a 7a 4e 61  {.     char *zNa
15a50 6d 65 3b 0a 20 20 20 20 20 54 63 6c 5f 4f 62 6a  me;.     Tcl_Obj
15a60 43 6d 64 50 72 6f 63 20 2a 78 50 72 6f 63 3b 0a  CmdProc *xProc;.
15a70 20 20 20 20 20 76 6f 69 64 20 2a 63 6c 69 65 6e       void *clien
15a80 74 44 61 74 61 3b 0a 20 20 7d 20 61 4f 62 6a 43  tData;.  } aObjC
15a90 6d 64 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 7b 20  md[] = {.     { 
15aa0 22 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e  "sqlite3_bind_in
15ab0 74 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  t",             
15ac0 20 74 65 73 74 5f 62 69 6e 64 5f 69 6e 74 2c 20   test_bind_int, 
15ad0 20 20 20 20 20 30 20 7d 2c 0a 20 20 20 20 20 7b       0 },.     {
15ae0 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69   "sqlite3_bind_i
15af0 6e 74 36 34 22 2c 20 20 20 20 20 20 20 20 20 20  nt64",          
15b00 20 20 74 65 73 74 5f 62 69 6e 64 5f 69 6e 74 36    test_bind_int6
15b10 34 2c 20 20 20 20 30 20 7d 2c 0a 20 20 20 20 20  4,    0 },.     
15b20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  { "sqlite3_bind_
15b30 64 6f 75 62 6c 65 22 2c 20 20 20 20 20 20 20 20  double",        
15b40 20 20 20 74 65 73 74 5f 62 69 6e 64 5f 64 6f 75     test_bind_dou
15b50 62 6c 65 2c 20 20 20 30 20 7d 2c 0a 20 20 20 20  ble,   0 },.    
15b60 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64   { "sqlite3_bind
15b70 5f 6e 75 6c 6c 22 2c 20 20 20 20 20 20 20 20 20  _null",         
15b80 20 20 20 20 74 65 73 74 5f 62 69 6e 64 5f 6e 75      test_bind_nu
15b90 6c 6c 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20  ll     ,0 },.   
15ba0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e    { "sqlite3_bin
15bb0 64 5f 74 65 78 74 22 2c 20 20 20 20 20 20 20 20  d_text",        
15bc0 20 20 20 20 20 74 65 73 74 5f 62 69 6e 64 5f 74       test_bind_t
15bd0 65 78 74 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20  ext     ,0 },.  
15be0 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69     { "sqlite3_bi
15bf0 6e 64 5f 74 65 78 74 31 36 22 2c 20 20 20 20 20  nd_text16",     
15c00 20 20 20 20 20 20 74 65 73 74 5f 62 69 6e 64 5f        test_bind_
15c10 74 65 78 74 31 36 20 20 20 2c 30 20 7d 2c 0a 20  text16   ,0 },. 
15c20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62      { "sqlite3_b
15c30 69 6e 64 5f 62 6c 6f 62 22 2c 20 20 20 20 20 20  ind_blob",      
15c40 20 20 20 20 20 20 20 74 65 73 74 5f 62 69 6e 64         test_bind
15c50 5f 62 6c 6f 62 20 20 20 20 20 2c 30 20 7d 2c 0a  _blob     ,0 },.
15c60 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
15c70 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 63  bind_parameter_c
15c80 6f 75 6e 74 22 2c 20 20 74 65 73 74 5f 62 69 6e  ount",  test_bin
15c90 64 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e  d_parameter_coun
15ca0 74 2c 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73  t, 0},.     { "s
15cb0 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
15cc0 6d 65 74 65 72 5f 6e 61 6d 65 22 2c 20 20 20 74  meter_name",   t
15cd0 65 73 74 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  est_bind_paramet
15ce0 65 72 5f 6e 61 6d 65 2c 20 20 30 7d 2c 0a 20 20  er_name,  0},.  
15cf0 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69     { "sqlite3_bi
15d00 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64  nd_parameter_ind
15d10 65 78 22 2c 20 20 74 65 73 74 5f 62 69 6e 64 5f  ex",  test_bind_
15d20 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 2c  parameter_index,
15d30 20 30 7d 2c 0a 23 69 66 20 30 0a 20 20 20 20 20   0},.#if 0.     
15d40 7b 20 22 73 71 6c 69 74 65 33 5f 63 6c 65 61 72  { "sqlite3_clear
15d50 5f 62 69 6e 64 69 6e 67 73 22 2c 20 20 20 20 20  _bindings",     
15d60 20 20 20 74 65 73 74 5f 63 6c 65 61 72 5f 62 69     test_clear_bi
15d70 6e 64 69 6e 67 73 2c 20 30 7d 2c 0a 23 65 6e 64  ndings, 0},.#end
15d80 69 66 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  if.     { "sqlit
15d90 65 33 5f 65 72 72 63 6f 64 65 22 2c 20 20 20 20  e3_errcode",    
15da0 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f             test_
15db0 65 72 72 63 6f 64 65 20 20 20 20 20 20 20 2c 30  errcode       ,0
15dc0 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
15dd0 74 65 33 5f 65 72 72 6d 73 67 22 2c 20 20 20 20  te3_errmsg",    
15de0 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
15df0 5f 65 72 72 6d 73 67 20 20 20 20 20 20 20 20 2c  _errmsg        ,
15e00 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
15e10 69 74 65 33 5f 65 72 72 6d 73 67 31 36 22 2c 20  ite3_errmsg16", 
15e20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73               tes
15e30 74 5f 65 72 72 6d 73 67 31 36 20 20 20 20 20 20  t_errmsg16      
15e40 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  ,0 },.     { "sq
15e50 6c 69 74 65 33 5f 6f 70 65 6e 22 2c 20 20 20 20  lite3_open",    
15e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65                te
15e70 73 74 5f 6f 70 65 6e 20 20 20 20 20 20 20 20 20  st_open         
15e80 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73   ,0 },.     { "s
15e90 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 22 2c 20  qlite3_open16", 
15ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
15eb0 65 73 74 5f 6f 70 65 6e 31 36 20 20 20 20 20 20  est_open16      
15ec0 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22    ,0 },.     { "
15ed0 73 71 6c 69 74 65 33 5f 63 6f 6d 70 6c 65 74 65  sqlite3_complete
15ee0 31 36 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  16",            
15ef0 74 65 73 74 5f 63 6f 6d 70 6c 65 74 65 31 36 20  test_complete16 
15f00 20 20 20 2c 30 20 7d 2c 0a 0a 20 20 20 20 20 7b     ,0 },..     {
15f10 20 22 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   "sqlite3_prepar
15f20 65 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  e",             
15f30 20 20 74 65 73 74 5f 70 72 65 70 61 72 65 20 20    test_prepare  
15f40 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20       ,0 },.     
15f50 7b 20 22 73 71 6c 69 74 65 33 5f 70 72 65 70 61  { "sqlite3_prepa
15f60 72 65 31 36 22 2c 20 20 20 20 20 20 20 20 20 20  re16",          
15f70 20 20 20 74 65 73 74 5f 70 72 65 70 61 72 65 31     test_prepare1
15f80 36 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20  6     ,0 },.    
15f90 20 7b 20 22 73 71 6c 69 74 65 33 5f 66 69 6e 61   { "sqlite3_fina
15fa0 6c 69 7a 65 22 2c 20 20 20 20 20 20 20 20 20 20  lize",          
15fb0 20 20 20 20 74 65 73 74 5f 66 69 6e 61 6c 69 7a      test_finaliz
15fc0 65 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20  e      ,0 },.   
15fd0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 72 65 73    { "sqlite3_res
15fe0 65 74 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  et",            
15ff0 20 20 20 20 20 74 65 73 74 5f 72 65 73 65 74 20       test_reset 
16000 20 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20          ,0 },.  
16010 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 78     { "sqlite3_ex
16020 70 69 72 65 64 22 2c 20 20 20 20 20 20 20 20 20  pired",         
16030 20 20 20 20 20 20 74 65 73 74 5f 65 78 70 69 72        test_expir
16040 65 64 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20  ed       ,0 },. 
16050 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 74      { "sqlite3_t
16060 72 61 6e 73 66 65 72 5f 62 69 6e 64 69 6e 67 73  ransfer_bindings
16070 22 2c 20 20 20 20 20 74 65 73 74 5f 74 72 61 6e  ",     test_tran
16080 73 66 65 72 5f 62 69 6e 64 20 2c 30 20 7d 2c 0a  sfer_bind ,0 },.
16090 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
160a0 63 68 61 6e 67 65 73 22 2c 20 20 20 20 20 20 20  changes",       
160b0 20 20 20 20 20 20 20 20 74 65 73 74 5f 63 68 61          test_cha
160c0 6e 67 65 73 20 20 20 20 20 20 20 2c 30 20 7d 2c  nges       ,0 },
160d0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
160e0 5f 73 74 65 70 22 2c 20 20 20 20 20 20 20 20 20  _step",         
160f0 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 73 74           test_st
16100 65 70 20 20 20 20 20 20 20 20 20 20 2c 30 20 7d  ep          ,0 }
16110 2c 0a 0a 20 20 20 20 20 2f 2a 20 73 71 6c 69 74  ,..     /* sqlit
16120 65 33 5f 63 6f 6c 75 6d 6e 5f 2a 28 29 20 41 50  e3_column_*() AP
16130 49 20 2a 2f 0a 20 20 20 20 20 7b 20 22 73 71 6c  I */.     { "sql
16140 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e  ite3_column_coun
16150 74 22 2c 20 20 20 20 20 20 20 20 20 20 74 65 73  t",          tes
16160 74 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 20  t_column_count  
16170 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  ,0 },.     { "sq
16180 6c 69 74 65 33 5f 64 61 74 61 5f 63 6f 75 6e 74  lite3_data_count
16190 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 74 65  ",            te
161a0 73 74 5f 64 61 74 61 5f 63 6f 75 6e 74 20 20 20  st_data_count   
161b0 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73   ,0 },.     { "s
161c0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79  qlite3_column_ty
161d0 70 65 22 2c 20 20 20 20 20 20 20 20 20 20 20 74  pe",           t
161e0 65 73 74 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 20  est_column_type 
161f0 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22    ,0 },.     { "
16200 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62  sqlite3_column_b
16210 6c 6f 62 22 2c 20 20 20 20 20 20 20 20 20 20 20  lob",           
16220 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62  test_column_blob
16230 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20     ,0 },.     { 
16240 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  "sqlite3_column_
16250 64 6f 75 62 6c 65 22 2c 20 20 20 20 20 20 20 20  double",        
16260 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 64 6f 75   test_column_dou
16270 62 6c 65 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b  ble ,0 },.     {
16280 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   "sqlite3_column
16290 5f 69 6e 74 36 34 22 2c 20 20 20 20 20 20 20 20  _int64",        
162a0 20 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 69 6e    test_column_in
162b0 74 36 34 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20  t64  ,0 },.     
162c0 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  { "sqlite3_colum
162d0 6e 5f 74 65 78 74 22 2c 20 20 20 20 20 20 20 74  n_text",       t
162e0 65 73 74 5f 73 74 6d 74 5f 75 74 66 38 2c 20 20  est_stmt_utf8,  
162f0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
16300 65 78 74 20 20 20 20 20 20 7d 2c 0a 20 20 20 20  ext      },.    
16310 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75   { "sqlite3_colu
16320 6d 6e 5f 64 65 63 6c 74 79 70 65 22 2c 20 20 20  mn_decltype",   
16330 74 65 73 74 5f 73 74 6d 74 5f 75 74 66 38 2c 20  test_stmt_utf8, 
16340 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
16350 64 65 63 6c 74 79 70 65 20 20 7d 2c 0a 20 20 20  decltype  },.   
16360 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c    { "sqlite3_col
16370 75 6d 6e 5f 6e 61 6d 65 22 2c 20 20 20 20 20 20  umn_name",      
16380 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66 38 2c   test_stmt_utf8,
16390 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e    sqlite3_column
163a0 5f 6e 61 6d 65 20 20 20 20 20 20 7d 2c 0a 20 20  _name      },.  
163b0 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f     { "sqlite3_co
163c0 6c 75 6d 6e 5f 69 6e 74 22 2c 20 20 20 20 20 20  lumn_int",      
163d0 20 20 74 65 73 74 5f 73 74 6d 74 5f 69 6e 74 2c    test_stmt_int,
163e0 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d     sqlite3_colum
163f0 6e 5f 69 6e 74 20 20 20 20 20 20 20 7d 2c 0a 20  n_int       },. 
16400 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63      { "sqlite3_c
16410 6f 6c 75 6d 6e 5f 62 79 74 65 73 22 2c 20 20 20  olumn_bytes",   
16420 20 20 20 74 65 73 74 5f 73 74 6d 74 5f 69 6e 74     test_stmt_int
16430 2c 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ,   sqlite3_colu
16440 6d 6e 5f 62 79 74 65 73 20 20 20 20 20 7d 2c 0a  mn_bytes     },.
16450 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
16460 4d 49 54 5f 55 54 46 31 36 0a 20 20 20 20 20 7b  MIT_UTF16.     {
16470 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   "sqlite3_column
16480 5f 62 79 74 65 73 31 36 22 2c 20 20 20 20 74 65  _bytes16",    te
16490 73 74 5f 73 74 6d 74 5f 69 6e 74 2c 20 20 20 73  st_stmt_int,   s
164a0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79  qlite3_column_by
164b0 74 65 73 31 36 20 20 20 7d 2c 0a 20 20 20 20 20  tes16   },.     
164c0 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  { "sqlite3_colum
164d0 6e 5f 74 65 78 74 31 36 22 2c 20 20 20 20 20 74  n_text16",     t
164e0 65 73 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c 20  est_stmt_utf16, 
164f0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
16500 65 78 74 31 36 20 20 20 20 7d 2c 0a 20 20 20 20  ext16    },.    
16510 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75   { "sqlite3_colu
16520 6d 6e 5f 64 65 63 6c 74 79 70 65 31 36 22 2c 20  mn_decltype16", 
16530 74 65 73 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c  test_stmt_utf16,
16540 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
16550 64 65 63 6c 74 79 70 65 31 36 7d 2c 0a 20 20 20  decltype16},.   
16560 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c    { "sqlite3_col
16570 75 6d 6e 5f 6e 61 6d 65 31 36 22 2c 20 20 20 20  umn_name16",    
16580 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66 31 36   test_stmt_utf16
16590 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  , sqlite3_column
165a0 5f 6e 61 6d 65 31 36 20 20 20 20 7d 2c 0a 23 65  _name16    },.#e
165b0 6e 64 69 66 0a 20 20 20 20 20 7b 20 22 73 71 6c  ndif.     { "sql
165c0 69 74 65 33 5f 67 6c 6f 62 61 6c 5f 72 65 63 6f  ite3_global_reco
165d0 76 65 72 22 2c 20 20 20 20 74 65 73 74 5f 67 6c  ver",    test_gl
165e0 6f 62 61 6c 5f 72 65 63 6f 76 65 72 2c 20 30 20  obal_recover, 0 
165f0 20 20 7d 2c 0a 0a 20 20 20 20 20 2f 2a 20 46 75    },..     /* Fu
16600 6e 63 74 69 6f 6e 73 20 66 72 6f 6d 20 6f 73 2e  nctions from os.
16610 68 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  h */.#ifndef SQL
16620 49 54 45 5f 4f 4d 49 54 5f 44 49 53 4b 49 4f 0a  ITE_OMIT_DISKIO.
16630 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 4f       { "sqlite3O
16640 73 4f 70 65 6e 52 65 61 64 57 72 69 74 65 22 2c  sOpenReadWrite",
16650 74 65 73 74 5f 73 71 6c 69 74 65 33 4f 73 4f 70  test_sqlite3OsOp
16660 65 6e 52 65 61 64 57 72 69 74 65 2c 20 30 20 7d  enReadWrite, 0 }
16670 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
16680 33 4f 73 43 6c 6f 73 65 22 2c 20 20 20 20 20 20  3OsClose",      
16690 20 20 74 65 73 74 5f 73 71 6c 69 74 65 33 4f 73    test_sqlite3Os
166a0 43 6c 6f 73 65 2c 20 30 20 7d 2c 0a 20 20 20 20  Close, 0 },.    
166b0 20 7b 20 22 73 71 6c 69 74 65 33 4f 73 4c 6f 63   { "sqlite3OsLoc
166c0 6b 22 2c 20 20 20 20 20 20 20 20 20 74 65 73 74  k",         test
166d0 5f 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b 2c 20  _sqlite3OsLock, 
166e0 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
166f0 69 74 65 33 4f 73 54 65 6d 70 46 69 6c 65 4e 61  ite3OsTempFileNa
16700 6d 65 22 2c 20 74 65 73 74 5f 73 71 6c 69 74 65  me", test_sqlite
16710 33 4f 73 54 65 6d 70 46 69 6c 65 4e 61 6d 65 2c  3OsTempFileName,
16720 20 30 20 7d 2c 0a 20 20 20 0a 20 20 20 20 20 2f   0 },.   .     /
16730 2a 20 43 75 73 74 6f 6d 20 74 65 73 74 20 69 6e  * Custom test in
16740 74 65 72 66 61 63 65 73 20 2a 2f 0a 20 20 20 20  terfaces */.    
16750 20 7b 20 22 73 71 6c 69 74 65 33 4f 73 55 6e 6c   { "sqlite3OsUnl
16760 6f 63 6b 22 2c 20 20 20 20 20 20 20 20 20 74 65  ock",         te
16770 73 74 5f 73 71 6c 69 74 65 33 4f 73 55 6e 6c 6f  st_sqlite3OsUnlo
16780 63 6b 2c 20 30 20 20 20 20 7d 2c 0a 23 65 6e 64  ck, 0    },.#end
16790 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
167a0 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 20  E_OMIT_UTF16.   
167b0 20 20 7b 20 22 61 64 64 5f 74 65 73 74 5f 63 6f    { "add_test_co
167c0 6c 6c 61 74 65 22 2c 20 20 20 20 20 20 20 20 74  llate",        t
167d0 65 73 74 5f 63 6f 6c 6c 61 74 65 2c 20 30 20 20  est_collate, 0  
167e0 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
167f0 20 20 7b 20 22 61 64 64 5f 74 65 73 74 5f 63 6f    { "add_test_co
16800 6c 6c 61 74 65 5f 6e 65 65 64 65 64 22 2c 20 74  llate_needed", t
16810 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65 64  est_collate_need
16820 65 64 2c 20 30 20 20 20 20 20 7d 2c 0a 20 20 20  ed, 0     },.   
16830 20 20 7b 20 22 61 64 64 5f 74 65 73 74 5f 66 75    { "add_test_fu
16840 6e 63 74 69 6f 6e 22 2c 20 20 20 20 20 20 20 74  nction",       t
16850 65 73 74 5f 66 75 6e 63 74 69 6f 6e 2c 20 30 20  est_function, 0 
16860 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 23 65 6e            },.#en
16870 64 69 66 0a 20 20 20 20 20 7b 20 22 73 71 6c 69  dif.     { "sqli
16880 74 65 33 5f 74 65 73 74 5f 65 72 72 73 74 72 22  te3_test_errstr"
16890 2c 20 20 20 20 20 74 65 73 74 5f 65 72 72 73 74  ,     test_errst
168a0 72 2c 20 30 20 20 20 20 20 20 20 20 20 20 20 20  r, 0            
168b0 20 7d 2c 0a 20 20 20 20 20 7b 20 22 74 63 6c 5f   },.     { "tcl_
168c0 76 61 72 69 61 62 6c 65 5f 74 79 70 65 22 2c 20  variable_type", 
168d0 20 20 20 20 20 20 74 63 6c 5f 76 61 72 69 61 62        tcl_variab
168e0 6c 65 5f 74 79 70 65 2c 20 30 20 20 20 20 20 20  le_type, 0      
168f0 20 7d 2c 0a 20 20 7d 3b 0a 20 20 73 74 61 74 69   },.  };.  stati
16900 63 20 69 6e 74 20 62 69 74 6d 61 73 6b 5f 73 69  c int bitmask_si
16910 7a 65 20 3d 20 73 69 7a 65 6f 66 28 42 69 74 6d  ze = sizeof(Bitm
16920 61 73 6b 29 2a 38 3b 0a 20 20 69 6e 74 20 69 3b  ask)*8;.  int i;
16930 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
16940 6c 69 74 65 33 5f 6f 73 5f 74 72 61 63 65 3b 0a  lite3_os_trace;.
16950 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c    extern int sql
16960 69 74 65 33 5f 77 68 65 72 65 5f 74 72 61 63 65  ite3_where_trace
16970 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  ;.  extern int s
16980 71 6c 69 74 65 33 5f 73 79 6e 63 5f 63 6f 75 6e  qlite3_sync_coun
16990 74 2c 20 73 71 6c 69 74 65 33 5f 66 75 6c 6c 73  t, sqlite3_fulls
169a0 79 6e 63 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74  ync_count;.  ext
169b0 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ern int sqlite3_
169c0 6f 70 65 6e 74 65 6d 70 5f 63 6f 75 6e 74 3b 0a  opentemp_count;.
169d0 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c    extern int sql
169e0 69 74 65 33 5f 6d 65 6d 55 73 65 64 3b 0a 20 20  ite3_memUsed;.  
169f0 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74  extern int sqlit
16a00 65 33 5f 6d 61 6c 6c 6f 63 5f 69 64 3b 0a 20 20  e3_malloc_id;.  
16a10 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74  extern int sqlit
16a20 65 33 5f 6d 65 6d 4d 61 78 3b 0a 20 20 65 78 74  e3_memMax;.  ext
16a30 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ern int sqlite3_
16a40 6c 69 6b 65 5f 63 6f 75 6e 74 3b 0a 23 69 66 20  like_count;.#if 
16a50 4f 53 5f 57 49 4e 0a 20 20 65 78 74 65 72 6e 20  OS_WIN.  extern 
16a60 69 6e 74 20 73 71 6c 69 74 65 33 5f 6f 73 5f 74  int sqlite3_os_t
16a70 79 70 65 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64  ype;.#endif.#ifd
16a80 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
16a90 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c    extern int sql
16aa0 69 74 65 33 5f 76 64 62 65 5f 61 64 64 6f 70 5f  ite3_vdbe_addop_
16ab0 74 72 61 63 65 3b 0a 23 65 6e 64 69 66 0a 23 69  trace;.#endif.#i
16ac0 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
16ad0 0a 20 20 65 78 74 65 72 6e 20 63 68 61 72 20 73  .  extern char s
16ae0 71 6c 69 74 65 33 5f 71 75 65 72 79 5f 70 6c 61  qlite3_query_pla
16af0 6e 5b 5d 3b 0a 20 20 73 74 61 74 69 63 20 63 68  n[];.  static ch
16b00 61 72 20 2a 71 75 65 72 79 5f 70 6c 61 6e 20 3d  ar *query_plan =
16b10 20 73 71 6c 69 74 65 33 5f 71 75 65 72 79 5f 70   sqlite3_query_p
16b20 6c 61 6e 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 66  lan;.#endif..  f
16b30 6f 72 28 69 3d 30 3b 20 69 3c 73 69 7a 65 6f 66  or(i=0; i<sizeof
16b40 28 61 43 6d 64 29 2f 73 69 7a 65 6f 66 28 61 43  (aCmd)/sizeof(aC
16b50 6d 64 5b 30 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20  md[0]); i++){.  
16b60 20 20 54 63 6c 5f 43 72 65 61 74 65 43 6f 6d 6d    Tcl_CreateComm
16b70 61 6e 64 28 69 6e 74 65 72 70 2c 20 61 43 6d 64  and(interp, aCmd
16b80 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 61 43 6d 64 5b  [i].zName, aCmd[
16b90 69 5d 2e 78 50 72 6f 63 2c 20 30 2c 20 30 29 3b  i].xProc, 0, 0);
16ba0 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 3b 20  .  }.  for(i=0; 
16bb0 69 3c 73 69 7a 65 6f 66 28 61 4f 62 6a 43 6d 64  i<sizeof(aObjCmd
16bc0 29 2f 73 69 7a 65 6f 66 28 61 4f 62 6a 43 6d 64  )/sizeof(aObjCmd
16bd0 5b 30 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  [0]); i++){.    
16be0 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d  Tcl_CreateObjCom
16bf0 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 61 4f 62  mand(interp, aOb
16c00 6a 43 6d 64 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 0a  jCmd[i].zName, .
16c10 20 20 20 20 20 20 20 20 61 4f 62 6a 43 6d 64 5b          aObjCmd[
16c20 69 5d 2e 78 50 72 6f 63 2c 20 61 4f 62 6a 43 6d  i].xProc, aObjCm
16c30 64 5b 69 5d 2e 63 6c 69 65 6e 74 44 61 74 61 2c  d[i].clientData,
16c40 20 30 29 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 4c   0);.  }.  Tcl_L
16c50 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22  inkVar(interp, "
16c60 73 71 6c 69 74 65 5f 73 65 61 72 63 68 5f 63 6f  sqlite_search_co
16c70 75 6e 74 22 2c 20 0a 20 20 20 20 20 20 28 63 68  unt", .      (ch
16c80 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 73 65 61  ar*)&sqlite3_sea
16c90 72 63 68 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c  rch_count, TCL_L
16ca0 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f  INK_INT);.  Tcl_
16cb0 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20  LinkVar(interp, 
16cc0 22 73 71 6c 69 74 65 5f 73 6f 72 74 5f 63 6f 75  "sqlite_sort_cou
16cd0 6e 74 22 2c 20 0a 20 20 20 20 20 20 28 63 68 61  nt", .      (cha
16ce0 72 2a 29 26 73 71 6c 69 74 65 33 5f 73 6f 72 74  r*)&sqlite3_sort
16cf0 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b  _count, TCL_LINK
16d00 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e  _INT);.  Tcl_Lin
16d10 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71  kVar(interp, "sq
16d20 6c 69 74 65 5f 6c 69 6b 65 5f 63 6f 75 6e 74 22  lite_like_count"
16d30 2c 20 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29  , .      (char*)
16d40 26 73 71 6c 69 74 65 33 5f 6c 69 6b 65 5f 63 6f  &sqlite3_like_co
16d50 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e  unt, TCL_LINK_IN
16d60 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61  T);.  Tcl_LinkVa
16d70 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  r(interp, "sqlit
16d80 65 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  e_interrupt_coun
16d90 74 22 2c 20 0a 20 20 20 20 20 20 28 63 68 61 72  t", .      (char
16da0 2a 29 26 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  *)&sqlite3_inter
16db0 72 75 70 74 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f  rupt_count, TCL_
16dc0 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c  LINK_INT);.  Tcl
16dd0 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c  _LinkVar(interp,
16de0 20 22 73 71 6c 69 74 65 5f 6f 70 65 6e 5f 66 69   "sqlite_open_fi
16df0 6c 65 5f 63 6f 75 6e 74 22 2c 20 0a 20 20 20 20  le_count", .    
16e00 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65    (char*)&sqlite
16e10 33 5f 6f 70 65 6e 5f 66 69 6c 65 5f 63 6f 75 6e  3_open_file_coun
16e20 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29  t, TCL_LINK_INT)
16e30 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  ;.  Tcl_LinkVar(
16e40 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
16e50 63 75 72 72 65 6e 74 5f 74 69 6d 65 22 2c 20 0a  current_time", .
16e60 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71        (char*)&sq
16e70 6c 69 74 65 33 5f 63 75 72 72 65 6e 74 5f 74 69  lite3_current_ti
16e80 6d 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54  me, TCL_LINK_INT
16e90 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72  );.  Tcl_LinkVar
16ea0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
16eb0 5f 6f 73 5f 74 72 61 63 65 22 2c 0a 20 20 20 20  _os_trace",.    
16ec0 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65    (char*)&sqlite
16ed0 33 5f 6f 73 5f 74 72 61 63 65 2c 20 54 43 4c 5f  3_os_trace, TCL_
16ee0 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23 69 66 64 65  LINK_INT);.#ifde
16ef0 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  f SQLITE_MEMDEBU
16f00 47 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  G.  Tcl_LinkVar(
16f10 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
16f20 6d 61 6c 6c 6f 63 5f 69 64 22 2c 0a 20 20 20 20  malloc_id",.    
16f30 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65    (char*)&sqlite
16f40 33 5f 6d 61 6c 6c 6f 63 5f 69 64 2c 20 54 43 4c  3_malloc_id, TCL
16f50 5f 4c 49 4e 4b 5f 53 54 52 49 4e 47 29 3b 0a 23  _LINK_STRING);.#
16f60 65 6e 64 69 66 0a 23 69 66 20 4f 53 5f 57 49 4e  endif.#if OS_WIN
16f70 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
16f80 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
16f90 73 5f 74 79 70 65 22 2c 0a 20 20 20 20 20 20 28  s_type",.      (
16fa0 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6f  char*)&sqlite3_o
16fb0 73 5f 74 79 70 65 2c 20 54 43 4c 5f 4c 49 4e 4b  s_type, TCL_LINK
16fc0 5f 49 4e 54 29 3b 0a 23 65 6e 64 69 66 0a 23 69  _INT);.#endif.#i
16fd0 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
16fe0 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
16ff0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 71  nterp, "sqlite_q
17000 75 65 72 79 5f 70 6c 61 6e 22 2c 0a 20 20 20 20  uery_plan",.    
17010 20 20 28 63 68 61 72 2a 29 26 71 75 65 72 79 5f    (char*)&query_
17020 70 6c 61 6e 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 53  plan, TCL_LINK_S
17030 54 52 49 4e 47 7c 54 43 4c 5f 4c 49 4e 4b 5f 52  TRING|TCL_LINK_R
17040 45 41 44 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  EAD_ONLY);.#endi
17050 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
17060 44 45 42 55 47 0a 20 20 54 63 6c 5f 4c 69 6e 6b  DEBUG.  Tcl_Link
17070 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  Var(interp, "sql
17080 69 74 65 5f 61 64 64 6f 70 5f 74 72 61 63 65 22  ite_addop_trace"
17090 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26  ,.      (char*)&
170a0 73 71 6c 69 74 65 33 5f 76 64 62 65 5f 61 64 64  sqlite3_vdbe_add
170b0 6f 70 5f 74 72 61 63 65 2c 20 54 43 4c 5f 4c 49  op_trace, TCL_LI
170c0 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c  NK_INT);.  Tcl_L
170d0 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22  inkVar(interp, "
170e0 73 71 6c 69 74 65 5f 77 68 65 72 65 5f 74 72 61  sqlite_where_tra
170f0 63 65 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72  ce",.      (char
17100 2a 29 26 73 71 6c 69 74 65 33 5f 77 68 65 72 65  *)&sqlite3_where
17110 5f 74 72 61 63 65 2c 20 54 43 4c 5f 4c 49 4e 4b  _trace, TCL_LINK
17120 5f 49 4e 54 29 3b 0a 23 65 6e 64 69 66 0a 23 69  _INT);.#endif.#i
17130 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44  fdef SQLITE_MEMD
17140 45 42 55 47 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56  EBUG.  Tcl_LinkV
17150 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  ar(interp, "sqli
17160 74 65 5f 6d 65 6d 75 73 65 64 22 2c 0a 20 20 20  te_memused",.   
17170 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74     (char*)&sqlit
17180 65 33 5f 6d 65 6d 55 73 65 64 2c 20 54 43 4c 5f  e3_memUsed, TCL_
17190 4c 49 4e 4b 5f 49 4e 54 20 7c 20 54 43 4c 5f 4c  LINK_INT | TCL_L
171a0 49 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59 29 3b 0a  INK_READ_ONLY);.
171b0 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e    Tcl_LinkVar(in
171c0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6d 65  terp, "sqlite_me
171d0 6d 6d 61 78 22 2c 0a 20 20 20 20 20 20 28 63 68  mmax",.      (ch
171e0 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6d 65 6d  ar*)&sqlite3_mem
171f0 4d 61 78 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e  Max, TCL_LINK_IN
17200 54 20 7c 20 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41  T | TCL_LINK_REA
17210 44 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  D_ONLY);.#endif.
17220 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
17230 4d 49 54 5f 44 49 53 4b 49 4f 0a 20 20 54 63 6c  MIT_DISKIO.  Tcl
17240 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c  _LinkVar(interp,
17250 20 22 73 71 6c 69 74 65 5f 6f 70 65 6e 74 65 6d   "sqlite_opentem
17260 70 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20 20 20  p_count",.      
17270 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f  (char*)&sqlite3_
17280 6f 70 65 6e 74 65 6d 70 5f 63 6f 75 6e 74 2c 20  opentemp_count, 
17290 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23  TCL_LINK_INT);.#
172a0 65 6e 64 69 66 0a 20 20 54 63 6c 5f 4c 69 6e 6b  endif.  Tcl_Link
172b0 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  Var(interp, "sql
172c0 69 74 65 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f  ite_static_bind_
172d0 76 61 6c 75 65 22 2c 0a 20 20 20 20 20 20 28 63  value",.      (c
172e0 68 61 72 2a 29 26 73 71 6c 69 74 65 5f 73 74 61  har*)&sqlite_sta
172f0 74 69 63 5f 62 69 6e 64 5f 76 61 6c 75 65 2c 20  tic_bind_value, 
17300 54 43 4c 5f 4c 49 4e 4b 5f 53 54 52 49 4e 47 29  TCL_LINK_STRING)
17310 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  ;.  Tcl_LinkVar(
17320 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
17330 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 22 2c  temp_directory",
17340 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73  .      (char*)&s
17350 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65  qlite3_temp_dire
17360 63 74 6f 72 79 2c 20 54 43 4c 5f 4c 49 4e 4b 5f  ctory, TCL_LINK_
17370 53 54 52 49 4e 47 29 3b 0a 20 20 54 63 6c 5f 4c  STRING);.  Tcl_L
17380 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22  inkVar(interp, "
17390 62 69 74 6d 61 73 6b 5f 73 69 7a 65 22 2c 0a 20  bitmask_size",. 
173a0 20 20 20 20 20 28 63 68 61 72 2a 29 26 62 69 74       (char*)&bit
173b0 6d 61 73 6b 5f 73 69 7a 65 2c 20 54 43 4c 5f 4c  mask_size, TCL_L
173c0 49 4e 4b 5f 49 4e 54 7c 54 43 4c 5f 4c 49 4e 4b  INK_INT|TCL_LINK
173d0 5f 52 45 41 44 5f 4f 4e 4c 59 29 3b 0a 23 69 66  _READ_ONLY);.#if
173e0 20 4f 53 5f 55 4e 49 58 0a 20 20 54 63 6c 5f 4c   OS_UNIX.  Tcl_L
173f0 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22  inkVar(interp, "
17400 73 71 6c 69 74 65 5f 73 79 6e 63 5f 63 6f 75 6e  sqlite_sync_coun
17410 74 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a  t",.      (char*
17420 29 26 73 71 6c 69 74 65 33 5f 73 79 6e 63 5f 63  )&sqlite3_sync_c
17430 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49  ount, TCL_LINK_I
17440 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56  NT);.  Tcl_LinkV
17450 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  ar(interp, "sqli
17460 74 65 5f 66 75 6c 6c 73 79 6e 63 5f 63 6f 75 6e  te_fullsync_coun
17470 74 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a  t",.      (char*
17480 29 26 73 71 6c 69 74 65 33 5f 66 75 6c 6c 73 79  )&sqlite3_fullsy
17490 6e 63 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49  nc_count, TCL_LI
174a0 4e 4b 5f 49 4e 54 29 3b 0a 23 65 6e 64 69 66 20  NK_INT);.#endif 
174b0 2f 2a 20 4f 53 5f 55 4e 49 58 20 2a 2f 0a 20 20  /* OS_UNIX */.  
174c0 73 65 74 5f 6f 70 74 69 6f 6e 73 28 69 6e 74 65  set_options(inte
174d0 72 70 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  rp);.  return TC
174e0 4c 5f 4f 4b 3b 0a 7d 0a                          L_OK;.}.