/ Hex Artifact Content
Login

Artifact 0b4bf8ab9afb37f34a83c46f81de54adf519b23d:


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 31 20 32 30 30 35 2f 31 32  ,v 1.171 2005/12
0240: 2f 30 36 20 31 32 3a 35 33 3a 30 30 20 64 61 6e  /06 12:53:00 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 23 65 6e 64 69 66 0a 0a 2f 2a  OK;.}.#endif../*
6180: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
6190: 74 65 5f 61 62 6f 72 74 0a 2a 2a 0a 2a 2a 20 53  te_abort.**.** S
61a0: 68 75 74 64 6f 77 6e 20 74 68 65 20 70 72 6f 63  hutdown the proc
61b0: 65 73 73 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e  ess immediately.
61c0: 20 20 54 68 69 73 20 69 73 20 6e 6f 74 20 61 20    This is not a 
61d0: 63 6c 65 61 6e 20 73 68 75 74 64 6f 77 6e 2e 0a  clean shutdown..
61e0: 2a 2a 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ** This command 
61f0: 69 73 20 75 73 65 64 20 74 6f 20 74 65 73 74 20  is used to test 
6200: 74 68 65 20 72 65 63 6f 76 65 72 61 62 69 6c 69  the recoverabili
6210: 74 79 20 6f 66 20 61 20 64 61 74 61 62 61 73 65  ty of a database
6220: 20 69 6e 0a 2a 2a 20 74 68 65 20 65 76 65 6e 74   in.** the event
6230: 20 6f 66 20 61 20 70 72 6f 67 72 61 6d 20 63 72   of a program cr
6240: 61 73 68 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ash..*/.static i
6250: 6e 74 20 73 71 6c 69 74 65 5f 61 62 6f 72 74 28  nt sqlite_abort(
6260: 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64  .  void *NotUsed
6270: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
6280: 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
6290: 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
62a0: 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
62b0: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
62c0: 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20   int argc,      
62d0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
62e0: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
62f0: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20  /.  char **argv 
6300: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
6310: 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d  xt of each argum
6320: 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 61 73 73 65  ent */.){.  asse
6330: 72 74 28 20 69 6e 74 65 72 70 3d 3d 30 20 29 3b  rt( interp==0 );
6340: 20 20 20 2f 2a 20 54 68 69 73 20 77 69 6c 6c 20     /* This will 
6350: 61 6c 77 61 79 73 20 66 61 69 6c 20 2a 2f 0a 20  always fail */. 
6360: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
6370: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  }../*.** The fol
6380: 6c 6f 77 69 6e 67 20 72 6f 75 74 69 6e 65 20 69  lowing routine i
6390: 73 20 61 20 75 73 65 72 2d 64 65 66 69 6e 65 64  s a user-defined
63a0: 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 77 68   SQL function wh
63b0: 6f 73 65 20 70 75 72 70 6f 73 65 0a 2a 2a 20 69  ose purpose.** i
63c0: 73 20 74 6f 20 74 65 73 74 20 74 68 65 20 73 71  s to test the sq
63d0: 6c 69 74 65 5f 73 65 74 5f 72 65 73 75 6c 74 28  lite_set_result(
63e0: 29 20 41 50 49 2e 0a 2a 2f 0a 73 74 61 74 69 63  ) API..*/.static
63f0: 20 76 6f 69 64 20 74 65 73 74 46 75 6e 63 28 73   void testFunc(s
6400: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
6410: 63 6f 6e 74 65 78 74 2c 20 69 6e 74 20 61 72 67  context, int arg
6420: 63 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  c, sqlite3_value
6430: 20 2a 2a 61 72 67 76 29 7b 0a 20 20 77 68 69 6c   **argv){.  whil
6440: 65 28 20 61 72 67 63 3e 3d 32 20 29 7b 0a 20 20  e( argc>=2 ){.  
6450: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
6460: 72 67 30 20 3d 20 73 71 6c 69 74 65 33 5f 76 61  rg0 = sqlite3_va
6470: 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b 30 5d  lue_text(argv[0]
6480: 29 3b 0a 20 20 20 20 69 66 28 20 7a 41 72 67 30  );.    if( zArg0
6490: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 30 3d   ){.      if( 0=
64a0: 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28  =sqlite3StrICmp(
64b0: 7a 41 72 67 30 2c 20 22 69 6e 74 22 29 20 29 7b  zArg0, "int") ){
64c0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
64d0: 5f 72 65 73 75 6c 74 5f 69 6e 74 28 63 6f 6e 74  _result_int(cont
64e0: 65 78 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  ext, sqlite3_val
64f0: 75 65 5f 69 6e 74 28 61 72 67 76 5b 31 5d 29 29  ue_int(argv[1]))
6500: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
6510: 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  ( sqlite3StrICmp
6520: 28 7a 41 72 67 30 2c 22 69 6e 74 36 34 22 29 3d  (zArg0,"int64")=
6530: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  =0 ){.        sq
6540: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74  lite3_result_int
6550: 36 34 28 63 6f 6e 74 65 78 74 2c 20 73 71 6c 69  64(context, sqli
6560: 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 28  te3_value_int64(
6570: 61 72 67 76 5b 31 5d 29 29 3b 0a 20 20 20 20 20  argv[1]));.     
6580: 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74   }else if( sqlit
6590: 65 33 53 74 72 49 43 6d 70 28 7a 41 72 67 30 2c  e3StrICmp(zArg0,
65a0: 22 73 74 72 69 6e 67 22 29 3d 3d 30 20 29 7b 0a  "string")==0 ){.
65b0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
65c0: 72 65 73 75 6c 74 5f 74 65 78 74 28 63 6f 6e 74  result_text(cont
65d0: 65 78 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  ext, sqlite3_val
65e0: 75 65 5f 74 65 78 74 28 61 72 67 76 5b 31 5d 29  ue_text(argv[1])
65f0: 2c 20 2d 31 2c 0a 20 20 20 20 20 20 20 20 20 20  , -1,.          
6600: 20 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45    SQLITE_TRANSIE
6610: 4e 54 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  NT);.      }else
6620: 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49   if( sqlite3StrI
6630: 43 6d 70 28 7a 41 72 67 30 2c 22 64 6f 75 62 6c  Cmp(zArg0,"doubl
6640: 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  e")==0 ){.      
6650: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
6660: 5f 64 6f 75 62 6c 65 28 63 6f 6e 74 65 78 74 2c  _double(context,
6670: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64   sqlite3_value_d
6680: 6f 75 62 6c 65 28 61 72 67 76 5b 31 5d 29 29 3b  ouble(argv[1]));
6690: 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
66a0: 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
66b0: 7a 41 72 67 30 2c 22 6e 75 6c 6c 22 29 3d 3d 30  zArg0,"null")==0
66c0: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
66d0: 74 65 33 5f 72 65 73 75 6c 74 5f 6e 75 6c 6c 28  te3_result_null(
66e0: 63 6f 6e 74 65 78 74 29 3b 0a 20 20 20 20 20 20  context);.      
66f0: 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65  }else if( sqlite
6700: 33 53 74 72 49 43 6d 70 28 7a 41 72 67 30 2c 22  3StrICmp(zArg0,"
6710: 76 61 6c 75 65 22 29 3d 3d 30 20 29 7b 0a 20 20  value")==0 ){.  
6720: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65        sqlite3_re
6730: 73 75 6c 74 5f 76 61 6c 75 65 28 63 6f 6e 74 65  sult_value(conte
6740: 78 74 2c 20 61 72 67 76 5b 73 71 6c 69 74 65 33  xt, argv[sqlite3
6750: 5f 76 61 6c 75 65 5f 69 6e 74 28 61 72 67 76 5b  _value_int(argv[
6760: 31 5d 29 5d 29 3b 0a 20 20 20 20 20 20 7d 65 6c  1])]);.      }el
6770: 73 65 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f  se{.        goto
6780: 20 65 72 72 6f 72 5f 6f 75 74 3b 0a 20 20 20 20   error_out;.    
6790: 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
67a0: 20 20 20 20 20 67 6f 74 6f 20 65 72 72 6f 72 5f       goto error_
67b0: 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61  out;.    }.    a
67c0: 72 67 63 20 2d 3d 20 32 3b 0a 20 20 20 20 61 72  rgc -= 2;.    ar
67d0: 67 76 20 2b 3d 20 32 3b 0a 20 20 7d 0a 20 20 72  gv += 2;.  }.  r
67e0: 65 74 75 72 6e 3b 0a 0a 65 72 72 6f 72 5f 6f 75  eturn;..error_ou
67f0: 74 3a 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73  t:.  sqlite3_res
6800: 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78  ult_error(contex
6810: 74 2c 22 66 69 72 73 74 20 61 72 67 75 6d 65 6e  t,"first argumen
6820: 74 20 73 68 6f 75 6c 64 20 62 65 20 6f 6e 65 20  t should be one 
6830: 6f 66 3a 20 22 0a 20 20 20 20 20 20 22 69 6e 74  of: ".      "int
6840: 20 69 6e 74 36 34 20 73 74 72 69 6e 67 20 64 6f   int64 string do
6850: 75 62 6c 65 20 6e 75 6c 6c 20 76 61 6c 75 65 22  uble null value"
6860: 2c 20 2d 31 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  , -1);.}../*.** 
6870: 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 5f  Usage:   sqlite_
6880: 72 65 67 69 73 74 65 72 5f 74 65 73 74 5f 66 75  register_test_fu
6890: 6e 63 74 69 6f 6e 20 20 44 42 20 20 4e 41 4d 45  nction  DB  NAME
68a0: 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
68b0: 74 68 65 20 74 65 73 74 20 53 51 4c 20 66 75 6e  the test SQL fun
68c0: 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74  ction on the dat
68d0: 61 62 61 73 65 20 44 42 20 75 6e 64 65 72 20 74  abase DB under t
68e0: 68 65 20 6e 61 6d 65 20 4e 41 4d 45 2e 0a 2a 2f  he name NAME..*/
68f0: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
6900: 5f 72 65 67 69 73 74 65 72 5f 66 75 6e 63 28 0a  _register_func(.
6910: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
6920: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
6930: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
6940: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
6950: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
6960: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
6970: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
6980: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
6990: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
69a0: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
69b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
69c0: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
69d0: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74  nt */.){.  sqlit
69e0: 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63  e3 *db;.  int rc
69f0: 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 33 20  ;.  if( argc!=3 
6a00: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
6a10: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
6a20: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
6a30: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72  hould be \"", ar
6a40: 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 22  gv[0], .       "
6a50: 20 44 42 20 46 55 4e 43 54 49 4f 4e 2d 4e 41 4d   DB FUNCTION-NAM
6a60: 45 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  E", 0);.    retu
6a70: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
6a80: 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  }.  if( getDbPoi
6a90: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67  nter(interp, arg
6aa0: 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74  v[1], &db) ) ret
6ab0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
6ac0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72   rc = sqlite3_cr
6ad0: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62  eate_function(db
6ae0: 2c 20 61 72 67 76 5b 32 5d 2c 20 2d 31 2c 20 53  , argv[2], -1, S
6af0: 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 20 0a  QLITE_UTF8, 0, .
6b00: 20 20 20 20 20 20 74 65 73 74 46 75 6e 63 2c 20        testFunc, 
6b10: 30 2c 20 30 29 3b 0a 20 20 69 66 28 20 72 63 21  0, 0);.  if( rc!
6b20: 3d 30 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =0 ){.    Tcl_Ap
6b30: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
6b40: 70 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74 72  p, sqlite3ErrStr
6b50: 28 72 63 29 2c 20 30 29 3b 0a 20 20 20 20 72 65  (rc), 0);.    re
6b60: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
6b70: 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65    }.  if( sqlite
6b80: 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74  3TestErrCode(int
6b90: 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72  erp, db, rc) ) r
6ba0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
6bb0: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
6bc0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
6bd0: 3a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  :  sqlite3_final
6be0: 69 7a 65 20 20 53 54 4d 54 20 0a 2a 2a 0a 2a 2a  ize  STMT .**.**
6bf0: 20 46 69 6e 61 6c 69 7a 65 20 61 20 73 74 61 74   Finalize a stat
6c00: 65 6d 65 6e 74 20 68 61 6e 64 6c 65 2e 0a 2a 2f  ement handle..*/
6c10: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
6c20: 5f 66 69 6e 61 6c 69 7a 65 28 0a 20 20 76 6f 69  _finalize(.  voi
6c30: 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
6c40: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
6c50: 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
6c60: 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
6c70: 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73  ST objv[].){.  s
6c80: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
6c90: 6d 74 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  mt;.  int rc;.  
6ca0: 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 0a 20 20  sqlite3 *db;..  
6cb0: 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20  if( objc!=2 ){. 
6cc0: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
6cd0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
6ce0: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
6cf0: 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20  d be \"",.      
6d00: 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46    Tcl_GetStringF
6d10: 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20  romObj(objv[0], 
6d20: 30 29 2c 20 22 20 3c 53 54 4d 54 3e 22 2c 20 30  0), " <STMT>", 0
6d30: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
6d40: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
6d50: 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  if( getStmtPoint
6d60: 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
6d70: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
6d80: 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74  ), &pStmt) ) ret
6d90: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a  urn TCL_ERROR;..
6da0: 20 20 69 66 28 20 70 53 74 6d 74 20 29 7b 0a 20    if( pStmt ){. 
6db0: 20 20 20 64 62 20 3d 20 53 74 6d 74 54 6f 44 62     db = StmtToDb
6dc0: 28 70 53 74 6d 74 29 3b 0a 20 20 7d 0a 20 20 72  (pStmt);.  }.  r
6dd0: 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  c = sqlite3_fina
6de0: 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 54  lize(pStmt);.  T
6df0: 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74  cl_SetResult(int
6e00: 65 72 70 2c 20 28 63 68 61 72 20 2a 29 65 72 72  erp, (char *)err
6e10: 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f  orName(rc), TCL_
6e20: 53 54 41 54 49 43 29 3b 0a 20 20 69 66 28 20 64  STATIC);.  if( d
6e30: 62 20 26 26 20 73 71 6c 69 74 65 33 54 65 73 74  b && sqlite3Test
6e40: 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20  ErrCode(interp, 
6e50: 64 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e  db, rc) ) return
6e60: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65   TCL_ERROR;.  re
6e70: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
6e80: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
6e90: 6c 69 74 65 33 5f 72 65 73 65 74 20 20 53 54 4d  lite3_reset  STM
6ea0: 54 20 0a 2a 2a 0a 2a 2a 20 52 65 73 65 74 20 61  T .**.** Reset a
6eb0: 20 73 74 61 74 65 6d 65 6e 74 20 68 61 6e 64 6c   statement handl
6ec0: 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  e..*/.static int
6ed0: 20 74 65 73 74 5f 72 65 73 65 74 28 0a 20 20 76   test_reset(.  v
6ee0: 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
6ef0: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
6f00: 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
6f10: 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
6f20: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
6f30: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
6f40: 53 74 6d 74 3b 0a 20 20 69 6e 74 20 72 63 3b 0a  Stmt;.  int rc;.
6f50: 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29  .  if( objc!=2 )
6f60: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
6f70: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
6f80: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
6f90: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20  ould be \"",.   
6fa0: 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
6fb0: 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30  ngFromObj(objv[0
6fc0: 5d 2c 20 30 29 2c 20 22 20 3c 53 54 4d 54 3e 22  ], 0), " <STMT>"
6fd0: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
6fe0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
6ff0: 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f  .  if( getStmtPo
7000: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
7010: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
7020: 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20  [1]), &pStmt) ) 
7030: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
7040: 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  ;..  rc = sqlite
7050: 33 5f 72 65 73 65 74 28 70 53 74 6d 74 29 3b 0a  3_reset(pStmt);.
7060: 20 20 69 66 28 20 70 53 74 6d 74 20 26 26 20 73    if( pStmt && s
7070: 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64  qlite3TestErrCod
7080: 65 28 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f  e(interp, StmtTo
7090: 44 62 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29  Db(pStmt), rc) )
70a0: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  {.    return TCL
70b0: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 54 63  _ERROR;.  }.  Tc
70c0: 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65  l_SetResult(inte
70d0: 72 70 2c 20 28 63 68 61 72 20 2a 29 65 72 72 6f  rp, (char *)erro
70e0: 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53  rName(rc), TCL_S
70f0: 54 41 54 49 43 29 3b 0a 2f 2a 0a 20 20 69 66 28  TATIC);./*.  if(
7100: 20 72 63 20 29 7b 0a 20 20 20 20 72 65 74 75 72   rc ){.    retur
7110: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
7120: 0a 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  .*/.  return TCL
7130: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
7140: 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 65 78  age:  sqlite3_ex
7150: 70 69 72 65 64 20 53 54 4d 54 20 0a 2a 2a 0a 2a  pired STMT .**.*
7160: 2a 20 52 65 74 75 72 6e 20 54 52 55 45 20 69 66  * Return TRUE if
7170: 20 61 20 72 65 63 6f 6d 70 69 6c 61 74 69 6f 6e   a recompilation
7180: 20 6f 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e   of the statemen
7190: 74 20 69 73 20 72 65 63 6f 6d 6d 65 6e 64 65 64  t is recommended
71a0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
71b0: 74 65 73 74 5f 65 78 70 69 72 65 64 28 0a 20 20  test_expired(.  
71c0: 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
71d0: 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
71e0: 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
71f0: 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
7200: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
7210: 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
7220: 70 53 74 6d 74 3b 0a 20 20 69 66 28 20 6f 62 6a  pStmt;.  if( obj
7230: 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
7240: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
7250: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
7260: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
7270: 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47  ",.        Tcl_G
7280: 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28  etStringFromObj(
7290: 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 3c  objv[0], 0), " <
72a0: 53 54 4d 54 3e 22 2c 20 30 29 3b 0a 20 20 20 20  STMT>", 0);.    
72b0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
72c0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 53  ;.  }.  if( getS
72d0: 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tmtPointer(inter
72e0: 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
72f0: 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d  (objv[1]), &pStm
7300: 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  t) ) return TCL_
7310: 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74  ERROR;.  Tcl_Set
7320: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
7330: 2c 20 54 63 6c 5f 4e 65 77 42 6f 6f 6c 65 61 6e  , Tcl_NewBoolean
7340: 4f 62 6a 28 73 71 6c 69 74 65 33 5f 65 78 70 69  Obj(sqlite3_expi
7350: 72 65 64 28 70 53 74 6d 74 29 29 29 3b 0a 20 20  red(pStmt)));.  
7360: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
7370: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
7380: 73 71 6c 69 74 65 33 5f 74 72 61 6e 73 66 65 72  sqlite3_transfer
7390: 5f 62 69 6e 64 69 6e 67 73 20 46 52 4f 4d 53 54  _bindings FROMST
73a0: 4d 54 20 54 4f 53 54 4d 54 0a 2a 2a 0a 2a 2a 20  MT TOSTMT.**.** 
73b0: 54 72 61 6e 73 66 65 72 20 61 6c 6c 20 62 69 6e  Transfer all bin
73c0: 64 69 6e 67 73 20 66 72 6f 6d 20 46 52 4f 4d 53  dings from FROMS
73d0: 54 4d 54 20 6f 76 65 72 20 74 6f 20 54 4f 53 54  TMT over to TOST
73e0: 4d 54 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  MT.*/.static int
73f0: 20 74 65 73 74 5f 74 72 61 6e 73 66 65 72 5f 62   test_transfer_b
7400: 69 6e 64 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  ind(.  void * cl
7410: 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
7420: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
7430: 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
7440: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
7450: 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
7460: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 31 2c 20 2a  _stmt *pStmt1, *
7470: 70 53 74 6d 74 32 3b 0a 20 20 69 66 28 20 6f 62  pStmt2;.  if( ob
7480: 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=3 ){.    Tcl
7490: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
74a0: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
74b0: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
74c0: 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f  "",.        Tcl_
74d0: 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a  GetStringFromObj
74e0: 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20  (objv[0], 0), " 
74f0: 46 52 4f 4d 2d 53 54 4d 54 20 54 4f 2d 53 54 4d  FROM-STMT TO-STM
7500: 54 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  T", 0);.    retu
7510: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
7520: 7d 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  }.  if( getStmtP
7530: 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
7540: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
7550: 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 31 29 29  v[1]), &pStmt1))
7560: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
7570: 52 3b 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74  R;.  if( getStmt
7580: 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
7590: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
75a0: 6a 76 5b 32 5d 29 2c 20 26 70 53 74 6d 74 32 29  jv[2]), &pStmt2)
75b0: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
75c0: 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a  OR;.  Tcl_SetObj
75d0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 0a  Result(interp, .
75e0: 20 20 20 20 20 54 63 6c 5f 4e 65 77 49 6e 74 4f       Tcl_NewIntO
75f0: 62 6a 28 73 71 6c 69 74 65 33 5f 74 72 61 6e 73  bj(sqlite3_trans
7600: 66 65 72 5f 62 69 6e 64 69 6e 67 73 28 70 53 74  fer_bindings(pSt
7610: 6d 74 31 2c 70 53 74 6d 74 32 29 29 29 3b 0a 20  mt1,pStmt2)));. 
7620: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
7630: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
7640: 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73   sqlite3_changes
7650: 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e   DB.**.** Return
7660: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
7670: 68 61 6e 67 65 73 20 6d 61 64 65 20 74 6f 20 74  hanges made to t
7680: 68 65 20 64 61 74 61 62 61 73 65 20 62 79 20 74  he database by t
7690: 68 65 20 6c 61 73 74 20 53 51 4c 0a 2a 2a 20 65  he last SQL.** e
76a0: 78 65 63 75 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61  xecution..*/.sta
76b0: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63 68 61  tic int test_cha
76c0: 6e 67 65 73 28 0a 20 20 76 6f 69 64 20 2a 20 63  nges(.  void * c
76d0: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
76e0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
76f0: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
7700: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
7710: 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
7720: 33 20 2a 64 62 3b 0a 20 20 69 66 28 20 6f 62 6a  3 *db;.  if( obj
7730: 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
7740: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
7750: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
7760: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
7770: 22 2c 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65  ",.       Tcl_Ge
7780: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29  tString(objv[0])
7790: 2c 20 22 20 44 42 22 2c 20 30 29 3b 0a 20 20 20  , " DB", 0);.   
77a0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
77b0: 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74  R;.  }.  if( get
77c0: 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  DbPointer(interp
77d0: 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
77e0: 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29  objv[1]), &db) )
77f0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
7800: 52 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52  R;.  Tcl_SetObjR
7810: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
7820: 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69  l_NewIntObj(sqli
7830: 74 65 33 5f 63 68 61 6e 67 65 73 28 64 62 29 29  te3_changes(db))
7840: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
7850: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  OK;.}../*.** Thi
7860: 73 20 69 73 20 74 68 65 20 22 73 74 61 74 69 63  s is the "static
7870: 5f 62 69 6e 64 5f 76 61 6c 75 65 22 20 74 68 61  _bind_value" tha
7880: 74 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20  t variables are 
7890: 62 6f 75 6e 64 20 74 6f 20 77 68 65 6e 0a 2a 2a  bound to when.**
78a0: 20 74 68 65 20 46 4c 41 47 20 6f 70 74 69 6f 6e   the FLAG option
78b0: 20 6f 66 20 73 71 6c 69 74 65 33 5f 62 69 6e 64   of sqlite3_bind
78c0: 20 69 73 20 22 73 74 61 74 69 63 22 0a 2a 2f 0a   is "static".*/.
78d0: 73 74 61 74 69 63 20 63 68 61 72 20 2a 73 71 6c  static char *sql
78e0: 69 74 65 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f  ite_static_bind_
78f0: 76 61 6c 75 65 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a  value = 0;../*.*
7900: 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
7910: 33 5f 62 69 6e 64 20 20 56 4d 20 20 49 44 58 20  3_bind  VM  IDX 
7920: 20 56 41 4c 55 45 20 20 46 4c 41 47 53 0a 2a 2a   VALUE  FLAGS.**
7930: 0a 2a 2a 20 53 65 74 73 20 74 68 65 20 76 61 6c  .** Sets the val
7940: 75 65 20 6f 66 20 74 68 65 20 49 44 58 2d 74 68  ue of the IDX-th
7950: 20 6f 63 63 75 72 61 6e 63 65 20 6f 66 20 22 3f   occurance of "?
7960: 22 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61  " in the origina
7970: 6c 20 53 51 4c 0a 2a 2a 20 73 74 72 69 6e 67 2e  l SQL.** string.
7980: 20 20 56 41 4c 55 45 20 69 73 20 74 68 65 20 6e    VALUE is the n
7990: 65 77 20 76 61 6c 75 65 2e 20 20 49 66 20 46 4c  ew value.  If FL
79a0: 41 47 53 3d 3d 22 6e 75 6c 6c 22 20 74 68 65 6e  AGS=="null" then
79b0: 20 56 41 4c 55 45 20 69 73 0a 2a 2a 20 69 67 6e   VALUE is.** ign
79c0: 6f 72 65 64 20 61 6e 64 20 74 68 65 20 76 61 6c  ored and the val
79d0: 75 65 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c  ue is set to NUL
79e0: 4c 2e 20 20 49 66 20 46 4c 41 47 53 3d 3d 22 73  L.  If FLAGS=="s
79f0: 74 61 74 69 63 22 20 74 68 65 6e 0a 2a 2a 20 74  tatic" then.** t
7a00: 68 65 20 76 61 6c 75 65 20 69 73 20 73 65 74 20  he value is set 
7a10: 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
7a20: 61 20 73 74 61 74 69 63 20 76 61 72 69 61 62 6c  a static variabl
7a30: 65 20 6e 61 6d 65 64 0a 2a 2a 20 22 73 71 6c 69  e named.** "sqli
7a40: 74 65 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f 76  te_static_bind_v
7a50: 61 6c 75 65 22 2e 20 20 49 66 20 46 4c 41 47 53  alue".  If FLAGS
7a60: 3d 3d 22 6e 6f 72 6d 61 6c 22 20 74 68 65 6e 20  =="normal" then 
7a70: 61 20 63 6f 70 79 0a 2a 2a 20 6f 66 20 74 68 65  a copy.** of the
7a80: 20 56 41 4c 55 45 20 69 73 20 6d 61 64 65 2e 20   VALUE is made. 
7a90: 20 49 66 20 46 4c 41 47 53 3d 3d 22 62 6c 6f 62   If FLAGS=="blob
7aa0: 31 30 22 20 74 68 65 6e 20 61 20 56 41 4c 55 45  10" then a VALUE
7ab0: 20 69 73 20 69 67 6e 6f 72 65 64 0a 2a 2a 20 61   is ignored.** a
7ac0: 6e 20 61 20 31 30 2d 62 79 74 65 20 62 6c 6f 62  n a 10-byte blob
7ad0: 20 22 61 62 63 5c 30 30 30 78 79 7a 5c 30 30 30   "abc\000xyz\000
7ae0: 70 71 22 20 69 73 20 69 6e 73 65 72 74 65 64 2e  pq" is inserted.
7af0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
7b00: 65 73 74 5f 62 69 6e 64 28 0a 20 20 76 6f 69 64  est_bind(.  void
7b10: 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c   *NotUsed,.  Tcl
7b20: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
7b30: 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69      /* The TCL i
7b40: 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20  nterpreter that 
7b50: 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d  invoked this com
7b60: 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72  mand */.  int ar
7b70: 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  gc,             
7b80: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
7b90: 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61  guments */.  cha
7ba0: 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20  r **argv        
7bb0: 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65      /* Text of e
7bc0: 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  ach argument */.
7bd0: 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
7be0: 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20  t *pStmt;.  int 
7bf0: 72 63 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20  rc;.  int idx;. 
7c00: 20 69 66 28 20 61 72 67 63 21 3d 35 20 29 7b 0a   if( argc!=5 ){.
7c10: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
7c20: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
7c30: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
7c40: 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
7c50: 30 5d 2c 20 0a 20 20 20 20 20 20 20 22 20 56 4d  0], .       " VM
7c60: 20 49 44 58 20 56 41 4c 55 45 20 28 6e 75 6c 6c   IDX VALUE (null
7c70: 7c 73 74 61 74 69 63 7c 6e 6f 72 6d 61 6c 29 5c  |static|normal)\
7c80: 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  "", 0);.    retu
7c90: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
7ca0: 7d 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  }.  if( getStmtP
7cb0: 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61  ointer(interp, a
7cc0: 72 67 76 5b 31 5d 2c 20 26 70 53 74 6d 74 29 20  rgv[1], &pStmt) 
7cd0: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
7ce0: 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65  OR;.  if( Tcl_Ge
7cf0: 74 49 6e 74 28 69 6e 74 65 72 70 2c 20 61 72 67  tInt(interp, arg
7d00: 76 5b 32 5d 2c 20 26 69 64 78 29 20 29 20 72 65  v[2], &idx) ) re
7d10: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
7d20: 20 20 69 66 28 20 73 74 72 63 6d 70 28 61 72 67    if( strcmp(arg
7d30: 76 5b 34 5d 2c 22 6e 75 6c 6c 22 29 3d 3d 30 20  v[4],"null")==0 
7d40: 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
7d50: 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 70 53  te3_bind_null(pS
7d60: 74 6d 74 2c 20 69 64 78 29 3b 0a 20 20 7d 65 6c  tmt, idx);.  }el
7d70: 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 61 72  se if( strcmp(ar
7d80: 67 76 5b 34 5d 2c 22 73 74 61 74 69 63 22 29 3d  gv[4],"static")=
7d90: 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  =0 ){.    rc = s
7da0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74  qlite3_bind_text
7db0: 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 73 71 6c  (pStmt, idx, sql
7dc0: 69 74 65 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f  ite_static_bind_
7dd0: 76 61 6c 75 65 2c 20 2d 31 2c 20 30 29 3b 0a 20  value, -1, 0);. 
7de0: 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
7df0: 70 28 61 72 67 76 5b 34 5d 2c 22 6e 6f 72 6d 61  p(argv[4],"norma
7e00: 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63  l")==0 ){.    rc
7e10: 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f   = sqlite3_bind_
7e20: 74 65 78 74 28 70 53 74 6d 74 2c 20 69 64 78 2c  text(pStmt, idx,
7e30: 20 61 72 67 76 5b 33 5d 2c 20 2d 31 2c 20 53 51   argv[3], -1, SQ
7e40: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
7e50: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72  .  }else if( str
7e60: 63 6d 70 28 61 72 67 76 5b 34 5d 2c 22 62 6c 6f  cmp(argv[4],"blo
7e70: 62 31 30 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  b10")==0 ){.    
7e80: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e  rc = sqlite3_bin
7e90: 64 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 69 64  d_text(pStmt, id
7ea0: 78 2c 20 22 61 62 63 5c 30 30 30 78 79 7a 5c 30  x, "abc\000xyz\0
7eb0: 30 30 70 71 22 2c 20 31 30 2c 20 53 51 4c 49 54  00pq", 10, SQLIT
7ec0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 7d 65 6c  E_STATIC);.  }el
7ed0: 73 65 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65  se{.    Tcl_Appe
7ee0: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
7ef0: 20 22 34 74 68 20 61 72 67 75 6d 65 6e 74 20 73   "4th argument s
7f00: 68 6f 75 6c 64 20 62 65 20 22 0a 20 20 20 20 20  hould be ".     
7f10: 20 20 20 22 5c 22 6e 75 6c 6c 5c 22 20 6f 72 20     "\"null\" or 
7f20: 5c 22 73 74 61 74 69 63 5c 22 20 6f 72 20 5c 22  \"static\" or \"
7f30: 6e 6f 72 6d 61 6c 5c 22 22 2c 20 30 29 3b 0a 20  normal\"", 0);. 
7f40: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
7f50: 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73  ROR;.  }.  if( s
7f60: 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64  qlite3TestErrCod
7f70: 65 28 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f  e(interp, StmtTo
7f80: 44 62 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29  Db(pStmt), rc) )
7f90: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
7fa0: 52 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20  R;.  if( rc ){. 
7fb0: 20 20 20 63 68 61 72 20 7a 42 75 66 5b 35 30 5d     char zBuf[50]
7fc0: 3b 0a 20 20 20 20 73 70 72 69 6e 74 66 28 7a 42  ;.    sprintf(zB
7fd0: 75 66 2c 20 22 28 25 64 29 20 22 2c 20 72 63 29  uf, "(%d) ", rc)
7fe0: 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  ;.    Tcl_Append
7ff0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a  Result(interp, z
8000: 42 75 66 2c 20 73 71 6c 69 74 65 33 45 72 72 53  Buf, sqlite3ErrS
8010: 74 72 28 72 63 29 2c 20 30 29 3b 0a 20 20 20 20  tr(rc), 0);.    
8020: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
8030: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54  ;.  }.  return T
8040: 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  CL_OK;.}..#ifnde
8050: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
8060: 46 31 36 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  F16./*.** Usage:
8070: 20 61 64 64 5f 74 65 73 74 5f 63 6f 6c 6c 61 74   add_test_collat
8080: 65 20 3c 64 62 20 70 74 72 3e 20 3c 75 74 66 38  e <db ptr> <utf8
8090: 3e 20 3c 75 74 66 31 36 6c 65 3e 20 3c 75 74 66  > <utf16le> <utf
80a0: 31 36 62 65 3e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  16be>.**.** This
80b0: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65   function is use
80c0: 64 20 74 6f 20 74 65 73 74 20 74 68 61 74 20 53  d to test that S
80d0: 51 4c 69 74 65 20 73 65 6c 65 63 74 73 20 74 68  QLite selects th
80e0: 65 20 63 6f 72 72 65 63 74 20 63 6f 6c 6c 61 74  e correct collat
80f0: 69 6f 6e 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20  ion.** sequence 
8100: 63 61 6c 6c 62 61 63 6b 20 77 68 65 6e 20 6d 75  callback when mu
8110: 6c 74 69 70 6c 65 20 76 65 72 73 69 6f 6e 73 20  ltiple versions 
8120: 28 66 6f 72 20 64 69 66 66 65 72 65 6e 74 20 74  (for different t
8130: 65 78 74 20 65 6e 63 6f 64 69 6e 67 73 29 0a 2a  ext encodings).*
8140: 2a 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 2e  * are available.
8150: 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 69 6e 67 20 74  .**.** Calling t
8160: 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65 67 69  his routine regi
8170: 73 74 65 72 73 20 74 68 65 20 63 6f 6c 6c 61 74  sters the collat
8180: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 22 74 65  ion sequence "te
8190: 73 74 5f 63 6f 6c 6c 61 74 65 22 0a 2a 2a 20 77  st_collate".** w
81a0: 69 74 68 20 64 61 74 61 62 61 73 65 20 68 61 6e  ith database han
81b0: 64 6c 65 20 3c 64 62 3e 2e 20 54 68 65 20 73 65  dle <db>. The se
81c0: 63 6f 6e 64 20 61 72 67 75 6d 65 6e 74 20 6d 75  cond argument mu
81d0: 73 74 20 62 65 20 61 20 6c 69 73 74 20 6f 66 20  st be a list of 
81e0: 74 68 72 65 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e  three.** boolean
81f0: 20 76 61 6c 75 65 73 2e 20 49 66 20 74 68 65 20   values. If the 
8200: 66 69 72 73 74 20 69 73 20 74 72 75 65 2c 20 74  first is true, t
8210: 68 65 6e 20 61 20 76 65 72 73 69 6f 6e 20 6f 66  hen a version of
8220: 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 20 69 73   test_collate is
8230: 0a 2a 2a 20 72 65 67 69 73 74 65 72 65 64 20 66  .** registered f
8240: 6f 72 20 55 54 46 2d 38 2c 20 69 66 20 74 68 65  or UTF-8, if the
8250: 20 73 65 63 6f 6e 64 20 69 73 20 74 72 75 65 2c   second is true,
8260: 20 61 20 76 65 72 73 69 6f 6e 20 69 73 20 72 65   a version is re
8270: 67 69 73 74 65 72 65 64 20 66 6f 72 0a 2a 2a 20  gistered for.** 
8280: 55 54 46 2d 31 36 6c 65 2c 20 69 66 20 74 68 65  UTF-16le, if the
8290: 20 74 68 69 72 64 20 69 73 20 74 72 75 65 2c 20   third is true, 
82a0: 61 20 55 54 46 2d 31 36 62 65 20 76 65 72 73 69  a UTF-16be versi
82b0: 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e  on is available.
82c0: 0a 2a 2a 20 50 72 65 76 69 6f 75 73 20 76 65 72  .** Previous ver
82d0: 73 69 6f 6e 73 20 6f 66 20 74 65 73 74 5f 63 6f  sions of test_co
82e0: 6c 6c 61 74 65 20 61 72 65 20 64 65 6c 65 74 65  llate are delete
82f0: 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c  d..**.** The col
8300: 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
8310: 74 65 73 74 5f 63 6f 6c 6c 61 74 65 20 69 73 20  test_collate is 
8320: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63  implemented by c
8330: 61 6c 6c 69 6e 67 20 74 68 65 0a 2a 2a 20 66 6f  alling the.** fo
8340: 6c 6c 6f 77 69 6e 67 20 54 43 4c 20 73 63 72 69  llowing TCL scri
8350: 70 74 3a 0a 2a 2a 0a 2a 2a 20 20 20 22 74 65 73  pt:.**.**   "tes
8360: 74 5f 63 6f 6c 6c 61 74 65 20 3c 65 6e 63 3e 20  t_collate <enc> 
8370: 3c 6c 68 73 3e 20 3c 72 68 73 3e 22 0a 2a 2a 0a  <lhs> <rhs>".**.
8380: 2a 2a 20 54 68 65 20 3c 6c 68 73 3e 20 61 6e 64  ** The <lhs> and
8390: 20 3c 72 68 73 3e 20 61 72 65 20 74 68 65 20 74   <rhs> are the t
83a0: 77 6f 20 76 61 6c 75 65 73 20 62 65 69 6e 67 20  wo values being 
83b0: 63 6f 6d 70 61 72 65 64 2c 20 65 6e 63 6f 64 65  compared, encode
83c0: 64 20 69 6e 20 55 54 46 2d 38 2e 0a 2a 2a 20 54  d in UTF-8..** T
83d0: 68 65 20 3c 65 6e 63 3e 20 70 61 72 61 6d 65 74  he <enc> paramet
83e0: 65 72 20 69 73 20 74 68 65 20 65 6e 63 6f 64 69  er is the encodi
83f0: 6e 67 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74  ng of the collat
8400: 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 74 68 61  ion function tha
8410: 74 0a 2a 2a 20 53 51 4c 69 74 65 20 73 65 6c 65  t.** SQLite sele
8420: 63 74 65 64 20 74 6f 20 63 61 6c 6c 2e 20 54 68  cted to call. Th
8430: 65 20 54 43 4c 20 74 65 73 74 20 73 63 72 69 70  e TCL test scrip
8440: 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65  t implements the
8450: 0a 2a 2a 20 22 74 65 73 74 5f 63 6f 6c 6c 61 74  .** "test_collat
8460: 65 22 20 70 72 6f 63 2e 0a 2a 2a 0a 2a 2a 20 4e  e" proc..**.** N
8470: 6f 74 65 20 74 68 61 74 20 74 68 69 73 20 77 69  ote that this wi
8480: 6c 6c 20 6f 6e 6c 79 20 77 6f 72 6b 20 77 69 74  ll only work wit
8490: 68 20 6f 6e 65 20 69 6e 74 65 70 72 65 74 65 72  h one intepreter
84a0: 20 61 74 20 61 20 74 69 6d 65 2c 20 61 73 20 74   at a time, as t
84b0: 68 65 0a 2a 2a 20 69 6e 74 65 72 70 20 70 6f 69  he.** interp poi
84c0: 6e 74 65 72 20 74 6f 20 75 73 65 20 77 68 65 6e  nter to use when
84d0: 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20   evaluating the 
84e0: 54 43 4c 20 73 63 72 69 70 74 20 69 73 20 73 74  TCL script is st
84f0: 6f 72 65 64 20 69 6e 0a 2a 2a 20 70 54 65 73 74  ored in.** pTest
8500: 43 6f 6c 6c 61 74 65 49 6e 74 65 72 70 2e 0a 2a  CollateInterp..*
8510: 2f 0a 73 74 61 74 69 63 20 54 63 6c 5f 49 6e 74  /.static Tcl_Int
8520: 65 72 70 2a 20 70 54 65 73 74 43 6f 6c 6c 61 74  erp* pTestCollat
8530: 65 49 6e 74 65 72 70 3b 0a 73 74 61 74 69 63 20  eInterp;.static 
8540: 69 6e 74 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65  int test_collate
8550: 5f 66 75 6e 63 28 0a 20 20 76 6f 69 64 20 2a 70  _func(.  void *p
8560: 43 74 78 2c 20 0a 20 20 69 6e 74 20 6e 41 2c 20  Ctx, .  int nA, 
8570: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 41 2c 0a  const void *zA,.
8580: 20 20 69 6e 74 20 6e 42 2c 20 63 6f 6e 73 74 20    int nB, const 
8590: 76 6f 69 64 20 2a 7a 42 0a 29 7b 0a 20 20 54 63  void *zB.){.  Tc
85a0: 6c 5f 49 6e 74 65 72 70 20 2a 69 20 3d 20 70 54  l_Interp *i = pT
85b0: 65 73 74 43 6f 6c 6c 61 74 65 49 6e 74 65 72 70  estCollateInterp
85c0: 3b 0a 20 20 69 6e 74 20 65 6e 63 69 6e 20 3d 20  ;.  int encin = 
85d0: 28 69 6e 74 29 70 43 74 78 3b 0a 20 20 69 6e 74  (int)pCtx;.  int
85e0: 20 72 65 73 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a   res;.  int n;..
85f0: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
8600: 2a 70 56 61 6c 3b 0a 20 20 54 63 6c 5f 4f 62 6a  *pVal;.  Tcl_Obj
8610: 20 2a 70 58 3b 0a 0a 20 20 70 58 20 3d 20 54 63   *pX;..  pX = Tc
8620: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22  l_NewStringObj("
8630: 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22 2c 20 2d  test_collate", -
8640: 31 29 3b 0a 20 20 54 63 6c 5f 49 6e 63 72 52 65  1);.  Tcl_IncrRe
8650: 66 43 6f 75 6e 74 28 70 58 29 3b 0a 0a 20 20 73  fCount(pX);..  s
8660: 77 69 74 63 68 28 20 65 6e 63 69 6e 20 29 7b 0a  witch( encin ){.
8670: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
8680: 55 54 46 38 3a 0a 20 20 20 20 20 20 54 63 6c 5f  UTF8:.      Tcl_
8690: 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65  ListObjAppendEle
86a0: 6d 65 6e 74 28 69 2c 70 58 2c 54 63 6c 5f 4e 65  ment(i,pX,Tcl_Ne
86b0: 77 53 74 72 69 6e 67 4f 62 6a 28 22 55 54 46 2d  wStringObj("UTF-
86c0: 38 22 2c 2d 31 29 29 3b 0a 20 20 20 20 20 20 62  8",-1));.      b
86d0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
86e0: 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 3a 0a 20  QLITE_UTF16LE:. 
86f0: 20 20 20 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a       Tcl_ListObj
8700: 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 2c  AppendElement(i,
8710: 70 58 2c 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  pX,Tcl_NewString
8720: 4f 62 6a 28 22 55 54 46 2d 31 36 4c 45 22 2c 2d  Obj("UTF-16LE",-
8730: 31 29 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  1));.      break
8740: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
8750: 45 5f 55 54 46 31 36 42 45 3a 0a 20 20 20 20 20  E_UTF16BE:.     
8760: 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65   Tcl_ListObjAppe
8770: 6e 64 45 6c 65 6d 65 6e 74 28 69 2c 70 58 2c 54  ndElement(i,pX,T
8780: 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
8790: 22 55 54 46 2d 31 36 42 45 22 2c 2d 31 29 29 3b  "UTF-16BE",-1));
87a0: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
87b0: 20 20 64 65 66 61 75 6c 74 3a 0a 20 20 20 20 20    default:.     
87c0: 20 61 73 73 65 72 74 28 30 29 3b 0a 20 20 7d 0a   assert(0);.  }.
87d0: 0a 20 20 70 56 61 6c 20 3d 20 73 71 6c 69 74 65  .  pVal = sqlite
87e0: 33 56 61 6c 75 65 4e 65 77 28 29 3b 0a 20 20 73  3ValueNew();.  s
87f0: 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74  qlite3ValueSetSt
8800: 72 28 70 56 61 6c 2c 20 6e 41 2c 20 7a 41 2c 20  r(pVal, nA, zA, 
8810: 65 6e 63 69 6e 2c 20 53 51 4c 49 54 45 5f 53 54  encin, SQLITE_ST
8820: 41 54 49 43 29 3b 0a 20 20 6e 20 3d 20 73 71 6c  ATIC);.  n = sql
8830: 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73  ite3_value_bytes
8840: 28 70 56 61 6c 29 3b 0a 20 20 54 63 6c 5f 4c 69  (pVal);.  Tcl_Li
8850: 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65  stObjAppendEleme
8860: 6e 74 28 69 2c 70 58 2c 54 63 6c 5f 4e 65 77 53  nt(i,pX,Tcl_NewS
8870: 74 72 69 6e 67 4f 62 6a 28 73 71 6c 69 74 65 33  tringObj(sqlite3
8880: 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 56 61 6c  _value_text(pVal
8890: 29 2c 6e 29 29 3b 0a 20 20 73 71 6c 69 74 65 33  ),n));.  sqlite3
88a0: 56 61 6c 75 65 53 65 74 53 74 72 28 70 56 61 6c  ValueSetStr(pVal
88b0: 2c 20 6e 42 2c 20 7a 42 2c 20 65 6e 63 69 6e 2c  , nB, zB, encin,
88c0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
88d0: 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 5f 76  .  n = sqlite3_v
88e0: 61 6c 75 65 5f 62 79 74 65 73 28 70 56 61 6c 29  alue_bytes(pVal)
88f0: 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41  ;.  Tcl_ListObjA
8900: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 2c 70  ppendElement(i,p
8910: 58 2c 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  X,Tcl_NewStringO
8920: 62 6a 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  bj(sqlite3_value
8930: 5f 74 65 78 74 28 70 56 61 6c 29 2c 6e 29 29 3b  _text(pVal),n));
8940: 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46  .  sqlite3ValueF
8950: 72 65 65 28 70 56 61 6c 29 3b 0a 0a 20 20 54 63  ree(pVal);..  Tc
8960: 6c 5f 45 76 61 6c 4f 62 6a 45 78 28 69 2c 20 70  l_EvalObjEx(i, p
8970: 58 2c 20 30 29 3b 0a 20 20 54 63 6c 5f 44 65 63  X, 0);.  Tcl_Dec
8980: 72 52 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a 20  rRefCount(pX);. 
8990: 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f   Tcl_GetIntFromO
89a0: 62 6a 28 69 2c 20 54 63 6c 5f 47 65 74 4f 62 6a  bj(i, Tcl_GetObj
89b0: 52 65 73 75 6c 74 28 69 29 2c 20 26 72 65 73 29  Result(i), &res)
89c0: 3b 0a 20 20 72 65 74 75 72 6e 20 72 65 73 3b 0a  ;.  return res;.
89d0: 7d 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  }.static int tes
89e0: 74 5f 63 6f 6c 6c 61 74 65 28 0a 20 20 76 6f 69  t_collate(.  voi
89f0: 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
8a00: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
8a10: 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
8a20: 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
8a30: 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73  ST objv[].){.  s
8a40: 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e  qlite3 *db;.  in
8a50: 74 20 76 61 6c 3b 0a 20 20 73 71 6c 69 74 65 33  t val;.  sqlite3
8a60: 5f 76 61 6c 75 65 20 2a 70 56 61 6c 3b 0a 20 20  _value *pVal;.  
8a70: 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f  int rc;..  if( o
8a80: 62 6a 63 21 3d 35 20 29 20 67 6f 74 6f 20 62 61  bjc!=5 ) goto ba
8a90: 64 5f 61 72 67 73 3b 0a 20 20 70 54 65 73 74 43  d_args;.  pTestC
8aa0: 6f 6c 6c 61 74 65 49 6e 74 65 72 70 20 3d 20 69  ollateInterp = i
8ab0: 6e 74 65 72 70 3b 0a 20 20 69 66 28 20 67 65 74  nterp;.  if( get
8ac0: 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  DbPointer(interp
8ad0: 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
8ae0: 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29  objv[1]), &db) )
8af0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
8b00: 52 3b 0a 0a 20 20 69 66 28 20 54 43 4c 5f 4f 4b  R;..  if( TCL_OK
8b10: 21 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e  !=Tcl_GetBoolean
8b20: 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
8b30: 6f 62 6a 76 5b 32 5d 2c 20 26 76 61 6c 29 20 29  objv[2], &val) )
8b40: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
8b50: 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  R;.  rc = sqlite
8b60: 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69  3_create_collati
8b70: 6f 6e 28 64 62 2c 20 22 74 65 73 74 5f 63 6f 6c  on(db, "test_col
8b80: 6c 61 74 65 22 2c 20 53 51 4c 49 54 45 5f 55 54  late", SQLITE_UT
8b90: 46 38 2c 20 0a 20 20 20 20 20 20 20 20 20 20 28  F8, .          (
8ba0: 76 6f 69 64 20 2a 29 53 51 4c 49 54 45 5f 55 54  void *)SQLITE_UT
8bb0: 46 38 2c 20 76 61 6c 3f 74 65 73 74 5f 63 6f 6c  F8, val?test_col
8bc0: 6c 61 74 65 5f 66 75 6e 63 3a 30 29 3b 0a 20 20  late_func:0);.  
8bd0: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
8be0: 4b 20 29 7b 0a 20 20 20 20 69 66 28 20 54 43 4c  K ){.    if( TCL
8bf0: 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c  _OK!=Tcl_GetBool
8c00: 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  eanFromObj(inter
8c10: 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 76 61 6c  p, objv[3], &val
8c20: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
8c30: 52 52 4f 52 3b 0a 20 20 20 20 72 63 20 3d 20 73  RROR;.    rc = s
8c40: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f  qlite3_create_co
8c50: 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 22 74 65 73  llation(db, "tes
8c60: 74 5f 63 6f 6c 6c 61 74 65 22 2c 20 53 51 4c 49  t_collate", SQLI
8c70: 54 45 5f 55 54 46 31 36 4c 45 2c 20 0a 20 20 20  TE_UTF16LE, .   
8c80: 20 20 20 20 20 20 20 20 20 28 76 6f 69 64 20 2a           (void *
8c90: 29 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 2c  )SQLITE_UTF16LE,
8ca0: 20 76 61 6c 3f 74 65 73 74 5f 63 6f 6c 6c 61 74   val?test_collat
8cb0: 65 5f 66 75 6e 63 3a 30 29 3b 0a 20 20 20 20 69  e_func:0);.    i
8cc0: 66 28 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47  f( TCL_OK!=Tcl_G
8cd0: 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a  etBooleanFromObj
8ce0: 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 34 5d  (interp, objv[4]
8cf0: 2c 20 26 76 61 6c 29 20 29 20 72 65 74 75 72 6e  , &val) ) return
8d00: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 20   TCL_ERROR;..   
8d10: 20 70 56 61 6c 20 3d 20 73 71 6c 69 74 65 33 56   pVal = sqlite3V
8d20: 61 6c 75 65 4e 65 77 28 29 3b 0a 20 20 20 20 73  alueNew();.    s
8d30: 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74  qlite3ValueSetSt
8d40: 72 28 70 56 61 6c 2c 20 2d 31 2c 20 22 74 65 73  r(pVal, -1, "tes
8d50: 74 5f 63 6f 6c 6c 61 74 65 22 2c 20 53 51 4c 49  t_collate", SQLI
8d60: 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f  TE_UTF8, SQLITE_
8d70: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c  STATIC);.    sql
8d80: 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c  ite3_create_coll
8d90: 61 74 69 6f 6e 31 36 28 64 62 2c 20 73 71 6c 69  ation16(db, sqli
8da0: 74 65 33 56 61 6c 75 65 54 65 78 74 28 70 56 61  te3ValueText(pVa
8db0: 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e  l, SQLITE_UTF16N
8dc0: 41 54 49 56 45 29 2c 20 0a 20 20 20 20 20 20 20  ATIVE), .       
8dd0: 20 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42     SQLITE_UTF16B
8de0: 45 2c 20 28 76 6f 69 64 20 2a 29 53 51 4c 49 54  E, (void *)SQLIT
8df0: 45 5f 55 54 46 31 36 42 45 2c 20 76 61 6c 3f 74  E_UTF16BE, val?t
8e00: 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 66 75 6e 63  est_collate_func
8e10: 3a 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  :0);.    sqlite3
8e20: 56 61 6c 75 65 46 72 65 65 28 70 56 61 6c 29 3b  ValueFree(pVal);
8e30: 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74  .  }.  if( sqlit
8e40: 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e  e3TestErrCode(in
8e50: 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20  terp, db, rc) ) 
8e60: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
8e70: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
8e80: 4b 3b 0a 0a 62 61 64 5f 61 72 67 73 3a 0a 20 20  K;..bad_args:.  
8e90: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
8ea0: 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
8eb0: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
8ec0: 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 54 63 6c  e \"",.      Tcl
8ed0: 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62  _GetStringFromOb
8ee0: 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22  j(objv[0], 0), "
8ef0: 20 3c 44 42 3e 20 3c 75 74 66 38 3e 20 3c 75 74   <DB> <utf8> <ut
8f00: 66 31 36 6c 65 3e 20 3c 75 74 66 31 36 62 65 3e  f16le> <utf16be>
8f10: 22 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20  ", 0);.  return 
8f20: 54 43 4c 5f 45 52 52 4f 52 3b 0a 7d 0a 0a 73 74  TCL_ERROR;.}..st
8f30: 61 74 69 63 20 76 6f 69 64 20 74 65 73 74 5f 63  atic void test_c
8f40: 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64 5f 63 62  ollate_needed_cb
8f50: 28 0a 20 20 76 6f 69 64 20 2a 70 43 74 78 2c 20  (.  void *pCtx, 
8f60: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a  .  sqlite3 *db,.
8f70: 20 20 69 6e 74 20 65 54 65 78 74 52 65 70 2c 0a    int eTextRep,.
8f80: 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 6e 6f    const void *no
8f90: 74 55 73 65 64 0a 29 7b 0a 20 20 69 6e 74 20 65  tUsed.){.  int e
8fa0: 6e 63 20 3d 20 64 62 2d 3e 65 6e 63 3b 0a 20 20  nc = db->enc;.  
8fb0: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63  sqlite3_create_c
8fc0: 6f 6c 6c 61 74 69 6f 6e 28 0a 20 20 20 20 20 20  ollation(.      
8fd0: 64 62 2c 20 22 74 65 73 74 5f 63 6f 6c 6c 61 74  db, "test_collat
8fe0: 65 22 2c 20 64 62 2d 3e 65 6e 63 2c 20 28 76 6f  e", db->enc, (vo
8ff0: 69 64 20 2a 29 65 6e 63 2c 20 74 65 73 74 5f 63  id *)enc, test_c
9000: 6f 6c 6c 61 74 65 5f 66 75 6e 63 29 3b 0a 7d 0a  ollate_func);.}.
9010: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 61 64  ./*.** Usage: ad
9020: 64 5f 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e  d_test_collate_n
9030: 65 65 64 65 64 20 44 42 0a 2a 2f 0a 73 74 61 74  eeded DB.*/.stat
9040: 69 63 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c 6c  ic int test_coll
9050: 61 74 65 5f 6e 65 65 64 65 64 28 0a 20 20 76 6f  ate_needed(.  vo
9060: 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
9070: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
9080: 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
9090: 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
90a0: 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
90b0: 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69  sqlite3 *db;.  i
90c0: 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62  nt rc;..  if( ob
90d0: 6a 63 21 3d 32 20 29 20 67 6f 74 6f 20 62 61 64  jc!=2 ) goto bad
90e0: 5f 61 72 67 73 3b 0a 20 20 69 66 28 20 67 65 74  _args;.  if( get
90f0: 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  DbPointer(interp
9100: 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
9110: 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29  objv[1]), &db) )
9120: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
9130: 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  R;.  rc = sqlite
9140: 33 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 6e 65 65 64  3_collation_need
9150: 65 64 31 36 28 64 62 2c 20 30 2c 20 74 65 73 74  ed16(db, 0, test
9160: 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64 5f  _collate_needed_
9170: 63 62 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  cb);.  if( sqlit
9180: 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e  e3TestErrCode(in
9190: 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20  terp, db, rc) ) 
91a0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
91b0: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
91c0: 4b 3b 0a 0a 62 61 64 5f 61 72 67 73 3a 0a 20 20  K;..bad_args:.  
91d0: 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73  Tcl_WrongNumArgs
91e0: 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76  (interp, 1, objv
91f0: 2c 20 22 44 42 22 29 3b 0a 20 20 72 65 74 75 72  , "DB");.  retur
9200: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 7d 0a 23  n TCL_ERROR;.}.#
9210: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
9220: 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 2f  OMIT_UTF16 */../
9230: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 61 64 64 5f  *.** Usage: add_
9240: 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 20 3c 64  test_function <d
9250: 62 20 70 74 72 3e 20 3c 75 74 66 38 3e 20 3c 75  b ptr> <utf8> <u
9260: 74 66 31 36 6c 65 3e 20 3c 75 74 66 31 36 62 65  tf16le> <utf16be
9270: 3e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e  >.**.** This fun
9280: 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f  ction is used to
9290: 20 74 65 73 74 20 74 68 61 74 20 53 51 4c 69 74   test that SQLit
92a0: 65 20 73 65 6c 65 63 74 73 20 74 68 65 20 63 6f  e selects the co
92b0: 72 72 65 63 74 20 75 73 65 72 0a 2a 2a 20 66 75  rrect user.** fu
92c0: 6e 63 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20  nction callback 
92d0: 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 76 65  when multiple ve
92e0: 72 73 69 6f 6e 73 20 28 66 6f 72 20 64 69 66 66  rsions (for diff
92f0: 65 72 65 6e 74 20 74 65 78 74 20 65 6e 63 6f 64  erent text encod
9300: 69 6e 67 73 29 0a 2a 2a 20 61 72 65 20 61 76 61  ings).** are ava
9310: 69 6c 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 43 61  ilable..**.** Ca
9320: 6c 6c 69 6e 67 20 74 68 69 73 20 72 6f 75 74 69  lling this routi
9330: 6e 65 20 72 65 67 69 73 74 65 72 73 20 75 70 20  ne registers up 
9340: 74 6f 20 74 68 72 65 65 20 76 65 72 73 69 6f 6e  to three version
9350: 73 20 6f 66 20 74 68 65 20 75 73 65 72 20 66 75  s of the user fu
9360: 6e 63 74 69 6f 6e 0a 2a 2a 20 22 74 65 73 74 5f  nction.** "test_
9370: 66 75 6e 63 74 69 6f 6e 22 20 77 69 74 68 20 64  function" with d
9380: 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 3c  atabase handle <
9390: 64 62 3e 2e 20 20 49 66 20 74 68 65 20 73 65 63  db>.  If the sec
93a0: 6f 6e 64 20 61 72 67 75 6d 65 6e 74 20 69 73 0a  ond argument is.
93b0: 2a 2a 20 74 72 75 65 2c 20 74 68 65 6e 20 61 20  ** true, then a 
93c0: 76 65 72 73 69 6f 6e 20 6f 66 20 74 65 73 74 5f  version of test_
93d0: 66 75 6e 63 74 69 6f 6e 20 69 73 20 72 65 67 69  function is regi
93e0: 73 74 65 72 65 64 20 66 6f 72 20 55 54 46 2d 38  stered for UTF-8
93f0: 2c 20 69 66 20 74 68 65 0a 2a 2a 20 74 68 69 72  , if the.** thir
9400: 64 20 69 73 20 74 72 75 65 2c 20 61 20 76 65 72  d is true, a ver
9410: 73 69 6f 6e 20 69 73 20 72 65 67 69 73 74 65 72  sion is register
9420: 65 64 20 66 6f 72 20 55 54 46 2d 31 36 6c 65 2c  ed for UTF-16le,
9430: 20 69 66 20 74 68 65 20 66 6f 75 72 74 68 20 69   if the fourth i
9440: 73 0a 2a 2a 20 74 72 75 65 2c 20 61 20 55 54 46  s.** true, a UTF
9450: 2d 31 36 62 65 20 76 65 72 73 69 6f 6e 20 69 73  -16be version is
9460: 20 61 76 61 69 6c 61 62 6c 65 2e 20 20 50 72 65   available.  Pre
9470: 76 69 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f  vious versions o
9480: 66 0a 2a 2a 20 74 65 73 74 5f 66 75 6e 63 74 69  f.** test_functi
9490: 6f 6e 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a  on are deleted..
94a0: 2a 2a 0a 2a 2a 20 54 68 65 20 75 73 65 72 20 66  **.** The user f
94b0: 75 6e 63 74 69 6f 6e 20 69 73 20 69 6d 70 6c 65  unction is imple
94c0: 6d 65 6e 74 65 64 20 62 79 20 63 61 6c 6c 69 6e  mented by callin
94d0: 67 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  g the following 
94e0: 54 43 4c 20 73 63 72 69 70 74 3a 0a 2a 2a 0a 2a  TCL script:.**.*
94f0: 2a 20 20 20 22 74 65 73 74 5f 66 75 6e 63 74 69  *   "test_functi
9500: 6f 6e 20 3c 65 6e 63 3e 20 3c 61 72 67 3e 22 0a  on <enc> <arg>".
9510: 2a 2a 0a 2a 2a 20 57 68 65 72 65 20 3c 65 6e 63  **.** Where <enc
9520: 3e 20 69 73 20 6f 6e 65 20 6f 66 20 55 54 46 2d  > is one of UTF-
9530: 38 2c 20 55 54 46 2d 31 36 4c 45 20 6f 72 20 55  8, UTF-16LE or U
9540: 54 46 31 36 42 45 2c 20 61 6e 64 20 3c 61 72 67  TF16BE, and <arg
9550: 3e 20 69 73 20 74 68 65 0a 2a 2a 20 73 69 6e 67  > is the.** sing
9560: 6c 65 20 61 72 67 75 6d 65 6e 74 20 70 61 73 73  le argument pass
9570: 65 64 20 74 6f 20 74 68 65 20 53 51 4c 20 66 75  ed to the SQL fu
9580: 6e 63 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75  nction. The valu
9590: 65 20 72 65 74 75 72 6e 65 64 20 62 79 0a 2a 2a  e returned by.**
95a0: 20 74 68 65 20 54 43 4c 20 73 63 72 69 70 74 20   the TCL script 
95b0: 69 73 20 75 73 65 64 20 61 73 20 74 68 65 20 72  is used as the r
95c0: 65 74 75 72 6e 20 76 61 6c 75 65 20 6f 66 20 74  eturn value of t
95d0: 68 65 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2e  he SQL function.
95e0: 20 49 74 0a 2a 2a 20 69 73 20 70 61 73 73 65 64   It.** is passed
95f0: 20 74 6f 20 53 51 4c 69 74 65 20 75 73 69 6e 67   to SQLite using
9600: 20 55 54 46 2d 31 36 42 45 20 66 6f 72 20 61 20   UTF-16BE for a 
9610: 55 54 46 2d 38 20 74 65 73 74 5f 66 75 6e 63 74  UTF-8 test_funct
9620: 69 6f 6e 28 29 2c 20 55 54 46 2d 38 0a 2a 2a 20  ion(), UTF-8.** 
9630: 66 6f 72 20 61 20 55 54 46 2d 31 36 4c 45 20 74  for a UTF-16LE t
9640: 65 73 74 5f 66 75 6e 63 74 69 6f 6e 28 29 2c 20  est_function(), 
9650: 61 6e 64 20 55 54 46 2d 31 36 4c 45 20 66 6f 72  and UTF-16LE for
9660: 20 61 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69   an implementati
9670: 6f 6e 20 74 68 61 74 0a 2a 2a 20 70 72 65 66 65  on that.** prefe
9680: 72 73 20 55 54 46 2d 31 36 42 45 2e 0a 2a 2f 0a  rs UTF-16BE..*/.
9690: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
96a0: 4d 49 54 5f 55 54 46 31 36 0a 73 74 61 74 69 63  MIT_UTF16.static
96b0: 20 76 6f 69 64 20 74 65 73 74 5f 66 75 6e 63 74   void test_funct
96c0: 69 6f 6e 5f 75 74 66 38 28 0a 20 20 73 71 6c 69  ion_utf8(.  sqli
96d0: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74  te3_context *pCt
96e0: 78 2c 20 0a 20 20 69 6e 74 20 6e 41 72 67 2c 0a  x, .  int nArg,.
96f0: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
9700: 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 54 63 6c 5f  **argv.){.  Tcl_
9710: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 3b 0a  Interp *interp;.
9720: 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 58 3b 0a 20    Tcl_Obj *pX;. 
9730: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
9740: 70 56 61 6c 3b 0a 20 20 69 6e 74 65 72 70 20 3d  pVal;.  interp =
9750: 20 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 29 73   (Tcl_Interp *)s
9760: 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
9770: 28 70 43 74 78 29 3b 0a 20 20 70 58 20 3d 20 54  (pCtx);.  pX = T
9780: 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
9790: 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c  "test_function",
97a0: 20 2d 31 29 3b 0a 20 20 54 63 6c 5f 49 6e 63 72   -1);.  Tcl_Incr
97b0: 52 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a 20 20  RefCount(pX);.  
97c0: 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e  Tcl_ListObjAppen
97d0: 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c  dElement(interp,
97e0: 20 70 58 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69   pX, Tcl_NewStri
97f0: 6e 67 4f 62 6a 28 22 55 54 46 2d 38 22 2c 20 2d  ngObj("UTF-8", -
9800: 31 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f  1));.  Tcl_ListO
9810: 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  bjAppendElement(
9820: 69 6e 74 65 72 70 2c 20 70 58 2c 20 0a 20 20 20  interp, pX, .   
9830: 20 20 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67     Tcl_NewString
9840: 4f 62 6a 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  Obj(sqlite3_valu
9850: 65 5f 74 65 78 74 28 61 72 67 76 5b 30 5d 29 2c  e_text(argv[0]),
9860: 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 45 76 61   -1));.  Tcl_Eva
9870: 6c 4f 62 6a 45 78 28 69 6e 74 65 72 70 2c 20 70  lObjEx(interp, p
9880: 58 2c 20 30 29 3b 0a 20 20 54 63 6c 5f 44 65 63  X, 0);.  Tcl_Dec
9890: 72 52 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a 20  rRefCount(pX);. 
98a0: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
98b0: 74 65 78 74 28 70 43 74 78 2c 20 54 63 6c 5f 47  text(pCtx, Tcl_G
98c0: 65 74 53 74 72 69 6e 67 52 65 73 75 6c 74 28 69  etStringResult(i
98d0: 6e 74 65 72 70 29 2c 20 2d 31 2c 20 53 51 4c 49  nterp), -1, SQLI
98e0: 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20  TE_TRANSIENT);. 
98f0: 20 70 56 61 6c 20 3d 20 73 71 6c 69 74 65 33 56   pVal = sqlite3V
9900: 61 6c 75 65 4e 65 77 28 29 3b 0a 20 20 73 71 6c  alueNew();.  sql
9910: 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28  ite3ValueSetStr(
9920: 70 56 61 6c 2c 20 2d 31 2c 20 54 63 6c 5f 47 65  pVal, -1, Tcl_Ge
9930: 74 53 74 72 69 6e 67 52 65 73 75 6c 74 28 69 6e  tStringResult(in
9940: 74 65 72 70 29 2c 20 0a 20 20 20 20 20 20 53 51  terp), .      SQ
9950: 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54  LITE_UTF8, SQLIT
9960: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 73 71 6c  E_STATIC);.  sql
9970: 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74  ite3_result_text
9980: 31 36 62 65 28 70 43 74 78 2c 20 73 71 6c 69 74  16be(pCtx, sqlit
9990: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 62  e3_value_text16b
99a0: 65 28 70 56 61 6c 29 2c 0a 20 20 20 20 20 20 2d  e(pVal),.      -
99b0: 31 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49  1, SQLITE_TRANSI
99c0: 45 4e 54 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  ENT);.  sqlite3V
99d0: 61 6c 75 65 46 72 65 65 28 70 56 61 6c 29 3b 0a  alueFree(pVal);.
99e0: 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74 65  }.static void te
99f0: 73 74 5f 66 75 6e 63 74 69 6f 6e 5f 75 74 66 31  st_function_utf1
9a00: 36 6c 65 28 0a 20 20 73 71 6c 69 74 65 33 5f 63  6le(.  sqlite3_c
9a10: 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 0a 20  ontext *pCtx, . 
9a20: 20 69 6e 74 20 6e 41 72 67 2c 0a 20 20 73 71 6c   int nArg,.  sql
9a30: 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67  ite3_value **arg
9a40: 76 0a 29 7b 0a 20 20 54 63 6c 5f 49 6e 74 65 72  v.){.  Tcl_Inter
9a50: 70 20 2a 69 6e 74 65 72 70 3b 0a 20 20 54 63 6c  p *interp;.  Tcl
9a60: 5f 4f 62 6a 20 2a 70 58 3b 0a 20 20 73 71 6c 69  _Obj *pX;.  sqli
9a70: 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 3b  te3_value *pVal;
9a80: 0a 20 20 69 6e 74 65 72 70 20 3d 20 28 54 63 6c  .  interp = (Tcl
9a90: 5f 49 6e 74 65 72 70 20 2a 29 73 71 6c 69 74 65  _Interp *)sqlite
9aa0: 33 5f 75 73 65 72 5f 64 61 74 61 28 70 43 74 78  3_user_data(pCtx
9ab0: 29 3b 0a 20 20 70 58 20 3d 20 54 63 6c 5f 4e 65  );.  pX = Tcl_Ne
9ac0: 77 53 74 72 69 6e 67 4f 62 6a 28 22 74 65 73 74  wStringObj("test
9ad0: 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 2d 31 29 3b  _function", -1);
9ae0: 0a 20 20 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f  .  Tcl_IncrRefCo
9af0: 75 6e 74 28 70 58 29 3b 0a 20 20 54 63 6c 5f 4c  unt(pX);.  Tcl_L
9b00: 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d  istObjAppendElem
9b10: 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 58 2c 20  ent(interp, pX, 
9b20: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
9b30: 28 22 55 54 46 2d 31 36 4c 45 22 2c 20 2d 31 29  ("UTF-16LE", -1)
9b40: 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a  );.  Tcl_ListObj
9b50: 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e  AppendElement(in
9b60: 74 65 72 70 2c 20 70 58 2c 20 0a 20 20 20 20 20  terp, pX, .     
9b70: 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
9b80: 6a 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  j(sqlite3_value_
9b90: 74 65 78 74 28 61 72 67 76 5b 30 5d 29 2c 20 2d  text(argv[0]), -
9ba0: 31 29 29 3b 0a 20 20 54 63 6c 5f 45 76 61 6c 4f  1));.  Tcl_EvalO
9bb0: 62 6a 45 78 28 69 6e 74 65 72 70 2c 20 70 58 2c  bjEx(interp, pX,
9bc0: 20 30 29 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52   0);.  Tcl_DecrR
9bd0: 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a 20 20 70  efCount(pX);.  p
9be0: 56 61 6c 20 3d 20 73 71 6c 69 74 65 33 56 61 6c  Val = sqlite3Val
9bf0: 75 65 4e 65 77 28 29 3b 0a 20 20 73 71 6c 69 74  ueNew();.  sqlit
9c00: 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 70 56  e3ValueSetStr(pV
9c10: 61 6c 2c 20 2d 31 2c 20 54 63 6c 5f 47 65 74 53  al, -1, Tcl_GetS
9c20: 74 72 69 6e 67 52 65 73 75 6c 74 28 69 6e 74 65  tringResult(inte
9c30: 72 70 29 2c 20 0a 20 20 20 20 20 20 53 51 4c 49  rp), .      SQLI
9c40: 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f  TE_UTF8, SQLITE_
9c50: 53 54 41 54 49 43 29 3b 0a 20 20 73 71 6c 69 74  STATIC);.  sqlit
9c60: 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 70  e3_result_text(p
9c70: 43 74 78 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  Ctx,sqlite3_valu
9c80: 65 5f 74 65 78 74 28 70 56 61 6c 29 2c 2d 31 2c  e_text(pVal),-1,
9c90: 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54  SQLITE_TRANSIENT
9ca0: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75  );.  sqlite3Valu
9cb0: 65 46 72 65 65 28 70 56 61 6c 29 3b 0a 7d 0a 73  eFree(pVal);.}.s
9cc0: 74 61 74 69 63 20 76 6f 69 64 20 74 65 73 74 5f  tatic void test_
9cd0: 66 75 6e 63 74 69 6f 6e 5f 75 74 66 31 36 62 65  function_utf16be
9ce0: 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (.  sqlite3_cont
9cf0: 65 78 74 20 2a 70 43 74 78 2c 20 0a 20 20 69 6e  ext *pCtx, .  in
9d00: 74 20 6e 41 72 67 2c 0a 20 20 73 71 6c 69 74 65  t nArg,.  sqlite
9d10: 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76 0a 29  3_value **argv.)
9d20: 7b 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  {.  Tcl_Interp *
9d30: 69 6e 74 65 72 70 3b 0a 20 20 54 63 6c 5f 4f 62  interp;.  Tcl_Ob
9d40: 6a 20 2a 70 58 3b 0a 20 20 73 71 6c 69 74 65 33  j *pX;.  sqlite3
9d50: 5f 76 61 6c 75 65 20 2a 70 56 61 6c 3b 0a 20 20  _value *pVal;.  
9d60: 69 6e 74 65 72 70 20 3d 20 28 54 63 6c 5f 49 6e  interp = (Tcl_In
9d70: 74 65 72 70 20 2a 29 73 71 6c 69 74 65 33 5f 75  terp *)sqlite3_u
9d80: 73 65 72 5f 64 61 74 61 28 70 43 74 78 29 3b 0a  ser_data(pCtx);.
9d90: 20 20 70 58 20 3d 20 54 63 6c 5f 4e 65 77 53 74    pX = Tcl_NewSt
9da0: 72 69 6e 67 4f 62 6a 28 22 74 65 73 74 5f 66 75  ringObj("test_fu
9db0: 6e 63 74 69 6f 6e 22 2c 20 2d 31 29 3b 0a 20 20  nction", -1);.  
9dc0: 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74  Tcl_IncrRefCount
9dd0: 28 70 58 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74  (pX);.  Tcl_List
9de0: 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  ObjAppendElement
9df0: 28 69 6e 74 65 72 70 2c 20 70 58 2c 20 54 63 6c  (interp, pX, Tcl
9e00: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 55  _NewStringObj("U
9e10: 54 46 2d 31 36 42 45 22 2c 20 2d 31 29 29 3b 0a  TF-16BE", -1));.
9e20: 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70    Tcl_ListObjApp
9e30: 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72  endElement(inter
9e40: 70 2c 20 70 58 2c 20 0a 20 20 20 20 20 20 54 63  p, pX, .      Tc
9e50: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 73  l_NewStringObj(s
9e60: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
9e70: 74 28 61 72 67 76 5b 30 5d 29 2c 20 2d 31 29 29  t(argv[0]), -1))
9e80: 3b 0a 20 20 54 63 6c 5f 45 76 61 6c 4f 62 6a 45  ;.  Tcl_EvalObjE
9e90: 78 28 69 6e 74 65 72 70 2c 20 70 58 2c 20 30 29  x(interp, pX, 0)
9ea0: 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52 65 66 43  ;.  Tcl_DecrRefC
9eb0: 6f 75 6e 74 28 70 58 29 3b 0a 20 20 70 56 61 6c  ount(pX);.  pVal
9ec0: 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65 4e   = sqlite3ValueN
9ed0: 65 77 28 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  ew();.  sqlite3V
9ee0: 61 6c 75 65 53 65 74 53 74 72 28 70 56 61 6c 2c  alueSetStr(pVal,
9ef0: 20 2d 31 2c 20 54 63 6c 5f 47 65 74 53 74 72 69   -1, Tcl_GetStri
9f00: 6e 67 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29  ngResult(interp)
9f10: 2c 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  , .      SQLITE_
9f20: 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41  UTF8, SQLITE_STA
9f30: 54 49 43 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  TIC);.  sqlite3_
9f40: 72 65 73 75 6c 74 5f 74 65 78 74 31 36 6c 65 28  result_text16le(
9f50: 70 43 74 78 2c 20 73 71 6c 69 74 65 33 5f 76 61  pCtx, sqlite3_va
9f60: 6c 75 65 5f 74 65 78 74 31 36 6c 65 28 70 56 61  lue_text16le(pVa
9f70: 6c 29 2c 0a 20 20 20 20 20 20 2d 31 2c 20 53 51  l),.      -1, SQ
9f80: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
9f90: 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46  .  sqlite3ValueF
9fa0: 72 65 65 28 70 56 61 6c 29 3b 0a 7d 0a 23 65 6e  ree(pVal);.}.#en
9fb0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
9fc0: 49 54 5f 55 54 46 31 36 20 2a 2f 0a 73 74 61 74  IT_UTF16 */.stat
9fd0: 69 63 20 69 6e 74 20 74 65 73 74 5f 66 75 6e 63  ic int test_func
9fe0: 74 69 6f 6e 28 0a 20 20 76 6f 69 64 20 2a 20 63  tion(.  void * c
9ff0: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
a000: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
a010: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
a020: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
a030: 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20  jv[].){.#ifndef 
a040: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
a050: 36 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  6.  sqlite3 *db;
a060: 0a 20 20 69 6e 74 20 76 61 6c 3b 0a 0a 20 20 69  .  int val;..  i
a070: 66 28 20 6f 62 6a 63 21 3d 35 20 29 20 67 6f 74  f( objc!=5 ) got
a080: 6f 20 62 61 64 5f 61 72 67 73 3b 0a 20 20 69 66  o bad_args;.  if
a090: 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69  ( getDbPointer(i
a0a0: 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
a0b0: 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
a0c0: 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  db) ) return TCL
a0d0: 5f 45 52 52 4f 52 3b 0a 0a 20 20 69 66 28 20 54  _ERROR;..  if( T
a0e0: 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 42 6f  CL_OK!=Tcl_GetBo
a0f0: 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74  oleanFromObj(int
a100: 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 76  erp, objv[2], &v
a110: 61 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  al) ) return TCL
a120: 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 76 61  _ERROR;.  if( va
a130: 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
a140: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
a150: 28 64 62 2c 20 22 74 65 73 74 5f 66 75 6e 63 74  (db, "test_funct
a160: 69 6f 6e 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f  ion", 1, SQLITE_
a170: 55 54 46 38 2c 20 0a 20 20 20 20 20 20 20 20 69  UTF8, .        i
a180: 6e 74 65 72 70 2c 20 74 65 73 74 5f 66 75 6e 63  nterp, test_func
a190: 74 69 6f 6e 5f 75 74 66 38 2c 20 30 2c 20 30 29  tion_utf8, 0, 0)
a1a0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 54 43 4c 5f  ;.  }.  if( TCL_
a1b0: 4f 4b 21 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c 65  OK!=Tcl_GetBoole
a1c0: 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  anFromObj(interp
a1d0: 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 76 61 6c 29  , objv[3], &val)
a1e0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
a1f0: 52 4f 52 3b 0a 20 20 69 66 28 20 76 61 6c 20 29  ROR;.  if( val )
a200: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72  {.    sqlite3_cr
a210: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62  eate_function(db
a220: 2c 20 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e  , "test_function
a230: 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f 55 54 46  ", 1, SQLITE_UTF
a240: 31 36 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 69  16LE, .        i
a250: 6e 74 65 72 70 2c 20 74 65 73 74 5f 66 75 6e 63  nterp, test_func
a260: 74 69 6f 6e 5f 75 74 66 31 36 6c 65 2c 20 30 2c  tion_utf16le, 0,
a270: 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 54   0);.  }.  if( T
a280: 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 42 6f  CL_OK!=Tcl_GetBo
a290: 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74  oleanFromObj(int
a2a0: 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 26 76  erp, objv[4], &v
a2b0: 61 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  al) ) return TCL
a2c0: 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 76 61  _ERROR;.  if( va
a2d0: 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
a2e0: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
a2f0: 28 64 62 2c 20 22 74 65 73 74 5f 66 75 6e 63 74  (db, "test_funct
a300: 69 6f 6e 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f  ion", 1, SQLITE_
a310: 55 54 46 31 36 42 45 2c 20 0a 20 20 20 20 20 20  UTF16BE, .      
a320: 20 20 69 6e 74 65 72 70 2c 20 74 65 73 74 5f 66    interp, test_f
a330: 75 6e 63 74 69 6f 6e 5f 75 74 66 31 36 62 65 2c  unction_utf16be,
a340: 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 0a 20 20 72   0, 0);.  }..  r
a350: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 62 61  eturn TCL_OK;.ba
a360: 64 5f 61 72 67 73 3a 0a 20 20 54 63 6c 5f 41 70  d_args:.  Tcl_Ap
a370: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
a380: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
a390: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
a3a0: 0a 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74  .      Tcl_GetSt
a3b0: 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76  ringFromObj(objv
a3c0: 5b 30 5d 2c 20 30 29 2c 20 22 20 3c 44 42 3e 20  [0], 0), " <DB> 
a3d0: 3c 75 74 66 38 3e 20 3c 75 74 66 31 36 6c 65 3e  <utf8> <utf16le>
a3e0: 20 3c 75 74 66 31 36 62 65 3e 22 2c 20 30 29 3b   <utf16be>", 0);
a3f0: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
a400: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a  E_OMIT_UTF16 */.
a410: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
a420: 4f 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OR;.}../*.** Usa
a430: 67 65 3a 20 20 20 20 20 20 20 20 20 74 65 73 74  ge:         test
a440: 5f 65 72 72 73 74 72 20 3c 65 72 72 20 63 6f 64  _errstr <err cod
a450: 65 3e 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68  e>.**.** Test th
a460: 61 74 20 74 68 65 20 65 6e 67 6c 69 73 68 20 6c  at the english l
a470: 61 6e 67 75 61 67 65 20 73 74 72 69 6e 67 20 65  anguage string e
a480: 71 75 69 76 61 6c 65 6e 74 73 20 66 6f 72 20 73  quivalents for s
a490: 71 6c 69 74 65 20 65 72 72 6f 72 20 63 6f 64 65  qlite error code
a4a0: 73 0a 2a 2a 20 61 72 65 20 73 61 6e 65 2e 20 54  s.** are sane. T
a4b0: 68 65 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  he parameter is 
a4c0: 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65  an integer repre
a4d0: 73 65 6e 74 69 6e 67 20 61 6e 20 73 71 6c 69 74  senting an sqlit
a4e0: 65 20 65 72 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a  e error code..**
a4f0: 20 54 68 65 20 72 65 73 75 6c 74 20 69 73 20 61   The result is a
a500: 20 6c 69 73 74 20 6f 66 20 74 77 6f 20 65 6c 65   list of two ele
a510: 6d 65 6e 74 73 2c 20 74 68 65 20 73 74 72 69 6e  ments, the strin
a520: 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  g representation
a530: 20 6f 66 20 74 68 65 0a 2a 2a 20 65 72 72 6f 72   of the.** error
a540: 20 63 6f 64 65 20 61 6e 64 20 74 68 65 20 65 6e   code and the en
a550: 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20 65  glish language e
a560: 78 70 6c 61 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  xplanation..*/.s
a570: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 65  tatic int test_e
a580: 72 72 73 74 72 28 0a 20 20 76 6f 69 64 20 2a 20  rrstr(.  void * 
a590: 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
a5a0: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
a5b0: 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
a5c0: 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
a5d0: 62 6a 76 5b 5d 0a 29 7b 0a 20 20 63 68 61 72 20  bjv[].){.  char 
a5e0: 2a 7a 43 6f 64 65 3b 0a 20 20 69 6e 74 20 69 3b  *zCode;.  int i;
a5f0: 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 31 20 29  .  if( objc!=1 )
a600: 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e  {.    Tcl_WrongN
a610: 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31  umArgs(interp, 1
a620: 2c 20 6f 62 6a 76 2c 20 22 3c 65 72 72 6f 72 20  , objv, "<error 
a630: 63 6f 64 65 3e 22 29 3b 0a 20 20 7d 0a 0a 20 20  code>");.  }..  
a640: 7a 43 6f 64 65 20 3d 20 54 63 6c 5f 47 65 74 53  zCode = Tcl_GetS
a650: 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 3b 0a  tring(objv[1]);.
a660: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 32 30 30    for(i=0; i<200
a670: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20  ; i++){.    if( 
a680: 30 3d 3d 73 74 72 63 6d 70 28 65 72 72 6f 72 4e  0==strcmp(errorN
a690: 61 6d 65 28 69 29 2c 20 7a 43 6f 64 65 29 20 29  ame(i), zCode) )
a6a0: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 54 63   break;.  }.  Tc
a6b0: 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65  l_SetResult(inte
a6c0: 72 70 2c 20 28 63 68 61 72 20 2a 29 73 71 6c 69  rp, (char *)sqli
a6d0: 74 65 33 45 72 72 53 74 72 28 69 29 2c 20 30 29  te3ErrStr(i), 0)
a6e0: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
a6f0: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
a700: 65 3a 20 20 20 20 62 72 65 61 6b 70 6f 69 6e 74  e:    breakpoint
a710: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  .**.** This rout
a720: 69 6e 65 20 65 78 69 73 74 73 20 66 6f 72 20 6f  ine exists for o
a730: 6e 65 20 70 75 72 70 6f 73 65 20 2d 20 74 6f 20  ne purpose - to 
a740: 70 72 6f 76 69 64 65 20 61 20 70 6c 61 63 65 20  provide a place 
a750: 74 6f 20 70 75 74 20 61 0a 2a 2a 20 62 72 65 61  to put a.** brea
a760: 6b 70 6f 69 6e 74 20 77 69 74 68 20 47 44 42 20  kpoint with GDB 
a770: 74 68 61 74 20 63 61 6e 20 62 65 20 74 72 69 67  that can be trig
a780: 67 65 72 65 64 20 75 73 69 6e 67 20 54 43 4c 20  gered using TCL 
a790: 63 6f 64 65 2e 20 20 54 68 65 20 75 73 65 0a 2a  code.  The use.*
a7a0: 2a 20 66 6f 72 20 74 68 69 73 20 69 73 20 77 68  * for this is wh
a7b0: 65 6e 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  en a particular 
a7c0: 74 65 73 74 20 66 61 69 6c 73 20 6f 6e 20 28 73  test fails on (s
a7d0: 61 79 29 20 74 68 65 20 31 34 38 35 74 68 20 69  ay) the 1485th i
a7e0: 74 65 72 61 74 69 6f 6e 2e 0a 2a 2a 20 49 6e 20  teration..** In 
a7f0: 74 68 65 20 54 43 4c 20 74 65 73 74 20 73 63 72  the TCL test scr
a800: 69 70 74 2c 20 77 65 20 63 61 6e 20 61 64 64 20  ipt, we can add 
a810: 63 6f 64 65 20 6c 69 6b 65 20 74 68 69 73 3a 0a  code like this:.
a820: 2a 2a 0a 2a 2a 20 20 20 20 20 69 66 20 7b 24 69  **.**     if {$i
a830: 3d 3d 31 34 38 35 7d 20 62 72 65 61 6b 70 6f 69  ==1485} breakpoi
a840: 6e 74 0a 2a 2a 0a 2a 2a 20 54 68 65 6e 20 72 75  nt.**.** Then ru
a850: 6e 20 74 65 73 74 66 69 78 74 75 72 65 20 69 6e  n testfixture in
a860: 20 74 68 65 20 64 65 62 75 67 67 65 72 20 61 6e   the debugger an
a870: 64 20 77 61 69 74 20 66 6f 72 20 74 68 65 20 62  d wait for the b
a880: 72 65 61 6b 70 6f 69 6e 74 20 74 6f 0a 2a 2a 20  reakpoint to.** 
a890: 66 69 72 65 2e 20 20 54 68 65 6e 20 61 64 64 69  fire.  Then addi
a8a0: 74 69 6f 6e 61 6c 20 62 72 65 61 6b 70 6f 69 6e  tional breakpoin
a8b0: 74 73 20 63 61 6e 20 62 65 20 73 65 74 20 74 6f  ts can be set to
a8c0: 20 74 72 61 63 65 20 64 6f 77 6e 20 74 68 65 20   trace down the 
a8d0: 62 75 67 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  bug..*/.static i
a8e0: 6e 74 20 74 65 73 74 5f 62 72 65 61 6b 70 6f 69  nt test_breakpoi
a8f0: 6e 74 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55  nt(.  void *NotU
a900: 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  sed,.  Tcl_Inter
a910: 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
a920: 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
a930: 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
a940: 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
a950: 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20  /.  int argc,   
a960: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
a970: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
a980: 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72  s */.  char **ar
a990: 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  gv            /*
a9a0: 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72   Text of each ar
a9b0: 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 72  gument */.){.  r
a9c0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 20 20 20  eturn TCL_OK;   
a9d0: 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 68        /* Do noth
a9e0: 69 6e 67 20 2a 2f 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  ing */.}../*.** 
a9f0: 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33  Usage:   sqlite3
aa00: 5f 62 69 6e 64 5f 69 6e 74 20 20 53 54 4d 54 20  _bind_int  STMT 
aa10: 4e 20 56 41 4c 55 45 0a 2a 2a 0a 2a 2a 20 54 65  N VALUE.**.** Te
aa20: 73 74 20 74 68 65 20 73 71 6c 69 74 65 33 5f 62  st the sqlite3_b
aa30: 69 6e 64 5f 69 6e 74 20 69 6e 74 65 72 66 61 63  ind_int interfac
aa40: 65 2e 20 20 53 54 4d 54 20 69 73 20 61 20 70 72  e.  STMT is a pr
aa50: 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
aa60: 2e 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20 69 6e  ..** N is the in
aa70: 64 65 78 20 6f 66 20 61 20 77 69 6c 64 63 61 72  dex of a wildcar
aa80: 64 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65  d in the prepare
aa90: 64 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  d statement.  Th
aaa0: 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69  is command.** bi
aab0: 6e 64 73 20 61 20 33 32 2d 62 69 74 20 69 6e 74  nds a 32-bit int
aac0: 65 67 65 72 20 56 41 4c 55 45 20 74 6f 20 74 68  eger VALUE to th
aad0: 61 74 20 77 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a  at wildcard..*/.
aae0: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
aaf0: 62 69 6e 64 5f 69 6e 74 28 0a 20 20 76 6f 69 64  bind_int(.  void
ab00: 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
ab10: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
ab20: 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
ab30: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
ab40: 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
ab50: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
ab60: 74 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20  t;.  int idx;.  
ab70: 69 6e 74 20 76 61 6c 75 65 3b 0a 20 20 69 6e 74  int value;.  int
ab80: 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63   rc;..  if( objc
ab90: 21 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=4 ){.    Tcl_A
aba0: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
abb0: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
abc0: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
abd0: 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65  ,.        Tcl_Ge
abe0: 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f  tStringFromObj(o
abf0: 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 53 54  bjv[0], 0), " ST
ac00: 4d 54 20 4e 20 56 41 4c 55 45 22 2c 20 30 29 3b  MT N VALUE", 0);
ac10: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
ac20: 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66  ERROR;.  }..  if
ac30: 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
ac40: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
ac50: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
ac60: 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
ac70: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
ac80: 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f  f( Tcl_GetIntFro
ac90: 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
aca0: 76 5b 32 5d 2c 20 26 69 64 78 29 20 29 20 72 65  v[2], &idx) ) re
acb0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
acc0: 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
acd0: 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
ace0: 6f 62 6a 76 5b 33 5d 2c 20 26 76 61 6c 75 65 29  objv[3], &value)
acf0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
ad00: 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c  ROR;..  rc = sql
ad10: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 70 53  ite3_bind_int(pS
ad20: 74 6d 74 2c 20 69 64 78 2c 20 76 61 6c 75 65 29  tmt, idx, value)
ad30: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54  ;.  if( sqlite3T
ad40: 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72  estErrCode(inter
ad50: 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74 6d  p, StmtToDb(pStm
ad60: 74 29 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e  t), rc) ) return
ad70: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
ad80: 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
ad90: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  ){.    return TC
ada0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
adb0: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
adc0: 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  .../*.** Usage: 
add0: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69    sqlite3_bind_i
ade0: 6e 74 36 34 20 20 53 54 4d 54 20 4e 20 56 41 4c  nt64  STMT N VAL
adf0: 55 45 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68  UE.**.** Test th
ae00: 65 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  e sqlite3_bind_i
ae10: 6e 74 36 34 20 69 6e 74 65 72 66 61 63 65 2e 20  nt64 interface. 
ae20: 20 53 54 4d 54 20 69 73 20 61 20 70 72 65 70 61   STMT is a prepa
ae30: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  red statement..*
ae40: 2a 20 4e 20 69 73 20 74 68 65 20 69 6e 64 65 78  * N is the index
ae50: 20 6f 66 20 61 20 77 69 6c 64 63 61 72 64 20 69   of a wildcard i
ae60: 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  n the prepared s
ae70: 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 69 73 20  tatement.  This 
ae80: 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64 73  command.** binds
ae90: 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65   a 64-bit intege
aea0: 72 20 56 41 4c 55 45 20 74 6f 20 74 68 61 74 20  r VALUE to that 
aeb0: 77 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73 74 61  wildcard..*/.sta
aec0: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e  tic int test_bin
aed0: 64 5f 69 6e 74 36 34 28 0a 20 20 76 6f 69 64 20  d_int64(.  void 
aee0: 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
aef0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
af00: 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
af10: 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
af20: 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
af30: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
af40: 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 69  ;.  int idx;.  i
af50: 36 34 20 76 61 6c 75 65 3b 0a 20 20 69 6e 74 20  64 value;.  int 
af60: 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  rc;..  if( objc!
af70: 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =4 ){.    Tcl_Ap
af80: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
af90: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
afa0: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
afb0: 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74  .        Tcl_Get
afc0: 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62  StringFromObj(ob
afd0: 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 53 54 4d  jv[0], 0), " STM
afe0: 54 20 4e 20 56 41 4c 55 45 22 2c 20 30 29 3b 0a  T N VALUE", 0);.
aff0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
b000: 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  RROR;.  }..  if(
b010: 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28   getStmtPointer(
b020: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
b030: 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
b040: 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e  &pStmt) ) return
b050: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
b060: 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d  ( Tcl_GetIntFrom
b070: 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
b080: 5b 32 5d 2c 20 26 69 64 78 29 20 29 20 72 65 74  [2], &idx) ) ret
b090: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
b0a0: 20 69 66 28 20 54 63 6c 5f 47 65 74 57 69 64 65   if( Tcl_GetWide
b0b0: 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
b0c0: 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 76 61 6c  p, objv[3], &val
b0d0: 75 65 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  ue) ) return TCL
b0e0: 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20  _ERROR;..  rc = 
b0f0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
b100: 36 34 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 76  64(pStmt, idx, v
b110: 61 6c 75 65 29 3b 0a 20 20 69 66 28 20 73 71 6c  alue);.  if( sql
b120: 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28  ite3TestErrCode(
b130: 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62  interp, StmtToDb
b140: 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29 20 72  (pStmt), rc) ) r
b150: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
b160: 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
b170: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74 75  E_OK ){.    retu
b180: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
b190: 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  }..  return TCL_
b1a0: 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73  OK;.}.../*.** Us
b1b0: 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 62  age:   sqlite3_b
b1c0: 69 6e 64 5f 64 6f 75 62 6c 65 20 20 53 54 4d 54  ind_double  STMT
b1d0: 20 4e 20 56 41 4c 55 45 0a 2a 2a 0a 2a 2a 20 54   N VALUE.**.** T
b1e0: 65 73 74 20 74 68 65 20 73 71 6c 69 74 65 33 5f  est the sqlite3_
b1f0: 62 69 6e 64 5f 64 6f 75 62 6c 65 20 69 6e 74 65  bind_double inte
b200: 72 66 61 63 65 2e 20 20 53 54 4d 54 20 69 73 20  rface.  STMT is 
b210: 61 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  a prepared state
b220: 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20 74 68  ment..** N is th
b230: 65 20 69 6e 64 65 78 20 6f 66 20 61 20 77 69 6c  e index of a wil
b240: 64 63 61 72 64 20 69 6e 20 74 68 65 20 70 72 65  dcard in the pre
b250: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e  pared statement.
b260: 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a    This command.*
b270: 2a 20 62 69 6e 64 73 20 61 20 36 34 2d 62 69 74  * binds a 64-bit
b280: 20 69 6e 74 65 67 65 72 20 56 41 4c 55 45 20 74   integer VALUE t
b290: 6f 20 74 68 61 74 20 77 69 6c 64 63 61 72 64 2e  o that wildcard.
b2a0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
b2b0: 65 73 74 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28  est_bind_double(
b2c0: 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
b2d0: 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
b2e0: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
b2f0: 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
b300: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
b310: 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
b320: 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20  t *pStmt;.  int 
b330: 69 64 78 3b 0a 20 20 64 6f 75 62 6c 65 20 76 61  idx;.  double va
b340: 6c 75 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  lue;.  int rc;..
b350: 20 20 69 66 28 20 6f 62 6a 63 21 3d 34 20 29 7b    if( objc!=4 ){
b360: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
b370: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
b380: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
b390: 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20  uld be \"",.    
b3a0: 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
b3b0: 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d  gFromObj(objv[0]
b3c0: 2c 20 30 29 2c 20 22 20 53 54 4d 54 20 4e 20 56  , 0), " STMT N V
b3d0: 41 4c 55 45 22 2c 20 30 29 3b 0a 20 20 20 20 72  ALUE", 0);.    r
b3e0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
b3f0: 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53  .  }..  if( getS
b400: 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tmtPointer(inter
b410: 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
b420: 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d  (objv[1]), &pStm
b430: 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  t) ) return TCL_
b440: 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c  ERROR;.  if( Tcl
b450: 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
b460: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20  nterp, objv[2], 
b470: 26 69 64 78 29 20 29 20 72 65 74 75 72 6e 20 54  &idx) ) return T
b480: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
b490: 54 63 6c 5f 47 65 74 44 6f 75 62 6c 65 46 72 6f  Tcl_GetDoubleFro
b4a0: 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
b4b0: 76 5b 33 5d 2c 20 26 76 61 6c 75 65 29 20 29 20  v[3], &value) ) 
b4c0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
b4d0: 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  ;..  rc = sqlite
b4e0: 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 70 53  3_bind_double(pS
b4f0: 74 6d 74 2c 20 69 64 78 2c 20 76 61 6c 75 65 29  tmt, idx, value)
b500: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54  ;.  if( sqlite3T
b510: 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72  estErrCode(inter
b520: 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74 6d  p, StmtToDb(pStm
b530: 74 29 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e  t), rc) ) return
b540: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
b550: 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
b560: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  ){.    return TC
b570: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
b580: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
b590: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
b5a0: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75   sqlite3_bind_nu
b5b0: 6c 6c 20 20 53 54 4d 54 20 4e 0a 2a 2a 0a 2a 2a  ll  STMT N.**.**
b5c0: 20 54 65 73 74 20 74 68 65 20 73 71 6c 69 74 65   Test the sqlite
b5d0: 33 5f 62 69 6e 64 5f 6e 75 6c 6c 20 69 6e 74 65  3_bind_null inte
b5e0: 72 66 61 63 65 2e 20 20 53 54 4d 54 20 69 73 20  rface.  STMT is 
b5f0: 61 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  a prepared state
b600: 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20 74 68  ment..** N is th
b610: 65 20 69 6e 64 65 78 20 6f 66 20 61 20 77 69 6c  e index of a wil
b620: 64 63 61 72 64 20 69 6e 20 74 68 65 20 70 72 65  dcard in the pre
b630: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e  pared statement.
b640: 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a    This command.*
b650: 2a 20 62 69 6e 64 73 20 61 20 4e 55 4c 4c 20 74  * binds a NULL t
b660: 6f 20 74 68 65 20 77 69 6c 64 63 61 72 64 2e 0a  o the wildcard..
b670: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
b680: 73 74 5f 62 69 6e 64 5f 6e 75 6c 6c 28 0a 20 20  st_bind_null(.  
b690: 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
b6a0: 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
b6b0: 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
b6c0: 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
b6d0: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
b6e0: 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
b6f0: 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78  pStmt;.  int idx
b700: 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69  ;.  int rc;..  i
b710: 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20  f( objc!=3 ){.  
b720: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
b730: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
b740: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
b750: 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20   be \"",.       
b760: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72   Tcl_GetStringFr
b770: 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30  omObj(objv[0], 0
b780: 29 2c 20 22 20 53 54 4d 54 20 4e 22 2c 20 30 29  ), " STMT N", 0)
b790: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
b7a0: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69  _ERROR;.  }..  i
b7b0: 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
b7c0: 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
b7d0: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
b7e0: 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
b7f0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
b800: 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72  if( Tcl_GetIntFr
b810: 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
b820: 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20 29 20 72  jv[2], &idx) ) r
b830: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
b840: 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ..  rc = sqlite3
b850: 5f 62 69 6e 64 5f 6e 75 6c 6c 28 70 53 74 6d 74  _bind_null(pStmt
b860: 2c 20 69 64 78 29 3b 0a 20 20 69 66 28 20 73 71  , idx);.  if( sq
b870: 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65  lite3TestErrCode
b880: 28 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f 44  (interp, StmtToD
b890: 62 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29 20  b(pStmt), rc) ) 
b8a0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
b8b0: 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ;.  if( rc!=SQLI
b8c0: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74  TE_OK ){.    ret
b8d0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
b8e0: 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54 43 4c   }..  return TCL
b8f0: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
b900: 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 62  age:   sqlite3_b
b910: 69 6e 64 5f 74 65 78 74 20 20 53 54 4d 54 20 4e  ind_text  STMT N
b920: 20 53 54 52 49 4e 47 20 42 59 54 45 53 0a 2a 2a   STRING BYTES.**
b930: 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 73 71 6c  .** Test the sql
b940: 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 20 69  ite3_bind_text i
b950: 6e 74 65 72 66 61 63 65 2e 20 20 53 54 4d 54 20  nterface.  STMT 
b960: 69 73 20 61 20 70 72 65 70 61 72 65 64 20 73 74  is a prepared st
b970: 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73  atement..** N is
b980: 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20   the index of a 
b990: 77 69 6c 64 63 61 72 64 20 69 6e 20 74 68 65 20  wildcard in the 
b9a0: 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
b9b0: 6e 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e  nt.  This comman
b9c0: 64 0a 2a 2a 20 62 69 6e 64 73 20 61 20 55 54 46  d.** binds a UTF
b9d0: 2d 38 20 73 74 72 69 6e 67 20 53 54 52 49 4e 47  -8 string STRING
b9e0: 20 74 6f 20 74 68 65 20 77 69 6c 64 63 61 72 64   to the wildcard
b9f0: 2e 20 20 54 68 65 20 73 74 72 69 6e 67 20 69 73  .  The string is
ba00: 20 42 59 54 45 53 20 62 79 74 65 73 0a 2a 2a 20   BYTES bytes.** 
ba10: 6c 6f 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  long..*/.static 
ba20: 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f 74 65  int test_bind_te
ba30: 78 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  xt(.  void * cli
ba40: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
ba50: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
ba60: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
ba70: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
ba80: 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  [].){.  sqlite3_
ba90: 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69  stmt *pStmt;.  i
baa0: 6e 74 20 69 64 78 3b 0a 20 20 69 6e 74 20 62 79  nt idx;.  int by
bab0: 74 65 73 3b 0a 20 20 63 68 61 72 20 2a 76 61 6c  tes;.  char *val
bac0: 75 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20  ue;.  int rc;.. 
bad0: 20 69 66 28 20 6f 62 6a 63 21 3d 35 20 29 7b 0a   if( objc!=5 ){.
bae0: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
baf0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
bb00: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
bb10: 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20  ld be \"",.     
bb20: 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
bb30: 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c  FromObj(objv[0],
bb40: 20 30 29 2c 20 22 20 53 54 4d 54 20 4e 20 56 41   0), " STMT N VA
bb50: 4c 55 45 20 42 59 54 45 53 22 2c 20 30 29 3b 0a  LUE BYTES", 0);.
bb60: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
bb70: 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  RROR;.  }..  if(
bb80: 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28   getStmtPointer(
bb90: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
bba0: 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
bbb0: 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e  &pStmt) ) return
bbc0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
bbd0: 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d  ( Tcl_GetIntFrom
bbe0: 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
bbf0: 5b 32 5d 2c 20 26 69 64 78 29 20 29 20 72 65 74  [2], &idx) ) ret
bc00: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
bc10: 20 76 61 6c 75 65 20 3d 20 54 63 6c 5f 47 65 74   value = Tcl_Get
bc20: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 33 5d 29 3b  String(objv[3]);
bc30: 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e  .  if( Tcl_GetIn
bc40: 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
bc50: 20 6f 62 6a 76 5b 34 5d 2c 20 26 62 79 74 65 73   objv[4], &bytes
bc60: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
bc70: 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71  RROR;..  rc = sq
bc80: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28  lite3_bind_text(
bc90: 70 53 74 6d 74 2c 20 69 64 78 2c 20 76 61 6c 75  pStmt, idx, valu
bca0: 65 2c 20 62 79 74 65 73 2c 20 53 51 4c 49 54 45  e, bytes, SQLITE
bcb0: 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 69  _TRANSIENT);.  i
bcc0: 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72  f( sqlite3TestEr
bcd0: 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 53 74  rCode(interp, St
bce0: 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 2c 20 72  mtToDb(pStmt), r
bcf0: 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  c) ) return TCL_
bd00: 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 63 21  ERROR;.  if( rc!
bd10: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
bd20: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
bd30: 6c 74 28 69 6e 74 65 72 70 2c 20 73 71 6c 69 74  lt(interp, sqlit
bd40: 65 33 54 65 73 74 45 72 72 6f 72 4e 61 6d 65 28  e3TestErrorName(
bd50: 72 63 29 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  rc), 0);.    ret
bd60: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
bd70: 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54 43 4c   }..  return TCL
bd80: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
bd90: 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 62  age:   sqlite3_b
bda0: 69 6e 64 5f 74 65 78 74 31 36 20 20 53 54 4d 54  ind_text16  STMT
bdb0: 20 4e 20 53 54 52 49 4e 47 20 42 59 54 45 53 0a   N STRING BYTES.
bdc0: 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 73  **.** Test the s
bdd0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74  qlite3_bind_text
bde0: 31 36 20 69 6e 74 65 72 66 61 63 65 2e 20 20 53  16 interface.  S
bdf0: 54 4d 54 20 69 73 20 61 20 70 72 65 70 61 72 65  TMT is a prepare
be00: 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20  d statement..** 
be10: 4e 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  N is the index o
be20: 66 20 61 20 77 69 6c 64 63 61 72 64 20 69 6e 20  f a wildcard in 
be30: 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
be40: 74 65 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 6f  tement.  This co
be50: 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64 73 20 61  mmand.** binds a
be60: 20 55 54 46 2d 31 36 20 73 74 72 69 6e 67 20 53   UTF-16 string S
be70: 54 52 49 4e 47 20 74 6f 20 74 68 65 20 77 69 6c  TRING to the wil
be80: 64 63 61 72 64 2e 20 20 54 68 65 20 73 74 72 69  dcard.  The stri
be90: 6e 67 20 69 73 20 42 59 54 45 53 20 62 79 74 65  ng is BYTES byte
bea0: 73 0a 2a 2a 20 6c 6f 6e 67 2e 0a 2a 2f 0a 73 74  s.** long..*/.st
beb0: 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69  atic int test_bi
bec0: 6e 64 5f 74 65 78 74 31 36 28 0a 20 20 76 6f 69  nd_text16(.  voi
bed0: 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
bee0: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
bef0: 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
bf00: 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
bf10: 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66  ST objv[].){.#if
bf20: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
bf30: 5f 55 54 46 31 36 0a 20 20 73 71 6c 69 74 65 33  _UTF16.  sqlite3
bf40: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20  _stmt *pStmt;.  
bf50: 69 6e 74 20 69 64 78 3b 0a 20 20 69 6e 74 20 62  int idx;.  int b
bf60: 79 74 65 73 3b 0a 20 20 63 68 61 72 20 2a 76 61  ytes;.  char *va
bf70: 6c 75 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  lue;.  int rc;..
bf80: 20 20 69 66 28 20 6f 62 6a 63 21 3d 35 20 29 7b    if( objc!=5 ){
bf90: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
bfa0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
bfb0: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
bfc0: 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20  uld be \"",.    
bfd0: 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
bfe0: 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d  gFromObj(objv[0]
bff0: 2c 20 30 29 2c 20 22 20 53 54 4d 54 20 4e 20 56  , 0), " STMT N V
c000: 41 4c 55 45 20 42 59 54 45 53 22 2c 20 30 29 3b  ALUE BYTES", 0);
c010: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
c020: 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66  ERROR;.  }..  if
c030: 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
c040: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
c050: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
c060: 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
c070: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
c080: 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f  f( Tcl_GetIntFro
c090: 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
c0a0: 76 5b 32 5d 2c 20 26 69 64 78 29 20 29 20 72 65  v[2], &idx) ) re
c0b0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
c0c0: 20 20 76 61 6c 75 65 20 3d 20 54 63 6c 5f 47 65    value = Tcl_Ge
c0d0: 74 42 79 74 65 41 72 72 61 79 46 72 6f 6d 4f 62  tByteArrayFromOb
c0e0: 6a 28 6f 62 6a 76 5b 33 5d 2c 20 30 29 3b 0a 20  j(objv[3], 0);. 
c0f0: 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46   if( Tcl_GetIntF
c100: 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
c110: 62 6a 76 5b 34 5d 2c 20 26 62 79 74 65 73 29 20  bjv[4], &bytes) 
c120: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
c130: 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69  OR;..  rc = sqli
c140: 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 31 36 28  te3_bind_text16(
c150: 70 53 74 6d 74 2c 20 69 64 78 2c 20 28 76 6f 69  pStmt, idx, (voi
c160: 64 20 2a 29 76 61 6c 75 65 2c 20 62 79 74 65 73  d *)value, bytes
c170: 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  , SQLITE_TRANSIE
c180: 4e 54 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  NT);.  if( sqlit
c190: 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e  e3TestErrCode(in
c1a0: 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70  terp, StmtToDb(p
c1b0: 53 74 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74  Stmt), rc) ) ret
c1c0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
c1d0: 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
c1e0: 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  OK ){.    return
c1f0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
c200: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
c210: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a  E_OMIT_UTF16 */.
c220: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
c230: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
c240: 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f     sqlite3_bind_
c250: 62 6c 6f 62 20 20 53 54 4d 54 20 4e 20 44 41 54  blob  STMT N DAT
c260: 41 20 42 59 54 45 53 0a 2a 2a 0a 2a 2a 20 54 65  A BYTES.**.** Te
c270: 73 74 20 74 68 65 20 73 71 6c 69 74 65 33 5f 62  st the sqlite3_b
c280: 69 6e 64 5f 62 6c 6f 62 20 69 6e 74 65 72 66 61  ind_blob interfa
c290: 63 65 2e 20 20 53 54 4d 54 20 69 73 20 61 20 70  ce.  STMT is a p
c2a0: 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
c2b0: 74 2e 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20 69  t..** N is the i
c2c0: 6e 64 65 78 20 6f 66 20 61 20 77 69 6c 64 63 61  ndex of a wildca
c2d0: 72 64 20 69 6e 20 74 68 65 20 70 72 65 70 61 72  rd in the prepar
c2e0: 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  ed statement.  T
c2f0: 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62  his command.** b
c300: 69 6e 64 73 20 61 20 42 4c 4f 42 20 74 6f 20 74  inds a BLOB to t
c310: 68 65 20 77 69 6c 64 63 61 72 64 2e 20 20 54 68  he wildcard.  Th
c320: 65 20 42 4c 4f 42 20 69 73 20 42 59 54 45 53 20  e BLOB is BYTES 
c330: 62 79 74 65 73 20 69 6e 20 73 69 7a 65 2e 0a 2a  bytes in size..*
c340: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
c350: 74 5f 62 69 6e 64 5f 62 6c 6f 62 28 0a 20 20 76  t_bind_blob(.  v
c360: 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
c370: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
c380: 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
c390: 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
c3a0: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
c3b0: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
c3c0: 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78 3b  Stmt;.  int idx;
c3d0: 0a 20 20 69 6e 74 20 62 79 74 65 73 3b 0a 20 20  .  int bytes;.  
c3e0: 63 68 61 72 20 2a 76 61 6c 75 65 3b 0a 20 20 69  char *value;.  i
c3f0: 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62  nt rc;..  if( ob
c400: 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=5 ){.    Tcl
c410: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
c420: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
c430: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
c440: 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f  "",.        Tcl_
c450: 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a  GetStringFromObj
c460: 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20  (objv[0], 0), " 
c470: 53 54 4d 54 20 4e 20 44 41 54 41 20 42 59 54 45  STMT N DATA BYTE
c480: 53 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  S", 0);.    retu
c490: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
c4a0: 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74  }..  if( getStmt
c4b0: 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
c4c0: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
c4d0: 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20  jv[1]), &pStmt) 
c4e0: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
c4f0: 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65  OR;.  if( Tcl_Ge
c500: 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65  tIntFromObj(inte
c510: 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 69 64  rp, objv[2], &id
c520: 78 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  x) ) return TCL_
c530: 45 52 52 4f 52 3b 0a 20 20 76 61 6c 75 65 20 3d  ERROR;.  value =
c540: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
c550: 62 6a 76 5b 33 5d 29 3b 0a 20 20 69 66 28 20 54  bjv[3]);.  if( T
c560: 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a  cl_GetIntFromObj
c570: 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 34 5d  (interp, objv[4]
c580: 2c 20 26 62 79 74 65 73 29 20 29 20 72 65 74 75  , &bytes) ) retu
c590: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20  rn TCL_ERROR;.. 
c5a0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69   rc = sqlite3_bi
c5b0: 6e 64 5f 62 6c 6f 62 28 70 53 74 6d 74 2c 20 69  nd_blob(pStmt, i
c5c0: 64 78 2c 20 76 61 6c 75 65 2c 20 62 79 74 65 73  dx, value, bytes
c5d0: 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  , SQLITE_TRANSIE
c5e0: 4e 54 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  NT);.  if( sqlit
c5f0: 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e  e3TestErrCode(in
c600: 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70  terp, StmtToDb(p
c610: 53 74 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74  Stmt), rc) ) ret
c620: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
c630: 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
c640: 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  OK ){.    return
c650: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
c660: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
c670: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
c680: 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  :   sqlite3_bind
c690: 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74  _parameter_count
c6a0: 20 20 53 54 4d 54 0a 2a 2a 0a 2a 2a 20 52 65 74    STMT.**.** Ret
c6b0: 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
c6c0: 66 20 77 69 6c 64 63 61 72 64 73 20 69 6e 20 74  f wildcards in t
c6d0: 68 65 20 67 69 76 65 6e 20 73 74 61 74 65 6d 65  he given stateme
c6e0: 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  nt..*/.static in
c6f0: 74 20 74 65 73 74 5f 62 69 6e 64 5f 70 61 72 61  t test_bind_para
c700: 6d 65 74 65 72 5f 63 6f 75 6e 74 28 0a 20 20 76  meter_count(.  v
c710: 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
c720: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
c730: 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
c740: 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
c750: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
c760: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
c770: 53 74 6d 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  Stmt;..  if( obj
c780: 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
c790: 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74  WrongNumArgs(int
c7a0: 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 53  erp, 1, objv, "S
c7b0: 54 4d 54 22 29 3b 0a 20 20 20 20 72 65 74 75 72  TMT");.    retur
c7c0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
c7d0: 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f  .  if( getStmtPo
c7e0: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
c7f0: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
c800: 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20  [1]), &pStmt) ) 
c810: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
c820: 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65  ;.  Tcl_SetObjRe
c830: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
c840: 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74  _NewIntObj(sqlit
c850: 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
c860: 72 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29 29 29  r_count(pStmt)))
c870: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
c880: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
c890: 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e  e:   sqlite3_bin
c8a0: 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
c8b0: 20 20 53 54 4d 54 20 20 4e 0a 2a 2a 0a 2a 2a 20    STMT  N.**.** 
c8c0: 52 65 74 75 72 6e 20 74 68 65 20 6e 61 6d 65 20  Return the name 
c8d0: 6f 66 20 74 68 65 20 4e 74 68 20 77 69 6c 64 63  of the Nth wildc
c8e0: 61 72 64 2e 20 20 54 68 65 20 66 69 72 73 74 20  ard.  The first 
c8f0: 77 69 6c 64 63 61 72 64 20 69 73 20 31 2e 0a 2a  wildcard is 1..*
c900: 2a 20 41 6e 20 65 6d 70 74 79 20 73 74 72 69 6e  * An empty strin
c910: 67 20 69 73 20 72 65 74 75 72 6e 65 64 20 69 66  g is returned if
c920: 20 4e 20 69 73 20 6f 75 74 20 6f 66 20 72 61 6e   N is out of ran
c930: 67 65 20 6f 72 20 69 66 20 74 68 65 20 77 69 6c  ge or if the wil
c940: 64 63 61 72 64 0a 2a 2a 20 69 73 20 6e 61 6d 65  dcard.** is name
c950: 6c 65 73 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  less..*/.static 
c960: 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f 70 61  int test_bind_pa
c970: 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 0a 20 20  rameter_name(.  
c980: 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
c990: 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
c9a0: 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
c9b0: 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
c9c0: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
c9d0: 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
c9e0: 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 3b 0a  pStmt;.  int i;.
c9f0: 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29  .  if( objc!=3 )
ca00: 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e  {.    Tcl_WrongN
ca10: 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31  umArgs(interp, 1
ca20: 2c 20 6f 62 6a 76 2c 20 22 53 54 4d 54 20 4e 22  , objv, "STMT N"
ca30: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
ca40: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
ca50: 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
ca60: 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
ca70: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
ca80: 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
ca90: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
caa0: 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72  if( Tcl_GetIntFr
cab0: 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
cac0: 6a 76 5b 32 5d 2c 20 26 69 29 20 29 20 72 65 74  jv[2], &i) ) ret
cad0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
cae0: 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c   Tcl_SetObjResul
caf0: 74 28 69 6e 74 65 72 70 2c 20 0a 20 20 20 20 20  t(interp, .     
cb00: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
cb10: 28 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61  (sqlite3_bind_pa
cb20: 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 70 53 74  rameter_name(pSt
cb30: 6d 74 2c 69 29 2c 2d 31 29 0a 20 20 29 3b 0a 20  mt,i),-1).  );. 
cb40: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
cb50: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
cb60: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70    sqlite3_bind_p
cb70: 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 20 20  arameter_index  
cb80: 53 54 4d 54 20 20 4e 41 4d 45 0a 2a 2a 0a 2a 2a  STMT  NAME.**.**
cb90: 20 52 65 74 75 72 6e 20 74 68 65 20 69 6e 64 65   Return the inde
cba0: 78 20 6f 66 20 74 68 65 20 77 69 6c 64 63 61 72  x of the wildcar
cbb0: 64 20 63 61 6c 6c 65 64 20 4e 41 4d 45 2e 20 20  d called NAME.  
cbc0: 52 65 74 75 72 6e 20 30 20 69 66 20 74 68 65 72  Return 0 if ther
cbd0: 65 20 69 73 0a 2a 2a 20 6e 6f 20 73 75 63 68 20  e is.** no such 
cbe0: 77 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73 74 61  wildcard..*/.sta
cbf0: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e  tic int test_bin
cc00: 64 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65  d_parameter_inde
cc10: 78 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  x(.  void * clie
cc20: 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
cc30: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
cc40: 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
cc50: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
cc60: 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ].){.  sqlite3_s
cc70: 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 0a 20 20 69  tmt *pStmt;..  i
cc80: 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20  f( objc!=3 ){.  
cc90: 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72    Tcl_WrongNumAr
cca0: 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62  gs(interp, 1, ob
ccb0: 6a 76 2c 20 22 53 54 4d 54 20 4e 41 4d 45 22 29  jv, "STMT NAME")
ccc0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
ccd0: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
cce0: 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
ccf0: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
cd00: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
cd10: 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
cd20: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54  n TCL_ERROR;.  T
cd30: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
cd40: 69 6e 74 65 72 70 2c 20 0a 20 20 20 20 20 54 63  interp, .     Tc
cd50: 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 0a 20 20 20  l_NewIntObj(.   
cd60: 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64      sqlite3_bind
cd70: 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78  _parameter_index
cd80: 28 70 53 74 6d 74 2c 54 63 6c 5f 47 65 74 53 74  (pStmt,Tcl_GetSt
cd90: 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 29 0a 20  ring(objv[2])). 
cda0: 20 20 20 20 29 0a 20 20 29 3b 0a 20 20 72 65 74      ).  );.  ret
cdb0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
cdc0: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71  *.** Usage:   sq
cdd0: 6c 69 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64  lite3_clear_bind
cde0: 69 6e 67 73 20 53 54 4d 54 0a 2a 2a 0a 2a 2f 0a  ings STMT.**.*/.
cdf0: 23 69 66 20 30 0a 73 74 61 74 69 63 20 69 6e 74  #if 0.static int
ce00: 20 74 65 73 74 5f 63 6c 65 61 72 5f 62 69 6e 64   test_clear_bind
ce10: 69 6e 67 73 28 0a 20 20 76 6f 69 64 20 2a 20 63  ings(.  void * c
ce20: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
ce30: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
ce40: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
ce50: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
ce60: 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
ce70: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 0a  3_stmt *pStmt;..
ce80: 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b    if( objc!=2 ){
ce90: 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75  .    Tcl_WrongNu
cea0: 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c  mArgs(interp, 1,
ceb0: 20 6f 62 6a 76 2c 20 22 53 54 4d 54 22 29 3b 0a   objv, "STMT");.
cec0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
ced0: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
cee0: 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69  getStmtPointer(i
cef0: 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
cf00: 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
cf10: 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20  pStmt) ) return 
cf20: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c  TCL_ERROR;.  Tcl
cf30: 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
cf40: 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74  terp, Tcl_NewInt
cf50: 4f 62 6a 28 73 71 6c 69 74 65 33 5f 63 6c 65 61  Obj(sqlite3_clea
cf60: 72 5f 62 69 6e 64 69 6e 67 73 28 70 53 74 6d 74  r_bindings(pStmt
cf70: 29 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  )));.  return TC
cf80: 4c 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  L_OK;.}.#endif..
cf90: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  /*.** Usage: sql
cfa0: 69 74 65 33 5f 65 72 72 63 6f 64 65 20 44 42 0a  ite3_errcode DB.
cfb0: 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  **.** Return the
cfc0: 20 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e   string represen
cfd0: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6d 6f  tation of the mo
cfe0: 73 74 20 72 65 63 65 6e 74 20 73 71 6c 69 74 65  st recent sqlite
cff0: 33 5f 2a 20 41 50 49 0a 2a 2a 20 65 72 72 6f 72  3_* API.** error
d000: 20 63 6f 64 65 2e 20 65 2e 67 2e 20 22 53 51 4c   code. e.g. "SQL
d010: 49 54 45 5f 45 52 52 4f 52 22 2e 0a 2a 2f 0a 73  ITE_ERROR"..*/.s
d020: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 65  tatic int test_e
d030: 72 72 63 6f 64 65 28 0a 20 20 76 6f 69 64 20 2a  rrcode(.  void *
d040: 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
d050: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
d060: 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
d070: 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
d080: 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
d090: 74 65 33 20 2a 64 62 3b 0a 0a 20 20 69 66 28 20  te3 *db;..  if( 
d0a0: 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  objc!=2 ){.    T
d0b0: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
d0c0: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
d0d0: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
d0e0: 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63   \"", .       Tc
d0f0: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
d100: 5b 30 5d 29 2c 20 22 20 44 42 22 2c 20 30 29 3b  [0]), " DB", 0);
d110: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
d120: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
d130: 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e   getDbPointer(in
d140: 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
d150: 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64  ing(objv[1]), &d
d160: 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
d170: 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74  ERROR;.  Tcl_Set
d180: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28  Result(interp, (
d190: 63 68 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65  char *)errorName
d1a0: 28 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65  (sqlite3_errcode
d1b0: 28 64 62 29 29 2c 20 30 29 3b 0a 20 20 72 65 74  (db)), 0);.  ret
d1c0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
d1d0: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 74 65  *.** Usage:   te
d1e0: 73 74 5f 65 72 72 6d 73 67 20 44 42 0a 2a 2a 0a  st_errmsg DB.**.
d1f0: 2a 2a 20 52 65 74 75 72 6e 73 20 74 68 65 20 55  ** Returns the U
d200: 54 46 2d 38 20 72 65 70 72 65 73 65 6e 74 61 74  TF-8 representat
d210: 69 6f 6e 20 6f 66 20 74 68 65 20 65 72 72 6f 72  ion of the error
d220: 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e 67 20   message string 
d230: 66 6f 72 20 74 68 65 0a 2a 2a 20 6d 6f 73 74 20  for the.** most 
d240: 72 65 63 65 6e 74 20 73 71 6c 69 74 65 33 5f 2a  recent sqlite3_*
d250: 20 41 50 49 20 63 61 6c 6c 2e 0a 2a 2f 0a 73 74   API call..*/.st
d260: 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 65 72  atic int test_er
d270: 72 6d 73 67 28 0a 20 20 76 6f 69 64 20 2a 20 63  rmsg(.  void * c
d280: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
d290: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
d2a0: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
d2b0: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
d2c0: 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
d2d0: 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20 63  3 *db;.  const c
d2e0: 68 61 72 20 2a 7a 45 72 72 3b 0a 0a 20 20 69 66  har *zErr;..  if
d2f0: 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
d300: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
d310: 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
d320: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
d330: 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20  be \"", .       
d340: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
d350: 6a 76 5b 30 5d 29 2c 20 22 20 44 42 22 2c 20 30  jv[0]), " DB", 0
d360: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
d370: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
d380: 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
d390: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
d3a0: 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
d3b0: 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
d3c0: 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 7a 45 72 72  L_ERROR;..  zErr
d3d0: 20 3d 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73   = sqlite3_errms
d3e0: 67 28 64 62 29 3b 0a 20 20 54 63 6c 5f 53 65 74  g(db);.  Tcl_Set
d3f0: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
d400: 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
d410: 62 6a 28 7a 45 72 72 2c 20 2d 31 29 29 3b 0a 20  bj(zErr, -1));. 
d420: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
d430: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
d440: 20 20 74 65 73 74 5f 65 72 72 6d 73 67 31 36 20    test_errmsg16 
d450: 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 73  DB.**.** Returns
d460: 20 74 68 65 20 55 54 46 2d 31 36 20 72 65 70 72   the UTF-16 repr
d470: 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
d480: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  e error message 
d490: 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65 0a 2a  string for the.*
d4a0: 2a 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 71  * most recent sq
d4b0: 6c 69 74 65 33 5f 2a 20 41 50 49 20 63 61 6c 6c  lite3_* API call
d4c0: 2e 20 54 68 69 73 20 69 73 20 61 20 62 79 74 65  . This is a byte
d4d0: 20 61 72 72 61 79 20 6f 62 6a 65 63 74 20 61 74   array object at
d4e0: 20 74 68 65 20 54 43 4c 20 0a 2a 2a 20 6c 65 76   the TCL .** lev
d4f0: 65 6c 2c 20 61 6e 64 20 69 74 20 69 6e 63 6c 75  el, and it inclu
d500: 64 65 73 20 74 68 65 20 30 78 30 30 20 30 78 30  des the 0x00 0x0
d510: 30 20 74 65 72 6d 69 6e 61 74 6f 72 20 62 79 74  0 terminator byt
d520: 65 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  es at the end of
d530: 20 74 68 65 0a 2a 2a 20 55 54 46 2d 31 36 20 73   the.** UTF-16 s
d540: 74 72 69 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69 63  tring..*/.static
d550: 20 69 6e 74 20 74 65 73 74 5f 65 72 72 6d 73 67   int test_errmsg
d560: 31 36 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  16(.  void * cli
d570: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
d580: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
d590: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
d5a0: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
d5b0: 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20 53 51  [].){.#ifndef SQ
d5c0: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
d5d0: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
d5e0: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 45 72   const void *zEr
d5f0: 72 3b 0a 20 20 69 6e 74 20 62 79 74 65 73 3b 0a  r;.  int bytes;.
d600: 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29  .  if( objc!=2 )
d610: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
d620: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
d630: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
d640: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20  ould be \"", .  
d650: 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
d660: 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44  ng(objv[0]), " D
d670: 42 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  B", 0);.    retu
d680: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
d690: 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  }.  if( getDbPoi
d6a0: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
d6b0: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
d6c0: 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74 75  1]), &db) ) retu
d6d0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20  rn TCL_ERROR;.. 
d6e0: 20 7a 45 72 72 20 3d 20 73 71 6c 69 74 65 33 5f   zErr = sqlite3_
d6f0: 65 72 72 6d 73 67 31 36 28 64 62 29 3b 0a 20 20  errmsg16(db);.  
d700: 62 79 74 65 73 20 3d 20 73 71 6c 69 74 65 33 75  bytes = sqlite3u
d710: 74 66 31 36 42 79 74 65 4c 65 6e 28 7a 45 72 72  tf16ByteLen(zErr
d720: 2c 20 2d 31 29 3b 0a 20 20 54 63 6c 5f 53 65 74  , -1);.  Tcl_Set
d730: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
d740: 2c 20 54 63 6c 5f 4e 65 77 42 79 74 65 41 72 72  , Tcl_NewByteArr
d750: 61 79 4f 62 6a 28 7a 45 72 72 2c 20 62 79 74 65  ayObj(zErr, byte
d760: 73 29 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  s));.#endif /* S
d770: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
d780: 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c   */.  return TCL
d790: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
d7a0: 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 70 72 65  age: sqlite3_pre
d7b0: 70 61 72 65 20 44 42 20 73 71 6c 20 62 79 74 65  pare DB sql byte
d7c0: 73 20 74 61 69 6c 76 61 72 0a 2a 2a 0a 2a 2a 20  s tailvar.**.** 
d7d0: 43 6f 6d 70 69 6c 65 20 75 70 20 74 6f 20 3c 62  Compile up to <b
d7e0: 79 74 65 73 3e 20 62 79 74 65 73 20 6f 66 20 74  ytes> bytes of t
d7f0: 68 65 20 73 75 70 70 6c 69 65 64 20 53 51 4c 20  he supplied SQL 
d800: 73 74 72 69 6e 67 20 3c 73 71 6c 3e 20 75 73 69  string <sql> usi
d810: 6e 67 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 68  ng.** database h
d820: 61 6e 64 6c 65 20 3c 44 42 3e 2e 20 54 68 65 20  andle <DB>. The 
d830: 70 61 72 61 6d 65 74 65 72 20 3c 74 61 69 6c 76  parameter <tailv
d840: 61 6c 3e 20 69 73 20 74 68 65 20 6e 61 6d 65 20  al> is the name 
d850: 6f 66 20 61 20 67 6c 6f 62 61 6c 0a 2a 2a 20 76  of a global.** v
d860: 61 72 69 61 62 6c 65 20 74 68 61 74 20 69 73 20  ariable that is 
d870: 73 65 74 20 74 6f 20 74 68 65 20 75 6e 75 73 65  set to the unuse
d880: 64 20 70 6f 72 74 69 6f 6e 20 6f 66 20 3c 73 71  d portion of <sq
d890: 6c 3e 20 28 69 66 20 61 6e 79 29 2e 20 41 0a 2a  l> (if any). A.*
d8a0: 2a 20 53 54 4d 54 20 68 61 6e 64 6c 65 20 69 73  * STMT handle is
d8b0: 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a 73 74   returned..*/.st
d8c0: 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 70 72  atic int test_pr
d8d0: 65 70 61 72 65 28 0a 20 20 76 6f 69 64 20 2a 20  epare(.  void * 
d8e0: 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
d8f0: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
d900: 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
d910: 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
d920: 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74  bjv[].){.  sqlit
d930: 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20  e3 *db;.  const 
d940: 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 69 6e  char *zSql;.  in
d950: 74 20 62 79 74 65 73 3b 0a 20 20 63 6f 6e 73 74  t bytes;.  const
d960: 20 63 68 61 72 20 2a 7a 54 61 69 6c 20 3d 20 30   char *zTail = 0
d970: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  ;.  sqlite3_stmt
d980: 20 2a 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20 63   *pStmt = 0;.  c
d990: 68 61 72 20 7a 42 75 66 5b 35 30 5d 3b 0a 20 20  har zBuf[50];.  
d9a0: 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f  int rc;..  if( o
d9b0: 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63  bjc!=5 ){.    Tc
d9c0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
d9d0: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
d9e0: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
d9f0: 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c  \"", .       Tcl
da00: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
da10: 30 5d 29 2c 20 22 20 44 42 20 73 71 6c 20 62 79  0]), " DB sql by
da20: 74 65 73 20 74 61 69 6c 76 61 72 22 2c 20 30 29  tes tailvar", 0)
da30: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
da40: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
da50: 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69  ( getDbPointer(i
da60: 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
da70: 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
da80: 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  db) ) return TCL
da90: 5f 45 52 52 4f 52 3b 0a 20 20 7a 53 71 6c 20 3d  _ERROR;.  zSql =
daa0: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
dab0: 62 6a 76 5b 32 5d 29 3b 0a 20 20 69 66 28 20 54  bjv[2]);.  if( T
dac0: 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a  cl_GetIntFromObj
dad0: 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d  (interp, objv[3]
dae0: 2c 20 26 62 79 74 65 73 29 20 29 20 72 65 74 75  , &bytes) ) retu
daf0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20  rn TCL_ERROR;.. 
db00: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72   rc = sqlite3_pr
db10: 65 70 61 72 65 28 64 62 2c 20 7a 53 71 6c 2c 20  epare(db, zSql, 
db20: 62 79 74 65 73 2c 20 26 70 53 74 6d 74 2c 20 26  bytes, &pStmt, &
db30: 7a 54 61 69 6c 29 3b 0a 20 20 69 66 28 20 73 71  zTail);.  if( sq
db40: 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65  lite3TestErrCode
db50: 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29  (interp, db, rc)
db60: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
db70: 52 4f 52 3b 0a 20 20 69 66 28 20 7a 54 61 69 6c  ROR;.  if( zTail
db80: 20 29 7b 0a 20 20 20 20 69 66 28 20 62 79 74 65   ){.    if( byte
db90: 73 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 62 79  s>=0 ){.      by
dba0: 74 65 73 20 3d 20 62 79 74 65 73 20 2d 20 28 7a  tes = bytes - (z
dbb0: 54 61 69 6c 2d 7a 53 71 6c 29 3b 0a 20 20 20 20  Tail-zSql);.    
dbc0: 7d 0a 20 20 20 20 54 63 6c 5f 4f 62 6a 53 65 74  }.    Tcl_ObjSet
dbd0: 56 61 72 32 28 69 6e 74 65 72 70 2c 20 6f 62 6a  Var2(interp, obj
dbe0: 76 5b 34 5d 2c 20 30 2c 20 54 63 6c 5f 4e 65 77  v[4], 0, Tcl_New
dbf0: 53 74 72 69 6e 67 4f 62 6a 28 7a 54 61 69 6c 2c  StringObj(zTail,
dc00: 20 62 79 74 65 73 29 2c 20 30 29 3b 0a 20 20 7d   bytes), 0);.  }
dc10: 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
dc20: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 61 73 73 65  E_OK ){.    asse
dc30: 72 74 28 20 70 53 74 6d 74 3d 3d 30 20 29 3b 0a  rt( pStmt==0 );.
dc40: 20 20 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66      sprintf(zBuf
dc50: 2c 20 22 28 25 64 29 20 22 2c 20 72 63 29 3b 0a  , "(%d) ", rc);.
dc60: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
dc70: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75  sult(interp, zBu
dc80: 66 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  f, sqlite3_errms
dc90: 67 28 64 62 29 2c 20 30 29 3b 0a 20 20 20 20 72  g(db), 0);.    r
dca0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
dcb0: 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 53 74 6d  .  }..  if( pStm
dcc0: 74 20 29 7b 0a 20 20 20 20 69 66 28 20 6d 61 6b  t ){.    if( mak
dcd0: 65 50 6f 69 6e 74 65 72 53 74 72 28 69 6e 74 65  ePointerStr(inte
dce0: 72 70 2c 20 7a 42 75 66 2c 20 70 53 74 6d 74 29  rp, zBuf, pStmt)
dcf0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
dd00: 52 4f 52 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70  ROR;.    Tcl_App
dd10: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
dd20: 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 20 20 7d 0a  , zBuf, 0);.  }.
dd30: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
dd40: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
dd50: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
dd60: 20 44 42 20 73 71 6c 20 62 79 74 65 73 20 74 61   DB sql bytes ta
dd70: 69 6c 76 61 72 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70  ilvar.**.** Comp
dd80: 69 6c 65 20 75 70 20 74 6f 20 3c 62 79 74 65 73  ile up to <bytes
dd90: 3e 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 73  > bytes of the s
dda0: 75 70 70 6c 69 65 64 20 53 51 4c 20 73 74 72 69  upplied SQL stri
ddb0: 6e 67 20 3c 73 71 6c 3e 20 75 73 69 6e 67 0a 2a  ng <sql> using.*
ddc0: 2a 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  * database handl
ddd0: 65 20 3c 44 42 3e 2e 20 54 68 65 20 70 61 72 61  e <DB>. The para
dde0: 6d 65 74 65 72 20 3c 74 61 69 6c 76 61 6c 3e 20  meter <tailval> 
ddf0: 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
de00: 20 67 6c 6f 62 61 6c 0a 2a 2a 20 76 61 72 69 61   global.** varia
de10: 62 6c 65 20 74 68 61 74 20 69 73 20 73 65 74 20  ble that is set 
de20: 74 6f 20 74 68 65 20 75 6e 75 73 65 64 20 70 6f  to the unused po
de30: 72 74 69 6f 6e 20 6f 66 20 3c 73 71 6c 3e 20 28  rtion of <sql> (
de40: 69 66 20 61 6e 79 29 2e 20 41 0a 2a 2a 20 53 54  if any). A.** ST
de50: 4d 54 20 68 61 6e 64 6c 65 20 69 73 20 72 65 74  MT handle is ret
de60: 75 72 6e 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63  urned..*/.static
de70: 20 69 6e 74 20 74 65 73 74 5f 70 72 65 70 61 72   int test_prepar
de80: 65 31 36 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  e16(.  void * cl
de90: 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
dea0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
deb0: 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
dec0: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
ded0: 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20 53  v[].){.#ifndef S
dee0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
def0: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a  .  sqlite3 *db;.
df00: 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 53    const void *zS
df10: 71 6c 3b 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64  ql;.  const void
df20: 20 2a 7a 54 61 69 6c 20 3d 20 30 3b 0a 20 20 54   *zTail = 0;.  T
df30: 63 6c 5f 4f 62 6a 20 2a 70 54 61 69 6c 20 3d 20  cl_Obj *pTail = 
df40: 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  0;.  sqlite3_stm
df50: 74 20 2a 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20  t *pStmt = 0;.  
df60: 63 68 61 72 20 7a 42 75 66 5b 35 30 5d 3b 20 0a  char zBuf[50]; .
df70: 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20    int rc;.  int 
df80: 62 79 74 65 73 3b 20 20 20 20 20 20 20 20 20 20  bytes;          
df90: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 74        /* The int
dfa0: 65 67 65 72 20 73 70 65 63 69 66 69 65 64 20 61  eger specified a
dfb0: 73 20 61 72 67 20 33 20 2a 2f 0a 20 20 69 6e 74  s arg 3 */.  int
dfc0: 20 6f 62 6a 6c 65 6e 3b 20 20 20 20 20 20 20 20   objlen;        
dfd0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 62 79         /* The by
dfe0: 74 65 2d 61 72 72 61 79 20 6c 65 6e 67 74 68 20  te-array length 
dff0: 6f 66 20 61 72 67 20 32 20 2a 2f 0a 0a 20 20 69  of arg 2 */..  i
e000: 66 28 20 6f 62 6a 63 21 3d 35 20 29 7b 0a 20 20  f( objc!=5 ){.  
e010: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
e020: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
e030: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
e040: 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20   be \"", .      
e050: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
e060: 62 6a 76 5b 30 5d 29 2c 20 22 20 44 42 20 73 71  bjv[0]), " DB sq
e070: 6c 20 62 79 74 65 73 20 74 61 69 6c 76 61 72 22  l bytes tailvar"
e080: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
e090: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
e0a0: 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74    if( getDbPoint
e0b0: 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
e0c0: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
e0d0: 29 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e  ), &db) ) return
e0e0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 53   TCL_ERROR;.  zS
e0f0: 71 6c 20 3d 20 54 63 6c 5f 47 65 74 42 79 74 65  ql = Tcl_GetByte
e100: 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28 6f 62 6a  ArrayFromObj(obj
e110: 76 5b 32 5d 2c 20 26 6f 62 6a 6c 65 6e 29 3b 0a  v[2], &objlen);.
e120: 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
e130: 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
e140: 6f 62 6a 76 5b 33 5d 2c 20 26 62 79 74 65 73 29  objv[3], &bytes)
e150: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
e160: 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c  ROR;..  rc = sql
e170: 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 28 64  ite3_prepare16(d
e180: 62 2c 20 7a 53 71 6c 2c 20 62 79 74 65 73 2c 20  b, zSql, bytes, 
e190: 26 70 53 74 6d 74 2c 20 26 7a 54 61 69 6c 29 3b  &pStmt, &zTail);
e1a0: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65  .  if( sqlite3Te
e1b0: 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70  stErrCode(interp
e1c0: 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65 74 75  , db, rc) ) retu
e1d0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
e1e0: 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 72 65  if( rc ){.    re
e1f0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
e200: 20 20 7d 0a 0a 20 20 69 66 28 20 7a 54 61 69 6c    }..  if( zTail
e210: 20 29 7b 0a 20 20 20 20 6f 62 6a 6c 65 6e 20 3d   ){.    objlen =
e220: 20 6f 62 6a 6c 65 6e 20 2d 20 28 28 75 38 20 2a   objlen - ((u8 *
e230: 29 7a 54 61 69 6c 2d 28 75 38 20 2a 29 7a 53 71  )zTail-(u8 *)zSq
e240: 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  l);.  }else{.   
e250: 20 6f 62 6a 6c 65 6e 20 3d 20 30 3b 0a 20 20 7d   objlen = 0;.  }
e260: 0a 20 20 70 54 61 69 6c 20 3d 20 54 63 6c 5f 4e  .  pTail = Tcl_N
e270: 65 77 42 79 74 65 41 72 72 61 79 4f 62 6a 28 28  ewByteArrayObj((
e280: 75 38 20 2a 29 7a 54 61 69 6c 2c 20 6f 62 6a 6c  u8 *)zTail, objl
e290: 65 6e 29 3b 0a 20 20 54 63 6c 5f 49 6e 63 72 52  en);.  Tcl_IncrR
e2a0: 65 66 43 6f 75 6e 74 28 70 54 61 69 6c 29 3b 0a  efCount(pTail);.
e2b0: 20 20 54 63 6c 5f 4f 62 6a 53 65 74 56 61 72 32    Tcl_ObjSetVar2
e2c0: 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 34 5d  (interp, objv[4]
e2d0: 2c 20 30 2c 20 70 54 61 69 6c 2c 20 30 29 3b 0a  , 0, pTail, 0);.
e2e0: 20 20 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75    Tcl_DecrRefCou
e2f0: 6e 74 28 70 54 61 69 6c 29 3b 0a 0a 20 20 69 66  nt(pTail);..  if
e300: 28 20 70 53 74 6d 74 20 29 7b 0a 20 20 20 20 69  ( pStmt ){.    i
e310: 66 28 20 6d 61 6b 65 50 6f 69 6e 74 65 72 53 74  f( makePointerSt
e320: 72 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20  r(interp, zBuf, 
e330: 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20  pStmt) ) return 
e340: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
e350: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
e360: 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20  t(interp, zBuf, 
e370: 30 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  0);.#endif /* SQ
e380: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
e390: 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  */.  return TCL_
e3a0: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
e3b0: 67 65 3a 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e  ge: sqlite3_open
e3c0: 20 66 69 6c 65 6e 61 6d 65 20 3f 6f 70 74 69 6f   filename ?optio
e3d0: 6e 73 2d 6c 69 73 74 3f 0a 2a 2f 0a 73 74 61 74  ns-list?.*/.stat
e3e0: 69 63 20 69 6e 74 20 74 65 73 74 5f 6f 70 65 6e  ic int test_open
e3f0: 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
e400: 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
e410: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
e420: 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
e430: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
e440: 0a 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  .){.  const char
e450: 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 0a 20 20 73   *zFilename;.  s
e460: 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e  qlite3 *db;.  in
e470: 74 20 72 63 3b 0a 20 20 63 68 61 72 20 7a 42 75  t rc;.  char zBu
e480: 66 5b 31 30 30 5d 3b 0a 0a 20 20 69 66 28 20 6f  f[100];..  if( o
e490: 62 6a 63 21 3d 33 20 26 26 20 6f 62 6a 63 21 3d  bjc!=3 && objc!=
e4a0: 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  2 ){.    Tcl_App
e4b0: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
e4c0: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
e4d0: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
e4e0: 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  .       Tcl_GetS
e4f0: 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20  tring(objv[0]), 
e500: 22 20 66 69 6c 65 6e 61 6d 65 20 6f 70 74 69 6f  " filename optio
e510: 6e 73 2d 6c 69 73 74 22 2c 20 30 29 3b 0a 20 20  ns-list", 0);.  
e520: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
e530: 4f 52 3b 0a 20 20 7d 0a 0a 20 20 7a 46 69 6c 65  OR;.  }..  zFile
e540: 6e 61 6d 65 20 3d 20 54 63 6c 5f 47 65 74 53 74  name = Tcl_GetSt
e550: 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 3b 0a 20  ring(objv[1]);. 
e560: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 6f 70   rc = sqlite3_op
e570: 65 6e 28 7a 46 69 6c 65 6e 61 6d 65 2c 20 26 64  en(zFilename, &d
e580: 62 29 3b 0a 20 20 0a 20 20 69 66 28 20 6d 61 6b  b);.  .  if( mak
e590: 65 50 6f 69 6e 74 65 72 53 74 72 28 69 6e 74 65  ePointerStr(inte
e5a0: 72 70 2c 20 7a 42 75 66 2c 20 64 62 29 20 29 20  rp, zBuf, db) ) 
e5b0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
e5c0: 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65  ;.  Tcl_AppendRe
e5d0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75  sult(interp, zBu
e5e0: 66 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20  f, 0);.  return 
e5f0: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
e600: 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
e610: 6f 70 65 6e 31 36 20 66 69 6c 65 6e 61 6d 65 20  open16 filename 
e620: 6f 70 74 69 6f 6e 73 0a 2a 2f 0a 73 74 61 74 69  options.*/.stati
e630: 63 20 69 6e 74 20 74 65 73 74 5f 6f 70 65 6e 31  c int test_open1
e640: 36 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  6(.  void * clie
e650: 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
e660: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
e670: 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
e680: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
e690: 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c  ].){.#ifndef SQL
e6a0: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20  ITE_OMIT_UTF16. 
e6b0: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 46 69   const void *zFi
e6c0: 6c 65 6e 61 6d 65 3b 0a 20 20 73 71 6c 69 74 65  lename;.  sqlite
e6d0: 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b  3 *db;.  int rc;
e6e0: 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 31 30 30  .  char zBuf[100
e6f0: 5d 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  ];..  if( objc!=
e700: 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  3 ){.    Tcl_App
e710: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
e720: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
e730: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
e740: 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  .       Tcl_GetS
e750: 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20  tring(objv[0]), 
e760: 22 20 66 69 6c 65 6e 61 6d 65 20 6f 70 74 69 6f  " filename optio
e770: 6e 73 2d 6c 69 73 74 22 2c 20 30 29 3b 0a 20 20  ns-list", 0);.  
e780: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
e790: 4f 52 3b 0a 20 20 7d 0a 0a 20 20 7a 46 69 6c 65  OR;.  }..  zFile
e7a0: 6e 61 6d 65 20 3d 20 54 63 6c 5f 47 65 74 42 79  name = Tcl_GetBy
e7b0: 74 65 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28 6f  teArrayFromObj(o
e7c0: 62 6a 76 5b 31 5d 2c 20 30 29 3b 0a 20 20 72 63  bjv[1], 0);.  rc
e7d0: 20 3d 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31   = sqlite3_open1
e7e0: 36 28 7a 46 69 6c 65 6e 61 6d 65 2c 20 26 64 62  6(zFilename, &db
e7f0: 29 3b 0a 20 20 0a 20 20 69 66 28 20 6d 61 6b 65  );.  .  if( make
e800: 50 6f 69 6e 74 65 72 53 74 72 28 69 6e 74 65 72  PointerStr(inter
e810: 70 2c 20 7a 42 75 66 2c 20 64 62 29 20 29 20 72  p, zBuf, db) ) r
e820: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
e830: 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73  .  Tcl_AppendRes
e840: 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66  ult(interp, zBuf
e850: 2c 20 30 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  , 0);.#endif /* 
e860: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
e870: 36 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43  6 */.  return TC
e880: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
e890: 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f  sage: sqlite3_co
e8a0: 6d 70 6c 65 74 65 31 36 20 3c 55 54 46 2d 31 36  mplete16 <UTF-16
e8b0: 20 73 74 72 69 6e 67 3e 0a 2a 2a 0a 2a 2a 20 52   string>.**.** R
e8c0: 65 74 75 72 6e 20 31 20 69 66 20 74 68 65 20 73  eturn 1 if the s
e8d0: 75 70 70 6c 69 65 64 20 61 72 67 75 6d 65 6e 74  upplied argument
e8e0: 20 69 73 20 61 20 63 6f 6d 70 6c 65 74 65 20 53   is a complete S
e8f0: 51 4c 20 73 74 61 74 65 6d 65 6e 74 2c 20 6f 72  QL statement, or
e900: 20 7a 65 72 6f 0a 2a 2a 20 6f 74 68 65 72 77 69   zero.** otherwi
e910: 73 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  se..*/.static in
e920: 74 20 74 65 73 74 5f 63 6f 6d 70 6c 65 74 65 31  t test_complete1
e930: 36 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  6(.  void * clie
e940: 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
e950: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
e960: 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
e970: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
e980: 5d 0a 29 7b 0a 23 69 66 20 21 64 65 66 69 6e 65  ].){.#if !define
e990: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f  d(SQLITE_OMIT_CO
e9a0: 4d 50 4c 45 54 45 29 20 26 26 20 21 64 65 66 69  MPLETE) && !defi
e9b0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
e9c0: 55 54 46 31 36 29 0a 20 20 63 68 61 72 20 2a 7a  UTF16).  char *z
e9d0: 42 75 66 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63  Buf;..  if( objc
e9e0: 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57  !=2 ){.    Tcl_W
e9f0: 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65  rongNumArgs(inte
ea00: 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 3c 75  rp, 1, objv, "<u
ea10: 74 66 2d 31 36 20 73 71 6c 3e 22 29 3b 0a 20 20  tf-16 sql>");.  
ea20: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
ea30: 4f 52 3b 0a 20 20 7d 0a 0a 20 20 7a 42 75 66 20  OR;.  }..  zBuf 
ea40: 3d 20 54 63 6c 5f 47 65 74 42 79 74 65 41 72 72  = Tcl_GetByteArr
ea50: 61 79 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 31  ayFromObj(objv[1
ea60: 5d 2c 20 30 29 3b 0a 20 20 54 63 6c 5f 53 65 74  ], 0);.  Tcl_Set
ea70: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
ea80: 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28  , Tcl_NewIntObj(
ea90: 73 71 6c 69 74 65 33 5f 63 6f 6d 70 6c 65 74 65  sqlite3_complete
eaa0: 31 36 28 7a 42 75 66 29 29 29 3b 0a 23 65 6e 64  16(zBuf)));.#end
eab0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
eac0: 54 5f 43 4f 4d 50 4c 45 54 45 20 26 26 20 53 51  T_COMPLETE && SQ
ead0: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
eae0: 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  */.  return TCL_
eaf0: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
eb00: 67 65 3a 20 73 71 6c 69 74 65 33 5f 73 74 65 70  ge: sqlite3_step
eb10: 20 53 54 4d 54 0a 2a 2a 0a 2a 2a 20 41 64 76 61   STMT.**.** Adva
eb20: 6e 63 65 20 74 68 65 20 73 74 61 74 65 6d 65 6e  nce the statemen
eb30: 74 20 74 6f 20 74 68 65 20 6e 65 78 74 20 72 6f  t to the next ro
eb40: 77 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  w..*/.static int
eb50: 20 74 65 73 74 5f 73 74 65 70 28 0a 20 20 76 6f   test_step(.  vo
eb60: 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
eb70: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
eb80: 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
eb90: 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
eba0: 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
ebb0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
ebc0: 74 6d 74 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  tmt;.  int rc;..
ebd0: 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b    if( objc!=2 ){
ebe0: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
ebf0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
ec00: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
ec10: 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20  uld be \"", .   
ec20: 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
ec30: 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54  g(objv[0]), " ST
ec40: 4d 54 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  MT", 0);.    ret
ec50: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
ec60: 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d   }..  if( getStm
ec70: 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  tPointer(interp,
ec80: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
ec90: 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29  bjv[1]), &pStmt)
eca0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
ecb0: 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ROR;.  rc = sqli
ecc0: 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74 29 3b  te3_step(pStmt);
ecd0: 0a 0a 20 20 2f 2a 20 69 66 28 20 72 63 21 3d 53  ..  /* if( rc!=S
ece0: 51 4c 49 54 45 5f 44 4f 4e 45 20 26 26 20 72 63  QLITE_DONE && rc
ecf0: 21 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 20 72  !=SQLITE_ROW ) r
ed00: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
ed10: 20 2a 2f 0a 20 20 54 63 6c 5f 53 65 74 52 65 73   */.  Tcl_SetRes
ed20: 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61  ult(interp, (cha
ed30: 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72 63  r *)errorName(rc
ed40: 29 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20  ), 0);.  return 
ed50: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
ed60: 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
ed70: 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 53 54 4d  column_count STM
ed80: 54 20 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  T .**.** Return 
ed90: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
eda0: 6c 75 6d 6e 73 20 72 65 74 75 72 6e 65 64 20 62  lumns returned b
edb0: 79 20 74 68 65 20 73 71 6c 20 73 74 61 74 65 6d  y the sql statem
edc0: 65 6e 74 20 53 54 4d 54 2e 0a 2a 2f 0a 73 74 61  ent STMT..*/.sta
edd0: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c  tic int test_col
ede0: 75 6d 6e 5f 63 6f 75 6e 74 28 0a 20 20 76 6f 69  umn_count(.  voi
edf0: 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
ee00: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
ee10: 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
ee20: 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
ee30: 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73  ST objv[].){.  s
ee40: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
ee50: 6d 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  mt;..  if( objc!
ee60: 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =2 ){.    Tcl_Ap
ee70: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
ee80: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
ee90: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
eea0: 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74   .       Tcl_Get
eeb0: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c  String(objv[0]),
eec0: 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c   " STMT column",
eed0: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
eee0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
eef0: 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
ef00: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
ef10: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
ef20: 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72  1]), &pStmt) ) r
ef30: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
ef40: 0a 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65  ..  Tcl_SetObjRe
ef50: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
ef60: 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74  _NewIntObj(sqlit
ef70: 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28  e3_column_count(
ef80: 70 53 74 6d 74 29 29 29 3b 0a 20 20 72 65 74 75  pStmt)));.  retu
ef90: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
efa0: 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
efb0: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 20 53  e3_column_type S
efc0: 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a  TMT column.**.**
efd0: 20 52 65 74 75 72 6e 20 74 68 65 20 74 79 70 65   Return the type
efe0: 20 6f 66 20 74 68 65 20 64 61 74 61 20 69 6e 20   of the data in 
eff0: 63 6f 6c 75 6d 6e 20 27 63 6f 6c 75 6d 6e 27 20  column 'column' 
f000: 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  of the current r
f010: 6f 77 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ow..*/.static in
f020: 74 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 74 79  t test_column_ty
f030: 70 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  pe(.  void * cli
f040: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
f050: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
f060: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
f070: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
f080: 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  [].){.  sqlite3_
f090: 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69  stmt *pStmt;.  i
f0a0: 6e 74 20 63 6f 6c 3b 0a 20 20 69 6e 74 20 74 70  nt col;.  int tp
f0b0: 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33  ;..  if( objc!=3
f0c0: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
f0d0: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
f0e0: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
f0f0: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a  should be \"", .
f100: 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
f110: 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22  ring(objv[0]), "
f120: 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30   STMT column", 0
f130: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
f140: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
f150: 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  if( getStmtPoint
f160: 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
f170: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
f180: 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74  ), &pStmt) ) ret
f190: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
f1a0: 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46   if( Tcl_GetIntF
f1b0: 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
f1c0: 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20 29 20  bjv[2], &col) ) 
f1d0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
f1e0: 3b 0a 0a 20 20 74 70 20 3d 20 73 71 6c 69 74 65  ;..  tp = sqlite
f1f0: 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 28 70 53  3_column_type(pS
f200: 74 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20 73 77 69  tmt, col);.  swi
f210: 74 63 68 28 20 74 70 20 29 7b 0a 20 20 20 20 63  tch( tp ){.    c
f220: 61 73 65 20 53 51 4c 49 54 45 5f 49 4e 54 45 47  ase SQLITE_INTEG
f230: 45 52 3a 20 0a 20 20 20 20 20 20 54 63 6c 5f 53  ER: .      Tcl_S
f240: 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
f250: 20 22 49 4e 54 45 47 45 52 22 2c 20 54 43 4c 5f   "INTEGER", TCL_
f260: 53 54 41 54 49 43 29 3b 20 0a 20 20 20 20 20 20  STATIC); .      
f270: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
f280: 53 51 4c 49 54 45 5f 4e 55 4c 4c 3a 0a 20 20 20  SQLITE_NULL:.   
f290: 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74     Tcl_SetResult
f2a0: 28 69 6e 74 65 72 70 2c 20 22 4e 55 4c 4c 22 2c  (interp, "NULL",
f2b0: 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 20 0a 20   TCL_STATIC); . 
f2c0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
f2d0: 63 61 73 65 20 53 51 4c 49 54 45 5f 46 4c 4f 41  case SQLITE_FLOA
f2e0: 54 3a 0a 20 20 20 20 20 20 54 63 6c 5f 53 65 74  T:.      Tcl_Set
f2f0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
f300: 46 4c 4f 41 54 22 2c 20 54 43 4c 5f 53 54 41 54  FLOAT", TCL_STAT
f310: 49 43 29 3b 20 0a 20 20 20 20 20 20 62 72 65 61  IC); .      brea
f320: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
f330: 54 45 5f 54 45 58 54 3a 0a 20 20 20 20 20 20 54  TE_TEXT:.      T
f340: 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74  cl_SetResult(int
f350: 65 72 70 2c 20 22 54 45 58 54 22 2c 20 54 43 4c  erp, "TEXT", TCL
f360: 5f 53 54 41 54 49 43 29 3b 20 0a 20 20 20 20 20  _STATIC); .     
f370: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
f380: 20 53 51 4c 49 54 45 5f 42 4c 4f 42 3a 0a 20 20   SQLITE_BLOB:.  
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 42 4c 4f 42 22  t(interp, "BLOB"
f3b0: 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 20 0a  , TCL_STATIC); .
f3c0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
f3d0: 20 64 65 66 61 75 6c 74 3a 0a 20 20 20 20 20 20   default:.      
f3e0: 61 73 73 65 72 74 28 30 29 3b 0a 20 20 7d 0a 0a  assert(0);.  }..
f3f0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
f400: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
f410: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
f420: 69 6e 74 36 34 20 53 54 4d 54 20 63 6f 6c 75 6d  int64 STMT colum
f430: 6e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  n.**.** Return t
f440: 68 65 20 64 61 74 61 20 69 6e 20 63 6f 6c 75 6d  he data in colum
f450: 6e 20 27 63 6f 6c 75 6d 6e 27 20 6f 66 20 74 68  n 'column' of th
f460: 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 63 61  e current row ca
f470: 73 74 20 61 73 20 61 6e 0a 2a 2a 20 77 69 64 65  st as an.** wide
f480: 20 28 36 34 2d 62 69 74 29 20 69 6e 74 65 67 65   (64-bit) intege
f490: 72 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  r..*/.static int
f4a0: 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 69 6e 74   test_column_int
f4b0: 36 34 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  64(.  void * cli
f4c0: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
f4d0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
f4e0: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
f4f0: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
f500: 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  [].){.  sqlite3_
f510: 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69  stmt *pStmt;.  i
f520: 6e 74 20 63 6f 6c 3b 0a 20 20 69 36 34 20 69 56  nt col;.  i64 iV
f530: 61 6c 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  al;..  if( objc!
f540: 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =3 ){.    Tcl_Ap
f550: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
f560: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
f570: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
f580: 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74   .       Tcl_Get
f590: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c  String(objv[0]),
f5a0: 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c   " STMT column",
f5b0: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
f5c0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
f5d0: 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
f5e0: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
f5f0: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
f600: 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72  1]), &pStmt) ) r
f610: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
f620: 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e  .  if( Tcl_GetIn
f630: 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
f640: 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20   objv[2], &col) 
f650: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
f660: 4f 52 3b 0a 0a 20 20 69 56 61 6c 20 3d 20 73 71  OR;..  iVal = sq
f670: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
f680: 36 34 28 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a  64(pStmt, col);.
f690: 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
f6a0: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
f6b0: 65 77 57 69 64 65 49 6e 74 4f 62 6a 28 69 56 61  ewWideIntObj(iVa
f6c0: 6c 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  l));.  return TC
f6d0: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
f6e0: 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f  sage: sqlite3_co
f6f0: 6c 75 6d 6e 5f 62 6c 6f 62 20 53 54 4d 54 20 63  lumn_blob STMT c
f700: 6f 6c 75 6d 6e 0a 2a 2f 0a 73 74 61 74 69 63 20  olumn.*/.static 
f710: 69 6e 74 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f  int test_column_
f720: 62 6c 6f 62 28 0a 20 20 76 6f 69 64 20 2a 20 63  blob(.  void * c
f730: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
f740: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
f750: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
f760: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
f770: 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
f780: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
f790: 20 69 6e 74 20 63 6f 6c 3b 0a 0a 20 20 69 6e 74   int col;..  int
f7a0: 20 6c 65 6e 3b 0a 20 20 63 6f 6e 73 74 20 76 6f   len;.  const vo
f7b0: 69 64 20 2a 70 42 6c 6f 62 3b 0a 0a 20 20 69 66  id *pBlob;..  if
f7c0: 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20  ( objc!=3 ){.   
f7d0: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
f7e0: 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
f7f0: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
f800: 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20  be \"", .       
f810: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
f820: 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20 63  jv[0]), " STMT c
f830: 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20  olumn", 0);.    
f840: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
f850: 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
f860: 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
f870: 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
f880: 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
f890: 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
f8a0: 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63  _ERROR;.  if( Tc
f8b0: 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
f8c0: 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c  interp, objv[2],
f8d0: 20 26 63 6f 6c 29 20 29 20 72 65 74 75 72 6e 20   &col) ) return 
f8e0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 70 42  TCL_ERROR;..  pB
f8f0: 6c 6f 62 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f  lob = sqlite3_co
f900: 6c 75 6d 6e 5f 62 6c 6f 62 28 70 53 74 6d 74 2c  lumn_blob(pStmt,
f910: 20 63 6f 6c 29 3b 0a 20 20 6c 65 6e 20 3d 20 73   col);.  len = s
f920: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79  qlite3_column_by
f930: 74 65 73 28 70 53 74 6d 74 2c 20 63 6f 6c 29 3b  tes(pStmt, col);
f940: 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  .  Tcl_SetObjRes
f950: 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
f960: 4e 65 77 42 79 74 65 41 72 72 61 79 4f 62 6a 28  NewByteArrayObj(
f970: 70 42 6c 6f 62 2c 20 6c 65 6e 29 29 3b 0a 20 20  pBlob, len));.  
f980: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
f990: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
f9a0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f  qlite3_column_do
f9b0: 75 62 6c 65 20 53 54 4d 54 20 63 6f 6c 75 6d 6e  uble STMT column
f9c0: 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  .**.** Return th
f9d0: 65 20 64 61 74 61 20 69 6e 20 63 6f 6c 75 6d 6e  e data in column
f9e0: 20 27 63 6f 6c 75 6d 6e 27 20 6f 66 20 74 68 65   'column' of the
f9f0: 20 63 75 72 72 65 6e 74 20 72 6f 77 20 63 61 73   current row cas
fa00: 74 20 61 73 20 61 20 64 6f 75 62 6c 65 2e 0a 2a  t as a double..*
fa10: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
fa20: 74 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28  t_column_double(
fa30: 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
fa40: 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
fa50: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
fa60: 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
fa70: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
fa80: 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
fa90: 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20  t *pStmt;.  int 
faa0: 63 6f 6c 3b 0a 20 20 64 6f 75 62 6c 65 20 72 56  col;.  double rV
fab0: 61 6c 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  al;..  if( objc!
fac0: 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =3 ){.    Tcl_Ap
fad0: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
fae0: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
faf0: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
fb00: 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74   .       Tcl_Get
fb10: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c  String(objv[0]),
fb20: 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c   " STMT column",
fb30: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
fb40: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
fb50: 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
fb60: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
fb70: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
fb80: 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72  1]), &pStmt) ) r
fb90: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
fba0: 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e  .  if( Tcl_GetIn
fbb0: 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
fbc0: 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20   objv[2], &col) 
fbd0: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
fbe0: 4f 52 3b 0a 0a 20 20 72 56 61 6c 20 3d 20 73 71  OR;..  rVal = sq
fbf0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75  lite3_column_dou
fc00: 62 6c 65 28 70 53 74 6d 74 2c 20 63 6f 6c 29 3b  ble(pStmt, col);
fc10: 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  .  Tcl_SetObjRes
fc20: 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
fc30: 4e 65 77 44 6f 75 62 6c 65 4f 62 6a 28 72 56 61  NewDoubleObj(rVa
fc40: 6c 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  l));.  return TC
fc50: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
fc60: 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 64 61  sage: sqlite3_da
fc70: 74 61 5f 63 6f 75 6e 74 20 53 54 4d 54 20 0a 2a  ta_count STMT .*
fc80: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
fc90: 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
fca0: 73 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  s returned by th
fcb0: 65 20 73 71 6c 20 73 74 61 74 65 6d 65 6e 74 20  e sql statement 
fcc0: 53 54 4d 54 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  STMT..*/.static 
fcd0: 69 6e 74 20 74 65 73 74 5f 64 61 74 61 5f 63 6f  int test_data_co
fce0: 75 6e 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  unt(.  void * cl
fcf0: 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
fd00: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
fd10: 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
fd20: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
fd30: 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
fd40: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 0a 20  _stmt *pStmt;.. 
fd50: 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a   if( objc!=2 ){.
fd60: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
fd70: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
fd80: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
fd90: 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20  ld be \"", .    
fda0: 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
fdb0: 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d  (objv[0]), " STM
fdc0: 54 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20  T column", 0);. 
fdd0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
fde0: 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  ROR;.  }..  if( 
fdf0: 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69  getStmtPointer(i
fe00: 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
fe10: 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
fe20: 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20  pStmt) ) return 
fe30: 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 54 63  TCL_ERROR;..  Tc
fe40: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
fe50: 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e  nterp, Tcl_NewIn
fe60: 74 4f 62 6a 28 73 71 6c 69 74 65 33 5f 64 61 74  tObj(sqlite3_dat
fe70: 61 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29 29 29  a_count(pStmt)))
fe80: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
fe90: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
fea0: 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  e: sqlite3_colum
feb0: 6e 5f 74 65 78 74 20 53 54 4d 54 20 63 6f 6c 75  n_text STMT colu
fec0: 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  mn.**.** Usage: 
fed0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
fee0: 65 63 6c 74 79 70 65 20 53 54 4d 54 20 63 6f 6c  ecltype STMT col
fef0: 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a  umn.**.** Usage:
ff00: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
ff10: 6e 61 6d 65 20 53 54 4d 54 20 63 6f 6c 75 6d 6e  name STMT column
ff20: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
ff30: 65 73 74 5f 73 74 6d 74 5f 75 74 66 38 28 0a 20  est_stmt_utf8(. 
ff40: 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
ff50: 74 61 2c 20 20 20 20 20 20 20 20 2f 2a 20 50 6f  ta,        /* Po
ff60: 69 6e 74 65 72 20 74 6f 20 53 51 4c 69 74 65 20  inter to SQLite 
ff70: 41 50 49 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  API function to 
ff80: 62 65 20 69 6e 76 6f 6b 65 20 2a 2f 0a 20 20 54  be invoke */.  T
ff90: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
ffa0: 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
ffb0: 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
ffc0: 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
ffd0: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
ffe0: 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a 20 20 63 6f  .  int col;.  co
fff0: 6e 73 74 20 63 68 61 72 20 2a 28 2a 78 46 75 6e  nst char *(*xFun
10000 63 29 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a  c)(sqlite3_stmt*
10010 2c 20 69 6e 74 29 20 3d 20 63 6c 69 65 6e 74 44  , int) = clientD
10020 61 74 61 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  ata;.  const cha
10030 72 20 2a 7a 52 65 74 3b 0a 0a 20 20 69 66 28 20  r *zRet;..  if( 
10040 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54  objc!=3 ){.    T
10050 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
10060 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
10070 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
10080 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63   \"", .       Tc
10090 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
100a0 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c  [0]), " STMT col
100b0 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  umn", 0);.    re
100c0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
100d0 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74    }..  if( getSt
100e0 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  mtPointer(interp
100f0 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
10100 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74  objv[1]), &pStmt
10110 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
10120 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f  RROR;.  if( Tcl_
10130 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e  GetIntFromObj(in
10140 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26  terp, objv[2], &
10150 63 6f 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43  col) ) return TC
10160 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 52 65 74 20  L_ERROR;.  zRet 
10170 3d 20 78 46 75 6e 63 28 70 53 74 6d 74 2c 20 63  = xFunc(pStmt, c
10180 6f 6c 29 3b 0a 20 20 69 66 28 20 7a 52 65 74 20  ol);.  if( zRet 
10190 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 52 65  ){.    Tcl_SetRe
101a0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68  sult(interp, (ch
101b0 61 72 20 2a 29 7a 52 65 74 2c 20 30 29 3b 0a 20  ar *)zRet, 0);. 
101c0 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f   }.  return TCL_
101d0 4f 4b 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e  OK;.}..static in
101e0 74 20 74 65 73 74 5f 67 6c 6f 62 61 6c 5f 72 65  t test_global_re
101f0 63 6f 76 65 72 28 0a 20 20 76 6f 69 64 20 2a 20  cover(.  void * 
10200 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
10210 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
10220 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
10230 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
10240 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66  bjv[].){.#ifndef
10250 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 47 4c 4f   SQLITE_OMIT_GLO
10260 42 41 4c 52 45 43 4f 56 45 52 0a 20 20 69 6e 74  BALRECOVER.  int
10270 20 72 63 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21   rc;.  if( objc!
10280 3d 31 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72  =1 ){.    Tcl_Wr
10290 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72  ongNumArgs(inter
102a0 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 22 29 3b  p, 1, objv, "");
102b0 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
102c0 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 63 20  ERROR;.  }.  rc 
102d0 3d 20 73 71 6c 69 74 65 33 5f 67 6c 6f 62 61 6c  = sqlite3_global
102e0 5f 72 65 63 6f 76 65 72 28 29 3b 0a 20 20 54 63  _recover();.  Tc
102f0 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65  l_SetResult(inte
10300 72 70 2c 20 28 63 68 61 72 20 2a 29 65 72 72 6f  rp, (char *)erro
10310 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53  rName(rc), TCL_S
10320 54 41 54 49 43 29 3b 0a 23 65 6e 64 69 66 0a 20  TATIC);.#endif. 
10330 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
10340 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
10350 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
10360 65 78 74 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a  ext STMT column.
10370 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  **.** Usage: sql
10380 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c  ite3_column_decl
10390 74 79 70 65 20 53 54 4d 54 20 63 6f 6c 75 6d 6e  type STMT column
103a0 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  .**.** Usage: sq
103b0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  lite3_column_nam
103c0 65 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2f  e STMT column.*/
103d0 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
103e0 5f 73 74 6d 74 5f 75 74 66 31 36 28 0a 20 20 76  _stmt_utf16(.  v
103f0 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
10400 2c 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72  ,     /* Pointer
10410 20 74 6f 20 53 51 4c 69 74 65 20 41 50 49 20 66   to SQLite API f
10420 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 69 6e  unction to be in
10430 76 6f 6b 65 64 20 2a 2f 0a 20 20 54 63 6c 5f 49  voked */.  Tcl_I
10440 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
10450 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
10460 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
10470 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20 53 51  [].){.#ifndef SQ
10480 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
10490 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
104a0 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63 6f 6c  pStmt;.  int col
104b0 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 52 65  ;.  Tcl_Obj *pRe
104c0 74 3b 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20  t;.  const void 
104d0 2a 7a 4e 61 6d 65 31 36 3b 0a 20 20 63 6f 6e 73  *zName16;.  cons
104e0 74 20 76 6f 69 64 20 2a 28 2a 78 46 75 6e 63 29  t void *(*xFunc)
104f0 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 2c 20  (sqlite3_stmt*, 
10500 69 6e 74 29 20 3d 20 63 6c 69 65 6e 74 44 61 74  int) = clientDat
10510 61 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  a;..  if( objc!=
10520 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  3 ){.    Tcl_App
10530 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
10540 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
10550 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
10560 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  .       Tcl_GetS
10570 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20  tring(objv[0]), 
10580 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20  " STMT column", 
10590 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
105a0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
105b0 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
105c0 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
105d0 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
105e0 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
105f0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
10600 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
10610 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
10620 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20 29  objv[2], &col) )
10630 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
10640 52 3b 0a 0a 20 20 7a 4e 61 6d 65 31 36 20 3d 20  R;..  zName16 = 
10650 78 46 75 6e 63 28 70 53 74 6d 74 2c 20 63 6f 6c  xFunc(pStmt, col
10660 29 3b 0a 20 20 69 66 28 20 7a 4e 61 6d 65 31 36  );.  if( zName16
10670 20 29 7b 0a 20 20 20 20 70 52 65 74 20 3d 20 54   ){.    pRet = T
10680 63 6c 5f 4e 65 77 42 79 74 65 41 72 72 61 79 4f  cl_NewByteArrayO
10690 62 6a 28 7a 4e 61 6d 65 31 36 2c 20 73 71 6c 69  bj(zName16, sqli
106a0 74 65 33 75 74 66 31 36 42 79 74 65 4c 65 6e 28  te3utf16ByteLen(
106b0 7a 4e 61 6d 65 31 36 2c 20 2d 31 29 2b 32 29 3b  zName16, -1)+2);
106c0 0a 20 20 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52  .    Tcl_SetObjR
106d0 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 70 52  esult(interp, pR
106e0 65 74 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20  et);.  }.#endif 
106f0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  /* SQLITE_OMIT_U
10700 54 46 31 36 20 2a 2f 0a 0a 20 20 72 65 74 75 72  TF16 */..  retur
10710 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
10720 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65  ** Usage: sqlite
10730 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 53 54 4d  3_column_int STM
10740 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55  T column.**.** U
10750 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f  sage: sqlite3_co
10760 6c 75 6d 6e 5f 62 79 74 65 73 20 53 54 4d 54 20  lumn_bytes STMT 
10770 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73 61  column.**.** Usa
10780 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ge: sqlite3_colu
10790 6d 6e 5f 62 79 74 65 73 31 36 20 53 54 4d 54 20  mn_bytes16 STMT 
107a0 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2f 0a 73 74 61  column.**.*/.sta
107b0 74 69 63 20 69 6e 74 20 74 65 73 74 5f 73 74 6d  tic int test_stm
107c0 74 5f 69 6e 74 28 0a 20 20 76 6f 69 64 20 2a 20  t_int(.  void * 
107d0 63 6c 69 65 6e 74 44 61 74 61 2c 20 20 20 20 2f  clientData,    /
107e0 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 53 51 4c  * Pointer to SQL
107f0 69 74 65 20 41 50 49 20 66 75 6e 63 74 69 6f 6e  ite API function
10800 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64 20 2a   to be invoked *
10810 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  /.  Tcl_Interp *
10820 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
10830 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
10840 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
10850 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
10860 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b  Stmt;.  int col;
10870 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e 63 29 28  .  int (*xFunc)(
10880 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 2c 20 69  sqlite3_stmt*, i
10890 6e 74 29 20 3d 20 63 6c 69 65 6e 74 44 61 74 61  nt) = clientData
108a0 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33  ;..  if( objc!=3
108b0 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
108c0 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
108d0 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
108e0 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a  should be \"", .
108f0 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
10900 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22  ring(objv[0]), "
10910 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30   STMT column", 0
10920 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
10930 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
10940 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  if( getStmtPoint
10950 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
10960 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
10970 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74  ), &pStmt) ) ret
10980 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
10990 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46   if( Tcl_GetIntF
109a0 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
109b0 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20 29 20  bjv[2], &col) ) 
109c0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
109d0 3b 0a 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52  ;..  Tcl_SetObjR
109e0 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
109f0 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 78 46 75 6e  l_NewIntObj(xFun
10a00 63 28 70 53 74 6d 74 2c 20 63 6f 6c 29 29 29 3b  c(pStmt, col)));
10a10 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
10a20 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
10a30 49 54 45 5f 4f 4d 49 54 5f 44 49 53 4b 49 4f 0a  ITE_OMIT_DISKIO.
10a40 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
10a50 6c 69 74 65 33 4f 73 4f 70 65 6e 52 65 61 64 57  lite3OsOpenReadW
10a60 72 69 74 65 20 3c 66 69 6c 65 6e 61 6d 65 3e 0a  rite <filename>.
10a70 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
10a80 73 74 5f 73 71 6c 69 74 65 33 4f 73 4f 70 65 6e  st_sqlite3OsOpen
10a90 52 65 61 64 57 72 69 74 65 28 0a 20 20 76 6f 69  ReadWrite(.  voi
10aa0 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
10ab0 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
10ac0 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
10ad0 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
10ae0 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 4f  ST objv[].){.  O
10af0 73 46 69 6c 65 20 2a 70 46 69 6c 65 3b 0a 20 20  sFile *pFile;.  
10b00 69 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20 64 75  int rc;.  int du
10b10 6d 6d 79 3b 0a 20 20 63 68 61 72 20 7a 42 75 66  mmy;.  char zBuf
10b20 5b 31 30 30 5d 3b 0a 0a 20 20 69 66 28 20 6f 62  [100];..  if( ob
10b30 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=2 ){.    Tcl
10b40 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
10b50 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
10b60 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
10b70 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f  "", .       Tcl_
10b80 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30  GetString(objv[0
10b90 5d 29 2c 20 22 20 66 69 6c 65 6e 61 6d 65 22 2c  ]), " filename",
10ba0 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
10bb0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
10bc0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73    rc = sqlite3Os
10bd0 2e 78 4f 70 65 6e 52 65 61 64 57 72 69 74 65 28  .xOpenReadWrite(
10be0 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
10bf0 6a 76 5b 31 5d 29 2c 20 26 70 46 69 6c 65 2c 20  jv[1]), &pFile, 
10c00 26 64 75 6d 6d 79 29 3b 0a 20 20 69 66 28 20 72  &dummy);.  if( r
10c10 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
10c20 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c      Tcl_SetResul
10c30 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20  t(interp, (char 
10c40 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c  *)errorName(rc),
10c50 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20   TCL_STATIC);.  
10c60 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
10c70 4f 52 3b 0a 20 20 7d 0a 20 20 6d 61 6b 65 50 6f  OR;.  }.  makePo
10c80 69 6e 74 65 72 53 74 72 28 69 6e 74 65 72 70 2c  interStr(interp,
10c90 20 7a 42 75 66 2c 20 70 46 69 6c 65 29 3b 0a 20   zBuf, pFile);. 
10ca0 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69   Tcl_SetResult(i
10cb0 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b  nterp, zBuf, 0);
10cc0 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52  .  return TCL_ER
10cd0 52 4f 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  ROR;.}../*.** Us
10ce0 61 67 65 3a 20 20 73 71 6c 69 74 65 33 4f 73 43  age:  sqlite3OsC
10cf0 6c 6f 73 65 20 3c 66 69 6c 65 20 68 61 6e 64 6c  lose <file handl
10d00 65 3e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  e>.*/.static int
10d10 20 74 65 73 74 5f 73 71 6c 69 74 65 33 4f 73 43   test_sqlite3OsC
10d20 6c 6f 73 65 28 0a 20 20 76 6f 69 64 20 2a 20 63  lose(.  void * c
10d30 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
10d40 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
10d50 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
10d60 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
10d70 6a 76 5b 5d 0a 29 7b 0a 20 20 4f 73 46 69 6c 65  jv[].){.  OsFile
10d80 20 2a 70 46 69 6c 65 3b 0a 20 20 69 6e 74 20 72   *pFile;.  int r
10d90 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  c;..  if( objc!=
10da0 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  2 ){.    Tcl_App
10db0 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
10dc0 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
10dd0 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
10de0 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  .       Tcl_GetS
10df0 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20  tring(objv[0]), 
10e00 22 20 66 69 6c 65 68 61 6e 64 6c 65 22 2c 20 30  " filehandle", 0
10e10 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
10e20 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
10e30 69 66 28 20 67 65 74 46 69 6c 65 50 6f 69 6e 74  if( getFilePoint
10e40 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
10e50 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
10e60 29 2c 20 26 70 46 69 6c 65 29 20 29 7b 0a 20 20  ), &pFile) ){.  
10e70 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
10e80 4f 52 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73  OR;.  }.  rc = s
10e90 71 6c 69 74 65 33 4f 73 43 6c 6f 73 65 28 26 70  qlite3OsClose(&p
10ea0 46 69 6c 65 29 3b 0a 20 20 69 66 28 20 72 63 21  File);.  if( rc!
10eb0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
10ec0 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28    Tcl_SetResult(
10ed0 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29  interp, (char *)
10ee0 65 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54  errorName(rc), T
10ef0 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  CL_STATIC);.    
10f00 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
10f10 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54  ;.  }.  return T
10f20 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
10f30 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 4f  Usage:  sqlite3O
10f40 73 4c 6f 63 6b 20 3c 66 69 6c 65 20 68 61 6e 64  sLock <file hand
10f50 6c 65 3e 20 3c 6c 6f 63 6b 74 79 70 65 3e 0a 2a  le> <locktype>.*
10f60 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
10f70 74 5f 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b 28  t_sqlite3OsLock(
10f80 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
10f90 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
10fa0 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
10fb0 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
10fc0 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
10fd0 29 7b 0a 20 20 4f 73 46 69 6c 65 20 2a 20 70 46  ){.  OsFile * pF
10fe0 69 6c 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  ile;.  int rc;..
10ff0 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b    if( objc!=3 ){
11000 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
11010 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
11020 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
11030 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20  uld be \"", .   
11040 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
11050 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 0a 20 20  ng(objv[0]), .  
11060 20 20 20 20 20 20 22 20 66 69 6c 65 68 61 6e 64        " filehand
11070 6c 65 20 28 53 48 41 52 45 44 7c 52 45 53 45 52  le (SHARED|RESER
11080 56 45 44 7c 50 45 4e 44 49 4e 47 7c 45 58 43 4c  VED|PENDING|EXCL
11090 55 53 49 56 45 29 22 2c 20 30 29 3b 0a 20 20 20  USIVE)", 0);.   
110a0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
110b0 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65  R;.  }..  if( ge
110c0 74 46 69 6c 65 50 6f 69 6e 74 65 72 28 69 6e 74  tFilePointer(int
110d0 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
110e0 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 46  ng(objv[1]), &pF
110f0 69 6c 65 29 20 29 7b 0a 20 20 20 20 72 65 74 75  ile) ){.    retu
11100 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
11110 7d 0a 0a 20 20 69 66 28 20 30 3d 3d 73 74 72 63  }..  if( 0==strc
11120 6d 70 28 22 53 48 41 52 45 44 22 2c 20 54 63 6c  mp("SHARED", Tcl
11130 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
11140 32 5d 29 29 20 29 7b 0a 20 20 20 20 72 63 20 3d  2])) ){.    rc =
11150 20 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b 28 70   sqlite3OsLock(p
11160 46 69 6c 65 2c 20 53 48 41 52 45 44 5f 4c 4f 43  File, SHARED_LOC
11170 4b 29 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69  K);.  }.  else i
11180 66 28 20 30 3d 3d 73 74 72 63 6d 70 28 22 52 45  f( 0==strcmp("RE
11190 53 45 52 56 45 44 22 2c 20 54 63 6c 5f 47 65 74  SERVED", Tcl_Get
111a0 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 29  String(objv[2]))
111b0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
111c0 69 74 65 33 4f 73 4c 6f 63 6b 28 70 46 69 6c 65  ite3OsLock(pFile
111d0 2c 20 52 45 53 45 52 56 45 44 5f 4c 4f 43 4b 29  , RESERVED_LOCK)
111e0 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66 28  ;.  }.  else if(
111f0 20 30 3d 3d 73 74 72 63 6d 70 28 22 50 45 4e 44   0==strcmp("PEND
11200 49 4e 47 22 2c 20 54 63 6c 5f 47 65 74 53 74 72  ING", Tcl_GetStr
11210 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 29 20 29 7b  ing(objv[2])) ){
11220 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
11230 33 4f 73 4c 6f 63 6b 28 70 46 69 6c 65 2c 20 50  3OsLock(pFile, P
11240 45 4e 44 49 4e 47 5f 4c 4f 43 4b 29 3b 0a 20 20  ENDING_LOCK);.  
11250 7d 0a 20 20 65 6c 73 65 20 69 66 28 20 30 3d 3d  }.  else if( 0==
11260 73 74 72 63 6d 70 28 22 45 58 43 4c 55 53 49 56  strcmp("EXCLUSIV
11270 45 22 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  E", Tcl_GetStrin
11280 67 28 6f 62 6a 76 5b 32 5d 29 29 20 29 7b 0a 20  g(objv[2])) ){. 
11290 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f     rc = sqlite3O
112a0 73 4c 6f 63 6b 28 70 46 69 6c 65 2c 20 45 58 43  sLock(pFile, EXC
112b0 4c 55 53 49 56 45 5f 4c 4f 43 4b 29 3b 0a 20 20  LUSIVE_LOCK);.  
112c0 7d 65 6c 73 65 7b 0a 20 20 20 20 54 63 6c 5f 41  }else{.    Tcl_A
112d0 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
112e0 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
112f0 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
11300 2c 20 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47  , .        Tcl_G
11310 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
11320 29 2c 20 0a 20 20 20 20 20 20 20 20 22 20 66 69  ), .        " fi
11330 6c 65 68 61 6e 64 6c 65 20 28 53 48 41 52 45 44  lehandle (SHARED
11340 7c 52 45 53 45 52 56 45 44 7c 50 45 4e 44 49 4e  |RESERVED|PENDIN
11350 47 7c 45 58 43 4c 55 53 49 56 45 29 22 2c 20 30  G|EXCLUSIVE)", 0
11360 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
11370 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
11380 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
11390 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74  K ){.    Tcl_Set
113a0 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28  Result(interp, (
113b0 63 68 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65  char *)errorName
113c0 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43  (rc), TCL_STATIC
113d0 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
113e0 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72  L_ERROR;.  }.  r
113f0 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
11400 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
11410 71 6c 69 74 65 33 4f 73 55 6e 6c 6f 63 6b 20 3c  qlite3OsUnlock <
11420 66 69 6c 65 20 68 61 6e 64 6c 65 3e 0a 2a 2f 0a  file handle>.*/.
11430 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
11440 73 71 6c 69 74 65 33 4f 73 55 6e 6c 6f 63 6b 28  sqlite3OsUnlock(
11450 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
11460 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
11470 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
11480 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
11490 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
114a0 29 7b 0a 20 20 4f 73 46 69 6c 65 20 2a 20 70 46  ){.  OsFile * pF
114b0 69 6c 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  ile;.  int rc;..
114c0 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b    if( objc!=2 ){
114d0 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
114e0 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
114f0 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
11500 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20  uld be \"", .   
11510 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
11520 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 66 69  g(objv[0]), " fi
11530 6c 65 68 61 6e 64 6c 65 22 2c 20 30 29 3b 0a 20  lehandle", 0);. 
11540 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
11550 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  ROR;.  }..  if( 
11560 67 65 74 46 69 6c 65 50 6f 69 6e 74 65 72 28 69  getFilePointer(i
11570 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
11580 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
11590 70 46 69 6c 65 29 20 29 7b 0a 20 20 20 20 72 65  pFile) ){.    re
115a0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
115b0 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
115c0 65 33 4f 73 55 6e 6c 6f 63 6b 28 70 46 69 6c 65  e3OsUnlock(pFile
115d0 2c 20 4e 4f 5f 4c 4f 43 4b 29 3b 0a 20 20 69 66  , NO_LOCK);.  if
115e0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
115f0 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 52 65  ){.    Tcl_SetRe
11600 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68  sult(interp, (ch
11610 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72  ar *)errorName(r
11620 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b  c), TCL_STATIC);
11630 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
11640 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 65 74  ERROR;.  }.  ret
11650 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
11660 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
11670 69 74 65 33 4f 73 54 65 6d 70 46 69 6c 65 4e 61  ite3OsTempFileNa
11680 6d 65 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  me.*/.static int
11690 20 74 65 73 74 5f 73 71 6c 69 74 65 33 4f 73 54   test_sqlite3OsT
116a0 65 6d 70 46 69 6c 65 4e 61 6d 65 28 0a 20 20 76  empFileName(.  v
116b0 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
116c0 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
116d0 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
116e0 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
116f0 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
11700 20 63 68 61 72 20 7a 46 69 6c 65 5b 53 51 4c 49   char zFile[SQLI
11710 54 45 5f 54 45 4d 50 4e 41 4d 45 5f 53 49 5a 45  TE_TEMPNAME_SIZE
11720 5d 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20  ];.  int rc;..  
11730 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 2e 78  rc = sqlite3Os.x
11740 54 65 6d 70 46 69 6c 65 4e 61 6d 65 28 7a 46 69  TempFileName(zFi
11750 6c 65 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53  le);.  if( rc!=S
11760 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
11770 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
11780 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 65 72  terp, (char *)er
11790 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c  rorName(rc), TCL
117a0 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 72 65  _STATIC);.    re
117b0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
117c0 20 20 7d 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64    }.  Tcl_Append
117d0 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a  Result(interp, z
117e0 46 69 6c 65 2c 20 30 29 3b 0a 20 20 72 65 74 75  File, 0);.  retu
117f0 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 23 65 6e  rn TCL_OK;.}.#en
11800 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  dif../*.** Usage
11810 3a 20 20 73 71 6c 69 74 65 5f 73 65 74 5f 6d 61  :  sqlite_set_ma
11820 67 69 63 20 20 44 42 20 20 4d 41 47 49 43 2d 4e  gic  DB  MAGIC-N
11830 55 4d 42 45 52 0a 2a 2a 0a 2a 2a 20 53 65 74 20  UMBER.**.** Set 
11840 74 68 65 20 64 62 2d 3e 6d 61 67 69 63 20 76 61  the db->magic va
11850 6c 75 65 2e 20 20 54 68 69 73 20 69 73 20 75 73  lue.  This is us
11860 65 64 20 74 6f 20 74 65 73 74 20 65 72 72 6f 72  ed to test error
11870 20 72 65 63 6f 76 65 72 79 20 6c 6f 67 69 63 2e   recovery logic.
11880 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73  .*/.static int s
11890 71 6c 69 74 65 5f 73 65 74 5f 6d 61 67 69 63 28  qlite_set_magic(
118a0 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
118b0 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
118c0 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
118d0 74 20 61 72 67 63 2c 0a 20 20 63 68 61 72 20 2a  t argc,.  char *
118e0 2a 61 72 67 76 0a 29 7b 0a 20 20 73 71 6c 69 74  *argv.){.  sqlit
118f0 65 33 20 2a 64 62 3b 0a 20 20 69 66 28 20 61 72  e3 *db;.  if( ar
11900 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=3 ){.    Tcl
11910 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
11920 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
11930 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
11940 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20  "", argv[0],.   
11950 20 20 20 20 20 20 22 20 44 42 20 4d 41 47 49 43        " DB MAGIC
11960 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
11970 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
11980 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e  .  if( getDbPoin
11990 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76  ter(interp, argv
119a0 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75  [1], &db) ) retu
119b0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
119c0 69 66 28 20 73 74 72 63 6d 70 28 61 72 67 76 5b  if( strcmp(argv[
119d0 32 5d 2c 20 22 53 51 4c 49 54 45 5f 4d 41 47 49  2], "SQLITE_MAGI
119e0 43 5f 4f 50 45 4e 22 29 3d 3d 30 20 29 7b 0a 20  C_OPEN")==0 ){. 
119f0 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53     db->magic = S
11a00 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e  QLITE_MAGIC_OPEN
11a10 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74  ;.  }else if( st
11a20 72 63 6d 70 28 61 72 67 76 5b 32 5d 2c 20 22 53  rcmp(argv[2], "S
11a30 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53  QLITE_MAGIC_CLOS
11a40 45 44 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 64  ED")==0 ){.    d
11a50 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54  b->magic = SQLIT
11a60 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 3b 0a  E_MAGIC_CLOSED;.
11a70 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
11a80 6d 70 28 61 72 67 76 5b 32 5d 2c 20 22 53 51 4c  mp(argv[2], "SQL
11a90 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 22 29  ITE_MAGIC_BUSY")
11aa0 3d 3d 30 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d  ==0 ){.    db->m
11ab0 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41  agic = SQLITE_MA
11ac0 47 49 43 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73  GIC_BUSY;.  }els
11ad0 65 20 69 66 28 20 73 74 72 63 6d 70 28 61 72 67  e if( strcmp(arg
11ae0 76 5b 32 5d 2c 20 22 53 51 4c 49 54 45 5f 4d 41  v[2], "SQLITE_MA
11af0 47 49 43 5f 45 52 52 4f 52 22 29 3d 3d 30 20 29  GIC_ERROR")==0 )
11b00 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20  {.    db->magic 
11b10 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45  = SQLITE_MAGIC_E
11b20 52 52 4f 52 3b 0a 20 20 7d 65 6c 73 65 20 69 66  RROR;.  }else if
11b30 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74  ( Tcl_GetInt(int
11b40 65 72 70 2c 20 61 72 67 76 5b 32 5d 2c 20 26 64  erp, argv[2], &d
11b50 62 2d 3e 6d 61 67 69 63 29 20 29 7b 0a 20 20 20  b->magic) ){.   
11b60 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
11b70 52 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  R;.  }.  return 
11b80 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
11b90 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33   Usage:  sqlite3
11ba0 5f 69 6e 74 65 72 72 75 70 74 20 20 44 42 20 0a  _interrupt  DB .
11bb0 2a 2a 0a 2a 2a 20 54 72 69 67 67 65 72 20 61 6e  **.** Trigger an
11bc0 20 69 6e 74 65 72 72 75 70 74 20 6f 6e 20 44 42   interrupt on DB
11bd0 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
11be0 65 73 74 5f 69 6e 74 65 72 72 75 70 74 28 0a 20  est_interrupt(. 
11bf0 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
11c00 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
11c10 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
11c20 61 72 67 63 2c 0a 20 20 63 68 61 72 20 2a 2a 61  argc,.  char **a
11c30 72 67 76 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  rgv.){.  sqlite3
11c40 20 2a 64 62 3b 0a 20 20 69 66 28 20 61 72 67 63   *db;.  if( argc
11c50 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=2 ){.    Tcl_A
11c60 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
11c70 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
11c80 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
11c90 2c 20 61 72 67 76 5b 30 5d 2c 20 22 20 44 42 22  , argv[0], " DB"
11ca0 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
11cb0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
11cc0 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74    if( getDbPoint
11cd0 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  er(interp, argv[
11ce0 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72  1], &db) ) retur
11cf0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 73  n TCL_ERROR;.  s
11d00 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
11d10 28 64 62 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  (db);.  return T
11d20 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 73 74 61 74 69 63  CL_OK;.}..static
11d30 20 75 38 20 2a 73 71 6c 69 74 65 33 5f 73 74 61   u8 *sqlite3_sta
11d40 63 6b 5f 62 61 73 65 6c 69 6e 65 20 3d 20 30 3b  ck_baseline = 0;
11d50 0a 0a 2f 2a 0a 2a 2a 20 46 69 6c 6c 20 74 68 65  ../*.** Fill the
11d60 20 73 74 61 63 6b 20 77 69 74 68 20 61 20 6b 6e   stack with a kn
11d70 6f 77 6e 20 62 69 74 70 61 74 74 65 72 6e 2e 0a  own bitpattern..
11d80 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 70  */.static void p
11d90 72 65 70 53 74 61 63 6b 28 76 6f 69 64 29 7b 0a  repStack(void){.
11da0 20 20 69 6e 74 20 69 3b 0a 20 20 75 33 32 20 62    int i;.  u32 b
11db0 69 67 42 75 66 5b 36 35 35 33 36 5d 3b 0a 20 20  igBuf[65536];.  
11dc0 66 6f 72 28 69 3d 30 3b 20 69 3c 73 69 7a 65 6f  for(i=0; i<sizeo
11dd0 66 28 62 69 67 42 75 66 29 3b 20 69 2b 2b 29 20  f(bigBuf); i++) 
11de0 62 69 67 42 75 66 5b 69 5d 20 3d 20 30 78 64 65  bigBuf[i] = 0xde
11df0 61 64 62 65 65 66 3b 0a 20 20 73 71 6c 69 74 65  adbeef;.  sqlite
11e00 33 5f 73 74 61 63 6b 5f 62 61 73 65 6c 69 6e 65  3_stack_baseline
11e10 20 3d 20 28 75 38 2a 29 26 62 69 67 42 75 66 5b   = (u8*)&bigBuf[
11e20 36 35 35 33 36 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  65536];.}../*.**
11e30 20 47 65 74 20 74 68 65 20 63 75 72 72 65 6e 74   Get the current
11e40 20 73 74 61 63 6b 20 64 65 70 74 68 2e 20 20 55   stack depth.  U
11e50 73 65 64 20 66 6f 72 20 64 65 62 75 67 67 69 6e  sed for debuggin
11e60 67 20 6f 6e 6c 79 2e 0a 2a 2f 0a 75 36 34 20 73  g only..*/.u64 s
11e70 71 6c 69 74 65 33 53 74 61 63 6b 44 65 70 74 68  qlite3StackDepth
11e80 28 76 6f 69 64 29 7b 0a 20 20 75 38 20 78 3b 0a  (void){.  u8 x;.
11e90 20 20 72 65 74 75 72 6e 20 28 75 36 34 29 28 73    return (u64)(s
11ea0 71 6c 69 74 65 33 5f 73 74 61 63 6b 5f 62 61 73  qlite3_stack_bas
11eb0 65 6c 69 6e 65 20 2d 20 26 78 29 3b 0a 7d 0a 0a  eline - &x);.}..
11ec0 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
11ed0 6c 69 74 65 33 5f 73 74 61 63 6b 5f 75 73 65 64  lite3_stack_used
11ee0 20 44 42 20 53 51 4c 0a 2a 2a 0a 2a 2a 20 54 72   DB SQL.**.** Tr
11ef0 79 20 74 6f 20 6d 65 61 73 75 72 65 20 74 68 65  y to measure the
11f00 20 61 6d 6f 75 6e 74 20 6f 66 20 73 74 61 63 6b   amount of stack
11f10 20 73 70 61 63 65 20 75 73 65 64 20 62 79 20 61   space used by a
11f20 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33   call to sqlite3
11f30 5f 65 78 65 63 0a 2a 2f 0a 73 74 61 74 69 63 20  _exec.*/.static 
11f40 69 6e 74 20 74 65 73 74 5f 73 74 61 63 6b 5f 75  int test_stack_u
11f50 73 65 64 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  sed(.  void * cl
11f60 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
11f70 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
11f80 20 20 69 6e 74 20 61 72 67 63 2c 0a 20 20 63 68    int argc,.  ch
11f90 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 73  ar **argv.){.  s
11fa0 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e  qlite3 *db;.  in
11fb0 74 20 69 3b 0a 20 20 69 66 28 20 61 72 67 63 21  t i;.  if( argc!
11fc0 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =3 ){.    Tcl_Ap
11fd0 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
11fe0 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
11ff0 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
12000 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20   argv[0], .     
12010 20 20 20 22 20 44 42 20 53 51 4c 22 2c 20 30 29     " DB SQL", 0)
12020 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
12030 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
12040 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69  ( getDbPointer(i
12050 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20  nterp, argv[1], 
12060 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
12070 4c 5f 45 52 52 4f 52 3b 0a 20 20 70 72 65 70 53  L_ERROR;.  prepS
12080 74 61 63 6b 28 29 3b 0a 20 20 73 71 6c 69 74 65  tack();.  sqlite
12090 33 5f 65 78 65 63 28 64 62 2c 20 61 72 67 76 5b  3_exec(db, argv[
120a0 32 5d 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20  2], 0, 0, 0);.  
120b0 66 6f 72 28 69 3d 36 35 35 33 35 3b 20 69 3e 3d  for(i=65535; i>=
120c0 30 20 26 26 20 28 28 75 33 32 2a 29 73 71 6c 69  0 && ((u32*)sqli
120d0 74 65 33 5f 73 74 61 63 6b 5f 62 61 73 65 6c 69  te3_stack_baseli
120e0 6e 65 29 5b 2d 69 5d 3d 3d 30 78 64 65 61 64 62  ne)[-i]==0xdeadb
120f0 65 65 66 3b 20 69 2d 2d 29 7b 7d 0a 20 20 54 63  eef; i--){}.  Tc
12100 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
12110 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e  nterp, Tcl_NewIn
12120 74 4f 62 6a 28 69 2a 34 29 29 3b 0a 20 20 72 65  tObj(i*4));.  re
12130 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
12140 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  /*.** Usage: sql
12150 69 74 65 5f 64 65 6c 65 74 65 5f 66 75 6e 63 74  ite_delete_funct
12160 69 6f 6e 20 44 42 20 66 75 6e 63 74 69 6f 6e 2d  ion DB function-
12170 6e 61 6d 65 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74  name.**.** Delet
12180 65 20 74 68 65 20 75 73 65 72 20 66 75 6e 63 74  e the user funct
12190 69 6f 6e 20 27 66 75 6e 63 74 69 6f 6e 2d 6e 61  ion 'function-na
121a0 6d 65 27 20 66 72 6f 6d 20 64 61 74 61 62 61 73  me' from databas
121b0 65 20 68 61 6e 64 6c 65 20 44 42 2e 20 49 74 0a  e handle DB. It.
121c0 2a 2a 20 69 73 20 61 73 73 75 6d 65 64 20 74 68  ** is assumed th
121d0 61 74 20 74 68 65 20 75 73 65 72 20 66 75 6e 63  at the user func
121e0 74 69 6f 6e 20 77 61 73 20 63 72 65 61 74 65 64  tion was created
121f0 20 61 73 20 55 54 46 38 2c 20 61 6e 79 20 6e 75   as UTF8, any nu
12200 6d 62 65 72 20 6f 66 0a 2a 2a 20 61 72 67 75 6d  mber of.** argum
12210 65 6e 74 73 20 28 74 68 65 20 77 61 79 20 74 68  ents (the way th
12220 65 20 54 43 4c 20 69 6e 74 65 72 66 61 63 65 20  e TCL interface 
12230 64 6f 65 73 20 69 74 29 2e 0a 2a 2f 0a 73 74 61  does it)..*/.sta
12240 74 69 63 20 69 6e 74 20 64 65 6c 65 74 65 5f 66  tic int delete_f
12250 75 6e 63 74 69 6f 6e 28 0a 20 20 76 6f 69 64 20  unction(.  void 
12260 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
12270 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
12280 72 70 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a  rp,.  int argc,.
12290 20 20 63 68 61 72 20 2a 2a 61 72 67 76 0a 29 7b    char **argv.){
122a0 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 73 71 6c  .  int rc;.  sql
122b0 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 66 28 20  ite3 *db;.  if( 
122c0 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54  argc!=3 ){.    T
122d0 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
122e0 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
122f0 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
12300 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a   \"", argv[0], .
12310 20 20 20 20 20 20 20 20 22 20 44 42 20 66 75 6e          " DB fun
12320 63 74 69 6f 6e 2d 6e 61 6d 65 22 2c 20 30 29 3b  ction-name", 0);
12330 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
12340 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
12350 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e   getDbPointer(in
12360 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26  terp, argv[1], &
12370 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  db) ) return TCL
12380 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73  _ERROR;.  rc = s
12390 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
123a0 6e 63 74 69 6f 6e 28 64 62 2c 20 61 72 67 76 5b  nction(db, argv[
123b0 32 5d 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55  2], -1, SQLITE_U
123c0 54 46 38 2c 20 30 2c 20 30 2c 20 30 2c 20 30 29  TF8, 0, 0, 0, 0)
123d0 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c  ;.  Tcl_SetResul
123e0 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20  t(interp, (char 
123f0 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c  *)errorName(rc),
12400 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20   TCL_STATIC);.  
12410 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
12420 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
12430 71 6c 69 74 65 5f 64 65 6c 65 74 65 5f 63 6f 6c  qlite_delete_col
12440 6c 61 74 69 6f 6e 20 44 42 20 63 6f 6c 6c 61 74  lation DB collat
12450 69 6f 6e 2d 6e 61 6d 65 0a 2a 2a 0a 2a 2a 20 44  ion-name.**.** D
12460 65 6c 65 74 65 20 74 68 65 20 63 6f 6c 6c 61 74  elete the collat
12470 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 27 63 6f  ion sequence 'co
12480 6c 6c 61 74 69 6f 6e 2d 6e 61 6d 65 27 20 66 72  llation-name' fr
12490 6f 6d 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  om database hand
124a0 6c 65 20 0a 2a 2a 20 44 42 2e 20 49 74 20 69 73  le .** DB. It is
124b0 20 61 73 73 75 6d 65 64 20 74 68 61 74 20 74 68   assumed that th
124c0 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  e collation sequ
124d0 65 6e 63 65 20 77 61 73 20 63 72 65 61 74 65 64  ence was created
124e0 20 61 73 20 55 54 46 38 20 28 74 68 65 20 0a 2a   as UTF8 (the .*
124f0 2a 20 77 61 79 20 74 68 65 20 54 43 4c 20 69 6e  * way the TCL in
12500 74 65 72 66 61 63 65 20 64 6f 65 73 20 69 74 29  terface does it)
12510 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
12520 64 65 6c 65 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e  delete_collation
12530 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
12540 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
12550 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
12560 6e 74 20 61 72 67 63 2c 0a 20 20 63 68 61 72 20  nt argc,.  char 
12570 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 69 6e 74 20  **argv.){.  int 
12580 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  rc;.  sqlite3 *d
12590 62 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 33  b;.  if( argc!=3
125a0 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
125b0 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
125c0 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
125d0 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61  should be \"", a
125e0 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20  rgv[0], .       
125f0 20 22 20 44 42 20 66 75 6e 63 74 69 6f 6e 2d 6e   " DB function-n
12600 61 6d 65 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  ame", 0);.    re
12610 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
12620 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
12630 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61  ointer(interp, a
12640 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72  rgv[1], &db) ) r
12650 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
12660 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
12670 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e  create_collation
12680 28 64 62 2c 20 61 72 67 76 5b 32 5d 2c 20 53 51  (db, argv[2], SQ
12690 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 20 30 29  LITE_UTF8, 0, 0)
126a0 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c  ;.  Tcl_SetResul
126b0 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20  t(interp, (char 
126c0 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c  *)errorName(rc),
126d0 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20   TCL_STATIC);.  
126e0 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
126f0 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
12700 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63  qlite3_get_autoc
12710 6f 6d 6d 69 74 20 44 42 0a 2a 2a 0a 2a 2a 20 52  ommit DB.**.** R
12720 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 74 68  eturn true if th
12730 65 20 64 61 74 61 62 61 73 65 20 44 42 20 69 73  e database DB is
12740 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 61 75   currently in au
12750 74 6f 2d 63 6f 6d 6d 69 74 20 6d 6f 64 65 2e 0a  to-commit mode..
12760 2a 2a 20 52 65 74 75 72 6e 20 66 61 6c 73 65 20  ** Return false 
12770 69 66 20 6e 6f 74 2e 0a 2a 2f 0a 73 74 61 74 69  if not..*/.stati
12780 63 20 69 6e 74 20 67 65 74 5f 61 75 74 6f 63 6f  c int get_autoco
12790 6d 6d 69 74 28 0a 20 20 76 6f 69 64 20 2a 20 63  mmit(.  void * c
127a0 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
127b0 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
127c0 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a 20 20 63  .  int argc,.  c
127d0 68 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20  har **argv.){.  
127e0 63 68 61 72 20 7a 42 75 66 5b 33 30 5d 3b 0a 20  char zBuf[30];. 
127f0 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
12800 69 66 28 20 61 72 67 63 21 3d 32 20 29 7b 0a 20  if( argc!=2 ){. 
12810 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
12820 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
12830 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
12840 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30  d be \"", argv[0
12850 5d 2c 20 0a 20 20 20 20 20 20 20 20 22 20 44 42  ], .        " DB
12860 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
12870 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
12880 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e  .  if( getDbPoin
12890 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76  ter(interp, argv
128a0 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75  [1], &db) ) retu
128b0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
128c0 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 25  sprintf(zBuf, "%
128d0 64 22 2c 20 73 71 6c 69 74 65 33 5f 67 65 74 5f  d", sqlite3_get_
128e0 61 75 74 6f 63 6f 6d 6d 69 74 28 64 62 29 29 3b  autocommit(db));
128f0 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73  .  Tcl_AppendRes
12900 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66  ult(interp, zBuf
12910 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  , 0);.  return T
12920 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
12930 55 73 61 67 65 3a 20 20 74 63 6c 5f 76 61 72 69  Usage:  tcl_vari
12940 61 62 6c 65 5f 74 79 70 65 20 56 41 52 49 41 42  able_type VARIAB
12950 4c 45 4e 41 4d 45 0a 2a 2a 0a 2a 2a 20 52 65 74  LENAME.**.** Ret
12960 75 72 6e 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  urn the name of 
12970 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  the internal rep
12980 72 65 73 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20  resentation for 
12990 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20  the.** value of 
129a0 74 68 65 20 67 69 76 65 6e 20 76 61 72 69 61 62  the given variab
129b0 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  le..*/.static in
129c0 74 20 74 63 6c 5f 76 61 72 69 61 62 6c 65 5f 74  t tcl_variable_t
129d0 79 70 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  ype(.  void * cl
129e0 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
129f0 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
12a00 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
12a10 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
12a20 76 5b 5d 0a 29 7b 0a 20 20 54 63 6c 5f 4f 62 6a  v[].){.  Tcl_Obj
12a30 20 2a 70 56 61 72 3b 0a 20 20 69 66 28 20 6f 62   *pVar;.  if( ob
12a40 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=2 ){.    Tcl
12a50 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e  _WrongNumArgs(in
12a60 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22  terp, 1, objv, "
12a70 56 41 52 49 41 42 4c 45 22 29 3b 0a 20 20 20 20  VARIABLE");.    
12a80 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
12a90 3b 0a 20 20 7d 0a 20 20 70 56 61 72 20 3d 20 54  ;.  }.  pVar = T
12aa0 63 6c 5f 47 65 74 56 61 72 32 45 78 28 69 6e 74  cl_GetVar2Ex(int
12ab0 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
12ac0 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 30 2c 20  ng(objv[1]), 0, 
12ad0 54 43 4c 5f 4c 45 41 56 45 5f 45 52 52 5f 4d 53  TCL_LEAVE_ERR_MS
12ae0 47 29 3b 0a 20 20 69 66 28 20 70 56 61 72 3d 3d  G);.  if( pVar==
12af0 30 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  0 ) return TCL_E
12b00 52 52 4f 52 3b 0a 20 20 69 66 28 20 70 56 61 72  RROR;.  if( pVar
12b10 2d 3e 74 79 70 65 50 74 72 20 29 7b 0a 20 20 20  ->typePtr ){.   
12b20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c   Tcl_SetObjResul
12b30 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
12b40 77 53 74 72 69 6e 67 4f 62 6a 28 70 56 61 72 2d  wStringObj(pVar-
12b50 3e 74 79 70 65 50 74 72 2d 3e 6e 61 6d 65 2c 20  >typePtr->name, 
12b60 2d 31 29 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  -1));.  }.  retu
12b70 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
12b80 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65  .** This routine
12b90 20 73 65 74 73 20 65 6e 74 72 69 65 73 20 69 6e   sets entries in
12ba0 20 74 68 65 20 67 6c 6f 62 61 6c 20 3a 3a 73 71   the global ::sq
12bb0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 28 29 20 61  lite_options() a
12bc0 72 72 61 79 20 76 61 72 69 61 62 6c 65 0a 2a 2a  rray variable.**
12bd0 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68   according to th
12be0 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63  e compile-time c
12bf0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 66 20  onfiguration of 
12c00 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54  the database.  T
12c10 65 73 74 0a 2a 2a 20 70 72 6f 63 65 64 75 72 65  est.** procedure
12c20 73 20 75 73 65 20 74 68 69 73 20 74 6f 20 64 65  s use this to de
12c30 74 65 72 6d 69 6e 65 20 77 68 65 6e 20 74 65 73  termine when tes
12c40 74 73 20 73 68 6f 75 6c 64 20 62 65 20 6f 6d 69  ts should be omi
12c50 74 74 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  tted..*/.static 
12c60 76 6f 69 64 20 73 65 74 5f 6f 70 74 69 6f 6e 73  void set_options
12c70 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74  (Tcl_Interp *int
12c80 65 72 70 29 7b 0a 23 69 66 64 65 66 20 53 51 4c  erp){.#ifdef SQL
12c90 49 54 45 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a  ITE_32BIT_ROWID.
12ca0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
12cb0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
12cc0 74 69 6f 6e 73 22 2c 20 22 72 6f 77 69 64 33 32  tions", "rowid32
12cd0 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
12ce0 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
12cf0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
12d00 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
12d10 74 69 6f 6e 73 22 2c 20 22 72 6f 77 69 64 33 32  tions", "rowid32
12d20 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
12d30 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
12d40 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
12d50 43 41 53 45 5f 53 45 4e 53 49 54 49 56 45 5f 4c  CASE_SENSITIVE_L
12d60 49 4b 45 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  IKE.  Tcl_SetVar
12d70 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
12d80 65 5f 6f 70 74 69 6f 6e 73 22 2c 22 63 61 73 65  e_options","case
12d90 73 65 6e 73 69 74 69 76 65 6c 69 6b 65 22 2c 22  sensitivelike","
12da0 31 22 2c 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  1",TCL_GLOBAL_ON
12db0 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
12dc0 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
12dd0 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
12de0 22 2c 22 63 61 73 65 73 65 6e 73 69 74 69 76 65  ","casesensitive
12df0 6c 69 6b 65 22 2c 22 30 22 2c 54 43 4c 5f 47 4c  like","0",TCL_GL
12e00 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
12e10 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
12e20 45 5f 44 49 53 41 42 4c 45 5f 44 49 52 53 59 4e  E_DISABLE_DIRSYN
12e30 43 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  C.  Tcl_SetVar2(
12e40 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
12e50 6f 70 74 69 6f 6e 73 22 2c 20 22 64 69 72 73 79  options", "dirsy
12e60 6e 63 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  nc", "0", TCL_GL
12e70 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
12e80 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
12e90 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
12ea0 6f 70 74 69 6f 6e 73 22 2c 20 22 64 69 72 73 79  options", "dirsy
12eb0 6e 63 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  nc", "1", TCL_GL
12ec0 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
12ed0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
12ee0 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53 0a 20 20  E_DISABLE_LFS.  
12ef0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
12f00 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
12f10 6f 6e 73 22 2c 20 22 6c 66 73 22 2c 20 22 30 22  ons", "lfs", "0"
12f20 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
12f30 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
12f40 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
12f50 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
12f60 2c 20 22 6c 66 73 22 2c 20 22 31 22 2c 20 54 43  , "lfs", "1", TC
12f70 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
12f80 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
12f90 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52  QLITE_OMIT_ALTER
12fa0 54 41 42 4c 45 0a 20 20 54 63 6c 5f 53 65 74 56  TABLE.  Tcl_SetV
12fb0 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
12fc0 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 61  ite_options", "a
12fd0 6c 74 65 72 74 61 62 6c 65 22 2c 20 22 30 22 2c  ltertable", "0",
12fe0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
12ff0 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
13000 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
13010 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
13020 20 22 61 6c 74 65 72 74 61 62 6c 65 22 2c 20 22   "altertable", "
13030 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
13040 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
13050 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
13060 5f 41 4e 41 4c 59 5a 45 0a 20 20 54 63 6c 5f 53  _ANALYZE.  Tcl_S
13070 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
13080 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
13090 20 22 61 6e 61 6c 79 7a 65 22 2c 20 22 30 22 2c   "analyze", "0",
130a0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
130b0 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
130c0 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
130d0 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
130e0 20 22 61 6e 61 6c 79 7a 65 22 2c 20 22 31 22 2c   "analyze", "1",
130f0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
13100 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
13110 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
13120 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 54 63  THORIZATION.  Tc
13130 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
13140 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
13150 73 22 2c 20 22 61 75 74 68 22 2c 20 22 30 22 2c  s", "auth", "0",
13160 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
13170 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
13180 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
13190 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
131a0 20 22 61 75 74 68 22 2c 20 22 31 22 2c 20 54 43   "auth", "1", TC
131b0 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
131c0 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
131d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
131e0 4e 43 52 45 4d 45 4e 54 0a 20 20 54 63 6c 5f 53  NCREMENT.  Tcl_S
131f0 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
13200 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
13210 20 22 61 75 74 6f 69 6e 63 22 2c 20 22 30 22 2c   "autoinc", "0",
13220 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
13230 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
13240 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
13250 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
13260 20 22 61 75 74 6f 69 6e 63 22 2c 20 22 31 22 2c   "autoinc", "1",
13270 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
13280 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
13290 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
132a0 54 4f 56 41 43 55 55 4d 0a 20 20 54 63 6c 5f 53  TOVACUUM.  Tcl_S
132b0 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
132c0 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
132d0 20 22 61 75 74 6f 76 61 63 75 75 6d 22 2c 20 22   "autovacuum", "
132e0 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
132f0 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
13300 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
13310 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
13320 73 22 2c 20 22 61 75 74 6f 76 61 63 75 75 6d 22  s", "autovacuum"
13330 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
13340 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 20  L_ONLY);.#endif 
13350 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  /* SQLITE_OMIT_A
13360 55 54 4f 56 41 43 55 55 4d 20 2a 2f 0a 23 69 66  UTOVACUUM */.#if
13370 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
13380 5f 44 45 46 41 55 4c 54 5f 41 55 54 4f 56 41 43  _DEFAULT_AUTOVAC
13390 55 55 4d 29 20 7c 7c 20 53 51 4c 49 54 45 5f 44  UUM) || SQLITE_D
133a0 45 46 41 55 4c 54 5f 41 55 54 4f 56 41 43 55 55  EFAULT_AUTOVACUU
133b0 4d 3d 3d 30 0a 20 20 54 63 6c 5f 53 65 74 56 61  M==0.  Tcl_SetVa
133c0 72 32 28 69 6e 74 65 72 70 2c 22 73 71 6c 69 74  r2(interp,"sqlit
133d0 65 5f 6f 70 74 69 6f 6e 73 22 2c 22 64 65 66 61  e_options","defa
133e0 75 6c 74 5f 61 75 74 6f 76 61 63 75 75 6d 22 2c  ult_autovacuum",
133f0 22 30 22 2c 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  "0",TCL_GLOBAL_O
13400 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
13410 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
13420 2c 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73  ,"sqlite_options
13430 22 2c 22 64 65 66 61 75 6c 74 5f 61 75 74 6f 76  ","default_autov
13440 61 63 75 75 6d 22 2c 22 31 22 2c 54 43 4c 5f 47  acuum","1",TCL_G
13450 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
13460 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
13470 54 45 5f 4f 4d 49 54 5f 42 45 54 57 45 45 4e 5f  TE_OMIT_BETWEEN_
13480 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 0a 20 20 54  OPTIMIZATION.  T
13490 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
134a0 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
134b0 6e 73 22 2c 20 22 62 65 74 77 65 65 6e 5f 6f 70  ns", "between_op
134c0 74 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  t", "0", TCL_GLO
134d0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
134e0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
134f0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
13500 70 74 69 6f 6e 73 22 2c 20 22 62 65 74 77 65 65  ptions", "betwee
13510 6e 5f 6f 70 74 22 2c 20 22 31 22 2c 20 54 43 4c  n_opt", "1", TCL
13520 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
13530 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
13540 4c 49 54 45 5f 4f 4d 49 54 5f 42 4c 4f 42 5f 4c  LITE_OMIT_BLOB_L
13550 49 54 45 52 41 4c 0a 20 20 54 63 6c 5f 53 65 74  ITERAL.  Tcl_Set
13560 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
13570 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
13580 62 6c 6f 62 6c 69 74 22 2c 20 22 30 22 2c 20 54  bloblit", "0", T
13590 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
135a0 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
135b0 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
135c0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
135d0 62 6c 6f 62 6c 69 74 22 2c 20 22 31 22 2c 20 54  bloblit", "1", T
135e0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
135f0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
13600 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54  SQLITE_OMIT_CAST
13610 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
13620 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
13630 70 74 69 6f 6e 73 22 2c 20 22 63 61 73 74 22 2c  ptions", "cast",
13640 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
13650 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
13660 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
13670 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
13680 6f 6e 73 22 2c 20 22 63 61 73 74 22 2c 20 22 31  ons", "cast", "1
13690 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
136a0 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
136b0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
136c0 43 48 45 43 4b 0a 20 20 54 63 6c 5f 53 65 74 56  CHECK.  Tcl_SetV
136d0 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
136e0 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63  ite_options", "c
136f0 68 65 63 6b 22 2c 20 22 30 22 2c 20 54 43 4c 5f  heck", "0", TCL_
13700 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
13710 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
13720 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
13730 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63 68 65  e_options", "che
13740 63 6b 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  ck", "1", TCL_GL
13750 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
13760 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
13770 45 5f 4f 4d 49 54 5f 43 4f 4d 50 4c 45 54 45 0a  E_OMIT_COMPLETE.
13780 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
13790 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
137a0 74 69 6f 6e 73 22 2c 20 22 63 6f 6d 70 6c 65 74  tions", "complet
137b0 65 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  e", "0", TCL_GLO
137c0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
137d0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
137e0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
137f0 70 74 69 6f 6e 73 22 2c 20 22 63 6f 6d 70 6c 65  ptions", "comple
13800 74 65 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  te", "1", TCL_GL
13810 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
13820 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
13830 45 5f 4f 4d 49 54 5f 43 4f 4d 50 4f 55 4e 44 5f  E_OMIT_COMPOUND_
13840 53 45 4c 45 43 54 0a 20 20 54 63 6c 5f 53 65 74  SELECT.  Tcl_Set
13850 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
13860 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
13870 63 6f 6d 70 6f 75 6e 64 22 2c 20 22 30 22 2c 20  compound", "0", 
13880 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
13890 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
138a0 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
138b0 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
138c0 22 63 6f 6d 70 6f 75 6e 64 22 2c 20 22 31 22 2c  "compound", "1",
138d0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
138e0 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
138f0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f  f SQLITE_OMIT_CO
13900 4e 46 4c 49 43 54 5f 43 4c 41 55 53 45 0a 20 20  NFLICT_CLAUSE.  
13910 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
13920 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
13930 6f 6e 73 22 2c 20 22 63 6f 6e 66 6c 69 63 74 22  ons", "conflict"
13940 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
13950 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
13960 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
13970 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
13980 69 6f 6e 73 22 2c 20 22 63 6f 6e 66 6c 69 63 74  ions", "conflict
13990 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
139a0 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
139b0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
139c0 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55  OMIT_DATETIME_FU
139d0 4e 43 53 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  NCS.  Tcl_SetVar
139e0 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
139f0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 64 61 74  e_options", "dat
13a00 65 74 69 6d 65 22 2c 20 22 30 22 2c 20 54 43 4c  etime", "0", TCL
13a10 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
13a20 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
13a30 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
13a40 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 64 61  te_options", "da
13a50 74 65 74 69 6d 65 22 2c 20 22 31 22 2c 20 54 43  tetime", "1", TC
13a60 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
13a70 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
13a80 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 49 53 4b 49  QLITE_OMIT_DISKI
13a90 4f 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  O.  Tcl_SetVar2(
13aa0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
13ab0 6f 70 74 69 6f 6e 73 22 2c 20 22 64 69 73 6b 69  options", "diski
13ac0 6f 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  o", "0", TCL_GLO
13ad0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
13ae0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
13af0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
13b00 70 74 69 6f 6e 73 22 2c 20 22 64 69 73 6b 69 6f  ptions", "diskio
13b10 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
13b20 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
13b30 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
13b40 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 54  OMIT_EXPLAIN.  T
13b50 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
13b60 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
13b70 6e 73 22 2c 20 22 65 78 70 6c 61 69 6e 22 2c 20  ns", "explain", 
13b80 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
13b90 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
13ba0 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
13bb0 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
13bc0 6e 73 22 2c 20 22 65 78 70 6c 61 69 6e 22 2c 20  ns", "explain", 
13bd0 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
13be0 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
13bf0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
13c00 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
13c10 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
13c20 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
13c30 70 74 69 6f 6e 73 22 2c 20 22 66 6c 6f 61 74 69  ptions", "floati
13c40 6e 67 70 6f 69 6e 74 22 2c 20 22 30 22 2c 20 54  ngpoint", "0", T
13c50 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
13c60 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
13c70 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
13c80 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
13c90 66 6c 6f 61 74 69 6e 67 70 6f 69 6e 74 22 2c 20  floatingpoint", 
13ca0 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
13cb0 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
13cc0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
13cd0 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20  T_FOREIGN_KEY.  
13ce0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
13cf0 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
13d00 6f 6e 73 22 2c 20 22 66 6f 72 65 69 67 6e 6b 65  ons", "foreignke
13d10 79 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  y", "0", TCL_GLO
13d20 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
13d30 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
13d40 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
13d50 70 74 69 6f 6e 73 22 2c 20 22 66 6f 72 65 69 67  ptions", "foreig
13d60 6e 6b 65 79 22 2c 20 22 31 22 2c 20 54 43 4c 5f  nkey", "1", TCL_
13d70 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
13d80 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
13d90 49 54 45 5f 4f 4d 49 54 5f 47 4c 4f 42 41 4c 52  ITE_OMIT_GLOBALR
13da0 45 43 4f 56 45 52 0a 20 20 54 63 6c 5f 53 65 74  ECOVER.  Tcl_Set
13db0 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
13dc0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
13dd0 67 6c 6f 62 61 6c 72 65 63 6f 76 65 72 22 2c 20  globalrecover", 
13de0 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
13df0 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
13e00 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
13e10 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
13e20 6e 73 22 2c 20 22 67 6c 6f 62 61 6c 72 65 63 6f  ns", "globalreco
13e30 76 65 72 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47  ver", "1", TCL_G
13e40 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
13e50 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
13e60 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54  TE_OMIT_INTEGRIT
13e70 59 5f 43 48 45 43 4b 0a 20 20 54 63 6c 5f 53 65  Y_CHECK.  Tcl_Se
13e80 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
13e90 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
13ea0 22 69 6e 74 65 67 72 69 74 79 63 6b 22 2c 20 22  "integrityck", "
13eb0 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
13ec0 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
13ed0 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
13ee0 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
13ef0 73 22 2c 20 22 69 6e 74 65 67 72 69 74 79 63 6b  s", "integrityck
13f00 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
13f10 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
13f20 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
13f30 4f 4d 49 54 5f 4c 49 4b 45 5f 4f 50 54 49 4d 49  OMIT_LIKE_OPTIMI
13f40 5a 41 54 49 4f 4e 0a 20 20 54 63 6c 5f 53 65 74  ZATION.  Tcl_Set
13f50 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
13f60 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
13f70 6c 69 6b 65 5f 6f 70 74 22 2c 20 22 30 22 2c 20  like_opt", "0", 
13f80 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
13f90 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
13fa0 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
13fb0 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
13fc0 22 6c 69 6b 65 5f 6f 70 74 22 2c 20 22 31 22 2c  "like_opt", "1",
13fd0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
13fe0 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
13ff0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4d 45  f SQLITE_OMIT_ME
14000 4d 4f 52 59 44 42 0a 20 20 54 63 6c 5f 53 65 74  MORYDB.  Tcl_Set
14010 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
14020 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
14030 6d 65 6d 6f 72 79 64 62 22 2c 20 22 30 22 2c 20  memorydb", "0", 
14040 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
14050 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
14060 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
14070 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
14080 22 6d 65 6d 6f 72 79 64 62 22 2c 20 22 31 22 2c  "memorydb", "1",
14090 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
140a0 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
140b0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4f 52  f SQLITE_OMIT_OR
140c0 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 0a 20 20  _OPTIMIZATION.  
140d0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
140e0 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
140f0 6f 6e 73 22 2c 20 22 6f 72 5f 6f 70 74 22 2c 20  ons", "or_opt", 
14100 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
14110 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
14120 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
14130 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
14140 6e 73 22 2c 20 22 6f 72 5f 6f 70 74 22 2c 20 22  ns", "or_opt", "
14150 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
14160 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
14170 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
14180 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 20  _PAGER_PRAGMAS. 
14190 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
141a0 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
141b0 69 6f 6e 73 22 2c 20 22 70 61 67 65 72 5f 70 72  ions", "pager_pr
141c0 61 67 6d 61 73 22 2c 20 22 30 22 2c 20 54 43 4c  agmas", "0", TCL
141d0 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
141e0 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
141f0 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
14200 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 70 61  te_options", "pa
14210 67 65 72 5f 70 72 61 67 6d 61 73 22 2c 20 22 31  ger_pragmas", "1
14220 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
14230 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
14240 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
14250 50 41 52 53 45 52 0a 20 20 54 63 6c 5f 53 65 74  PARSER.  Tcl_Set
14260 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
14270 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
14280 70 61 72 73 65 72 22 2c 20 22 30 22 2c 20 54 43  parser", "0", TC
14290 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
142a0 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
142b0 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
142c0 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 70  ite_options", "p
142d0 61 72 73 65 72 22 2c 20 22 31 22 2c 20 54 43 4c  arser", "1", TCL
142e0 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
142f0 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e  endif..#if defin
14300 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ed(SQLITE_OMIT_P
14310 52 41 47 4d 41 29 20 7c 7c 20 64 65 66 69 6e 65  RAGMA) || define
14320 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  d(SQLITE_OMIT_FL
14330 41 47 5f 50 52 41 47 4d 41 53 29 0a 20 20 54 63  AG_PRAGMAS).  Tc
14340 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
14350 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
14360 73 22 2c 20 22 70 72 61 67 6d 61 22 2c 20 22 30  s", "pragma", "0
14370 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
14380 4c 59 29 3b 0a 20 20 54 63 6c 5f 53 65 74 56 61  LY);.  Tcl_SetVa
14390 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
143a0 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 69 6e  te_options", "in
143b0 74 65 67 72 69 74 79 63 6b 22 2c 20 22 30 22 2c  tegrityck", "0",
143c0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
143d0 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
143e0 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
143f0 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
14400 20 22 70 72 61 67 6d 61 22 2c 20 22 31 22 2c 20   "pragma", "1", 
14410 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
14420 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
14430 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
14440 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
14450 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
14460 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
14470 69 6f 6e 73 22 2c 20 22 70 72 6f 67 72 65 73 73  ions", "progress
14480 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
14490 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
144a0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
144b0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
144c0 74 69 6f 6e 73 22 2c 20 22 70 72 6f 67 72 65 73  tions", "progres
144d0 73 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  s", "1", TCL_GLO
144e0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
144f0 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
14500 5f 4f 4d 49 54 5f 52 45 49 4e 44 45 58 0a 20 20  _OMIT_REINDEX.  
14510 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
14520 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
14530 6f 6e 73 22 2c 20 22 72 65 69 6e 64 65 78 22 2c  ons", "reindex",
14540 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
14550 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
14560 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
14570 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
14580 6f 6e 73 22 2c 20 22 72 65 69 6e 64 65 78 22 2c  ons", "reindex",
14590 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
145a0 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
145b0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
145c0 49 54 5f 53 43 48 45 4d 41 5f 50 52 41 47 4d 41  IT_SCHEMA_PRAGMA
145d0 53 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  S.  Tcl_SetVar2(
145e0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
145f0 6f 70 74 69 6f 6e 73 22 2c 20 22 73 63 68 65 6d  options", "schem
14600 61 5f 70 72 61 67 6d 61 73 22 2c 20 22 30 22 2c  a_pragmas", "0",
14610 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
14620 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
14630 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
14640 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
14650 20 22 73 63 68 65 6d 61 5f 70 72 61 67 6d 61 73   "schema_pragmas
14660 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
14670 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
14680 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
14690 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53  OMIT_SCHEMA_VERS
146a0 49 4f 4e 5f 50 52 41 47 4d 41 53 0a 20 20 54 63  ION_PRAGMAS.  Tc
146b0 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
146c0 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
146d0 73 22 2c 20 22 73 63 68 65 6d 61 5f 76 65 72 73  s", "schema_vers
146e0 69 6f 6e 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  ion", "0", TCL_G
146f0 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
14700 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
14710 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
14720 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 73 63 68 65  _options", "sche
14730 6d 61 5f 76 65 72 73 69 6f 6e 22 2c 20 22 31 22  ma_version", "1"
14740 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
14750 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  Y);.#endif..#ifd
14760 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
14770 55 42 51 55 45 52 59 0a 20 20 54 63 6c 5f 53 65  UBQUERY.  Tcl_Se
14780 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
14790 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
147a0 22 73 75 62 71 75 65 72 79 22 2c 20 22 30 22 2c  "subquery", "0",
147b0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
147c0 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
147d0 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
147e0 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
147f0 20 22 73 75 62 71 75 65 72 79 22 2c 20 22 31 22   "subquery", "1"
14800 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
14810 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  Y);.#endif..#ifd
14820 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
14830 43 4c 5f 56 41 52 49 41 42 4c 45 0a 20 20 54 63  CL_VARIABLE.  Tc
14840 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
14850 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
14860 73 22 2c 20 22 74 63 6c 76 61 72 22 2c 20 22 30  s", "tclvar", "0
14870 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
14880 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
14890 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
148a0 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
148b0 22 2c 20 22 74 63 6c 76 61 72 22 2c 20 22 31 22  ", "tclvar", "1"
148c0 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
148d0 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  Y);.#endif..#if 
148e0 64 65 66 69 6e 65 64 28 54 48 52 45 41 44 53 41  defined(THREADSA
148f0 46 45 29 20 26 26 20 54 48 52 45 41 44 53 41 46  FE) && THREADSAF
14900 45 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  E.  Tcl_SetVar2(
14910 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
14920 6f 70 74 69 6f 6e 73 22 2c 20 22 74 68 72 65 61  options", "threa
14930 64 73 61 66 65 22 2c 20 22 31 22 2c 20 54 43 4c  dsafe", "1", TCL
14940 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
14950 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
14960 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
14970 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 74 68  te_options", "th
14980 72 65 61 64 73 61 66 65 22 2c 20 22 30 22 2c 20  readsafe", "0", 
14990 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
149a0 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
149b0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41   SQLITE_OMIT_TRA
149c0 43 45 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  CE.  Tcl_SetVar2
149d0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
149e0 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 74 72 61 63  _options", "trac
149f0 65 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  e", "0", TCL_GLO
14a00 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
14a10 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
14a20 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
14a30 70 74 69 6f 6e 73 22 2c 20 22 74 72 61 63 65 22  ptions", "trace"
14a40 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
14a50 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
14a60 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
14a70 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20 54 63  MIT_TRIGGER.  Tc
14a80 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
14a90 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
14aa0 73 22 2c 20 22 74 72 69 67 67 65 72 22 2c 20 22  s", "trigger", "
14ab0 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
14ac0 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
14ad0 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
14ae0 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
14af0 73 22 2c 20 22 74 72 69 67 67 65 72 22 2c 20 22  s", "trigger", "
14b00 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
14b10 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
14b20 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
14b30 5f 54 45 4d 50 44 42 0a 20 20 54 63 6c 5f 53 65  _TEMPDB.  Tcl_Se
14b40 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
14b50 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
14b60 22 74 65 6d 70 64 62 22 2c 20 22 30 22 2c 20 54  "tempdb", "0", T
14b70 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
14b80 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
14b90 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
14ba0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
14bb0 74 65 6d 70 64 62 22 2c 20 22 31 22 2c 20 54 43  tempdb", "1", TC
14bc0 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
14bd0 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
14be0 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
14bf0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
14c00 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
14c10 70 74 69 6f 6e 73 22 2c 20 22 75 74 66 31 36 22  ptions", "utf16"
14c20 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
14c30 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
14c40 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
14c50 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
14c60 69 6f 6e 73 22 2c 20 22 75 74 66 31 36 22 2c 20  ions", "utf16", 
14c70 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
14c80 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
14c90 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
14ca0 54 5f 56 41 43 55 55 4d 0a 20 20 54 63 6c 5f 53  T_VACUUM.  Tcl_S
14cb0 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
14cc0 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
14cd0 20 22 76 61 63 75 75 6d 22 2c 20 22 30 22 2c 20   "vacuum", "0", 
14ce0 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
14cf0 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
14d00 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
14d10 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
14d20 22 76 61 63 75 75 6d 22 2c 20 22 31 22 2c 20 54  "vacuum", "1", T
14d30 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
14d40 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
14d50 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57  SQLITE_OMIT_VIEW
14d60 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
14d70 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
14d80 70 74 69 6f 6e 73 22 2c 20 22 76 69 65 77 22 2c  ptions", "view",
14d90 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
14da0 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
14db0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
14dc0 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
14dd0 6f 6e 73 22 2c 20 22 76 69 65 77 22 2c 20 22 31  ons", "view", "1
14de0 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
14df0 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f  LY);.#endif.}../
14e00 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 63 6f  *.** Register co
14e10 6d 6d 61 6e 64 73 20 77 69 74 68 20 74 68 65 20  mmands with the 
14e20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 2e  TCL interpreter.
14e30 0a 2a 2f 0a 69 6e 74 20 53 71 6c 69 74 65 74 65  .*/.int Sqlitete
14e40 73 74 31 5f 49 6e 69 74 28 54 63 6c 5f 49 6e 74  st1_Init(Tcl_Int
14e50 65 72 70 20 2a 69 6e 74 65 72 70 29 7b 0a 20 20  erp *interp){.  
14e60 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74  extern int sqlit
14e70 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 3b  e3_search_count;
14e80 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
14e90 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f  lite3_interrupt_
14ea0 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20  count;.  extern 
14eb0 69 6e 74 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e  int sqlite3_open
14ec0 5f 66 69 6c 65 5f 63 6f 75 6e 74 3b 0a 20 20 65  _file_count;.  e
14ed0 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
14ee0 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 3b 0a 20 20  3_sort_count;.  
14ef0 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74  extern int sqlit
14f00 65 33 5f 63 75 72 72 65 6e 74 5f 74 69 6d 65 3b  e3_current_time;
14f10 0a 20 20 73 74 61 74 69 63 20 73 74 72 75 63 74  .  static struct
14f20 20 7b 0a 20 20 20 20 20 63 68 61 72 20 2a 7a 4e   {.     char *zN
14f30 61 6d 65 3b 0a 20 20 20 20 20 54 63 6c 5f 43 6d  ame;.     Tcl_Cm
14f40 64 50 72 6f 63 20 2a 78 50 72 6f 63 3b 0a 20 20  dProc *xProc;.  
14f50 7d 20 61 43 6d 64 5b 5d 20 3d 20 7b 0a 20 20 20  } aCmd[] = {.   
14f60 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70 72    { "sqlite3_mpr
14f70 69 6e 74 66 5f 69 6e 74 22 2c 20 20 20 20 20 20  intf_int",      
14f80 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f       (Tcl_CmdPro
14f90 63 2a 29 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  c*)sqlite3_mprin
14fa0 74 66 5f 69 6e 74 20 20 20 20 7d 2c 0a 20 20 20  tf_int    },.   
14fb0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70 72    { "sqlite3_mpr
14fc0 69 6e 74 66 5f 69 6e 74 36 34 22 2c 20 20 20 20  intf_int64",    
14fd0 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f       (Tcl_CmdPro
14fe0 63 2a 29 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  c*)sqlite3_mprin
14ff0 74 66 5f 69 6e 74 36 34 20 20 7d 2c 0a 20 20 20  tf_int64  },.   
15000 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70 72    { "sqlite3_mpr
15010 69 6e 74 66 5f 73 74 72 22 2c 20 20 20 20 20 20  intf_str",      
15020 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f       (Tcl_CmdPro
15030 63 2a 29 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  c*)sqlite3_mprin
15040 74 66 5f 73 74 72 20 20 20 20 7d 2c 0a 20 20 20  tf_str    },.   
15050 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70 72    { "sqlite3_mpr
15060 69 6e 74 66 5f 73 74 72 6f 6e 6c 79 22 2c 20 20  intf_stronly",  
15070 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f       (Tcl_CmdPro
15080 63 2a 29 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  c*)sqlite3_mprin
15090 74 66 5f 73 74 72 6f 6e 6c 79 7d 2c 0a 20 20 20  tf_stronly},.   
150a0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70 72    { "sqlite3_mpr
150b0 69 6e 74 66 5f 64 6f 75 62 6c 65 22 2c 20 20 20  intf_double",   
150c0 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f       (Tcl_CmdPro
150d0 63 2a 29 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  c*)sqlite3_mprin
150e0 74 66 5f 64 6f 75 62 6c 65 20 7d 2c 0a 20 20 20  tf_double },.   
150f0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70 72    { "sqlite3_mpr
15100 69 6e 74 66 5f 73 63 61 6c 65 64 22 2c 20 20 20  intf_scaled",   
15110 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f       (Tcl_CmdPro
15120 63 2a 29 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  c*)sqlite3_mprin
15130 74 66 5f 73 63 61 6c 65 64 20 7d 2c 0a 20 20 20  tf_scaled },.   
15140 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70 72    { "sqlite3_mpr
15150 69 6e 74 66 5f 68 65 78 64 6f 75 62 6c 65 22 2c  intf_hexdouble",
15160 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
15170 29 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  )sqlite3_mprintf
15180 5f 68 65 78 64 6f 75 62 6c 65 7d 2c 0a 20 20 20  _hexdouble},.   
15190 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70 72    { "sqlite3_mpr
151a0 69 6e 74 66 5f 7a 5f 74 65 73 74 22 2c 20 20 20  intf_z_test",   
151b0 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f       (Tcl_CmdPro
151c0 63 2a 29 74 65 73 74 5f 6d 70 72 69 6e 74 66 5f  c*)test_mprintf_
151d0 7a 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20  z        },.    
151e0 20 7b 20 22 73 71 6c 69 74 65 33 5f 6c 61 73 74   { "sqlite3_last
151f0 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 22 2c 20  _insert_rowid", 
15200 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63      (Tcl_CmdProc
15210 2a 29 74 65 73 74 5f 6c 61 73 74 5f 72 6f 77 69  *)test_last_rowi
15220 64 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20  d       },.     
15230 7b 20 22 73 71 6c 69 74 65 33 5f 65 78 65 63 5f  { "sqlite3_exec_
15240 70 72 69 6e 74 66 22 2c 20 20 20 20 20 20 20 20  printf",        
15250 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
15260 29 74 65 73 74 5f 65 78 65 63 5f 70 72 69 6e 74  )test_exec_print
15270 66 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b  f      },.     {
15280 20 22 73 71 6c 69 74 65 33 5f 67 65 74 5f 74 61   "sqlite3_get_ta
15290 62 6c 65 5f 70 72 69 6e 74 66 22 2c 20 20 20 20  ble_printf",    
152a0 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29    (Tcl_CmdProc*)
152b0 74 65 73 74 5f 67 65 74 5f 74 61 62 6c 65 5f 70  test_get_table_p
152c0 72 69 6e 74 66 20 7d 2c 0a 20 20 20 20 20 7b 20  rintf },.     { 
152d0 22 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 22 2c  "sqlite3_close",
152e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152f0 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73   (Tcl_CmdProc*)s
15300 71 6c 69 74 65 5f 74 65 73 74 5f 63 6c 6f 73 65  qlite_test_close
15310 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22       },.     { "
15320 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
15330 75 6e 63 74 69 6f 6e 22 2c 20 20 20 20 20 20 20  unction",       
15340 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65  (Tcl_CmdProc*)te
15350 73 74 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  st_create_functi
15360 6f 6e 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73  on  },.     { "s
15370 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 61 67  qlite3_create_ag
15380 67 72 65 67 61 74 65 22 2c 20 20 20 20 20 20 28  gregate",      (
15390 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73  Tcl_CmdProc*)tes
153a0 74 5f 63 72 65 61 74 65 5f 61 67 67 72 65 67 61  t_create_aggrega
153b0 74 65 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  te },.     { "sq
153c0 6c 69 74 65 5f 72 65 67 69 73 74 65 72 5f 74 65  lite_register_te
153d0 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 28 54  st_function", (T
153e0 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74  cl_CmdProc*)test
153f0 5f 72 65 67 69 73 74 65 72 5f 66 75 6e 63 20 20  _register_func  
15400 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c    },.     { "sql
15410 69 74 65 5f 61 62 6f 72 74 22 2c 20 20 20 20 20  ite_abort",     
15420 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63               (Tc
15430 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74  l_CmdProc*)sqlit
15440 65 5f 61 62 6f 72 74 20 20 20 20 20 20 20 20 20  e_abort         
15450 20 7d 2c 0a 23 69 66 64 65 66 20 53 51 4c 49 54   },.#ifdef SQLIT
15460 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 20 20 20  E_MEMDEBUG.     
15470 7b 20 22 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63  { "sqlite_malloc
15480 5f 66 61 69 6c 22 2c 20 20 20 20 20 20 20 20 20  _fail",         
15490 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
154a0 29 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 66  )sqlite_malloc_f
154b0 61 69 6c 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b  ail    },.     {
154c0 20 22 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f   "sqlite_malloc_
154d0 73 74 61 74 22 2c 20 20 20 20 20 20 20 20 20 20  stat",          
154e0 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29    (Tcl_CmdProc*)
154f0 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 73 74  sqlite_malloc_st
15500 61 74 20 20 20 20 7d 2c 0a 23 65 6e 64 69 66 0a  at    },.#endif.
15510 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 5f 62       { "sqlite_b
15520 69 6e 64 22 2c 20 20 20 20 20 20 20 20 20 20 20  ind",           
15530 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64          (Tcl_Cmd
15540 50 72 6f 63 2a 29 74 65 73 74 5f 62 69 6e 64 20  Proc*)test_bind 
15550 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
15560 20 20 20 20 7b 20 22 62 72 65 61 6b 70 6f 69 6e      { "breakpoin
15570 74 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  t",             
15580 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
15590 72 6f 63 2a 29 74 65 73 74 5f 62 72 65 61 6b 70  roc*)test_breakp
155a0 6f 69 6e 74 20 20 20 20 20 20 20 7d 2c 0a 20 20  oint       },.  
155b0 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6b 65     { "sqlite3_ke
155c0 79 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  y",             
155d0 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72        (Tcl_CmdPr
155e0 6f 63 2a 29 74 65 73 74 5f 6b 65 79 20 20 20 20  oc*)test_key    
155f0 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
15600 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 72 65 6b    { "sqlite3_rek
15610 65 79 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  ey",            
15620 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f       (Tcl_CmdPro
15630 63 2a 29 74 65 73 74 5f 72 65 6b 65 79 20 20 20  c*)test_rekey   
15640 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20           },.    
15650 20 7b 20 22 73 71 6c 69 74 65 5f 73 65 74 5f 6d   { "sqlite_set_m
15660 61 67 69 63 22 2c 20 20 20 20 20 20 20 20 20 20  agic",          
15670 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63      (Tcl_CmdProc
15680 2a 29 73 71 6c 69 74 65 5f 73 65 74 5f 6d 61 67  *)sqlite_set_mag
15690 69 63 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20  ic      },.     
156a0 7b 20 22 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  { "sqlite3_inter
156b0 72 75 70 74 22 2c 20 20 20 20 20 20 20 20 20 20  rupt",          
156c0 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
156d0 29 74 65 73 74 5f 69 6e 74 65 72 72 75 70 74 20  )test_interrupt 
156e0 20 20 20 20 20 20 20 7d 2c 0a 23 69 66 20 30 0a         },.#if 0.
156f0 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
15700 73 6c 65 65 70 22 2c 20 20 20 20 20 20 20 20 20  sleep",         
15710 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64          (Tcl_Cmd
15720 50 72 6f 63 2a 29 74 65 73 74 5f 73 6c 65 65 70  Proc*)test_sleep
15730 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 23              },.#
15740 65 6e 64 69 66 0a 20 20 20 20 20 7b 20 22 73 71  endif.     { "sq
15750 6c 69 74 65 5f 64 65 6c 65 74 65 5f 66 75 6e 63  lite_delete_func
15760 74 69 6f 6e 22 2c 20 20 20 20 20 20 20 20 28 54  tion",        (T
15770 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 64 65 6c 65  cl_CmdProc*)dele
15780 74 65 5f 66 75 6e 63 74 69 6f 6e 20 20 20 20 20  te_function     
15790 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c    },.     { "sql
157a0 69 74 65 5f 64 65 6c 65 74 65 5f 63 6f 6c 6c 61  ite_delete_colla
157b0 74 69 6f 6e 22 2c 20 20 20 20 20 20 20 28 54 63  tion",       (Tc
157c0 6c 5f 43 6d 64 50 72 6f 63 2a 29 64 65 6c 65 74  l_CmdProc*)delet
157d0 65 5f 63 6f 6c 6c 61 74 69 6f 6e 20 20 20 20 20  e_collation     
157e0 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
157f0 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d  te3_get_autocomm
15800 69 74 22 2c 20 20 20 20 20 20 20 20 28 54 63 6c  it",        (Tcl
15810 5f 43 6d 64 50 72 6f 63 2a 29 67 65 74 5f 61 75  _CmdProc*)get_au
15820 74 6f 63 6f 6d 6d 69 74 20 20 20 20 20 20 20 20  tocommit        
15830 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
15840 65 33 5f 73 74 61 63 6b 5f 75 73 65 64 22 2c 20  e3_stack_used", 
15850 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f             (Tcl_
15860 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 73 74  CmdProc*)test_st
15870 61 63 6b 5f 75 73 65 64 20 20 20 20 20 20 20 7d  ack_used       }
15880 2c 0a 20 20 7d 3b 0a 20 20 73 74 61 74 69 63 20  ,.  };.  static 
15890 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 63 68  struct {.     ch
158a0 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20 20  ar *zName;.     
158b0 54 63 6c 5f 4f 62 6a 43 6d 64 50 72 6f 63 20 2a  Tcl_ObjCmdProc *
158c0 78 50 72 6f 63 3b 0a 20 20 20 20 20 76 6f 69 64  xProc;.     void
158d0 20 2a 63 6c 69 65 6e 74 44 61 74 61 3b 0a 20 20   *clientData;.  
158e0 7d 20 61 4f 62 6a 43 6d 64 5b 5d 20 3d 20 7b 0a  } aObjCmd[] = {.
158f0 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
15900 62 69 6e 64 5f 69 6e 74 22 2c 20 20 20 20 20 20  bind_int",      
15910 20 20 20 20 20 20 20 20 74 65 73 74 5f 62 69 6e          test_bin
15920 64 5f 69 6e 74 2c 20 20 20 20 20 20 30 20 7d 2c  d_int,      0 },
15930 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
15940 5f 62 69 6e 64 5f 69 6e 74 36 34 22 2c 20 20 20  _bind_int64",   
15950 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 62 69           test_bi
15960 6e 64 5f 69 6e 74 36 34 2c 20 20 20 20 30 20 7d  nd_int64,    0 }
15970 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
15980 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 22 2c 20  3_bind_double", 
15990 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 62            test_b
159a0 69 6e 64 5f 64 6f 75 62 6c 65 2c 20 20 20 30 20  ind_double,   0 
159b0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
159c0 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 22 2c 20 20  e3_bind_null",  
159d0 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f             test_
159e0 62 69 6e 64 5f 6e 75 6c 6c 20 20 20 20 20 2c 30  bind_null     ,0
159f0 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
15a00 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 22 2c 20  te3_bind_text", 
15a10 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
15a20 5f 62 69 6e 64 5f 74 65 78 74 20 20 20 20 20 2c  _bind_text     ,
15a30 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
15a40 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 31 36  ite3_bind_text16
15a50 22 2c 20 20 20 20 20 20 20 20 20 20 20 74 65 73  ",           tes
15a60 74 5f 62 69 6e 64 5f 74 65 78 74 31 36 20 20 20  t_bind_text16   
15a70 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  ,0 },.     { "sq
15a80 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 22  lite3_bind_blob"
15a90 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65  ,             te
15aa0 73 74 5f 62 69 6e 64 5f 62 6c 6f 62 20 20 20 20  st_bind_blob    
15ab0 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73   ,0 },.     { "s
15ac0 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
15ad0 6d 65 74 65 72 5f 63 6f 75 6e 74 22 2c 20 20 74  meter_count",  t
15ae0 65 73 74 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  est_bind_paramet
15af0 65 72 5f 63 6f 75 6e 74 2c 20 30 7d 2c 0a 20 20  er_count, 0},.  
15b00 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69     { "sqlite3_bi
15b10 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d  nd_parameter_nam
15b20 65 22 2c 20 20 20 74 65 73 74 5f 62 69 6e 64 5f  e",   test_bind_
15b30 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 2c 20  parameter_name, 
15b40 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c   0},.     { "sql
15b50 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
15b60 74 65 72 5f 69 6e 64 65 78 22 2c 20 20 74 65 73  ter_index",  tes
15b70 74 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  t_bind_parameter
15b80 5f 69 6e 64 65 78 2c 20 30 7d 2c 0a 23 69 66 20  _index, 0},.#if 
15b90 30 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  0.     { "sqlite
15ba0 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73  3_clear_bindings
15bb0 22 2c 20 20 20 20 20 20 20 20 74 65 73 74 5f 63  ",        test_c
15bc0 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73 2c 20 30  lear_bindings, 0
15bd0 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 7b  },.#endif.     {
15be0 20 22 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64   "sqlite3_errcod
15bf0 65 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  e",             
15c00 20 20 74 65 73 74 5f 65 72 72 63 6f 64 65 20 20    test_errcode  
15c10 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20       ,0 },.     
15c20 7b 20 22 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  { "sqlite3_errms
15c30 67 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  g",             
15c40 20 20 20 74 65 73 74 5f 65 72 72 6d 73 67 20 20     test_errmsg  
15c50 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20        ,0 },.    
15c60 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 72 72 6d   { "sqlite3_errm
15c70 73 67 31 36 22 2c 20 20 20 20 20 20 20 20 20 20  sg16",          
15c80 20 20 20 20 74 65 73 74 5f 65 72 72 6d 73 67 31      test_errmsg1
15c90 36 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20  6      ,0 },.   
15ca0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6f 70 65    { "sqlite3_ope
15cb0 6e 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  n",             
15cc0 20 20 20 20 20 74 65 73 74 5f 6f 70 65 6e 20 20       test_open  
15cd0 20 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20          ,0 },.  
15ce0 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6f 70     { "sqlite3_op
15cf0 65 6e 31 36 22 2c 20 20 20 20 20 20 20 20 20 20  en16",          
15d00 20 20 20 20 20 20 74 65 73 74 5f 6f 70 65 6e 31        test_open1
15d10 36 20 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20  6        ,0 },. 
15d20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63      { "sqlite3_c
15d30 6f 6d 70 6c 65 74 65 31 36 22 2c 20 20 20 20 20  omplete16",     
15d40 20 20 20 20 20 20 20 74 65 73 74 5f 63 6f 6d 70         test_comp
15d50 6c 65 74 65 31 36 20 20 20 20 2c 30 20 7d 2c 0a  lete16    ,0 },.
15d60 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
15d70 5f 70 72 65 70 61 72 65 22 2c 20 20 20 20 20 20  _prepare",      
15d80 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 70 72           test_pr
15d90 65 70 61 72 65 20 20 20 20 20 20 20 2c 30 20 7d  epare       ,0 }
15da0 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
15db0 33 5f 70 72 65 70 61 72 65 31 36 22 2c 20 20 20  3_prepare16",   
15dc0 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 70            test_p
15dd0 72 65 70 61 72 65 31 36 20 20 20 20 20 2c 30 20  repare16     ,0 
15de0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
15df0 65 33 5f 66 69 6e 61 6c 69 7a 65 22 2c 20 20 20  e3_finalize",   
15e00 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f             test_
15e10 66 69 6e 61 6c 69 7a 65 20 20 20 20 20 20 2c 30  finalize      ,0
15e20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
15e30 74 65 33 5f 72 65 73 65 74 22 2c 20 20 20 20 20  te3_reset",     
15e40 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
15e50 5f 72 65 73 65 74 20 20 20 20 20 20 20 20 20 2c  _reset         ,
15e60 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
15e70 69 74 65 33 5f 65 78 70 69 72 65 64 22 2c 20 20  ite3_expired",  
15e80 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73               tes
15e90 74 5f 65 78 70 69 72 65 64 20 20 20 20 20 20 20  t_expired       
15ea0 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  ,0 },.     { "sq
15eb0 6c 69 74 65 33 5f 74 72 61 6e 73 66 65 72 5f 62  lite3_transfer_b
15ec0 69 6e 64 69 6e 67 73 22 2c 20 20 20 20 20 74 65  indings",     te
15ed0 73 74 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e 64  st_transfer_bind
15ee0 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73   ,0 },.     { "s
15ef0 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 22 2c  qlite3_changes",
15f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
15f10 65 73 74 5f 63 68 61 6e 67 65 73 20 20 20 20 20  est_changes     
15f20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22    ,0 },.     { "
15f30 73 71 6c 69 74 65 33 5f 73 74 65 70 22 2c 20 20  sqlite3_step",  
15f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f50 74 65 73 74 5f 73 74 65 70 20 20 20 20 20 20 20  test_step       
15f60 20 20 20 2c 30 20 7d 2c 0a 0a 20 20 20 20 20 2f     ,0 },..     /
15f70 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  * sqlite3_column
15f80 5f 2a 28 29 20 41 50 49 20 2a 2f 0a 20 20 20 20  _*() API */.    
15f90 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75   { "sqlite3_colu
15fa0 6d 6e 5f 63 6f 75 6e 74 22 2c 20 20 20 20 20 20  mn_count",      
15fb0 20 20 20 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f      test_column_
15fc0 63 6f 75 6e 74 20 20 2c 30 20 7d 2c 0a 20 20 20  count  ,0 },.   
15fd0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 64 61 74    { "sqlite3_dat
15fe0 61 5f 63 6f 75 6e 74 22 2c 20 20 20 20 20 20 20  a_count",       
15ff0 20 20 20 20 20 74 65 73 74 5f 64 61 74 61 5f 63       test_data_c
16000 6f 75 6e 74 20 20 20 20 2c 30 20 7d 2c 0a 20 20  ount    ,0 },.  
16010 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f     { "sqlite3_co
16020 6c 75 6d 6e 5f 74 79 70 65 22 2c 20 20 20 20 20  lumn_type",     
16030 20 20 20 20 20 20 74 65 73 74 5f 63 6f 6c 75 6d        test_colum
16040 6e 5f 74 79 70 65 20 20 20 2c 30 20 7d 2c 0a 20  n_type   ,0 },. 
16050 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63      { "sqlite3_c
16060 6f 6c 75 6d 6e 5f 62 6c 6f 62 22 2c 20 20 20 20  olumn_blob",    
16070 20 20 20 20 20 20 20 74 65 73 74 5f 63 6f 6c 75         test_colu
16080 6d 6e 5f 62 6c 6f 62 20 20 20 2c 30 20 7d 2c 0a  mn_blob   ,0 },.
16090 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
160a0 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 22 2c 20  column_double", 
160b0 20 20 20 20 20 20 20 20 74 65 73 74 5f 63 6f 6c          test_col
160c0 75 6d 6e 5f 64 6f 75 62 6c 65 20 2c 30 20 7d 2c  umn_double ,0 },
160d0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
160e0 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 22 2c 20  _column_int64", 
160f0 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 63 6f           test_co
16100 6c 75 6d 6e 5f 69 6e 74 36 34 20 20 2c 30 20 7d  lumn_int64  ,0 }
16110 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
16120 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 22 2c 20  3_column_text", 
16130 20 20 20 20 20 20 74 65 73 74 5f 73 74 6d 74 5f        test_stmt_
16140 75 74 66 38 2c 20 20 73 71 6c 69 74 65 33 5f 63  utf8,  sqlite3_c
16150 6f 6c 75 6d 6e 5f 74 65 78 74 20 20 20 20 20 20  olumn_text      
16160 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
16170 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79  e3_column_declty
16180 70 65 22 2c 20 20 20 74 65 73 74 5f 73 74 6d 74  pe",   test_stmt
16190 5f 75 74 66 38 2c 20 20 73 71 6c 69 74 65 33 5f  _utf8,  sqlite3_
161a0 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 20  column_decltype 
161b0 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
161c0 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 22  te3_column_name"
161d0 2c 20 20 20 20 20 20 20 74 65 73 74 5f 73 74 6d  ,       test_stm
161e0 74 5f 75 74 66 38 2c 20 20 73 71 6c 69 74 65 33  t_utf8,  sqlite3
161f0 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 20 20 20 20  _column_name    
16200 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c    },.     { "sql
16210 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 22  ite3_column_int"
16220 2c 20 20 20 20 20 20 20 20 74 65 73 74 5f 73 74  ,        test_st
16230 6d 74 5f 69 6e 74 2c 20 20 20 73 71 6c 69 74 65  mt_int,   sqlite
16240 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 20 20 20  3_column_int    
16250 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71     },.     { "sq
16260 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74  lite3_column_byt
16270 65 73 22 2c 20 20 20 20 20 20 74 65 73 74 5f 73  es",      test_s
16280 74 6d 74 5f 69 6e 74 2c 20 20 20 73 71 6c 69 74  tmt_int,   sqlit
16290 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 20  e3_column_bytes 
162a0 20 20 20 20 7d 2c 0a 23 69 66 6e 64 65 66 20 53      },.#ifndef S
162b0 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
162c0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
162d0 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 31 36 22  _column_bytes16"
162e0 2c 20 20 20 20 74 65 73 74 5f 73 74 6d 74 5f 69  ,    test_stmt_i
162f0 6e 74 2c 20 20 20 73 71 6c 69 74 65 33 5f 63 6f  nt,   sqlite3_co
16300 6c 75 6d 6e 5f 62 79 74 65 73 31 36 20 20 20 7d  lumn_bytes16   }
16310 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
16320 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 22  3_column_text16"
16330 2c 20 20 20 20 20 74 65 73 74 5f 73 74 6d 74 5f  ,     test_stmt_
16340 75 74 66 31 36 2c 20 73 71 6c 69 74 65 33 5f 63  utf16, sqlite3_c
16350 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 20 20 20 20  olumn_text16    
16360 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
16370 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79  e3_column_declty
16380 70 65 31 36 22 2c 20 74 65 73 74 5f 73 74 6d 74  pe16", test_stmt
16390 5f 75 74 66 31 36 2c 20 73 71 6c 69 74 65 33 5f  _utf16, sqlite3_
163a0 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 31  column_decltype1
163b0 36 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69  6},.     { "sqli
163c0 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31  te3_column_name1
163d0 36 22 2c 20 20 20 20 20 74 65 73 74 5f 73 74 6d  6",     test_stm
163e0 74 5f 75 74 66 31 36 2c 20 73 71 6c 69 74 65 33  t_utf16, sqlite3
163f0 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36 20 20  _column_name16  
16400 20 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 20 20    },.#endif.    
16410 20 7b 20 22 73 71 6c 69 74 65 33 5f 67 6c 6f 62   { "sqlite3_glob
16420 61 6c 5f 72 65 63 6f 76 65 72 22 2c 20 20 20 20  al_recover",    
16430 74 65 73 74 5f 67 6c 6f 62 61 6c 5f 72 65 63 6f  test_global_reco
16440 76 65 72 2c 20 30 20 20 20 7d 2c 0a 0a 20 20 20  ver, 0   },..   
16450 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 73 20 66    /* Functions f
16460 72 6f 6d 20 6f 73 2e 68 20 2a 2f 0a 23 69 66 6e  rom os.h */.#ifn
16470 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
16480 44 49 53 4b 49 4f 0a 20 20 20 20 20 7b 20 22 73  DISKIO.     { "s
16490 71 6c 69 74 65 33 4f 73 4f 70 65 6e 52 65 61 64  qlite3OsOpenRead
164a0 57 72 69 74 65 22 2c 74 65 73 74 5f 73 71 6c 69  Write",test_sqli
164b0 74 65 33 4f 73 4f 70 65 6e 52 65 61 64 57 72 69  te3OsOpenReadWri
164c0 74 65 2c 20 30 20 7d 2c 0a 20 20 20 20 20 7b 20  te, 0 },.     { 
164d0 22 73 71 6c 69 74 65 33 4f 73 43 6c 6f 73 65 22  "sqlite3OsClose"
164e0 2c 20 20 20 20 20 20 20 20 74 65 73 74 5f 73 71  ,        test_sq
164f0 6c 69 74 65 33 4f 73 43 6c 6f 73 65 2c 20 30 20  lite3OsClose, 0 
16500 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
16510 65 33 4f 73 4c 6f 63 6b 22 2c 20 20 20 20 20 20  e3OsLock",      
16520 20 20 20 74 65 73 74 5f 73 71 6c 69 74 65 33 4f     test_sqlite3O
16530 73 4c 6f 63 6b 2c 20 30 20 7d 2c 0a 20 20 20 20  sLock, 0 },.    
16540 20 7b 20 22 73 71 6c 69 74 65 33 4f 73 54 65 6d   { "sqlite3OsTem
16550 70 46 69 6c 65 4e 61 6d 65 22 2c 20 74 65 73 74  pFileName", test
16560 5f 73 71 6c 69 74 65 33 4f 73 54 65 6d 70 46 69  _sqlite3OsTempFi
16570 6c 65 4e 61 6d 65 2c 20 30 20 7d 2c 0a 20 20 20  leName, 0 },.   
16580 0a 20 20 20 20 20 2f 2a 20 43 75 73 74 6f 6d 20  .     /* Custom 
16590 74 65 73 74 20 69 6e 74 65 72 66 61 63 65 73 20  test interfaces 
165a0 2a 2f 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  */.     { "sqlit
165b0 65 33 4f 73 55 6e 6c 6f 63 6b 22 2c 20 20 20 20  e3OsUnlock",    
165c0 20 20 20 20 20 74 65 73 74 5f 73 71 6c 69 74 65       test_sqlite
165d0 33 4f 73 55 6e 6c 6f 63 6b 2c 20 30 20 20 20 20  3OsUnlock, 0    
165e0 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  },.#endif.#ifnde
165f0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
16600 46 31 36 0a 20 20 20 20 20 7b 20 22 61 64 64 5f  F16.     { "add_
16610 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22 2c 20 20  test_collate",  
16620 20 20 20 20 20 20 74 65 73 74 5f 63 6f 6c 6c 61        test_colla
16630 74 65 2c 20 30 20 20 20 20 20 20 20 20 20 20 20  te, 0           
16640 20 7d 2c 0a 20 20 20 20 20 7b 20 22 61 64 64 5f   },.     { "add_
16650 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65  test_collate_nee
16660 64 65 64 22 2c 20 74 65 73 74 5f 63 6f 6c 6c 61  ded", test_colla
16670 74 65 5f 6e 65 65 64 65 64 2c 20 30 20 20 20 20  te_needed, 0    
16680 20 7d 2c 0a 20 20 20 20 20 7b 20 22 61 64 64 5f   },.     { "add_
16690 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20  test_function", 
166a0 20 20 20 20 20 20 74 65 73 74 5f 66 75 6e 63 74        test_funct
166b0 69 6f 6e 2c 20 30 20 20 20 20 20 20 20 20 20 20  ion, 0          
166c0 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 20 20 20   },.#endif.     
166d0 7b 20 22 73 71 6c 69 74 65 33 5f 74 65 73 74 5f  { "sqlite3_test_
166e0 65 72 72 73 74 72 22 2c 20 20 20 20 20 74 65 73  errstr",     tes
166f0 74 5f 65 72 72 73 74 72 2c 20 30 20 20 20 20 20  t_errstr, 0     
16700 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20          },.     
16710 7b 20 22 74 63 6c 5f 76 61 72 69 61 62 6c 65 5f  { "tcl_variable_
16720 74 79 70 65 22 2c 20 20 20 20 20 20 20 74 63 6c  type",       tcl
16730 5f 76 61 72 69 61 62 6c 65 5f 74 79 70 65 2c 20  _variable_type, 
16740 30 20 20 20 20 20 20 20 7d 2c 0a 20 20 7d 3b 0a  0       },.  };.
16750 20 20 73 74 61 74 69 63 20 69 6e 74 20 62 69 74    static int bit
16760 6d 61 73 6b 5f 73 69 7a 65 20 3d 20 73 69 7a 65  mask_size = size
16770 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 3b 0a 20  of(Bitmask)*8;. 
16780 20 69 6e 74 20 69 3b 0a 20 20 65 78 74 65 72 6e   int i;.  extern
16790 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6f 73 5f   int sqlite3_os_
167a0 74 72 61 63 65 3b 0a 20 20 65 78 74 65 72 6e 20  trace;.  extern 
167b0 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 68 65 72  int sqlite3_wher
167c0 65 5f 74 72 61 63 65 3b 0a 20 20 65 78 74 65 72  e_trace;.  exter
167d0 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 79  n int sqlite3_sy
167e0 6e 63 5f 63 6f 75 6e 74 2c 20 73 71 6c 69 74 65  nc_count, sqlite
167f0 33 5f 66 75 6c 6c 73 79 6e 63 5f 63 6f 75 6e 74  3_fullsync_count
16800 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  ;.  extern int s
16810 71 6c 69 74 65 33 5f 6f 70 65 6e 74 65 6d 70 5f  qlite3_opentemp_
16820 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20  count;.  extern 
16830 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 55  int sqlite3_memU
16840 73 65 64 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e  sed;.  extern in
16850 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 4d 61 78  t sqlite3_memMax
16860 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  ;.  extern int s
16870 71 6c 69 74 65 33 5f 6c 69 6b 65 5f 63 6f 75 6e  qlite3_like_coun
16880 74 3b 0a 23 69 66 20 4f 53 5f 57 49 4e 0a 20 20  t;.#if OS_WIN.  
16890 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74  extern int sqlit
168a0 65 33 5f 6f 73 5f 74 79 70 65 3b 0a 23 65 6e 64  e3_os_type;.#end
168b0 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
168c0 5f 44 45 42 55 47 0a 20 20 65 78 74 65 72 6e 20  _DEBUG.  extern 
168d0 69 6e 74 20 73 71 6c 69 74 65 33 5f 76 64 62 65  int sqlite3_vdbe
168e0 5f 61 64 64 6f 70 5f 74 72 61 63 65 3b 0a 23 65  _addop_trace;.#e
168f0 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
16900 54 45 5f 54 45 53 54 0a 20 20 65 78 74 65 72 6e  TE_TEST.  extern
16910 20 63 68 61 72 20 73 71 6c 69 74 65 33 5f 71 75   char sqlite3_qu
16920 65 72 79 5f 70 6c 61 6e 5b 5d 3b 0a 20 20 73 74  ery_plan[];.  st
16930 61 74 69 63 20 63 68 61 72 20 2a 71 75 65 72 79  atic char *query
16940 5f 70 6c 61 6e 20 3d 20 73 71 6c 69 74 65 33 5f  _plan = sqlite3_
16950 71 75 65 72 79 5f 70 6c 61 6e 3b 0a 23 65 6e 64  query_plan;.#end
16960 69 66 0a 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  if..  for(i=0; i
16970 3c 73 69 7a 65 6f 66 28 61 43 6d 64 29 2f 73 69  <sizeof(aCmd)/si
16980 7a 65 6f 66 28 61 43 6d 64 5b 30 5d 29 3b 20 69  zeof(aCmd[0]); i
16990 2b 2b 29 7b 0a 20 20 20 20 54 63 6c 5f 43 72 65  ++){.    Tcl_Cre
169a0 61 74 65 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72  ateCommand(inter
169b0 70 2c 20 61 43 6d 64 5b 69 5d 2e 7a 4e 61 6d 65  p, aCmd[i].zName
169c0 2c 20 61 43 6d 64 5b 69 5d 2e 78 50 72 6f 63 2c  , aCmd[i].xProc,
169d0 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 66 6f   0, 0);.  }.  fo
169e0 72 28 69 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28  r(i=0; i<sizeof(
169f0 61 4f 62 6a 43 6d 64 29 2f 73 69 7a 65 6f 66 28  aObjCmd)/sizeof(
16a00 61 4f 62 6a 43 6d 64 5b 30 5d 29 3b 20 69 2b 2b  aObjCmd[0]); i++
16a10 29 7b 0a 20 20 20 20 54 63 6c 5f 43 72 65 61 74  ){.    Tcl_Creat
16a20 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74 65  eObjCommand(inte
16a30 72 70 2c 20 61 4f 62 6a 43 6d 64 5b 69 5d 2e 7a  rp, aObjCmd[i].z
16a40 4e 61 6d 65 2c 20 0a 20 20 20 20 20 20 20 20 61  Name, .        a
16a50 4f 62 6a 43 6d 64 5b 69 5d 2e 78 50 72 6f 63 2c  ObjCmd[i].xProc,
16a60 20 61 4f 62 6a 43 6d 64 5b 69 5d 2e 63 6c 69 65   aObjCmd[i].clie
16a70 6e 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 7d 0a  ntData, 0);.  }.
16a80 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e    Tcl_LinkVar(in
16a90 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 73 65  terp, "sqlite_se
16aa0 61 72 63 68 5f 63 6f 75 6e 74 22 2c 20 0a 20 20  arch_count", .  
16ab0 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69      (char*)&sqli
16ac0 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74  te3_search_count
16ad0 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b  , TCL_LINK_INT);
16ae0 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
16af0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 73  nterp, "sqlite_s
16b00 6f 72 74 5f 63 6f 75 6e 74 22 2c 20 0a 20 20 20  ort_count", .   
16b10 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74     (char*)&sqlit
16b20 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2c 20 54  e3_sort_count, T
16b30 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20  CL_LINK_INT);.  
16b40 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
16b50 72 70 2c 20 22 73 71 6c 69 74 65 5f 6c 69 6b 65  rp, "sqlite_like
16b60 5f 63 6f 75 6e 74 22 2c 20 0a 20 20 20 20 20 20  _count", .      
16b70 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f  (char*)&sqlite3_
16b80 6c 69 6b 65 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f  like_count, TCL_
16b90 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c  LINK_INT);.  Tcl
16ba0 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c  _LinkVar(interp,
16bb0 20 22 73 71 6c 69 74 65 5f 69 6e 74 65 72 72 75   "sqlite_interru
16bc0 70 74 5f 63 6f 75 6e 74 22 2c 20 0a 20 20 20 20  pt_count", .    
16bd0 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65    (char*)&sqlite
16be0 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  3_interrupt_coun
16bf0 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29  t, TCL_LINK_INT)
16c00 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  ;.  Tcl_LinkVar(
16c10 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
16c20 6f 70 65 6e 5f 66 69 6c 65 5f 63 6f 75 6e 74 22  open_file_count"
16c30 2c 20 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29  , .      (char*)
16c40 26 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 66 69  &sqlite3_open_fi
16c50 6c 65 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49  le_count, TCL_LI
16c60 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c  NK_INT);.  Tcl_L
16c70 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22  inkVar(interp, "
16c80 73 71 6c 69 74 65 5f 63 75 72 72 65 6e 74 5f 74  sqlite_current_t
16c90 69 6d 65 22 2c 20 0a 20 20 20 20 20 20 28 63 68  ime", .      (ch
16ca0 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 63 75 72  ar*)&sqlite3_cur
16cb0 72 65 6e 74 5f 74 69 6d 65 2c 20 54 43 4c 5f 4c  rent_time, TCL_L
16cc0 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f  INK_INT);.  Tcl_
16cd0 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20  LinkVar(interp, 
16ce0 22 73 71 6c 69 74 65 5f 6f 73 5f 74 72 61 63 65  "sqlite_os_trace
16cf0 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29  ",.      (char*)
16d00 26 73 71 6c 69 74 65 33 5f 6f 73 5f 74 72 61 63  &sqlite3_os_trac
16d10 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29  e, TCL_LINK_INT)
16d20 3b 0a 23 69 66 20 4f 53 5f 57 49 4e 0a 20 20 54  ;.#if OS_WIN.  T
16d30 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72  cl_LinkVar(inter
16d40 70 2c 20 22 73 71 6c 69 74 65 5f 6f 73 5f 74 79  p, "sqlite_os_ty
16d50 70 65 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72  pe",.      (char
16d60 2a 29 26 73 71 6c 69 74 65 33 5f 6f 73 5f 74 79  *)&sqlite3_os_ty
16d70 70 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54  pe, TCL_LINK_INT
16d80 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  );.#endif.#ifdef
16d90 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 54   SQLITE_TEST.  T
16da0 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72  cl_LinkVar(inter
16db0 70 2c 20 22 73 71 6c 69 74 65 5f 71 75 65 72 79  p, "sqlite_query
16dc0 5f 70 6c 61 6e 22 2c 0a 20 20 20 20 20 20 28 63  _plan",.      (c
16dd0 68 61 72 2a 29 26 71 75 65 72 79 5f 70 6c 61 6e  har*)&query_plan
16de0 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 53 54 52 49 4e  , TCL_LINK_STRIN
16df0 47 7c 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41 44 5f  G|TCL_LINK_READ_
16e00 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 23 69  ONLY);.#endif.#i
16e10 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
16e20 47 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  G.  Tcl_LinkVar(
16e30 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
16e40 61 64 64 6f 70 5f 74 72 61 63 65 22 2c 0a 20 20  addop_trace",.  
16e50 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69      (char*)&sqli
16e60 74 65 33 5f 76 64 62 65 5f 61 64 64 6f 70 5f 74  te3_vdbe_addop_t
16e70 72 61 63 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49  race, TCL_LINK_I
16e80 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56  NT);.  Tcl_LinkV
16e90 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  ar(interp, "sqli
16ea0 74 65 5f 77 68 65 72 65 5f 74 72 61 63 65 22 2c  te_where_trace",
16eb0 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73  .      (char*)&s
16ec0 71 6c 69 74 65 33 5f 77 68 65 72 65 5f 74 72 61  qlite3_where_tra
16ed0 63 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54  ce, TCL_LINK_INT
16ee0 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  );.#endif.#ifdef
16ef0 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
16f00 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
16f10 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6d  nterp, "sqlite_m
16f20 65 6d 75 73 65 64 22 2c 0a 20 20 20 20 20 20 28  emused",.      (
16f30 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6d  char*)&sqlite3_m
16f40 65 6d 55 73 65 64 2c 20 54 43 4c 5f 4c 49 4e 4b  emUsed, TCL_LINK
16f50 5f 49 4e 54 20 7c 20 54 43 4c 5f 4c 49 4e 4b 5f  _INT | TCL_LINK_
16f60 52 45 41 44 5f 4f 4e 4c 59 29 3b 0a 20 20 54 63  READ_ONLY);.  Tc
16f70 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70  l_LinkVar(interp
16f80 2c 20 22 73 71 6c 69 74 65 5f 6d 65 6d 6d 61 78  , "sqlite_memmax
16f90 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29  ",.      (char*)
16fa0 26 73 71 6c 69 74 65 33 5f 6d 65 6d 4d 61 78 2c  &sqlite3_memMax,
16fb0 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 20 7c 20   TCL_LINK_INT | 
16fc0 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e  TCL_LINK_READ_ON
16fd0 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e  LY);.#endif.#ifn
16fe0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
16ff0 44 49 53 4b 49 4f 0a 20 20 54 63 6c 5f 4c 69 6e  DISKIO.  Tcl_Lin
17000 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71  kVar(interp, "sq
17010 6c 69 74 65 5f 6f 70 65 6e 74 65 6d 70 5f 63 6f  lite_opentemp_co
17020 75 6e 74 22 2c 0a 20 20 20 20 20 20 28 63 68 61  unt",.      (cha
17030 72 2a 29 26 73 71 6c 69 74 65 33 5f 6f 70 65 6e  r*)&sqlite3_open
17040 74 65 6d 70 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f  temp_count, TCL_
17050 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23 65 6e 64 69  LINK_INT);.#endi
17060 66 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  f.  Tcl_LinkVar(
17070 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
17080 73 74 61 74 69 63 5f 62 69 6e 64 5f 76 61 6c 75  static_bind_valu
17090 65 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a  e",.      (char*
170a0 29 26 73 71 6c 69 74 65 5f 73 74 61 74 69 63 5f  )&sqlite_static_
170b0 62 69 6e 64 5f 76 61 6c 75 65 2c 20 54 43 4c 5f  bind_value, TCL_
170c0 4c 49 4e 4b 5f 53 54 52 49 4e 47 29 3b 0a 20 20  LINK_STRING);.  
170d0 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
170e0 72 70 2c 20 22 73 71 6c 69 74 65 5f 74 65 6d 70  rp, "sqlite_temp
170f0 5f 64 69 72 65 63 74 6f 72 79 22 2c 0a 20 20 20  _directory",.   
17100 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74     (char*)&sqlit
17110 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72  e3_temp_director
17120 79 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 53 54 52 49  y, TCL_LINK_STRI
17130 4e 47 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56  NG);.  Tcl_LinkV
17140 61 72 28 69 6e 74 65 72 70 2c 20 22 62 69 74 6d  ar(interp, "bitm
17150 61 73 6b 5f 73 69 7a 65 22 2c 0a 20 20 20 20 20  ask_size",.     
17160 20 28 63 68 61 72 2a 29 26 62 69 74 6d 61 73 6b   (char*)&bitmask
17170 5f 73 69 7a 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f  _size, TCL_LINK_
17180 49 4e 54 7c 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41  INT|TCL_LINK_REA
17190 44 5f 4f 4e 4c 59 29 3b 0a 23 69 66 20 4f 53 5f  D_ONLY);.#if OS_
171a0 55 4e 49 58 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56  UNIX.  Tcl_LinkV
171b0 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  ar(interp, "sqli
171c0 74 65 5f 73 79 6e 63 5f 63 6f 75 6e 74 22 2c 0a  te_sync_count",.
171d0 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71        (char*)&sq
171e0 6c 69 74 65 33 5f 73 79 6e 63 5f 63 6f 75 6e 74  lite3_sync_count
171f0 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b  , TCL_LINK_INT);
17200 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
17210 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 66  nterp, "sqlite_f
17220 75 6c 6c 73 79 6e 63 5f 63 6f 75 6e 74 22 2c 0a  ullsync_count",.
17230 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71        (char*)&sq
17240 6c 69 74 65 33 5f 66 75 6c 6c 73 79 6e 63 5f 63  lite3_fullsync_c
17250 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49  ount, TCL_LINK_I
17260 4e 54 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 4f  NT);.#endif /* O
17270 53 5f 55 4e 49 58 20 2a 2f 0a 20 20 73 65 74 5f  S_UNIX */.  set_
17280 6f 70 74 69 6f 6e 73 28 69 6e 74 65 72 70 29 3b  options(interp);
17290 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
172a0 3b 0a 7d 0a                                      ;.}.