/ Hex Artifact Content
Login

Artifact 7969c2b10460bbe2ef3e614898895ddc07654199:


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 36 34 20 32 30 30 35 2f 31 31  ,v 1.164 2005/11
0240: 2f 32 35 20 30 39 3a 30 31 3a 32 34 20 64 61 6e  /25 09:01:24 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 20 2d 31 2c 0a 20 20 20 20 20 20  [i]), -1,.      
2d10: 20 20 20 20 53 51 4c 49 54 45 5f 54 52 41 4e 53      SQLITE_TRANS
2d20: 49 45 4e 54 29 3b 0a 20 20 20 20 20 20 62 72 65  IENT);.      bre
2d30: 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a  ak;.    }.  }.}.
2d40: 0a 2f 2a 0a 2a 2a 20 41 20 73 74 72 75 63 74 75  ./*.** A structu
2d50: 72 65 20 69 6e 74 6f 20 77 68 69 63 68 20 74 6f  re into which to
2d60: 20 61 63 63 75 6d 75 6c 61 74 65 20 74 65 78 74   accumulate text
2d70: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 64 73 74 72  ..*/.struct dstr
2d80: 20 7b 0a 20 20 69 6e 74 20 6e 41 6c 6c 6f 63 3b   {.  int nAlloc;
2d90: 20 20 2f 2a 20 53 70 61 63 65 20 61 6c 6c 6f 63    /* Space alloc
2da0: 61 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 55  ated */.  int nU
2db0: 73 65 64 3b 20 20 20 2f 2a 20 53 70 61 63 65 20  sed;   /* Space 
2dc0: 75 73 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  used */.  char *
2dd0: 7a 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 73 70  z;     /* The sp
2de0: 61 63 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ace */.};../*.**
2df0: 20 41 70 70 65 6e 64 20 74 65 78 74 20 74 6f 20   Append text to 
2e00: 61 20 64 73 74 72 0a 2a 2f 0a 73 74 61 74 69 63  a dstr.*/.static
2e10: 20 76 6f 69 64 20 64 73 74 72 41 70 70 65 6e 64   void dstrAppend
2e20: 28 73 74 72 75 63 74 20 64 73 74 72 20 2a 70 2c  (struct dstr *p,
2e30: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20   const char *z, 
2e40: 69 6e 74 20 64 69 76 69 64 65 72 29 7b 0a 20 20  int divider){.  
2e50: 69 6e 74 20 6e 20 3d 20 73 74 72 6c 65 6e 28 7a  int n = strlen(z
2e60: 29 3b 0a 20 20 69 66 28 20 70 2d 3e 6e 55 73 65  );.  if( p->nUse
2e70: 64 20 2b 20 6e 20 2b 20 32 20 3e 20 70 2d 3e 6e  d + n + 2 > p->n
2e80: 41 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 63 68 61  Alloc ){.    cha
2e90: 72 20 2a 7a 4e 65 77 3b 0a 20 20 20 20 70 2d 3e  r *zNew;.    p->
2ea0: 6e 41 6c 6c 6f 63 20 3d 20 70 2d 3e 6e 41 6c 6c  nAlloc = p->nAll
2eb0: 6f 63 2a 32 20 2b 20 6e 20 2b 20 32 30 30 3b 0a  oc*2 + n + 200;.
2ec0: 20 20 20 20 7a 4e 65 77 20 3d 20 73 71 6c 69 74      zNew = sqlit
2ed0: 65 52 65 61 6c 6c 6f 63 28 70 2d 3e 7a 2c 20 70  eRealloc(p->z, p
2ee0: 2d 3e 6e 41 6c 6c 6f 63 29 3b 0a 20 20 20 20 69  ->nAlloc);.    i
2ef0: 66 28 20 7a 4e 65 77 3d 3d 30 20 29 7b 0a 20 20  f( zNew==0 ){.  
2f00: 20 20 20 20 73 71 6c 69 74 65 46 72 65 65 28 70      sqliteFree(p
2f10: 2d 3e 7a 29 3b 0a 20 20 20 20 20 20 6d 65 6d 73  ->z);.      mems
2f20: 65 74 28 70 2c 20 30 2c 20 73 69 7a 65 6f 66 28  et(p, 0, sizeof(
2f30: 2a 70 29 29 3b 0a 20 20 20 20 20 20 72 65 74 75  *p));.      retu
2f40: 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d  rn;.    }.    p-
2f50: 3e 7a 20 3d 20 7a 4e 65 77 3b 0a 20 20 7d 0a 20  >z = zNew;.  }. 
2f60: 20 69 66 28 20 64 69 76 69 64 65 72 20 26 26 20   if( divider && 
2f70: 70 2d 3e 6e 55 73 65 64 3e 30 20 29 7b 0a 20 20  p->nUsed>0 ){.  
2f80: 20 20 70 2d 3e 7a 5b 70 2d 3e 6e 55 73 65 64 2b    p->z[p->nUsed+
2f90: 2b 5d 20 3d 20 64 69 76 69 64 65 72 3b 0a 20 20  +] = divider;.  
2fa0: 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70 2d 3e 7a  }.  memcpy(&p->z
2fb0: 5b 70 2d 3e 6e 55 73 65 64 5d 2c 20 7a 2c 20 6e  [p->nUsed], z, n
2fc0: 2b 31 29 3b 0a 20 20 70 2d 3e 6e 55 73 65 64 20  +1);.  p->nUsed 
2fd0: 2b 3d 20 6e 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49  += n;.}../*.** I
2fe0: 6e 76 6f 6b 65 64 20 66 6f 72 20 65 61 63 68 20  nvoked for each 
2ff0: 63 61 6c 6c 62 61 63 6b 20 66 72 6f 6d 20 73 71  callback from sq
3000: 6c 69 74 65 33 45 78 65 63 46 75 6e 63 0a 2a 2f  lite3ExecFunc.*/
3010: 0a 73 74 61 74 69 63 20 69 6e 74 20 65 78 65 63  .static int exec
3020: 46 75 6e 63 43 61 6c 6c 62 61 63 6b 28 76 6f 69  FuncCallback(voi
3030: 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 61 72  d *pData, int ar
3040: 67 63 2c 20 63 68 61 72 20 2a 2a 61 72 67 76 2c  gc, char **argv,
3050: 20 63 68 61 72 20 2a 2a 4e 6f 74 55 73 65 64 29   char **NotUsed)
3060: 7b 0a 20 20 73 74 72 75 63 74 20 64 73 74 72 20  {.  struct dstr 
3070: 2a 70 20 3d 20 28 73 74 72 75 63 74 20 64 73 74  *p = (struct dst
3080: 72 2a 29 70 44 61 74 61 3b 0a 20 20 69 6e 74 20  r*)pData;.  int 
3090: 69 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  i;.  for(i=0; i<
30a0: 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  argc; i++){.    
30b0: 69 66 28 20 61 72 67 76 5b 69 5d 3d 3d 30 20 29  if( argv[i]==0 )
30c0: 7b 0a 20 20 20 20 20 20 64 73 74 72 41 70 70 65  {.      dstrAppe
30d0: 6e 64 28 70 2c 20 22 4e 55 4c 4c 22 2c 20 27 20  nd(p, "NULL", ' 
30e0: 27 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ');.    }else{. 
30f0: 20 20 20 20 20 64 73 74 72 41 70 70 65 6e 64 28       dstrAppend(
3100: 70 2c 20 61 72 67 76 5b 69 5d 2c 20 27 20 27 29  p, argv[i], ' ')
3110: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65  ;.    }.  }.  re
3120: 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn 0;.}../*.**
3130: 20 49 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   Implementation 
3140: 6f 66 20 74 68 65 20 78 5f 73 71 6c 69 74 65 5f  of the x_sqlite_
3150: 65 78 65 63 28 29 20 66 75 6e 63 74 69 6f 6e 2e  exec() function.
3160: 20 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20    This function 
3170: 74 61 6b 65 73 0a 2a 2a 20 61 20 73 69 6e 67 6c  takes.** a singl
3180: 65 20 61 72 67 75 6d 65 6e 74 20 61 6e 64 20 61  e argument and a
3190: 74 74 65 6d 70 74 73 20 74 6f 20 65 78 65 63 75  ttempts to execu
31a0: 74 65 20 74 68 61 74 20 61 72 67 75 6d 65 6e 74  te that argument
31b0: 20 61 73 20 53 51 4c 20 63 6f 64 65 2e 0a 2a 2a   as SQL code..**
31c0: 20 54 68 69 73 20 69 73 20 69 6c 6c 65 67 61 6c   This is illegal
31d0: 20 61 6e 64 20 73 68 6f 75 6c 64 20 73 65 74 20   and should set 
31e0: 74 68 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  the SQLITE_MISUS
31f0: 45 20 66 6c 61 67 20 6f 6e 20 74 68 65 20 64 61  E flag on the da
3200: 74 61 62 61 73 65 2e 0a 2a 2a 0a 2a 2a 20 32 30  tabase..**.** 20
3210: 30 34 2d 4a 61 6e 2d 30 37 3a 20 20 57 65 20 68  04-Jan-07:  We h
3220: 61 76 65 20 63 68 61 6e 67 65 64 20 74 68 69 73  ave changed this
3230: 20 74 6f 20 6d 61 6b 65 20 69 74 20 6c 65 67 61   to make it lega
3240: 6c 20 74 6f 20 63 61 6c 6c 20 73 71 6c 69 74 65  l to call sqlite
3250: 33 5f 65 78 65 63 28 29 0a 2a 2a 20 66 72 6f 6d  3_exec().** from
3260: 20 77 69 74 68 69 6e 20 61 20 66 75 6e 63 74 69   within a functi
3270: 6f 6e 20 63 61 6c 6c 2e 20 20 0a 2a 2a 20 0a 2a  on call.  .** .*
3280: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73  * This routine s
3290: 69 6d 75 6c 61 74 65 73 20 74 68 65 20 65 66 66  imulates the eff
32a0: 65 63 74 20 6f 66 20 68 61 76 69 6e 67 20 74 77  ect of having tw
32b0: 6f 20 74 68 72 65 61 64 73 20 61 74 74 65 6d 70  o threads attemp
32c0: 74 20 74 6f 0a 2a 2a 20 75 73 65 20 74 68 65 20  t to.** use the 
32d0: 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 61 74  same database at
32e0: 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 2e 0a   the same time..
32f0: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73  */.static void s
3300: 71 6c 69 74 65 33 45 78 65 63 46 75 6e 63 28 0a  qlite3ExecFunc(.
3310: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
3320: 74 20 2a 63 6f 6e 74 65 78 74 2c 20 0a 20 20 69  t *context, .  i
3330: 6e 74 20 61 72 67 63 2c 20 20 0a 20 20 73 71 6c  nt argc,  .  sql
3340: 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67  ite3_value **arg
3350: 76 0a 29 7b 0a 20 20 73 74 72 75 63 74 20 64 73  v.){.  struct ds
3360: 74 72 20 78 3b 0a 20 20 6d 65 6d 73 65 74 28 26  tr x;.  memset(&
3370: 78 2c 20 30 2c 20 73 69 7a 65 6f 66 28 78 29 29  x, 0, sizeof(x))
3380: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63  ;.  sqlite3_exec
3390: 28 28 73 71 6c 69 74 65 33 2a 29 73 71 6c 69 74  ((sqlite3*)sqlit
33a0: 65 33 5f 75 73 65 72 5f 64 61 74 61 28 63 6f 6e  e3_user_data(con
33b0: 74 65 78 74 29 2c 0a 20 20 20 20 20 20 73 71 6c  text),.      sql
33c0: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
33d0: 61 72 67 76 5b 30 5d 29 2c 0a 20 20 20 20 20 20  argv[0]),.      
33e0: 65 78 65 63 46 75 6e 63 43 61 6c 6c 62 61 63 6b  execFuncCallback
33f0: 2c 20 26 78 2c 20 30 29 3b 0a 20 20 73 71 6c 69  , &x, 0);.  sqli
3400: 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28  te3_result_text(
3410: 63 6f 6e 74 65 78 74 2c 20 78 2e 7a 2c 20 78 2e  context, x.z, x.
3420: 6e 55 73 65 64 2c 20 53 51 4c 49 54 45 5f 54 52  nUsed, SQLITE_TR
3430: 41 4e 53 49 45 4e 54 29 3b 0a 20 20 73 71 6c 69  ANSIENT);.  sqli
3440: 74 65 46 72 65 65 28 78 2e 7a 29 3b 0a 7d 0a 0a  teFree(x.z);.}..
3450: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
3460: 6c 69 74 65 5f 74 65 73 74 5f 63 72 65 61 74 65  lite_test_create
3470: 5f 66 75 6e 63 74 69 6f 6e 20 44 42 0a 2a 2a 0a  _function DB.**.
3480: 2a 2a 20 43 61 6c 6c 20 74 68 65 20 73 71 6c 69  ** Call the sqli
3490: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
34a0: 69 6f 6e 20 41 50 49 20 6f 6e 20 74 68 65 20 67  ion API on the g
34b0: 69 76 65 6e 20 64 61 74 61 62 61 73 65 20 69 6e  iven database in
34c0: 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 63 72 65   order.** to cre
34d0: 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20 6e  ate a function n
34e0: 61 6d 65 64 20 22 78 5f 63 6f 61 6c 65 73 63 65  amed "x_coalesce
34f0: 22 2e 20 20 54 68 69 73 20 66 75 6e 63 74 69 6f  ".  This functio
3500: 6e 20 64 6f 65 73 20 74 68 65 20 73 61 6d 65 20  n does the same 
3510: 74 68 69 6e 67 0a 2a 2a 20 61 73 20 74 68 65 20  thing.** as the 
3520: 22 63 6f 61 6c 65 73 63 65 22 20 66 75 6e 63 74  "coalesce" funct
3530: 69 6f 6e 2e 20 20 54 68 69 73 20 66 75 6e 63 74  ion.  This funct
3540: 69 6f 6e 20 61 6c 73 6f 20 72 65 67 69 73 74 65  ion also registe
3550: 72 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69  rs an SQL functi
3560: 6f 6e 0a 2a 2a 20 6e 61 6d 65 64 20 22 78 5f 73  on.** named "x_s
3570: 71 6c 69 74 65 5f 65 78 65 63 22 20 74 68 61 74  qlite_exec" that
3580: 20 69 6e 76 6f 6b 65 73 20 73 71 6c 69 74 65 33   invokes sqlite3
3590: 5f 65 78 65 63 28 29 2e 20 20 49 6e 76 6f 6b 69  _exec().  Invoki
35a0: 6e 67 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28  ng sqlite3_exec(
35b0: 29 0a 2a 2a 20 69 6e 20 74 68 69 73 20 77 61 79  ).** in this way
35c0: 20 69 73 20 69 6c 6c 65 67 61 6c 20 72 65 63 75   is illegal recu
35d0: 72 73 69 6f 6e 20 61 6e 64 20 73 68 6f 75 6c 64  rsion and should
35e0: 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45   raise an SQLITE
35f0: 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 2e 0a 2a  _MISUSE error..*
3600: 2a 20 54 68 65 20 65 66 66 65 63 74 20 69 73 20  * The effect is 
3610: 73 69 6d 69 6c 61 72 20 74 6f 20 74 72 79 69 6e  similar to tryin
3620: 67 20 74 6f 20 75 73 65 20 74 68 65 20 73 61 6d  g to use the sam
3630: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
3640: 63 74 69 6f 6e 20 66 72 6f 6d 0a 2a 2a 20 74 77  ction from.** tw
3650: 6f 20 74 68 72 65 61 64 73 20 61 74 20 74 68 65  o threads at the
3660: 20 73 61 6d 65 20 74 69 6d 65 2e 0a 2a 2a 0a 2a   same time..**.*
3670: 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 6d  * The original m
3680: 6f 74 69 76 61 74 69 6f 6e 20 66 6f 72 20 74 68  otivation for th
3690: 69 73 20 72 6f 75 74 69 6e 65 20 77 61 73 20 74  is routine was t
36a0: 6f 20 62 65 20 61 62 6c 65 20 74 6f 20 63 61 6c  o be able to cal
36b0: 6c 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  l the.** sqlite3
36c0: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
36d0: 20 66 75 6e 63 74 69 6f 6e 20 77 68 69 6c 65 20   function while 
36e0: 61 20 71 75 65 72 79 20 69 73 20 69 6e 20 70 72  a query is in pr
36f0: 6f 67 72 65 73 73 20 69 6e 20 6f 72 64 65 72 0a  ogress in order.
3700: 2a 2a 20 74 6f 20 74 65 73 74 20 74 68 65 20 53  ** to test the S
3710: 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 64 65 74  QLITE_MISUSE det
3720: 65 63 74 69 6f 6e 20 6c 6f 67 69 63 2e 0a 2a 2f  ection logic..*/
3730: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
3740: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
3750: 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65  (.  void *NotUse
3760: 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  d,.  Tcl_Interp 
3770: 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
3780: 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
3790: 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
37a0: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
37b0: 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20    int argc,     
37c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
37d0: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
37e0: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  */.  char **argv
37f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
3800: 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75  ext of each argu
3810: 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  ment */.){.  int
3820: 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a   rc;.  sqlite3 *
3830: 64 62 3b 0a 20 20 65 78 74 65 72 6e 20 76 6f 69  db;.  extern voi
3840: 64 20 4d 64 35 5f 52 65 67 69 73 74 65 72 28 73  d Md5_Register(s
3850: 71 6c 69 74 65 33 2a 29 3b 0a 0a 20 20 69 66 28  qlite3*);..  if(
3860: 20 61 72 67 63 21 3d 32 20 29 7b 0a 20 20 20 20   argc!=2 ){.    
3870: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
3880: 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
3890: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
38a0: 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a  e \"", argv[0],.
38b0: 20 20 20 20 20 20 20 22 20 44 42 5c 22 22 2c 20         " DB\"", 
38c0: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
38d0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
38e0: 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72  if( getDbPointer
38f0: 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d  (interp, argv[1]
3900: 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
3910: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20  TCL_ERROR;.  rc 
3920: 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  = sqlite3_create
3930: 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22 78  _function(db, "x
3940: 5f 63 6f 61 6c 65 73 63 65 22 2c 20 2d 31 2c 20  _coalesce", -1, 
3950: 53 51 4c 49 54 45 5f 41 4e 59 2c 20 30 2c 20 0a  SQLITE_ANY, 0, .
3960: 20 20 20 20 20 20 20 20 69 66 6e 75 6c 6c 46 75          ifnullFu
3970: 6e 63 2c 20 30 2c 20 30 29 3b 0a 0a 23 69 66 6e  nc, 0, 0);..#ifn
3980: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
3990: 55 54 46 31 36 0a 20 20 2f 2a 20 55 73 65 20 74  UTF16.  /* Use t
39a0: 68 65 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  he sqlite3_creat
39b0: 65 5f 66 75 6e 63 74 69 6f 6e 31 36 28 29 20 41  e_function16() A
39c0: 50 49 20 68 65 72 65 2e 20 4d 61 69 6e 6c 79 20  PI here. Mainly 
39d0: 66 6f 72 20 66 75 6e 2c 20 62 75 74 20 61 6c 73  for fun, but als
39e0: 6f 20 0a 20 20 2a 2a 20 62 65 63 61 75 73 65 20  o .  ** because 
39f0: 69 74 20 69 73 20 6e 6f 74 20 74 65 73 74 65 64  it is not tested
3a00: 20 61 6e 79 77 68 65 72 65 20 65 6c 73 65 2e 20   anywhere else. 
3a10: 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  */.  if( rc==SQL
3a20: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 71  ITE_OK ){.    sq
3a30: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
3a40: 6c 3b 0a 20 20 20 20 70 56 61 6c 20 3d 20 73 71  l;.    pVal = sq
3a50: 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 29 3b  lite3ValueNew();
3a60: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75  .    sqlite3Valu
3a70: 65 53 65 74 53 74 72 28 70 56 61 6c 2c 20 2d 31  eSetStr(pVal, -1
3a80: 2c 20 22 78 5f 73 71 6c 69 74 65 5f 65 78 65 63  , "x_sqlite_exec
3a90: 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  ", SQLITE_UTF8, 
3aa0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
3ab0: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
3ac0: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
3ad0: 31 36 28 64 62 2c 20 0a 20 20 20 20 20 20 20 20  16(db, .        
3ae0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c        sqlite3Val
3af0: 75 65 54 65 78 74 28 70 56 61 6c 2c 20 53 51 4c  ueText(pVal, SQL
3b00: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 29  ITE_UTF16NATIVE)
3b10: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
3b20: 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 2c  1, SQLITE_UTF16,
3b30: 20 64 62 2c 20 73 71 6c 69 74 65 33 45 78 65 63   db, sqlite3Exec
3b40: 46 75 6e 63 2c 20 30 2c 20 30 29 3b 0a 20 20 20  Func, 0, 0);.   
3b50: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65   sqlite3ValueFre
3b60: 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 23 65 6e  e(pVal);.  }.#en
3b70: 64 69 66 0a 0a 20 20 69 66 28 20 73 71 6c 69 74  dif..  if( sqlit
3b80: 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e  e3TestErrCode(in
3b90: 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20  terp, db, rc) ) 
3ba0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
3bb0: 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c  ;.  Tcl_SetResul
3bc0: 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20  t(interp, (char 
3bd0: 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c  *)errorName(rc),
3be0: 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43   0);.  return TC
3bf0: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  L_OK;.}../*.** R
3c00: 6f 75 74 69 6e 65 73 20 74 6f 20 69 6d 70 6c 65  outines to imple
3c10: 6d 65 6e 74 20 74 68 65 20 78 5f 63 6f 75 6e 74  ment the x_count
3c20: 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  () aggregate fun
3c30: 63 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65  ction..*/.typede
3c40: 66 20 73 74 72 75 63 74 20 43 6f 75 6e 74 43 74  f struct CountCt
3c50: 78 20 43 6f 75 6e 74 43 74 78 3b 0a 73 74 72 75  x CountCtx;.stru
3c60: 63 74 20 43 6f 75 6e 74 43 74 78 20 7b 0a 20 20  ct CountCtx {.  
3c70: 69 6e 74 20 6e 3b 0a 7d 3b 0a 73 74 61 74 69 63  int n;.};.static
3c80: 20 76 6f 69 64 20 63 6f 75 6e 74 53 74 65 70 28   void countStep(
3c90: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
3ca0: 2a 63 6f 6e 74 65 78 74 2c 20 69 6e 74 20 61 72  *context, int ar
3cb0: 67 63 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  gc, sqlite3_valu
3cc0: 65 20 2a 2a 61 72 67 76 29 7b 0a 20 20 43 6f 75  e **argv){.  Cou
3cd0: 6e 74 43 74 78 20 2a 70 3b 0a 20 20 70 20 3d 20  ntCtx *p;.  p = 
3ce0: 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61 74  sqlite3_aggregat
3cf0: 65 5f 63 6f 6e 74 65 78 74 28 63 6f 6e 74 65 78  e_context(contex
3d00: 74 2c 20 73 69 7a 65 6f 66 28 2a 70 29 29 3b 0a  t, sizeof(*p));.
3d10: 20 20 69 66 28 20 28 61 72 67 63 3d 3d 30 20 7c    if( (argc==0 |
3d20: 7c 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 21 3d 73  | SQLITE_NULL!=s
3d30: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70  qlite3_value_typ
3d40: 65 28 61 72 67 76 5b 30 5d 29 20 29 20 26 26 20  e(argv[0]) ) && 
3d50: 70 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 2b 2b 3b  p ){.    p->n++;
3d60: 0a 20 20 7d 0a 7d 20 20 20 0a 73 74 61 74 69 63  .  }.}   .static
3d70: 20 76 6f 69 64 20 63 6f 75 6e 74 46 69 6e 61 6c   void countFinal
3d80: 69 7a 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ize(sqlite3_cont
3d90: 65 78 74 20 2a 63 6f 6e 74 65 78 74 29 7b 0a 20  ext *context){. 
3da0: 20 43 6f 75 6e 74 43 74 78 20 2a 70 3b 0a 20 20   CountCtx *p;.  
3db0: 70 20 3d 20 73 71 6c 69 74 65 33 5f 61 67 67 72  p = sqlite3_aggr
3dc0: 65 67 61 74 65 5f 63 6f 6e 74 65 78 74 28 63 6f  egate_context(co
3dd0: 6e 74 65 78 74 2c 20 73 69 7a 65 6f 66 28 2a 70  ntext, sizeof(*p
3de0: 29 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65  ));.  sqlite3_re
3df0: 73 75 6c 74 5f 69 6e 74 28 63 6f 6e 74 65 78 74  sult_int(context
3e00: 2c 20 70 20 3f 20 70 2d 3e 6e 20 3a 20 30 29 3b  , p ? p->n : 0);
3e10: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
3e20: 20 20 73 71 6c 69 74 65 5f 74 65 73 74 5f 63 72    sqlite_test_cr
3e30: 65 61 74 65 5f 61 67 67 72 65 67 61 74 65 20 44  eate_aggregate D
3e40: 42 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 74 68 65  B.**.** Call the
3e50: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
3e60: 66 75 6e 63 74 69 6f 6e 20 41 50 49 20 6f 6e 20  function API on 
3e70: 74 68 65 20 67 69 76 65 6e 20 64 61 74 61 62 61  the given databa
3e80: 73 65 20 69 6e 20 6f 72 64 65 72 0a 2a 2a 20 74  se in order.** t
3e90: 6f 20 63 72 65 61 74 65 20 61 20 66 75 6e 63 74  o create a funct
3ea0: 69 6f 6e 20 6e 61 6d 65 64 20 22 78 5f 63 6f 75  ion named "x_cou
3eb0: 6e 74 22 2e 20 20 54 68 69 73 20 66 75 6e 63 74  nt".  This funct
3ec0: 69 6f 6e 20 64 6f 65 73 20 74 68 65 20 73 61 6d  ion does the sam
3ed0: 65 20 74 68 69 6e 67 0a 2a 2a 20 61 73 20 74 68  e thing.** as th
3ee0: 65 20 22 6d 64 35 73 75 6d 22 20 66 75 6e 63 74  e "md5sum" funct
3ef0: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6f  ion..**.** The o
3f00: 72 69 67 69 6e 61 6c 20 6d 6f 74 69 76 61 74 69  riginal motivati
3f10: 6f 6e 20 66 6f 72 20 74 68 69 73 20 72 6f 75 74  on for this rout
3f20: 69 6e 65 20 77 61 73 20 74 6f 20 62 65 20 61 62  ine was to be ab
3f30: 6c 65 20 74 6f 20 63 61 6c 6c 20 74 68 65 0a 2a  le to call the.*
3f40: 2a 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  * sqlite3_create
3f50: 5f 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74  _aggregate funct
3f60: 69 6f 6e 20 77 68 69 6c 65 20 61 20 71 75 65 72  ion while a quer
3f70: 79 20 69 73 20 69 6e 20 70 72 6f 67 72 65 73 73  y is in progress
3f80: 20 69 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20   in order.** to 
3f90: 74 65 73 74 20 74 68 65 20 53 51 4c 49 54 45 5f  test the SQLITE_
3fa0: 4d 49 53 55 53 45 20 64 65 74 65 63 74 69 6f 6e  MISUSE detection
3fb0: 20 6c 6f 67 69 63 2e 0a 2a 2f 0a 73 74 61 74 69   logic..*/.stati
3fc0: 63 20 69 6e 74 20 74 65 73 74 5f 63 72 65 61 74  c int test_creat
3fd0: 65 5f 61 67 67 72 65 67 61 74 65 28 0a 20 20 76  e_aggregate(.  v
3fe0: 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20  oid *NotUsed,.  
3ff0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
4000: 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43  rp,    /* The TC
4010: 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68  L interpreter th
4020: 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20  at invoked this 
4030: 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74  command */.  int
4040: 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20   argc,          
4050: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
4060: 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
4070: 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20  char **argv     
4080: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f         /* Text o
4090: 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20  f each argument 
40a0: 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  */.){.  sqlite3 
40b0: 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  *db;.  int rc;. 
40c0: 20 69 66 28 20 61 72 67 63 21 3d 32 20 29 7b 0a   if( argc!=2 ){.
40d0: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
40e0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
40f0: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
4100: 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
4110: 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 49 4c  0],.       " FIL
4120: 45 4e 41 4d 45 5c 22 22 2c 20 30 29 3b 0a 20 20  ENAME\"", 0);.  
4130: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
4140: 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
4150: 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tDbPointer(inter
4160: 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29  p, argv[1], &db)
4170: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
4180: 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ROR;.  rc = sqli
4190: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
41a0: 69 6f 6e 28 64 62 2c 20 22 78 5f 63 6f 75 6e 74  ion(db, "x_count
41b0: 22 2c 20 30 2c 20 53 51 4c 49 54 45 5f 55 54 46  ", 0, SQLITE_UTF
41c0: 38 2c 20 30 2c 20 30 2c 0a 20 20 20 20 20 20 63  8, 0, 0,.      c
41d0: 6f 75 6e 74 53 74 65 70 2c 63 6f 75 6e 74 46 69  ountStep,countFi
41e0: 6e 61 6c 69 7a 65 29 3b 0a 20 20 69 66 28 20 72  nalize);.  if( r
41f0: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
4200: 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61      sqlite3_crea
4210: 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20  te_function(db, 
4220: 22 78 5f 63 6f 75 6e 74 22 2c 20 31 2c 20 53 51  "x_count", 1, SQ
4230: 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 20 30 2c  LITE_UTF8, 0, 0,
4240: 0a 20 20 20 20 20 20 20 20 63 6f 75 6e 74 53 74  .        countSt
4250: 65 70 2c 63 6f 75 6e 74 46 69 6e 61 6c 69 7a 65  ep,countFinalize
4260: 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c  );.  }.  if( sql
4270: 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28  ite3TestErrCode(
4280: 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20  interp, db, rc) 
4290: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
42a0: 4f 52 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  OR;.  return TCL
42b0: 5f 4f 4b 3b 0a 7d 0a 0a 0a 0a 2f 2a 0a 2a 2a 20  _OK;.}..../*.** 
42c0: 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f  Usage:  sqlite3_
42d0: 6d 70 72 69 6e 74 66 5f 69 6e 74 20 46 4f 52 4d  mprintf_int FORM
42e0: 41 54 20 49 4e 54 45 47 45 52 20 49 4e 54 45 47  AT INTEGER INTEG
42f0: 45 52 20 49 4e 54 45 47 45 52 0a 2a 2a 0a 2a 2a  ER INTEGER.**.**
4300: 20 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77 69   Call mprintf wi
4310: 74 68 20 74 68 72 65 65 20 69 6e 74 65 67 65 72  th three integer
4320: 20 61 72 67 75 6d 65 6e 74 73 0a 2a 2f 0a 73 74   arguments.*/.st
4330: 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33  atic int sqlite3
4340: 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 28 0a 20 20  _mprintf_int(.  
4350: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
4360: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
4370: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
4380: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
4390: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
43a0: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
43b0: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
43c0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
43d0: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
43e0: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
43f0: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
4400: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
4410: 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 61 5b 33   */.){.  int a[3
4420: 5d 2c 20 69 3b 0a 20 20 63 68 61 72 20 2a 7a 3b  ], i;.  char *z;
4430: 0a 20 20 69 66 28 20 61 72 67 63 21 3d 35 20 29  .  if( argc!=5 )
4440: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
4450: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
4460: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
4470: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
4480: 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46  v[0],.       " F
4490: 4f 52 4d 41 54 20 49 4e 54 20 49 4e 54 20 49 4e  ORMAT INT INT IN
44a0: 54 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  T\"", 0);.    re
44b0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
44c0: 20 20 7d 0a 20 20 66 6f 72 28 69 3d 32 3b 20 69    }.  for(i=2; i
44d0: 3c 35 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66  <5; i++){.    if
44e0: 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74  ( Tcl_GetInt(int
44f0: 65 72 70 2c 20 61 72 67 76 5b 69 5d 2c 20 26 61  erp, argv[i], &a
4500: 5b 69 2d 32 5d 29 20 29 20 72 65 74 75 72 6e 20  [i-2]) ) return 
4510: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
4520: 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72   z = sqlite3_mpr
4530: 69 6e 74 66 28 61 72 67 76 5b 31 5d 2c 20 61 5b  intf(argv[1], a[
4540: 30 5d 2c 20 61 5b 31 5d 2c 20 61 5b 32 5d 29 3b  0], a[1], a[2]);
4550: 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73  .  Tcl_AppendRes
4560: 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30  ult(interp, z, 0
4570: 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65  );.  sqlite3_fre
4580: 65 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  e(z);.  return T
4590: 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
45a0: 49 66 20 7a 4e 75 6d 20 72 65 70 72 65 73 65 6e  If zNum represen
45b0: 74 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68  ts an integer th
45c0: 61 74 20 77 69 6c 6c 20 66 69 74 20 69 6e 20 36  at will fit in 6
45d0: 34 2d 62 69 74 73 2c 20 74 68 65 6e 20 73 65 74  4-bits, then set
45e0: 0a 2a 2a 20 2a 70 56 61 6c 75 65 20 74 6f 20 74  .** *pValue to t
45f0: 68 61 74 20 69 6e 74 65 67 65 72 20 61 6e 64 20  hat integer and 
4600: 72 65 74 75 72 6e 20 74 72 75 65 2e 20 20 4f 74  return true.  Ot
4610: 68 65 72 77 69 73 65 20 72 65 74 75 72 6e 20 66  herwise return f
4620: 61 6c 73 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  alse..*/.static 
4630: 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e  int sqlite3GetIn
4640: 74 36 34 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  t64(const char *
4650: 7a 4e 75 6d 2c 20 69 36 34 20 2a 70 56 61 6c 75  zNum, i64 *pValu
4660: 65 29 7b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  e){.  if( sqlite
4670: 33 46 69 74 73 49 6e 36 34 42 69 74 73 28 7a 4e  3FitsIn64Bits(zN
4680: 75 6d 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  um) ){.    sqlit
4690: 65 33 61 74 6f 69 36 34 28 7a 4e 75 6d 2c 20 70  e3atoi64(zNum, p
46a0: 56 61 6c 75 65 29 3b 0a 20 20 20 20 72 65 74 75  Value);.    retu
46b0: 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75  rn 1;.  }.  retu
46c0: 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  rn 0;.}../*.** U
46d0: 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d  sage:  sqlite3_m
46e0: 70 72 69 6e 74 66 5f 69 6e 74 36 34 20 46 4f 52  printf_int64 FOR
46f0: 4d 41 54 20 49 4e 54 45 47 45 52 20 49 4e 54 45  MAT INTEGER INTE
4700: 47 45 52 20 49 4e 54 45 47 45 52 0a 2a 2a 0a 2a  GER INTEGER.**.*
4710: 2a 20 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77  * Call mprintf w
4720: 69 74 68 20 74 68 72 65 65 20 36 34 2d 62 69 74  ith three 64-bit
4730: 20 69 6e 74 65 67 65 72 20 61 72 67 75 6d 65 6e   integer argumen
4740: 74 73 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  ts.*/.static int
4750: 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
4760: 5f 69 6e 74 36 34 28 0a 20 20 76 6f 69 64 20 2a  _int64(.  void *
4770: 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49  NotUsed,.  Tcl_I
4780: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20  nterp *interp,  
4790: 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74    /* The TCL int
47a0: 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e  erpreter that in
47b0: 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61  voked this comma
47c0: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63  nd */.  int argc
47d0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
47e0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
47f0: 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20  ments */.  char 
4800: 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20  **argv          
4810: 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63    /* Text of eac
4820: 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b  h argument */.){
4830: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69  .  int i;.  sqli
4840: 74 65 5f 69 6e 74 36 34 20 61 5b 33 5d 3b 0a 20  te_int64 a[3];. 
4850: 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69 66 28 20   char *z;.  if( 
4860: 61 72 67 63 21 3d 35 20 29 7b 0a 20 20 20 20 54  argc!=5 ){.    T
4870: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
4880: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
4890: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
48a0: 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20   \"", argv[0],. 
48b0: 20 20 20 20 20 20 22 20 46 4f 52 4d 41 54 20 49        " FORMAT I
48c0: 4e 54 20 49 4e 54 20 49 4e 54 5c 22 22 2c 20 30  NT INT INT\"", 0
48d0: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
48e0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 66  L_ERROR;.  }.  f
48f0: 6f 72 28 69 3d 32 3b 20 69 3c 35 3b 20 69 2b 2b  or(i=2; i<5; i++
4900: 29 7b 0a 20 20 20 20 69 66 28 20 21 73 71 6c 69  ){.    if( !sqli
4910: 74 65 33 47 65 74 49 6e 74 36 34 28 61 72 67 76  te3GetInt64(argv
4920: 5b 69 5d 2c 20 26 61 5b 69 2d 32 5d 29 20 29 7b  [i], &a[i-2]) ){
4930: 0a 20 20 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  .      Tcl_Appen
4940: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
4950: 22 61 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74  "argument is not
4960: 20 61 20 76 61 6c 69 64 20 36 34 2d 62 69 74 20   a valid 64-bit 
4970: 69 6e 74 65 67 65 72 22 2c 20 30 29 3b 0a 20 20  integer", 0);.  
4980: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
4990: 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  RROR;.    }.  }.
49a0: 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70    z = sqlite3_mp
49b0: 72 69 6e 74 66 28 61 72 67 76 5b 31 5d 2c 20 61  rintf(argv[1], a
49c0: 5b 30 5d 2c 20 61 5b 31 5d 2c 20 61 5b 32 5d 29  [0], a[1], a[2])
49d0: 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65  ;.  Tcl_AppendRe
49e0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20  sult(interp, z, 
49f0: 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72  0);.  sqlite3_fr
4a00: 65 65 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20  ee(z);.  return 
4a10: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
4a20: 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33   Usage:  sqlite3
4a30: 5f 6d 70 72 69 6e 74 66 5f 73 74 72 20 46 4f 52  _mprintf_str FOR
4a40: 4d 41 54 20 49 4e 54 45 47 45 52 20 49 4e 54 45  MAT INTEGER INTE
4a50: 47 45 52 20 53 54 52 49 4e 47 0a 2a 2a 0a 2a 2a  GER STRING.**.**
4a60: 20 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77 69   Call mprintf wi
4a70: 74 68 20 74 77 6f 20 69 6e 74 65 67 65 72 20 61  th two integer a
4a80: 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 6f 6e 65  rguments and one
4a90: 20 73 74 72 69 6e 67 20 61 72 67 75 6d 65 6e 74   string argument
4aa0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73  .*/.static int s
4ab0: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73  qlite3_mprintf_s
4ac0: 74 72 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55  tr(.  void *NotU
4ad0: 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  sed,.  Tcl_Inter
4ae0: 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
4af0: 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
4b00: 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
4b10: 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
4b20: 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20  /.  int argc,   
4b30: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
4b40: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
4b50: 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72  s */.  char **ar
4b60: 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  gv            /*
4b70: 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72   Text of each ar
4b80: 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69  gument */.){.  i
4b90: 6e 74 20 61 5b 33 5d 2c 20 69 3b 0a 20 20 63 68  nt a[3], i;.  ch
4ba0: 61 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72 67  ar *z;.  if( arg
4bb0: 63 3c 34 20 7c 7c 20 61 72 67 63 3e 35 20 29 7b  c<4 || argc>5 ){
4bc0: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
4bd0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
4be0: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
4bf0: 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76  uld be \"", argv
4c00: 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 4f  [0],.       " FO
4c10: 52 4d 41 54 20 49 4e 54 20 49 4e 54 20 3f 53 54  RMAT INT INT ?ST
4c20: 52 49 4e 47 3f 5c 22 22 2c 20 30 29 3b 0a 20 20  RING?\"", 0);.  
4c30: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
4c40: 4f 52 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d  OR;.  }.  for(i=
4c50: 32 3b 20 69 3c 34 3b 20 69 2b 2b 29 7b 0a 20 20  2; i<4; i++){.  
4c60: 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
4c70: 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 69 5d  (interp, argv[i]
4c80: 2c 20 26 61 5b 69 2d 32 5d 29 20 29 20 72 65 74  , &a[i-2]) ) ret
4c90: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
4ca0: 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33   }.  z = sqlite3
4cb0: 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b 31 5d  _mprintf(argv[1]
4cc0: 2c 20 61 5b 30 5d 2c 20 61 5b 31 5d 2c 20 61 72  , a[0], a[1], ar
4cd0: 67 63 3e 34 20 3f 20 61 72 67 76 5b 34 5d 20 3a  gc>4 ? argv[4] :
4ce0: 20 4e 55 4c 4c 29 3b 0a 20 20 54 63 6c 5f 41 70   NULL);.  Tcl_Ap
4cf0: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
4d00: 70 2c 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69  p, z, 0);.  sqli
4d10: 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72  te3_free(z);.  r
4d20: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
4d30: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
4d40: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 64  qlite3_mprintf_d
4d50: 6f 75 62 6c 65 20 46 4f 52 4d 41 54 20 49 4e 54  ouble FORMAT INT
4d60: 45 47 45 52 20 49 4e 54 45 47 45 52 20 44 4f 55  EGER INTEGER DOU
4d70: 42 4c 45 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d  BLE.**.** Call m
4d80: 70 72 69 6e 74 66 20 77 69 74 68 20 74 77 6f 20  printf with two 
4d90: 69 6e 74 65 67 65 72 20 61 72 67 75 6d 65 6e 74  integer argument
4da0: 73 20 61 6e 64 20 6f 6e 65 20 64 6f 75 62 6c 65  s and one double
4db0: 20 61 72 67 75 6d 65 6e 74 0a 2a 2f 0a 73 74 61   argument.*/.sta
4dc0: 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  tic int sqlite3_
4dd0: 6d 70 72 69 6e 74 66 5f 64 6f 75 62 6c 65 28 0a  mprintf_double(.
4de0: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
4df0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
4e00: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
4e10: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
4e20: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
4e30: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
4e40: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
4e50: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
4e60: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
4e70: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
4e80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
4e90: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
4ea0: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 61  nt */.){.  int a
4eb0: 5b 33 5d 2c 20 69 3b 0a 20 20 64 6f 75 62 6c 65  [3], i;.  double
4ec0: 20 72 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20   r;.  char *z;. 
4ed0: 20 69 66 28 20 61 72 67 63 21 3d 35 20 29 7b 0a   if( argc!=5 ){.
4ee0: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
4ef0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
4f00: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
4f10: 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
4f20: 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 4f 52  0],.       " FOR
4f30: 4d 41 54 20 49 4e 54 20 49 4e 54 20 44 4f 55 42  MAT INT INT DOUB
4f40: 4c 45 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72  LE\"", 0);.    r
4f50: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
4f60: 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 32 3b 20  .  }.  for(i=2; 
4f70: 69 3c 34 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  i<4; i++){.    i
4f80: 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e  f( Tcl_GetInt(in
4f90: 74 65 72 70 2c 20 61 72 67 76 5b 69 5d 2c 20 26  terp, argv[i], &
4fa0: 61 5b 69 2d 32 5d 29 20 29 20 72 65 74 75 72 6e  a[i-2]) ) return
4fb0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
4fc0: 20 20 69 66 28 20 54 63 6c 5f 47 65 74 44 6f 75    if( Tcl_GetDou
4fd0: 62 6c 65 28 69 6e 74 65 72 70 2c 20 61 72 67 76  ble(interp, argv
4fe0: 5b 34 5d 2c 20 26 72 29 20 29 20 72 65 74 75 72  [4], &r) ) retur
4ff0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a  n TCL_ERROR;.  z
5000: 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
5010: 74 66 28 61 72 67 76 5b 31 5d 2c 20 61 5b 30 5d  tf(argv[1], a[0]
5020: 2c 20 61 5b 31 5d 2c 20 72 29 3b 0a 20 20 54 63  , a[1], r);.  Tc
5030: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
5040: 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a 20 20  nterp, z, 0);.  
5050: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 29 3b  sqlite3_free(z);
5060: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
5070: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
5080: 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  :  sqlite3_mprin
5090: 74 66 5f 73 63 61 6c 65 64 20 46 4f 52 4d 41 54  tf_scaled FORMAT
50a0: 20 44 4f 55 42 4c 45 20 44 4f 55 42 4c 45 0a 2a   DOUBLE DOUBLE.*
50b0: 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e 74  *.** Call mprint
50c0: 66 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20  f with a single 
50d0: 64 6f 75 62 6c 65 20 61 72 67 75 6d 65 6e 74 20  double argument 
50e0: 77 68 69 63 68 20 69 73 20 74 68 65 20 70 72 6f  which is the pro
50f0: 64 75 63 74 20 6f 66 20 74 68 65 0a 2a 2a 20 74  duct of the.** t
5100: 77 6f 20 61 72 67 75 6d 65 6e 74 73 20 67 69 76  wo arguments giv
5110: 65 6e 20 61 62 6f 76 65 2e 20 20 54 68 69 73 20  en above.  This 
5120: 69 73 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72  is used to gener
5130: 61 74 65 20 6f 76 65 72 66 6c 6f 77 20 61 6e 64  ate overflow and
5140: 20 75 6e 64 65 72 66 6c 6f 77 0a 2a 2a 20 64 6f   underflow.** do
5150: 75 62 6c 65 73 20 74 6f 20 74 65 73 74 20 74 68  ubles to test th
5160: 61 74 20 74 68 65 79 20 61 72 65 20 63 6f 6e 76  at they are conv
5170: 65 72 74 65 64 20 70 72 6f 70 65 72 6c 79 2e 0a  erted properly..
5180: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71  */.static int sq
5190: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 63  lite3_mprintf_sc
51a0: 61 6c 65 64 28 0a 20 20 76 6f 69 64 20 2a 4e 6f  aled(.  void *No
51b0: 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74  tUsed,.  Tcl_Int
51c0: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
51d0: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
51e0: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
51f0: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
5200: 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20   */.  int argc, 
5210: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
5220: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
5230: 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  nts */.  char **
5240: 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20  argv            
5250: 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20  /* Text of each 
5260: 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20  argument */.){. 
5270: 20 69 6e 74 20 69 3b 0a 20 20 64 6f 75 62 6c 65   int i;.  double
5280: 20 72 5b 32 5d 3b 0a 20 20 63 68 61 72 20 2a 7a   r[2];.  char *z
5290: 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 34 20  ;.  if( argc!=4 
52a0: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
52b0: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
52c0: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
52d0: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72  hould be \"", ar
52e0: 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20  gv[0],.       " 
52f0: 46 4f 52 4d 41 54 20 44 4f 55 42 4c 45 20 44 4f  FORMAT DOUBLE DO
5300: 55 42 4c 45 5c 22 22 2c 20 30 29 3b 0a 20 20 20  UBLE\"", 0);.   
5310: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
5320: 52 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 32  R;.  }.  for(i=2
5330: 3b 20 69 3c 34 3b 20 69 2b 2b 29 7b 0a 20 20 20  ; i<4; i++){.   
5340: 20 69 66 28 20 54 63 6c 5f 47 65 74 44 6f 75 62   if( Tcl_GetDoub
5350: 6c 65 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  le(interp, argv[
5360: 69 5d 2c 20 26 72 5b 69 2d 32 5d 29 20 29 20 72  i], &r[i-2]) ) r
5370: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
5380: 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74  .  }.  z = sqlit
5390: 65 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b  e3_mprintf(argv[
53a0: 31 5d 2c 20 72 5b 30 5d 2a 72 5b 31 5d 29 3b 0a  1], r[0]*r[1]);.
53b0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
53c0: 6c 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29  lt(interp, z, 0)
53d0: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65  ;.  sqlite3_free
53e0: 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  (z);.  return TC
53f0: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
5400: 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d  sage:  sqlite3_m
5410: 70 72 69 6e 74 66 5f 73 74 72 6f 6e 6c 79 20 46  printf_stronly F
5420: 4f 52 4d 41 54 20 53 54 52 49 4e 47 0a 2a 2a 0a  ORMAT STRING.**.
5430: 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20  ** Call mprintf 
5440: 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 64 6f  with a single do
5450: 75 62 6c 65 20 61 72 67 75 6d 65 6e 74 20 77 68  uble argument wh
5460: 69 63 68 20 69 73 20 74 68 65 20 70 72 6f 64 75  ich is the produ
5470: 63 74 20 6f 66 20 74 68 65 0a 2a 2a 20 74 77 6f  ct of the.** two
5480: 20 61 72 67 75 6d 65 6e 74 73 20 67 69 76 65 6e   arguments given
5490: 20 61 62 6f 76 65 2e 20 20 54 68 69 73 20 69 73   above.  This is
54a0: 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74   used to generat
54b0: 65 20 6f 76 65 72 66 6c 6f 77 20 61 6e 64 20 75  e overflow and u
54c0: 6e 64 65 72 66 6c 6f 77 0a 2a 2a 20 64 6f 75 62  nderflow.** doub
54d0: 6c 65 73 20 74 6f 20 74 65 73 74 20 74 68 61 74  les to test that
54e0: 20 74 68 65 79 20 61 72 65 20 63 6f 6e 76 65 72   they are conver
54f0: 74 65 64 20 70 72 6f 70 65 72 6c 79 2e 0a 2a 2f  ted properly..*/
5500: 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69  .static int sqli
5510: 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72 6f  te3_mprintf_stro
5520: 6e 6c 79 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74  nly(.  void *Not
5530: 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Used,.  Tcl_Inte
5540: 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
5550: 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
5560: 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
5570: 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
5580: 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20  */.  int argc,  
5590: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
55a0: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
55b0: 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  ts */.  char **a
55c0: 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f  rgv            /
55d0: 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61  * Text of each a
55e0: 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20  rgument */.){.  
55f0: 63 68 61 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61  char *z;.  if( a
5600: 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63  rgc!=3 ){.    Tc
5610: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
5620: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
5630: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
5640: 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20  \"", argv[0],.  
5650: 20 20 20 20 20 22 20 46 4f 52 4d 41 54 20 53 54       " FORMAT ST
5660: 52 49 4e 47 5c 22 22 2c 20 30 29 3b 0a 20 20 20  RING\"", 0);.   
5670: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
5680: 52 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c  R;.  }.  z = sql
5690: 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 61 72 67  ite3_mprintf(arg
56a0: 76 5b 31 5d 2c 20 61 72 67 76 5b 32 5d 29 3b 0a  v[1], argv[2]);.
56b0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
56c0: 6c 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29  lt(interp, z, 0)
56d0: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65  ;.  sqlite3_free
56e0: 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  (z);.  return TC
56f0: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
5700: 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d  sage:  sqlite3_m
5710: 70 72 69 6e 74 66 5f 68 65 78 64 6f 75 62 6c 65  printf_hexdouble
5720: 20 46 4f 52 4d 41 54 20 48 45 58 0a 2a 2a 0a 2a   FORMAT HEX.**.*
5730: 2a 20 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77  * Call mprintf w
5740: 69 74 68 20 61 20 73 69 6e 67 6c 65 20 64 6f 75  ith a single dou
5750: 62 6c 65 20 61 72 67 75 6d 65 6e 74 20 77 68 69  ble argument whi
5760: 63 68 20 69 73 20 64 65 72 69 76 65 64 20 66 72  ch is derived fr
5770: 6f 6d 20 74 68 65 0a 2a 2a 20 68 65 78 61 64 65  om the.** hexade
5780: 63 69 6d 61 6c 20 65 6e 63 6f 64 69 6e 67 20 6f  cimal encoding o
5790: 66 20 61 6e 20 49 45 45 45 20 64 6f 75 62 6c 65  f an IEEE double
57a0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
57b0: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
57c0: 68 65 78 64 6f 75 62 6c 65 28 0a 20 20 76 6f 69  hexdouble(.  voi
57d0: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63  d *NotUsed,.  Tc
57e0: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
57f0: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
5800: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
5810: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
5820: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61  mmand */.  int a
5830: 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  rgc,            
5840: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
5850: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68  rguments */.  ch
5860: 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20  ar **argv       
5870: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
5880: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f  each argument */
5890: 0a 29 7b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20  .){.  char *z;. 
58a0: 20 64 6f 75 62 6c 65 20 72 3b 0a 20 20 75 6e 73   double r;.  uns
58b0: 69 67 6e 65 64 20 20 78 31 2c 20 78 32 3b 0a 20  igned  x1, x2;. 
58c0: 20 6c 6f 6e 67 20 6c 6f 6e 67 20 75 6e 73 69 67   long long unsig
58d0: 6e 65 64 20 64 3b 0a 20 20 69 66 28 20 61 72 67  ned d;.  if( arg
58e0: 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
58f0: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
5900: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
5910: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
5920: 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20  ", argv[0],.    
5930: 20 20 20 22 20 46 4f 52 4d 41 54 20 53 54 52 49     " FORMAT STRI
5940: 4e 47 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72  NG\"", 0);.    r
5950: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
5960: 0a 20 20 7d 0a 20 20 69 66 28 20 73 73 63 61 6e  .  }.  if( sscan
5970: 66 28 61 72 67 76 5b 32 5d 2c 20 22 25 30 38 78  f(argv[2], "%08x
5980: 25 30 38 78 22 2c 20 26 78 32 2c 20 26 78 31 29  %08x", &x2, &x1)
5990: 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=2 ){.    Tcl_A
59a0: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
59b0: 72 70 2c 20 22 32 6e 64 20 61 72 67 75 6d 65 6e  rp, "2nd argumen
59c0: 74 20 73 68 6f 75 6c 64 20 62 65 20 31 36 2d 63  t should be 16-c
59d0: 68 61 72 61 63 74 65 72 73 20 6f 66 20 68 65 78  haracters of hex
59e0: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
59f0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
5a00: 0a 20 20 64 20 3d 20 78 32 3b 0a 20 20 64 20 3d  .  d = x2;.  d =
5a10: 20 28 64 3c 3c 33 32 29 20 2b 20 78 31 3b 0a 20   (d<<32) + x1;. 
5a20: 20 6d 65 6d 63 70 79 28 26 72 2c 20 26 64 2c 20   memcpy(&r, &d, 
5a30: 73 69 7a 65 6f 66 28 72 29 29 3b 0a 20 20 7a 20  sizeof(r));.  z 
5a40: 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
5a50: 66 28 61 72 67 76 5b 31 5d 2c 20 72 29 3b 0a 20  f(argv[1], r);. 
5a60: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
5a70: 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b  t(interp, z, 0);
5a80: 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  .  sqlite3_free(
5a90: 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  z);.  return TCL
5aa0: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
5ab0: 61 67 65 3a 20 73 71 6c 69 74 65 5f 6d 61 6c 6c  age: sqlite_mall
5ac0: 6f 63 5f 66 61 69 6c 20 4e 20 20 3f 52 45 50 45  oc_fail N  ?REPE
5ad0: 41 54 2d 49 4e 54 45 52 56 41 4c 3f 0a 2a 2a 0a  AT-INTERVAL?.**.
5ae0: 2a 2a 20 52 69 67 20 73 71 6c 69 74 65 4d 61 6c  ** Rig sqliteMal
5af0: 6c 6f 63 28 29 20 74 6f 20 66 61 69 6c 20 6f 6e  loc() to fail on
5b00: 20 74 68 65 20 4e 2d 74 68 20 63 61 6c 6c 20 61   the N-th call a
5b10: 6e 64 20 65 76 65 72 79 20 52 45 50 45 41 54 2d  nd every REPEAT-
5b20: 49 4e 54 45 52 56 41 4c 20 63 61 6c 6c 0a 2a 2a  INTERVAL call.**
5b30: 20 61 66 74 65 72 20 74 68 61 74 2e 20 20 49 66   after that.  If
5b40: 20 52 45 50 45 41 54 2d 49 4e 54 45 52 56 41 4c   REPEAT-INTERVAL
5b50: 20 69 73 20 30 20 6f 72 20 69 73 20 6f 6d 69 74   is 0 or is omit
5b60: 74 65 64 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 61  ted, then only a
5b70: 20 73 69 6e 67 6c 65 0a 2a 2a 20 6d 61 6c 6c 6f   single.** mallo
5b80: 63 20 77 69 6c 6c 20 66 61 69 6c 2e 20 20 49 66  c will fail.  If
5b90: 20 52 45 50 45 41 54 2d 49 4e 54 45 52 56 41 4c   REPEAT-INTERVAL
5ba0: 20 69 73 20 31 20 74 68 65 6e 20 61 6c 6c 20 6d   is 1 then all m
5bb0: 61 6c 6c 6f 63 73 20 61 66 74 65 72 20 74 68 65  allocs after the
5bc0: 0a 2a 2a 20 66 69 72 73 74 20 66 61 69 6c 75 72  .** first failur
5bd0: 65 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 20  e will continue 
5be0: 74 6f 20 66 61 69 6c 20 6f 6e 20 65 76 65 72 79  to fail on every
5bf0: 20 63 61 6c 6c 2e 20 20 49 66 20 52 45 50 45 41   call.  If REPEA
5c00: 54 2d 49 4e 54 45 52 56 41 4c 20 69 73 0a 2a 2a  T-INTERVAL is.**
5c10: 20 32 20 74 68 65 6e 20 65 76 65 72 79 20 6f 74   2 then every ot
5c20: 68 65 72 20 6d 61 6c 6c 6f 63 20 77 69 6c 6c 20  her malloc will 
5c30: 66 61 69 6c 2e 20 20 41 6e 64 20 73 6f 20 66 6f  fail.  And so fo
5c40: 72 74 68 2e 0a 2a 2a 0a 2a 2a 20 54 75 72 6e 20  rth..**.** Turn 
5c50: 6f 66 66 20 74 68 69 73 20 6d 65 63 68 61 6e 69  off this mechani
5c60: 73 6d 20 61 6e 64 20 72 65 73 65 74 20 74 68 65  sm and reset the
5c70: 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f   sqlite3_malloc_
5c80: 66 61 69 6c 65 64 20 76 61 72 69 61 62 6c 65 20  failed variable 
5c90: 69 73 20 4e 3d 3d 30 2e 0a 2a 2f 0a 23 69 66 64  is N==0..*/.#ifd
5ca0: 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ef SQLITE_MEMDEB
5cb0: 55 47 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71  UG.static int sq
5cc0: 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c  lite_malloc_fail
5cd0: 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65  (.  void *NotUse
5ce0: 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  d,.  Tcl_Interp 
5cf0: 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
5d00: 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
5d10: 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
5d20: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
5d30: 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20    int argc,     
5d40: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
5d50: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
5d60: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  */.  char **argv
5d70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
5d80: 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75  ext of each argu
5d90: 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  ment */.){.  int
5da0: 20 6e 3b 0a 20 20 69 6e 74 20 72 65 70 3b 0a 20   n;.  int rep;. 
5db0: 20 69 66 28 20 61 72 67 63 21 3d 32 20 26 26 20   if( argc!=2 && 
5dc0: 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54  argc!=3 ){.    T
5dd0: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
5de0: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
5df0: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
5e00: 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 22   \"", argv[0], "
5e10: 20 4e 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72   N\"", 0);.    r
5e20: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
5e30: 0a 20 20 7d 0a 20 20 69 66 28 20 54 63 6c 5f 47  .  }.  if( Tcl_G
5e40: 65 74 49 6e 74 28 69 6e 74 65 72 70 2c 20 61 72  etInt(interp, ar
5e50: 67 76 5b 31 5d 2c 20 26 6e 29 20 29 20 72 65 74  gv[1], &n) ) ret
5e60: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
5e70: 20 69 66 28 20 61 72 67 63 3d 3d 33 20 29 7b 0a   if( argc==3 ){.
5e80: 20 20 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49      if( Tcl_GetI
5e90: 6e 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  nt(interp, argv[
5ea0: 32 5d 2c 20 26 72 65 70 29 20 29 20 72 65 74 75  2], &rep) ) retu
5eb0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
5ec0: 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 70 20 3d  }else{.    rep =
5ed0: 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65   0;.  }.  sqlite
5ee0: 33 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c 20 3d 20  3_iMallocFail = 
5ef0: 6e 3b 0a 20 20 73 71 6c 69 74 65 33 5f 69 4d 61  n;.  sqlite3_iMa
5f00: 6c 6c 6f 63 52 65 73 65 74 20 3d 20 72 65 70 3b  llocReset = rep;
5f10: 0a 20 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  .  sqlite3_mallo
5f20: 63 5f 66 61 69 6c 65 64 20 3d 20 30 3b 0a 20 20  c_failed = 0;.  
5f30: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
5f40: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 55  .#endif../*.** U
5f50: 73 61 67 65 3a 20 73 71 6c 69 74 65 5f 6d 61 6c  sage: sqlite_mal
5f60: 6c 6f 63 5f 73 74 61 74 0a 2a 2a 0a 2a 2a 20 52  loc_stat.**.** R
5f70: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
5f80: 20 6f 66 20 70 72 69 6f 72 20 63 61 6c 6c 73 20   of prior calls 
5f90: 74 6f 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28  to sqliteMalloc(
5fa0: 29 20 61 6e 64 20 73 71 6c 69 74 65 46 72 65 65  ) and sqliteFree
5fb0: 28 29 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ()..*/.#ifdef SQ
5fc0: 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 73 74  LITE_MEMDEBUG.st
5fd0: 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65 5f  atic int sqlite_
5fe0: 6d 61 6c 6c 6f 63 5f 73 74 61 74 28 0a 20 20 76  malloc_stat(.  v
5ff0: 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20  oid *NotUsed,.  
6000: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
6010: 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43  rp,    /* The TC
6020: 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68  L interpreter th
6030: 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20  at invoked this 
6040: 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74  command */.  int
6050: 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20   argc,          
6060: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
6070: 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
6080: 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20  char **argv     
6090: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f         /* Text o
60a0: 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20  f each argument 
60b0: 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20 7a 42 75  */.){.  char zBu
60c0: 66 5b 32 30 30 5d 3b 0a 20 20 73 70 72 69 6e 74  f[200];.  sprint
60d0: 66 28 7a 42 75 66 2c 20 22 25 64 20 25 64 20 25  f(zBuf, "%d %d %
60e0: 64 22 2c 20 73 71 6c 69 74 65 33 5f 6e 4d 61 6c  d", sqlite3_nMal
60f0: 6c 6f 63 2c 20 73 71 6c 69 74 65 33 5f 6e 46 72  loc, sqlite3_nFr
6100: 65 65 2c 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c  ee, sqlite3_iMal
6110: 6c 6f 63 46 61 69 6c 29 3b 0a 20 20 54 63 6c 5f  locFail);.  Tcl_
6120: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
6130: 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 20  erp, zBuf, 0);. 
6140: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
6150: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
6160: 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 5f 61  Usage:  sqlite_a
6170: 62 6f 72 74 0a 2a 2a 0a 2a 2a 20 53 68 75 74 64  bort.**.** Shutd
6180: 6f 77 6e 20 74 68 65 20 70 72 6f 63 65 73 73 20  own the process 
6190: 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 54 68  immediately.  Th
61a0: 69 73 20 69 73 20 6e 6f 74 20 61 20 63 6c 65 61  is is not a clea
61b0: 6e 20 73 68 75 74 64 6f 77 6e 2e 0a 2a 2a 20 54  n shutdown..** T
61c0: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75  his command is u
61d0: 73 65 64 20 74 6f 20 74 65 73 74 20 74 68 65 20  sed to test the 
61e0: 72 65 63 6f 76 65 72 61 62 69 6c 69 74 79 20 6f  recoverability o
61f0: 66 20 61 20 64 61 74 61 62 61 73 65 20 69 6e 0a  f a database in.
6200: 2a 2a 20 74 68 65 20 65 76 65 6e 74 20 6f 66 20  ** the event of 
6210: 61 20 70 72 6f 67 72 61 6d 20 63 72 61 73 68 2e  a program crash.
6220: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73  .*/.static int s
6230: 71 6c 69 74 65 5f 61 62 6f 72 74 28 0a 20 20 76  qlite_abort(.  v
6240: 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20  oid *NotUsed,.  
6250: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
6260: 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43  rp,    /* The TC
6270: 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68  L interpreter th
6280: 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20  at invoked this 
6290: 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74  command */.  int
62a0: 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20   argc,          
62b0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
62c0: 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
62d0: 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20  char **argv     
62e0: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f         /* Text o
62f0: 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20  f each argument 
6300: 2a 2f 0a 29 7b 0a 20 20 61 73 73 65 72 74 28 20  */.){.  assert( 
6310: 69 6e 74 65 72 70 3d 3d 30 20 29 3b 20 20 20 2f  interp==0 );   /
6320: 2a 20 54 68 69 73 20 77 69 6c 6c 20 61 6c 77 61  * This will alwa
6330: 79 73 20 66 61 69 6c 20 2a 2f 0a 20 20 72 65 74  ys fail */.  ret
6340: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
6350: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
6360: 6e 67 20 72 6f 75 74 69 6e 65 20 69 73 20 61 20  ng routine is a 
6370: 75 73 65 72 2d 64 65 66 69 6e 65 64 20 53 51 4c  user-defined SQL
6380: 20 66 75 6e 63 74 69 6f 6e 20 77 68 6f 73 65 20   function whose 
6390: 70 75 72 70 6f 73 65 0a 2a 2a 20 69 73 20 74 6f  purpose.** is to
63a0: 20 74 65 73 74 20 74 68 65 20 73 71 6c 69 74 65   test the sqlite
63b0: 5f 73 65 74 5f 72 65 73 75 6c 74 28 29 20 41 50  _set_result() AP
63c0: 49 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  I..*/.static voi
63d0: 64 20 74 65 73 74 46 75 6e 63 28 73 71 6c 69 74  d testFunc(sqlit
63e0: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74  e3_context *cont
63f0: 65 78 74 2c 20 69 6e 74 20 61 72 67 63 2c 20 73  ext, int argc, s
6400: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
6410: 72 67 76 29 7b 0a 20 20 77 68 69 6c 65 28 20 61  rgv){.  while( a
6420: 72 67 63 3e 3d 32 20 29 7b 0a 20 20 20 20 63 6f  rgc>=2 ){.    co
6430: 6e 73 74 20 63 68 61 72 20 2a 7a 41 72 67 30 20  nst char *zArg0 
6440: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  = sqlite3_value_
6450: 74 65 78 74 28 61 72 67 76 5b 30 5d 29 3b 0a 20  text(argv[0]);. 
6460: 20 20 20 69 66 28 20 7a 41 72 67 30 20 29 7b 0a     if( zArg0 ){.
6470: 20 20 20 20 20 20 69 66 28 20 30 3d 3d 73 71 6c        if( 0==sql
6480: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 41 72 67  ite3StrICmp(zArg
6490: 30 2c 20 22 69 6e 74 22 29 20 29 7b 0a 20 20 20  0, "int") ){.   
64a0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73       sqlite3_res
64b0: 75 6c 74 5f 69 6e 74 28 63 6f 6e 74 65 78 74 2c  ult_int(context,
64c0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69   sqlite3_value_i
64d0: 6e 74 28 61 72 67 76 5b 31 5d 29 29 3b 0a 20 20  nt(argv[1]));.  
64e0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71      }else if( sq
64f0: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 41 72  lite3StrICmp(zAr
6500: 67 30 2c 22 69 6e 74 36 34 22 29 3d 3d 30 20 29  g0,"int64")==0 )
6510: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
6520: 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 28 63  3_result_int64(c
6530: 6f 6e 74 65 78 74 2c 20 73 71 6c 69 74 65 33 5f  ontext, sqlite3_
6540: 76 61 6c 75 65 5f 69 6e 74 36 34 28 61 72 67 76  value_int64(argv
6550: 5b 31 5d 29 29 3b 0a 20 20 20 20 20 20 7d 65 6c  [1]));.      }el
6560: 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74  se if( sqlite3St
6570: 72 49 43 6d 70 28 7a 41 72 67 30 2c 22 73 74 72  rICmp(zArg0,"str
6580: 69 6e 67 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ing")==0 ){.    
6590: 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75      sqlite3_resu
65a0: 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65 78 74 2c  lt_text(context,
65b0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
65c0: 65 78 74 28 61 72 67 76 5b 31 5d 29 2c 20 2d 31  ext(argv[1]), -1
65d0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ,.            SQ
65e0: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
65f0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
6600: 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
6610: 7a 41 72 67 30 2c 22 64 6f 75 62 6c 65 22 29 3d  zArg0,"double")=
6620: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  =0 ){.        sq
6630: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75  lite3_result_dou
6640: 62 6c 65 28 63 6f 6e 74 65 78 74 2c 20 73 71 6c  ble(context, sql
6650: 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c  ite3_value_doubl
6660: 65 28 61 72 67 76 5b 31 5d 29 29 3b 0a 20 20 20  e(argv[1]));.   
6670: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c     }else if( sql
6680: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 41 72 67  ite3StrICmp(zArg
6690: 30 2c 22 6e 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a  0,"null")==0 ){.
66a0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
66b0: 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74  result_null(cont
66c0: 65 78 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ext);.      }els
66d0: 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72  e if( sqlite3Str
66e0: 49 43 6d 70 28 7a 41 72 67 30 2c 22 76 61 6c 75  ICmp(zArg0,"valu
66f0: 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  e")==0 ){.      
6700: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
6710: 5f 76 61 6c 75 65 28 63 6f 6e 74 65 78 74 2c 20  _value(context, 
6720: 61 72 67 76 5b 73 71 6c 69 74 65 33 5f 76 61 6c  argv[sqlite3_val
6730: 75 65 5f 69 6e 74 28 61 72 67 76 5b 31 5d 29 5d  ue_int(argv[1])]
6740: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
6750: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 65 72 72          goto err
6760: 6f 72 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a  or_out;.      }.
6770: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
6780: 20 67 6f 74 6f 20 65 72 72 6f 72 5f 6f 75 74 3b   goto error_out;
6790: 0a 20 20 20 20 7d 0a 20 20 20 20 61 72 67 63 20  .    }.    argc 
67a0: 2d 3d 20 32 3b 0a 20 20 20 20 61 72 67 76 20 2b  -= 2;.    argv +
67b0: 3d 20 32 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  = 2;.  }.  retur
67c0: 6e 3b 0a 0a 65 72 72 6f 72 5f 6f 75 74 3a 0a 20  n;..error_out:. 
67d0: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
67e0: 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 22 66  error(context,"f
67f0: 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 73 68  irst argument sh
6800: 6f 75 6c 64 20 62 65 20 6f 6e 65 20 6f 66 3a 20  ould be one of: 
6810: 22 0a 20 20 20 20 20 20 22 69 6e 74 20 69 6e 74  ".      "int int
6820: 36 34 20 73 74 72 69 6e 67 20 64 6f 75 62 6c 65  64 string double
6830: 20 6e 75 6c 6c 20 76 61 6c 75 65 22 2c 20 2d 31   null value", -1
6840: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  );.}../*.** Usag
6850: 65 3a 20 20 20 73 71 6c 69 74 65 5f 72 65 67 69  e:   sqlite_regi
6860: 73 74 65 72 5f 74 65 73 74 5f 66 75 6e 63 74 69  ster_test_functi
6870: 6f 6e 20 20 44 42 20 20 4e 41 4d 45 0a 2a 2a 0a  on  DB  NAME.**.
6880: 2a 2a 20 52 65 67 69 73 74 65 72 20 74 68 65 20  ** Register the 
6890: 74 65 73 74 20 53 51 4c 20 66 75 6e 63 74 69 6f  test SQL functio
68a0: 6e 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  n on the databas
68b0: 65 20 44 42 20 75 6e 64 65 72 20 74 68 65 20 6e  e DB under the n
68c0: 61 6d 65 20 4e 41 4d 45 2e 0a 2a 2f 0a 73 74 61  ame NAME..*/.sta
68d0: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 72 65 67  tic int test_reg
68e0: 69 73 74 65 72 5f 66 75 6e 63 28 0a 20 20 76 6f  ister_func(.  vo
68f0: 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54  id *NotUsed,.  T
6900: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
6910: 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c  p,    /* The TCL
6920: 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61   interpreter tha
6930: 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63  t invoked this c
6940: 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  ommand */.  int 
6950: 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20  argc,           
6960: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
6970: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63  arguments */.  c
6980: 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20  har **argv      
6990: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
69a0: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a   each argument *
69b0: 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  /.){.  sqlite3 *
69c0: 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  db;.  int rc;.  
69d0: 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20  if( argc!=3 ){. 
69e0: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
69f0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
6a00: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
6a10: 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30  d be \"", argv[0
6a20: 5d 2c 20 0a 20 20 20 20 20 20 20 22 20 44 42 20  ], .       " DB 
6a30: 46 55 4e 43 54 49 4f 4e 2d 4e 41 4d 45 22 2c 20  FUNCTION-NAME", 
6a40: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
6a50: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
6a60: 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72  if( getDbPointer
6a70: 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d  (interp, argv[1]
6a80: 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
6a90: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20  TCL_ERROR;.  rc 
6aa0: 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  = sqlite3_create
6ab0: 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 61 72  _function(db, ar
6ac0: 67 76 5b 32 5d 2c 20 2d 31 2c 20 53 51 4c 49 54  gv[2], -1, SQLIT
6ad0: 45 5f 55 54 46 38 2c 20 30 2c 20 0a 20 20 20 20  E_UTF8, 0, .    
6ae0: 20 20 74 65 73 74 46 75 6e 63 2c 20 30 2c 20 30    testFunc, 0, 0
6af0: 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 30 20 29  );.  if( rc!=0 )
6b00: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
6b10: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 73  Result(interp, s
6b20: 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29  qlite3ErrStr(rc)
6b30: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
6b40: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
6b50: 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73    if( sqlite3Tes
6b60: 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c  tErrCode(interp,
6b70: 20 64 62 2c 20 72 63 29 20 29 20 72 65 74 75 72   db, rc) ) retur
6b80: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72  n TCL_ERROR;.  r
6b90: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
6ba0: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
6bb0: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
6bc0: 20 53 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 46 69 6e   STMT .**.** Fin
6bd0: 61 6c 69 7a 65 20 61 20 73 74 61 74 65 6d 65 6e  alize a statemen
6be0: 74 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 73 74 61  t handle..*/.sta
6bf0: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 66 69 6e  tic int test_fin
6c00: 61 6c 69 7a 65 28 0a 20 20 76 6f 69 64 20 2a 20  alize(.  void * 
6c10: 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
6c20: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
6c30: 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
6c40: 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
6c50: 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74  bjv[].){.  sqlit
6c60: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a  e3_stmt *pStmt;.
6c70: 20 20 69 6e 74 20 72 63 3b 0a 20 20 73 71 6c 69    int rc;.  sqli
6c80: 74 65 33 20 2a 64 62 3b 0a 0a 20 20 69 66 28 20  te3 *db;..  if( 
6c90: 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  objc!=2 ){.    T
6ca0: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
6cb0: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
6cc0: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
6cd0: 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63   \"",.        Tc
6ce0: 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f  l_GetStringFromO
6cf0: 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20  bj(objv[0], 0), 
6d00: 22 20 3c 53 54 4d 54 3e 22 2c 20 30 29 3b 0a 20  " <STMT>", 0);. 
6d10: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
6d20: 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  ROR;.  }..  if( 
6d30: 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69  getStmtPointer(i
6d40: 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
6d50: 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
6d60: 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20  pStmt) ) return 
6d70: 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 69 66  TCL_ERROR;..  if
6d80: 28 20 70 53 74 6d 74 20 29 7b 0a 20 20 20 20 64  ( pStmt ){.    d
6d90: 62 20 3d 20 53 74 6d 74 54 6f 44 62 28 70 53 74  b = StmtToDb(pSt
6da0: 6d 74 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20  mt);.  }.  rc = 
6db0: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
6dc0: 28 70 53 74 6d 74 29 3b 0a 20 20 54 63 6c 5f 53  (pStmt);.  Tcl_S
6dd0: 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
6de0: 20 28 63 68 61 72 20 2a 29 65 72 72 6f 72 4e 61   (char *)errorNa
6df0: 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54  me(rc), TCL_STAT
6e00: 49 43 29 3b 0a 20 20 69 66 28 20 64 62 20 26 26  IC);.  if( db &&
6e10: 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43   sqlite3TestErrC
6e20: 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20  ode(interp, db, 
6e30: 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  rc) ) return TCL
6e40: 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74 75 72 6e  _ERROR;.  return
6e50: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
6e60: 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
6e70: 33 5f 72 65 73 65 74 20 20 53 54 4d 54 20 0a 2a  3_reset  STMT .*
6e80: 2a 0a 2a 2a 20 46 69 6e 61 6c 69 7a 65 20 61 20  *.** Finalize a 
6e90: 73 74 61 74 65 6d 65 6e 74 20 68 61 6e 64 6c 65  statement handle
6ea0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
6eb0: 74 65 73 74 5f 72 65 73 65 74 28 0a 20 20 76 6f  test_reset(.  vo
6ec0: 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
6ed0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
6ee0: 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
6ef0: 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
6f00: 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
6f10: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
6f20: 74 6d 74 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  tmt;.  int rc;..
6f30: 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b    if( objc!=2 ){
6f40: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
6f50: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
6f60: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
6f70: 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20  uld be \"",.    
6f80: 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
6f90: 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d  gFromObj(objv[0]
6fa0: 2c 20 30 29 2c 20 22 20 3c 53 54 4d 54 3e 22 2c  , 0), " <STMT>",
6fb0: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
6fc0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
6fd0: 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
6fe0: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
6ff0: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
7000: 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72  1]), &pStmt) ) r
7010: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
7020: 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ..  rc = sqlite3
7030: 5f 72 65 73 65 74 28 70 53 74 6d 74 29 3b 0a 20  _reset(pStmt);. 
7040: 20 69 66 28 20 70 53 74 6d 74 20 26 26 20 0a 20   if( pStmt && . 
7050: 20 20 20 20 20 73 71 6c 69 74 65 33 54 65 73 74       sqlite3Test
7060: 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20  ErrCode(interp, 
7070: 53 74 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 2c  StmtToDb(pStmt),
7080: 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43   rc) ) return TC
7090: 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53  L_ERROR;.  Tcl_S
70a0: 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
70b0: 20 28 63 68 61 72 20 2a 29 65 72 72 6f 72 4e 61   (char *)errorNa
70c0: 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54  me(rc), TCL_STAT
70d0: 49 43 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b  IC);.  if( rc ){
70e0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
70f0: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 65 74  ERROR;.  }.  ret
7100: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
7110: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
7120: 69 74 65 33 5f 65 78 70 69 72 65 64 20 53 54 4d  ite3_expired STM
7130: 54 20 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  T .**.** Return 
7140: 54 52 55 45 20 69 66 20 61 20 72 65 63 6f 6d 70  TRUE if a recomp
7150: 69 6c 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73  ilation of the s
7160: 74 61 74 65 6d 65 6e 74 20 69 73 20 72 65 63 6f  tatement is reco
7170: 6d 6d 65 6e 64 65 64 2e 0a 2a 2f 0a 73 74 61 74  mmended..*/.stat
7180: 69 63 20 69 6e 74 20 74 65 73 74 5f 65 78 70 69  ic int test_expi
7190: 72 65 64 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  red(.  void * cl
71a0: 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
71b0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
71c0: 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
71d0: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
71e0: 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
71f0: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20  _stmt *pStmt;.  
7200: 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20  if( objc!=2 ){. 
7210: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
7220: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
7230: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
7240: 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20  d be \"",.      
7250: 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46    Tcl_GetStringF
7260: 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20  romObj(objv[0], 
7270: 30 29 2c 20 22 20 3c 53 54 4d 54 3e 22 2c 20 30  0), " <STMT>", 0
7280: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
7290: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
72a0: 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
72b0: 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
72c0: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
72d0: 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
72e0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
72f0: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
7300: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
7310: 42 6f 6f 6c 65 61 6e 4f 62 6a 28 73 71 6c 69 74  BooleanObj(sqlit
7320: 65 33 5f 65 78 70 69 72 65 64 28 70 53 74 6d 74  e3_expired(pStmt
7330: 29 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  )));.  return TC
7340: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
7350: 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 74  sage:  sqlite3_t
7360: 72 61 6e 73 66 65 72 5f 62 69 6e 64 69 6e 67 73  ransfer_bindings
7370: 20 46 52 4f 4d 53 54 4d 54 20 54 4f 53 54 4d 54   FROMSTMT TOSTMT
7380: 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20  .**.** Transfer 
7390: 61 6c 6c 20 62 69 6e 64 69 6e 67 73 20 66 72 6f  all bindings fro
73a0: 6d 20 46 52 4f 4d 53 54 4d 54 20 6f 76 65 72 20  m FROMSTMT over 
73b0: 74 6f 20 54 4f 53 54 4d 54 0a 2a 2f 0a 73 74 61  to TOSTMT.*/.sta
73c0: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 74 72 61  tic int test_tra
73d0: 6e 73 66 65 72 5f 62 69 6e 64 28 0a 20 20 76 6f  nsfer_bind(.  vo
73e0: 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
73f0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
7400: 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
7410: 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
7420: 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
7430: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
7440: 74 6d 74 31 2c 20 2a 70 53 74 6d 74 32 3b 0a 20  tmt1, *pStmt2;. 
7450: 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a   if( objc!=3 ){.
7460: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
7470: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
7480: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
7490: 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20  ld be \"",.     
74a0: 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
74b0: 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c  FromObj(objv[0],
74c0: 20 30 29 2c 20 22 20 46 52 4f 4d 2d 53 54 4d 54   0), " FROM-STMT
74d0: 20 54 4f 2d 53 54 4d 54 22 2c 20 30 29 3b 0a 20   TO-STMT", 0);. 
74e0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
74f0: 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67  ROR;.  }.  if( g
7500: 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e  etStmtPointer(in
7510: 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
7520: 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70  ing(objv[1]), &p
7530: 53 74 6d 74 31 29 29 20 72 65 74 75 72 6e 20 54  Stmt1)) return T
7540: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
7550: 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69  getStmtPointer(i
7560: 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
7570: 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 2c 20 26  ring(objv[2]), &
7580: 70 53 74 6d 74 32 29 29 20 72 65 74 75 72 6e 20  pStmt2)) return 
7590: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c  TCL_ERROR;.  Tcl
75a0: 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
75b0: 74 65 72 70 2c 20 0a 20 20 20 20 20 54 63 6c 5f  terp, .     Tcl_
75c0: 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65  NewIntObj(sqlite
75d0: 33 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e 64 69  3_transfer_bindi
75e0: 6e 67 73 28 70 53 74 6d 74 31 2c 70 53 74 6d 74  ngs(pStmt1,pStmt
75f0: 32 29 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  2)));.  return T
7600: 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
7610: 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f  Usage:  sqlite3_
7620: 63 68 61 6e 67 65 73 20 44 42 0a 2a 2a 0a 2a 2a  changes DB.**.**
7630: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   Return the numb
7640: 65 72 20 6f 66 20 63 68 61 6e 67 65 73 20 6d 61  er of changes ma
7650: 64 65 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  de to the databa
7660: 73 65 20 62 79 20 74 68 65 20 6c 61 73 74 20 53  se by the last S
7670: 51 4c 0a 2a 2a 20 65 78 65 63 75 74 69 6f 6e 2e  QL.** execution.
7680: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
7690: 65 73 74 5f 63 68 61 6e 67 65 73 28 0a 20 20 76  est_changes(.  v
76a0: 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
76b0: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
76c0: 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
76d0: 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
76e0: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
76f0: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
7700: 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20  if( objc!=2 ){. 
7710: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
7720: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
7730: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
7740: 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20  d be \"",.      
7750: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
7760: 62 6a 76 5b 30 5d 29 2c 20 22 20 44 42 22 2c 20  bjv[0]), " DB", 
7770: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
7780: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
7790: 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72  if( getDbPointer
77a0: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
77b0: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
77c0: 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
77d0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f  CL_ERROR;.  Tcl_
77e0: 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
77f0: 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f  erp, Tcl_NewIntO
7800: 62 6a 28 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  bj(sqlite3_chang
7810: 65 73 28 64 62 29 29 29 3b 0a 20 20 72 65 74 75  es(db)));.  retu
7820: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
7830: 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68 65 20  .** This is the 
7840: 22 73 74 61 74 69 63 5f 62 69 6e 64 5f 76 61 6c  "static_bind_val
7850: 75 65 22 20 74 68 61 74 20 76 61 72 69 61 62 6c  ue" that variabl
7860: 65 73 20 61 72 65 20 62 6f 75 6e 64 20 74 6f 20  es are bound to 
7870: 77 68 65 6e 0a 2a 2a 20 74 68 65 20 46 4c 41 47  when.** the FLAG
7880: 20 6f 70 74 69 6f 6e 20 6f 66 20 73 71 6c 69 74   option of sqlit
7890: 65 33 5f 62 69 6e 64 20 69 73 20 22 73 74 61 74  e3_bind is "stat
78a0: 69 63 22 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68  ic".*/.static ch
78b0: 61 72 20 2a 73 71 6c 69 74 65 5f 73 74 61 74 69  ar *sqlite_stati
78c0: 63 5f 62 69 6e 64 5f 76 61 6c 75 65 20 3d 20 30  c_bind_value = 0
78d0: 3b 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  ;../*.** Usage: 
78e0: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 20 20 56   sqlite3_bind  V
78f0: 4d 20 20 49 44 58 20 20 56 41 4c 55 45 20 20 46  M  IDX  VALUE  F
7900: 4c 41 47 53 0a 2a 2a 0a 2a 2a 20 53 65 74 73 20  LAGS.**.** Sets 
7910: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
7920: 20 49 44 58 2d 74 68 20 6f 63 63 75 72 61 6e 63   IDX-th occuranc
7930: 65 20 6f 66 20 22 3f 22 20 69 6e 20 74 68 65 20  e of "?" in the 
7940: 6f 72 69 67 69 6e 61 6c 20 53 51 4c 0a 2a 2a 20  original SQL.** 
7950: 73 74 72 69 6e 67 2e 20 20 56 41 4c 55 45 20 69  string.  VALUE i
7960: 73 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65 2e  s the new value.
7970: 20 20 49 66 20 46 4c 41 47 53 3d 3d 22 6e 75 6c    If FLAGS=="nul
7980: 6c 22 20 74 68 65 6e 20 56 41 4c 55 45 20 69 73  l" then VALUE is
7990: 0a 2a 2a 20 69 67 6e 6f 72 65 64 20 61 6e 64 20  .** ignored and 
79a0: 74 68 65 20 76 61 6c 75 65 20 69 73 20 73 65 74  the value is set
79b0: 20 74 6f 20 4e 55 4c 4c 2e 20 20 49 66 20 46 4c   to NULL.  If FL
79c0: 41 47 53 3d 3d 22 73 74 61 74 69 63 22 20 74 68  AGS=="static" th
79d0: 65 6e 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20  en.** the value 
79e0: 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 76 61  is set to the va
79f0: 6c 75 65 20 6f 66 20 61 20 73 74 61 74 69 63 20  lue of a static 
7a00: 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 64 0a 2a  variable named.*
7a10: 2a 20 22 73 71 6c 69 74 65 5f 73 74 61 74 69 63  * "sqlite_static
7a20: 5f 62 69 6e 64 5f 76 61 6c 75 65 22 2e 20 20 49  _bind_value".  I
7a30: 66 20 46 4c 41 47 53 3d 3d 22 6e 6f 72 6d 61 6c  f FLAGS=="normal
7a40: 22 20 74 68 65 6e 20 61 20 63 6f 70 79 0a 2a 2a  " then a copy.**
7a50: 20 6f 66 20 74 68 65 20 56 41 4c 55 45 20 69 73   of the VALUE is
7a60: 20 6d 61 64 65 2e 0a 2a 2f 0a 73 74 61 74 69 63   made..*/.static
7a70: 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 28 0a   int test_bind(.
7a80: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
7a90: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
7aa0: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
7ab0: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
7ac0: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
7ad0: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
7ae0: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
7af0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
7b00: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
7b10: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
7b20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
7b30: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
7b40: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74  nt */.){.  sqlit
7b50: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a  e3_stmt *pStmt;.
7b60: 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20    int rc;.  int 
7b70: 69 64 78 3b 0a 20 20 69 66 28 20 61 72 67 63 21  idx;.  if( argc!
7b80: 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =5 ){.    Tcl_Ap
7b90: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
7ba0: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
7bb0: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
7bc0: 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20   argv[0], .     
7bd0: 20 20 22 20 56 4d 20 49 44 58 20 56 41 4c 55 45    " VM IDX VALUE
7be0: 20 28 6e 75 6c 6c 7c 73 74 61 74 69 63 7c 6e 6f   (null|static|no
7bf0: 72 6d 61 6c 29 5c 22 22 2c 20 30 29 3b 0a 20 20  rmal)\"", 0);.  
7c00: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
7c10: 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
7c20: 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74  tStmtPointer(int
7c30: 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 70  erp, argv[1], &p
7c40: 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
7c50: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
7c60: 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74 65 72  Tcl_GetInt(inter
7c70: 70 2c 20 61 72 67 76 5b 32 5d 2c 20 26 69 64 78  p, argv[2], &idx
7c80: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
7c90: 52 52 4f 52 3b 0a 20 20 69 66 28 20 73 74 72 63  RROR;.  if( strc
7ca0: 6d 70 28 61 72 67 76 5b 34 5d 2c 22 6e 75 6c 6c  mp(argv[4],"null
7cb0: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20  ")==0 ){.    rc 
7cc0: 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e  = sqlite3_bind_n
7cd0: 75 6c 6c 28 70 53 74 6d 74 2c 20 69 64 78 29 3b  ull(pStmt, idx);
7ce0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72  .  }else if( str
7cf0: 63 6d 70 28 61 72 67 76 5b 34 5d 2c 22 73 74 61  cmp(argv[4],"sta
7d00: 74 69 63 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  tic")==0 ){.    
7d10: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e  rc = sqlite3_bin
7d20: 64 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 69 64  d_text(pStmt, id
7d30: 78 2c 20 73 71 6c 69 74 65 5f 73 74 61 74 69 63  x, sqlite_static
7d40: 5f 62 69 6e 64 5f 76 61 6c 75 65 2c 20 2d 31 2c  _bind_value, -1,
7d50: 20 30 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28   0);.  }else if(
7d60: 20 73 74 72 63 6d 70 28 61 72 67 76 5b 34 5d 2c   strcmp(argv[4],
7d70: 22 6e 6f 72 6d 61 6c 22 29 3d 3d 30 20 29 7b 0a  "normal")==0 ){.
7d80: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
7d90: 5f 62 69 6e 64 5f 74 65 78 74 28 70 53 74 6d 74  _bind_text(pStmt
7da0: 2c 20 69 64 78 2c 20 61 72 67 76 5b 33 5d 2c 20  , idx, argv[3], 
7db0: 2d 31 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  -1, SQLITE_TRANS
7dc0: 49 45 4e 54 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  IENT);.  }else{.
7dd0: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
7de0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 34 74  sult(interp, "4t
7df0: 68 20 61 72 67 75 6d 65 6e 74 20 73 68 6f 75 6c  h argument shoul
7e00: 64 20 62 65 20 22 0a 20 20 20 20 20 20 20 20 22  d be ".        "
7e10: 5c 22 6e 75 6c 6c 5c 22 20 6f 72 20 5c 22 73 74  \"null\" or \"st
7e20: 61 74 69 63 5c 22 20 6f 72 20 5c 22 6e 6f 72 6d  atic\" or \"norm
7e30: 61 6c 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72  al\"", 0);.    r
7e40: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
7e50: 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74  .  }.  if( sqlit
7e60: 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e  e3TestErrCode(in
7e70: 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70  terp, StmtToDb(p
7e80: 53 74 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74  Stmt), rc) ) ret
7e90: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
7ea0: 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 63   if( rc ){.    c
7eb0: 68 61 72 20 7a 42 75 66 5b 35 30 5d 3b 0a 20 20  har zBuf[50];.  
7ec0: 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20    sprintf(zBuf, 
7ed0: 22 28 25 64 29 20 22 2c 20 72 63 29 3b 0a 20 20  "(%d) ", rc);.  
7ee0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
7ef0: 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c  lt(interp, zBuf,
7f00: 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72   sqlite3ErrStr(r
7f10: 63 29 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  c), 0);.    retu
7f20: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
7f30: 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  }.  return TCL_O
7f40: 4b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  K;.}..#ifndef SQ
7f50: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
7f60: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 61 64 64  /*.** Usage: add
7f70: 5f 74 65 73 74 5f 63 6f 6c 6c 61 74 65 20 3c 64  _test_collate <d
7f80: 62 20 70 74 72 3e 20 3c 75 74 66 38 3e 20 3c 75  b ptr> <utf8> <u
7f90: 74 66 31 36 6c 65 3e 20 3c 75 74 66 31 36 62 65  tf16le> <utf16be
7fa0: 3e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e  >.**.** This fun
7fb0: 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f  ction is used to
7fc0: 20 74 65 73 74 20 74 68 61 74 20 53 51 4c 69 74   test that SQLit
7fd0: 65 20 73 65 6c 65 63 74 73 20 74 68 65 20 63 6f  e selects the co
7fe0: 72 72 65 63 74 20 63 6f 6c 6c 61 74 69 6f 6e 0a  rrect collation.
7ff0: 2a 2a 20 73 65 71 75 65 6e 63 65 20 63 61 6c 6c  ** sequence call
8000: 62 61 63 6b 20 77 68 65 6e 20 6d 75 6c 74 69 70  back when multip
8010: 6c 65 20 76 65 72 73 69 6f 6e 73 20 28 66 6f 72  le versions (for
8020: 20 64 69 66 66 65 72 65 6e 74 20 74 65 78 74 20   different text 
8030: 65 6e 63 6f 64 69 6e 67 73 29 0a 2a 2a 20 61 72  encodings).** ar
8040: 65 20 61 76 61 69 6c 61 62 6c 65 2e 0a 2a 2a 0a  e available..**.
8050: 2a 2a 20 43 61 6c 6c 69 6e 67 20 74 68 69 73 20  ** Calling this 
8060: 72 6f 75 74 69 6e 65 20 72 65 67 69 73 74 65 72  routine register
8070: 73 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20  s the collation 
8080: 73 65 71 75 65 6e 63 65 20 22 74 65 73 74 5f 63  sequence "test_c
8090: 6f 6c 6c 61 74 65 22 0a 2a 2a 20 77 69 74 68 20  ollate".** with 
80a0: 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20  database handle 
80b0: 3c 64 62 3e 2e 20 54 68 65 20 73 65 63 6f 6e 64  <db>. The second
80c0: 20 61 72 67 75 6d 65 6e 74 20 6d 75 73 74 20 62   argument must b
80d0: 65 20 61 20 6c 69 73 74 20 6f 66 20 74 68 72 65  e a list of thre
80e0: 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 76 61 6c  e.** boolean val
80f0: 75 65 73 2e 20 49 66 20 74 68 65 20 66 69 72 73  ues. If the firs
8100: 74 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20  t is true, then 
8110: 61 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 65 73  a version of tes
8120: 74 5f 63 6f 6c 6c 61 74 65 20 69 73 0a 2a 2a 20  t_collate is.** 
8130: 72 65 67 69 73 74 65 72 65 64 20 66 6f 72 20 55  registered for U
8140: 54 46 2d 38 2c 20 69 66 20 74 68 65 20 73 65 63  TF-8, if the sec
8150: 6f 6e 64 20 69 73 20 74 72 75 65 2c 20 61 20 76  ond is true, a v
8160: 65 72 73 69 6f 6e 20 69 73 20 72 65 67 69 73 74  ersion is regist
8170: 65 72 65 64 20 66 6f 72 0a 2a 2a 20 55 54 46 2d  ered for.** UTF-
8180: 31 36 6c 65 2c 20 69 66 20 74 68 65 20 74 68 69  16le, if the thi
8190: 72 64 20 69 73 20 74 72 75 65 2c 20 61 20 55 54  rd is true, a UT
81a0: 46 2d 31 36 62 65 20 76 65 72 73 69 6f 6e 20 69  F-16be version i
81b0: 73 20 61 76 61 69 6c 61 62 6c 65 2e 0a 2a 2a 20  s available..** 
81c0: 50 72 65 76 69 6f 75 73 20 76 65 72 73 69 6f 6e  Previous version
81d0: 73 20 6f 66 20 74 65 73 74 5f 63 6f 6c 6c 61 74  s of test_collat
81e0: 65 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 2a  e are deleted..*
81f0: 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 6c 61 74 69  *.** The collati
8200: 6f 6e 20 73 65 71 75 65 6e 63 65 20 74 65 73 74  on sequence test
8210: 5f 63 6f 6c 6c 61 74 65 20 69 73 20 69 6d 70 6c  _collate is impl
8220: 65 6d 65 6e 74 65 64 20 62 79 20 63 61 6c 6c 69  emented by calli
8230: 6e 67 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77  ng the.** follow
8240: 69 6e 67 20 54 43 4c 20 73 63 72 69 70 74 3a 0a  ing TCL script:.
8250: 2a 2a 0a 2a 2a 20 20 20 22 74 65 73 74 5f 63 6f  **.**   "test_co
8260: 6c 6c 61 74 65 20 3c 65 6e 63 3e 20 3c 6c 68 73  llate <enc> <lhs
8270: 3e 20 3c 72 68 73 3e 22 0a 2a 2a 0a 2a 2a 20 54  > <rhs>".**.** T
8280: 68 65 20 3c 6c 68 73 3e 20 61 6e 64 20 3c 72 68  he <lhs> and <rh
8290: 73 3e 20 61 72 65 20 74 68 65 20 74 77 6f 20 76  s> are the two v
82a0: 61 6c 75 65 73 20 62 65 69 6e 67 20 63 6f 6d 70  alues being comp
82b0: 61 72 65 64 2c 20 65 6e 63 6f 64 65 64 20 69 6e  ared, encoded in
82c0: 20 55 54 46 2d 38 2e 0a 2a 2a 20 54 68 65 20 3c   UTF-8..** The <
82d0: 65 6e 63 3e 20 70 61 72 61 6d 65 74 65 72 20 69  enc> parameter i
82e0: 73 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f  s the encoding o
82f0: 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20  f the collation 
8300: 66 75 6e 63 74 69 6f 6e 20 74 68 61 74 0a 2a 2a  function that.**
8310: 20 53 51 4c 69 74 65 20 73 65 6c 65 63 74 65 64   SQLite selected
8320: 20 74 6f 20 63 61 6c 6c 2e 20 54 68 65 20 54 43   to call. The TC
8330: 4c 20 74 65 73 74 20 73 63 72 69 70 74 20 69 6d  L test script im
8340: 70 6c 65 6d 65 6e 74 73 20 74 68 65 0a 2a 2a 20  plements the.** 
8350: 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22 20 70  "test_collate" p
8360: 72 6f 63 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  roc..**.** Note 
8370: 74 68 61 74 20 74 68 69 73 20 77 69 6c 6c 20 6f  that this will o
8380: 6e 6c 79 20 77 6f 72 6b 20 77 69 74 68 20 6f 6e  nly work with on
8390: 65 20 69 6e 74 65 70 72 65 74 65 72 20 61 74 20  e intepreter at 
83a0: 61 20 74 69 6d 65 2c 20 61 73 20 74 68 65 0a 2a  a time, as the.*
83b0: 2a 20 69 6e 74 65 72 70 20 70 6f 69 6e 74 65 72  * interp pointer
83c0: 20 74 6f 20 75 73 65 20 77 68 65 6e 20 65 76 61   to use when eva
83d0: 6c 75 61 74 69 6e 67 20 74 68 65 20 54 43 4c 20  luating the TCL 
83e0: 73 63 72 69 70 74 20 69 73 20 73 74 6f 72 65 64  script is stored
83f0: 20 69 6e 0a 2a 2a 20 70 54 65 73 74 43 6f 6c 6c   in.** pTestColl
8400: 61 74 65 49 6e 74 65 72 70 2e 0a 2a 2f 0a 73 74  ateInterp..*/.st
8410: 61 74 69 63 20 54 63 6c 5f 49 6e 74 65 72 70 2a  atic Tcl_Interp*
8420: 20 70 54 65 73 74 43 6f 6c 6c 61 74 65 49 6e 74   pTestCollateInt
8430: 65 72 70 3b 0a 73 74 61 74 69 63 20 69 6e 74 20  erp;.static int 
8440: 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 66 75 6e  test_collate_fun
8450: 63 28 0a 20 20 76 6f 69 64 20 2a 70 43 74 78 2c  c(.  void *pCtx,
8460: 20 0a 20 20 69 6e 74 20 6e 41 2c 20 63 6f 6e 73   .  int nA, cons
8470: 74 20 76 6f 69 64 20 2a 7a 41 2c 0a 20 20 69 6e  t void *zA,.  in
8480: 74 20 6e 42 2c 20 63 6f 6e 73 74 20 76 6f 69 64  t nB, const void
8490: 20 2a 7a 42 0a 29 7b 0a 20 20 54 63 6c 5f 49 6e   *zB.){.  Tcl_In
84a0: 74 65 72 70 20 2a 69 20 3d 20 70 54 65 73 74 43  terp *i = pTestC
84b0: 6f 6c 6c 61 74 65 49 6e 74 65 72 70 3b 0a 20 20  ollateInterp;.  
84c0: 69 6e 74 20 65 6e 63 69 6e 20 3d 20 28 69 6e 74  int encin = (int
84d0: 29 70 43 74 78 3b 0a 20 20 69 6e 74 20 72 65 73  )pCtx;.  int res
84e0: 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 73 71  ;.  int n;..  sq
84f0: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
8500: 6c 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 58  l;.  Tcl_Obj *pX
8510: 3b 0a 0a 20 20 70 58 20 3d 20 54 63 6c 5f 4e 65  ;..  pX = Tcl_Ne
8520: 77 53 74 72 69 6e 67 4f 62 6a 28 22 74 65 73 74  wStringObj("test
8530: 5f 63 6f 6c 6c 61 74 65 22 2c 20 2d 31 29 3b 0a  _collate", -1);.
8540: 20 20 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75    Tcl_IncrRefCou
8550: 6e 74 28 70 58 29 3b 0a 0a 20 20 73 77 69 74 63  nt(pX);..  switc
8560: 68 28 20 65 6e 63 69 6e 20 29 7b 0a 20 20 20 20  h( encin ){.    
8570: 63 61 73 65 20 53 51 4c 49 54 45 5f 55 54 46 38  case SQLITE_UTF8
8580: 3a 0a 20 20 20 20 20 20 54 63 6c 5f 4c 69 73 74  :.      Tcl_List
8590: 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  ObjAppendElement
85a0: 28 69 2c 70 58 2c 54 63 6c 5f 4e 65 77 53 74 72  (i,pX,Tcl_NewStr
85b0: 69 6e 67 4f 62 6a 28 22 55 54 46 2d 38 22 2c 2d  ingObj("UTF-8",-
85c0: 31 29 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  1));.      break
85d0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
85e0: 45 5f 55 54 46 31 36 4c 45 3a 0a 20 20 20 20 20  E_UTF16LE:.     
85f0: 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65   Tcl_ListObjAppe
8600: 6e 64 45 6c 65 6d 65 6e 74 28 69 2c 70 58 2c 54  ndElement(i,pX,T
8610: 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
8620: 22 55 54 46 2d 31 36 4c 45 22 2c 2d 31 29 29 3b  "UTF-16LE",-1));
8630: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
8640: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 55 54    case SQLITE_UT
8650: 46 31 36 42 45 3a 0a 20 20 20 20 20 20 54 63 6c  F16BE:.      Tcl
8660: 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
8670: 65 6d 65 6e 74 28 69 2c 70 58 2c 54 63 6c 5f 4e  ement(i,pX,Tcl_N
8680: 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 55 54 46  ewStringObj("UTF
8690: 2d 31 36 42 45 22 2c 2d 31 29 29 3b 0a 20 20 20  -16BE",-1));.   
86a0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65     break;.    de
86b0: 66 61 75 6c 74 3a 0a 20 20 20 20 20 20 61 73 73  fault:.      ass
86c0: 65 72 74 28 30 29 3b 0a 20 20 7d 0a 0a 20 20 70  ert(0);.  }..  p
86d0: 56 61 6c 20 3d 20 73 71 6c 69 74 65 33 56 61 6c  Val = sqlite3Val
86e0: 75 65 4e 65 77 28 29 3b 0a 20 20 73 71 6c 69 74  ueNew();.  sqlit
86f0: 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 70 56  e3ValueSetStr(pV
8700: 61 6c 2c 20 6e 41 2c 20 7a 41 2c 20 65 6e 63 69  al, nA, zA, enci
8710: 6e 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  n, SQLITE_STATIC
8720: 29 3b 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33  );.  n = sqlite3
8730: 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 70 56 61  _value_bytes(pVa
8740: 6c 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62  l);.  Tcl_ListOb
8750: 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  jAppendElement(i
8760: 2c 70 58 2c 54 63 6c 5f 4e 65 77 53 74 72 69 6e  ,pX,Tcl_NewStrin
8770: 67 4f 62 6a 28 73 71 6c 69 74 65 33 5f 76 61 6c  gObj(sqlite3_val
8780: 75 65 5f 74 65 78 74 28 70 56 61 6c 29 2c 6e 29  ue_text(pVal),n)
8790: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75  );.  sqlite3Valu
87a0: 65 53 65 74 53 74 72 28 70 56 61 6c 2c 20 6e 42  eSetStr(pVal, nB
87b0: 2c 20 7a 42 2c 20 65 6e 63 69 6e 2c 20 53 51 4c  , zB, encin, SQL
87c0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 6e  ITE_STATIC);.  n
87d0: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
87e0: 5f 62 79 74 65 73 28 70 56 61 6c 29 3b 0a 20 20  _bytes(pVal);.  
87f0: 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e  Tcl_ListObjAppen
8800: 64 45 6c 65 6d 65 6e 74 28 69 2c 70 58 2c 54 63  dElement(i,pX,Tc
8810: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 73  l_NewStringObj(s
8820: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
8830: 74 28 70 56 61 6c 29 2c 6e 29 29 3b 0a 20 20 73  t(pVal),n));.  s
8840: 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28  qlite3ValueFree(
8850: 70 56 61 6c 29 3b 0a 0a 20 20 54 63 6c 5f 45 76  pVal);..  Tcl_Ev
8860: 61 6c 4f 62 6a 45 78 28 69 2c 20 70 58 2c 20 30  alObjEx(i, pX, 0
8870: 29 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52 65 66  );.  Tcl_DecrRef
8880: 43 6f 75 6e 74 28 70 58 29 3b 0a 20 20 54 63 6c  Count(pX);.  Tcl
8890: 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
88a0: 2c 20 54 63 6c 5f 47 65 74 4f 62 6a 52 65 73 75  , Tcl_GetObjResu
88b0: 6c 74 28 69 29 2c 20 26 72 65 73 29 3b 0a 20 20  lt(i), &res);.  
88c0: 72 65 74 75 72 6e 20 72 65 73 3b 0a 7d 0a 73 74  return res;.}.st
88d0: 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63 6f  atic int test_co
88e0: 6c 6c 61 74 65 28 0a 20 20 76 6f 69 64 20 2a 20  llate(.  void * 
88f0: 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
8900: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
8910: 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
8920: 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
8930: 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74  bjv[].){.  sqlit
8940: 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 76 61  e3 *db;.  int va
8950: 6c 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  l;.  sqlite3_val
8960: 75 65 20 2a 70 56 61 6c 3b 0a 20 20 69 6e 74 20  ue *pVal;.  int 
8970: 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  rc;..  if( objc!
8980: 3d 35 20 29 20 67 6f 74 6f 20 62 61 64 5f 61 72  =5 ) goto bad_ar
8990: 67 73 3b 0a 20 20 70 54 65 73 74 43 6f 6c 6c 61  gs;.  pTestColla
89a0: 74 65 49 6e 74 65 72 70 20 3d 20 69 6e 74 65 72  teInterp = inter
89b0: 70 3b 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f  p;.  if( getDbPo
89c0: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
89d0: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
89e0: 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74  [1]), &db) ) ret
89f0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a  urn TCL_ERROR;..
8a00: 20 20 69 66 28 20 54 43 4c 5f 4f 4b 21 3d 54 63    if( TCL_OK!=Tc
8a10: 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d  l_GetBooleanFrom
8a20: 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
8a30: 5b 32 5d 2c 20 26 76 61 6c 29 20 29 20 72 65 74  [2], &val) ) ret
8a40: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
8a50: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72   rc = sqlite3_cr
8a60: 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64  eate_collation(d
8a70: 62 2c 20 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65  b, "test_collate
8a80: 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  ", SQLITE_UTF8, 
8a90: 0a 20 20 20 20 20 20 20 20 20 20 28 76 6f 69 64  .          (void
8aa0: 20 2a 29 53 51 4c 49 54 45 5f 55 54 46 38 2c 20   *)SQLITE_UTF8, 
8ab0: 76 61 6c 3f 74 65 73 74 5f 63 6f 6c 6c 61 74 65  val?test_collate
8ac0: 5f 66 75 6e 63 3a 30 29 3b 0a 20 20 69 66 28 20  _func:0);.  if( 
8ad0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
8ae0: 0a 20 20 20 20 69 66 28 20 54 43 4c 5f 4f 4b 21  .    if( TCL_OK!
8af0: 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46  =Tcl_GetBooleanF
8b00: 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
8b10: 62 6a 76 5b 33 5d 2c 20 26 76 61 6c 29 20 29 20  bjv[3], &val) ) 
8b20: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
8b30: 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
8b40: 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74  e3_create_collat
8b50: 69 6f 6e 28 64 62 2c 20 22 74 65 73 74 5f 63 6f  ion(db, "test_co
8b60: 6c 6c 61 74 65 22 2c 20 53 51 4c 49 54 45 5f 55  llate", SQLITE_U
8b70: 54 46 31 36 4c 45 2c 20 0a 20 20 20 20 20 20 20  TF16LE, .       
8b80: 20 20 20 20 20 28 76 6f 69 64 20 2a 29 53 51 4c       (void *)SQL
8b90: 49 54 45 5f 55 54 46 31 36 4c 45 2c 20 76 61 6c  ITE_UTF16LE, val
8ba0: 3f 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 66 75  ?test_collate_fu
8bb0: 6e 63 3a 30 29 3b 0a 20 20 20 20 69 66 28 20 54  nc:0);.    if( T
8bc0: 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 42 6f  CL_OK!=Tcl_GetBo
8bd0: 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74  oleanFromObj(int
8be0: 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 26 76  erp, objv[4], &v
8bf0: 61 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  al) ) return TCL
8c00: 5f 45 52 52 4f 52 3b 0a 0a 20 20 20 20 70 56 61  _ERROR;..    pVa
8c10: 6c 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65  l = sqlite3Value
8c20: 4e 65 77 28 29 3b 0a 20 20 20 20 73 71 6c 69 74  New();.    sqlit
8c30: 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 70 56  e3ValueSetStr(pV
8c40: 61 6c 2c 20 2d 31 2c 20 22 74 65 73 74 5f 63 6f  al, -1, "test_co
8c50: 6c 6c 61 74 65 22 2c 20 53 51 4c 49 54 45 5f 55  llate", SQLITE_U
8c60: 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  TF8, SQLITE_STAT
8c70: 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  IC);.    sqlite3
8c80: 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f  _create_collatio
8c90: 6e 31 36 28 64 62 2c 20 73 71 6c 69 74 65 33 56  n16(db, sqlite3V
8ca0: 61 6c 75 65 54 65 78 74 28 70 56 61 6c 2c 20 53  alueText(pVal, S
8cb0: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
8cc0: 45 29 2c 20 0a 20 20 20 20 20 20 20 20 20 20 53  E), .          S
8cd0: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 2c 20 28  QLITE_UTF16BE, (
8ce0: 76 6f 69 64 20 2a 29 53 51 4c 49 54 45 5f 55 54  void *)SQLITE_UT
8cf0: 46 31 36 42 45 2c 20 76 61 6c 3f 74 65 73 74 5f  F16BE, val?test_
8d00: 63 6f 6c 6c 61 74 65 5f 66 75 6e 63 3a 30 29 3b  collate_func:0);
8d10: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75  .    sqlite3Valu
8d20: 65 46 72 65 65 28 70 56 61 6c 29 3b 0a 20 20 7d  eFree(pVal);.  }
8d30: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65  .  if( sqlite3Te
8d40: 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70  stErrCode(interp
8d50: 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65 74 75  , db, rc) ) retu
8d60: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
8d70: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 0a  return TCL_OK;..
8d80: 62 61 64 5f 61 72 67 73 3a 0a 20 20 54 63 6c 5f  bad_args:.  Tcl_
8d90: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
8da0: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
8db0: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
8dc0: 22 2c 0a 20 20 20 20 20 20 54 63 6c 5f 47 65 74  ",.      Tcl_Get
8dd0: 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62  StringFromObj(ob
8de0: 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 3c 44 42  jv[0], 0), " <DB
8df0: 3e 20 3c 75 74 66 38 3e 20 3c 75 74 66 31 36 6c  > <utf8> <utf16l
8e00: 65 3e 20 3c 75 74 66 31 36 62 65 3e 22 2c 20 30  e> <utf16be>", 0
8e10: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
8e20: 45 52 52 4f 52 3b 0a 7d 0a 0a 73 74 61 74 69 63  ERROR;.}..static
8e30: 20 76 6f 69 64 20 74 65 73 74 5f 63 6f 6c 6c 61   void test_colla
8e40: 74 65 5f 6e 65 65 64 65 64 5f 63 62 28 0a 20 20  te_needed_cb(.  
8e50: 76 6f 69 64 20 2a 70 43 74 78 2c 20 0a 20 20 73  void *pCtx, .  s
8e60: 71 6c 69 74 65 33 20 2a 64 62 2c 0a 20 20 69 6e  qlite3 *db,.  in
8e70: 74 20 65 54 65 78 74 52 65 70 2c 0a 20 20 63 6f  t eTextRep,.  co
8e80: 6e 73 74 20 76 6f 69 64 20 2a 6e 6f 74 55 73 65  nst void *notUse
8e90: 64 0a 29 7b 0a 20 20 69 6e 74 20 65 6e 63 20 3d  d.){.  int enc =
8ea0: 20 64 62 2d 3e 65 6e 63 3b 0a 20 20 73 71 6c 69   db->enc;.  sqli
8eb0: 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61  te3_create_colla
8ec0: 74 69 6f 6e 28 0a 20 20 20 20 20 20 64 62 2c 20  tion(.      db, 
8ed0: 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22 2c 20  "test_collate", 
8ee0: 64 62 2d 3e 65 6e 63 2c 20 28 76 6f 69 64 20 2a  db->enc, (void *
8ef0: 29 65 6e 63 2c 20 74 65 73 74 5f 63 6f 6c 6c 61  )enc, test_colla
8f00: 74 65 5f 66 75 6e 63 29 3b 0a 7d 0a 0a 2f 2a 0a  te_func);.}../*.
8f10: 2a 2a 20 55 73 61 67 65 3a 20 61 64 64 5f 74 65  ** Usage: add_te
8f20: 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65 64 65  st_collate_neede
8f30: 64 20 44 42 0a 2a 2f 0a 73 74 61 74 69 63 20 69  d DB.*/.static i
8f40: 6e 74 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f  nt test_collate_
8f50: 6e 65 65 64 65 64 28 0a 20 20 76 6f 69 64 20 2a  needed(.  void *
8f60: 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
8f70: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
8f80: 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
8f90: 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
8fa0: 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
8fb0: 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72  te3 *db;.  int r
8fc0: 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  c;..  if( objc!=
8fd0: 32 20 29 20 67 6f 74 6f 20 62 61 64 5f 61 72 67  2 ) goto bad_arg
8fe0: 73 3b 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f  s;.  if( getDbPo
8ff0: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
9000: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
9010: 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74  [1]), &db) ) ret
9020: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
9030: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f   rc = sqlite3_co
9040: 6c 6c 61 74 69 6f 6e 5f 6e 65 65 64 65 64 31 36  llation_needed16
9050: 28 64 62 2c 20 30 2c 20 74 65 73 74 5f 63 6f 6c  (db, 0, test_col
9060: 6c 61 74 65 5f 6e 65 65 64 65 64 5f 63 62 29 3b  late_needed_cb);
9070: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65  .  if( sqlite3Te
9080: 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70  stErrCode(interp
9090: 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65 74 75  , db, rc) ) retu
90a0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
90b0: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 0a  return TCL_OK;..
90c0: 62 61 64 5f 61 72 67 73 3a 0a 20 20 54 63 6c 5f  bad_args:.  Tcl_
90d0: 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74  WrongNumArgs(int
90e0: 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 44  erp, 1, objv, "D
90f0: 42 22 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  B");.  return TC
9100: 4c 5f 45 52 52 4f 52 3b 0a 7d 0a 23 65 6e 64 69  L_ERROR;.}.#endi
9110: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
9120: 5f 55 54 46 31 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  _UTF16 */../*.**
9130: 20 55 73 61 67 65 3a 20 61 64 64 5f 74 65 73 74   Usage: add_test
9140: 5f 66 75 6e 63 74 69 6f 6e 20 3c 64 62 20 70 74  _function <db pt
9150: 72 3e 20 3c 75 74 66 38 3e 20 3c 75 74 66 31 36  r> <utf8> <utf16
9160: 6c 65 3e 20 3c 75 74 66 31 36 62 65 3e 0a 2a 2a  le> <utf16be>.**
9170: 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f  .** This functio
9180: 6e 20 69 73 20 75 73 65 64 20 74 6f 20 74 65 73  n is used to tes
9190: 74 20 74 68 61 74 20 53 51 4c 69 74 65 20 73 65  t that SQLite se
91a0: 6c 65 63 74 73 20 74 68 65 20 63 6f 72 72 65 63  lects the correc
91b0: 74 20 75 73 65 72 0a 2a 2a 20 66 75 6e 63 74 69  t user.** functi
91c0: 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 77 68 65 6e  on callback when
91d0: 20 6d 75 6c 74 69 70 6c 65 20 76 65 72 73 69 6f   multiple versio
91e0: 6e 73 20 28 66 6f 72 20 64 69 66 66 65 72 65 6e  ns (for differen
91f0: 74 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 73  t text encodings
9200: 29 0a 2a 2a 20 61 72 65 20 61 76 61 69 6c 61 62  ).** are availab
9210: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 69 6e  le..**.** Callin
9220: 67 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72  g this routine r
9230: 65 67 69 73 74 65 72 73 20 75 70 20 74 6f 20 74  egisters up to t
9240: 68 72 65 65 20 76 65 72 73 69 6f 6e 73 20 6f 66  hree versions of
9250: 20 74 68 65 20 75 73 65 72 20 66 75 6e 63 74 69   the user functi
9260: 6f 6e 0a 2a 2a 20 22 74 65 73 74 5f 66 75 6e 63  on.** "test_func
9270: 74 69 6f 6e 22 20 77 69 74 68 20 64 61 74 61 62  tion" with datab
9280: 61 73 65 20 68 61 6e 64 6c 65 20 3c 64 62 3e 2e  ase handle <db>.
9290: 20 20 49 66 20 74 68 65 20 73 65 63 6f 6e 64 20    If the second 
92a0: 61 72 67 75 6d 65 6e 74 20 69 73 0a 2a 2a 20 74  argument is.** t
92b0: 72 75 65 2c 20 74 68 65 6e 20 61 20 76 65 72 73  rue, then a vers
92c0: 69 6f 6e 20 6f 66 20 74 65 73 74 5f 66 75 6e 63  ion of test_func
92d0: 74 69 6f 6e 20 69 73 20 72 65 67 69 73 74 65 72  tion is register
92e0: 65 64 20 66 6f 72 20 55 54 46 2d 38 2c 20 69 66  ed for UTF-8, if
92f0: 20 74 68 65 0a 2a 2a 20 74 68 69 72 64 20 69 73   the.** third is
9300: 20 74 72 75 65 2c 20 61 20 76 65 72 73 69 6f 6e   true, a version
9310: 20 69 73 20 72 65 67 69 73 74 65 72 65 64 20 66   is registered f
9320: 6f 72 20 55 54 46 2d 31 36 6c 65 2c 20 69 66 20  or UTF-16le, if 
9330: 74 68 65 20 66 6f 75 72 74 68 20 69 73 0a 2a 2a  the fourth is.**
9340: 20 74 72 75 65 2c 20 61 20 55 54 46 2d 31 36 62   true, a UTF-16b
9350: 65 20 76 65 72 73 69 6f 6e 20 69 73 20 61 76 61  e version is ava
9360: 69 6c 61 62 6c 65 2e 20 20 50 72 65 76 69 6f 75  ilable.  Previou
9370: 73 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 2a 2a  s versions of.**
9380: 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 20 61   test_function a
9390: 72 65 20 64 65 6c 65 74 65 64 2e 0a 2a 2a 0a 2a  re deleted..**.*
93a0: 2a 20 54 68 65 20 75 73 65 72 20 66 75 6e 63 74  * The user funct
93b0: 69 6f 6e 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74  ion is implement
93c0: 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20 74 68  ed by calling th
93d0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 54 43 4c 20  e following TCL 
93e0: 73 63 72 69 70 74 3a 0a 2a 2a 0a 2a 2a 20 20 20  script:.**.**   
93f0: 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 20 3c  "test_function <
9400: 65 6e 63 3e 20 3c 61 72 67 3e 22 0a 2a 2a 0a 2a  enc> <arg>".**.*
9410: 2a 20 57 68 65 72 65 20 3c 65 6e 63 3e 20 69 73  * Where <enc> is
9420: 20 6f 6e 65 20 6f 66 20 55 54 46 2d 38 2c 20 55   one of UTF-8, U
9430: 54 46 2d 31 36 4c 45 20 6f 72 20 55 54 46 31 36  TF-16LE or UTF16
9440: 42 45 2c 20 61 6e 64 20 3c 61 72 67 3e 20 69 73  BE, and <arg> is
9450: 20 74 68 65 0a 2a 2a 20 73 69 6e 67 6c 65 20 61   the.** single a
9460: 72 67 75 6d 65 6e 74 20 70 61 73 73 65 64 20 74  rgument passed t
9470: 6f 20 74 68 65 20 53 51 4c 20 66 75 6e 63 74 69  o the SQL functi
9480: 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 72 65  on. The value re
9490: 74 75 72 6e 65 64 20 62 79 0a 2a 2a 20 74 68 65  turned by.** the
94a0: 20 54 43 4c 20 73 63 72 69 70 74 20 69 73 20 75   TCL script is u
94b0: 73 65 64 20 61 73 20 74 68 65 20 72 65 74 75 72  sed as the retur
94c0: 6e 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 53  n value of the S
94d0: 51 4c 20 66 75 6e 63 74 69 6f 6e 2e 20 49 74 0a  QL function. It.
94e0: 2a 2a 20 69 73 20 70 61 73 73 65 64 20 74 6f 20  ** is passed to 
94f0: 53 51 4c 69 74 65 20 75 73 69 6e 67 20 55 54 46  SQLite using UTF
9500: 2d 31 36 42 45 20 66 6f 72 20 61 20 55 54 46 2d  -16BE for a UTF-
9510: 38 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 28  8 test_function(
9520: 29 2c 20 55 54 46 2d 38 0a 2a 2a 20 66 6f 72 20  ), UTF-8.** for 
9530: 61 20 55 54 46 2d 31 36 4c 45 20 74 65 73 74 5f  a UTF-16LE test_
9540: 66 75 6e 63 74 69 6f 6e 28 29 2c 20 61 6e 64 20  function(), and 
9550: 55 54 46 2d 31 36 4c 45 20 66 6f 72 20 61 6e 20  UTF-16LE for an 
9560: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74  implementation t
9570: 68 61 74 0a 2a 2a 20 70 72 65 66 65 72 73 20 55  hat.** prefers U
9580: 54 46 2d 31 36 42 45 2e 0a 2a 2f 0a 23 69 66 6e  TF-16BE..*/.#ifn
9590: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
95a0: 55 54 46 31 36 0a 73 74 61 74 69 63 20 76 6f 69  UTF16.static voi
95b0: 64 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 5f  d test_function_
95c0: 75 74 66 38 28 0a 20 20 73 71 6c 69 74 65 33 5f  utf8(.  sqlite3_
95d0: 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 0a  context *pCtx, .
95e0: 20 20 69 6e 74 20 6e 41 72 67 2c 0a 20 20 73 71    int nArg,.  sq
95f0: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72  lite3_value **ar
9600: 67 76 0a 29 7b 0a 20 20 54 63 6c 5f 49 6e 74 65  gv.){.  Tcl_Inte
9610: 72 70 20 2a 69 6e 74 65 72 70 3b 0a 20 20 54 63  rp *interp;.  Tc
9620: 6c 5f 4f 62 6a 20 2a 70 58 3b 0a 20 20 73 71 6c  l_Obj *pX;.  sql
9630: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c  ite3_value *pVal
9640: 3b 0a 20 20 69 6e 74 65 72 70 20 3d 20 28 54 63  ;.  interp = (Tc
9650: 6c 5f 49 6e 74 65 72 70 20 2a 29 73 71 6c 69 74  l_Interp *)sqlit
9660: 65 33 5f 75 73 65 72 5f 64 61 74 61 28 70 43 74  e3_user_data(pCt
9670: 78 29 3b 0a 20 20 70 58 20 3d 20 54 63 6c 5f 4e  x);.  pX = Tcl_N
9680: 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 74 65 73  ewStringObj("tes
9690: 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 2d 31 29  t_function", -1)
96a0: 3b 0a 20 20 54 63 6c 5f 49 6e 63 72 52 65 66 43  ;.  Tcl_IncrRefC
96b0: 6f 75 6e 74 28 70 58 29 3b 0a 20 20 54 63 6c 5f  ount(pX);.  Tcl_
96c0: 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65  ListObjAppendEle
96d0: 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 58 2c  ment(interp, pX,
96e0: 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
96f0: 6a 28 22 55 54 46 2d 38 22 2c 20 2d 31 29 29 3b  j("UTF-8", -1));
9700: 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70  .  Tcl_ListObjAp
9710: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65  pendElement(inte
9720: 72 70 2c 20 70 58 2c 20 0a 20 20 20 20 20 20 54  rp, pX, .      T
9730: 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
9740: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
9750: 78 74 28 61 72 67 76 5b 30 5d 29 2c 20 2d 31 29  xt(argv[0]), -1)
9760: 29 3b 0a 20 20 54 63 6c 5f 45 76 61 6c 4f 62 6a  );.  Tcl_EvalObj
9770: 45 78 28 69 6e 74 65 72 70 2c 20 70 58 2c 20 30  Ex(interp, pX, 0
9780: 29 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52 65 66  );.  Tcl_DecrRef
9790: 43 6f 75 6e 74 28 70 58 29 3b 0a 20 20 73 71 6c  Count(pX);.  sql
97a0: 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74  ite3_result_text
97b0: 28 70 43 74 78 2c 20 54 63 6c 5f 47 65 74 53 74  (pCtx, Tcl_GetSt
97c0: 72 69 6e 67 52 65 73 75 6c 74 28 69 6e 74 65 72  ringResult(inter
97d0: 70 29 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 54  p), -1, SQLITE_T
97e0: 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 70 56 61  RANSIENT);.  pVa
97f0: 6c 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65  l = sqlite3Value
9800: 4e 65 77 28 29 3b 0a 20 20 73 71 6c 69 74 65 33  New();.  sqlite3
9810: 56 61 6c 75 65 53 65 74 53 74 72 28 70 56 61 6c  ValueSetStr(pVal
9820: 2c 20 2d 31 2c 20 54 63 6c 5f 47 65 74 53 74 72  , -1, Tcl_GetStr
9830: 69 6e 67 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ingResult(interp
9840: 29 2c 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45  ), .      SQLITE
9850: 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54  _UTF8, SQLITE_ST
9860: 41 54 49 43 29 3b 0a 20 20 73 71 6c 69 74 65 33  ATIC);.  sqlite3
9870: 5f 72 65 73 75 6c 74 5f 74 65 78 74 31 36 62 65  _result_text16be
9880: 28 70 43 74 78 2c 20 73 71 6c 69 74 65 33 5f 76  (pCtx, sqlite3_v
9890: 61 6c 75 65 5f 74 65 78 74 31 36 62 65 28 70 56  alue_text16be(pV
98a0: 61 6c 29 2c 0a 20 20 20 20 20 20 2d 31 2c 20 53  al),.      -1, S
98b0: 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29  QLITE_TRANSIENT)
98c0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65  ;.  sqlite3Value
98d0: 46 72 65 65 28 70 56 61 6c 29 3b 0a 7d 0a 73 74  Free(pVal);.}.st
98e0: 61 74 69 63 20 76 6f 69 64 20 74 65 73 74 5f 66  atic void test_f
98f0: 75 6e 63 74 69 6f 6e 5f 75 74 66 31 36 6c 65 28  unction_utf16le(
9900: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
9910: 78 74 20 2a 70 43 74 78 2c 20 0a 20 20 69 6e 74  xt *pCtx, .  int
9920: 20 6e 41 72 67 2c 0a 20 20 73 71 6c 69 74 65 33   nArg,.  sqlite3
9930: 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76 0a 29 7b  _value **argv.){
9940: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
9950: 6e 74 65 72 70 3b 0a 20 20 54 63 6c 5f 4f 62 6a  nterp;.  Tcl_Obj
9960: 20 2a 70 58 3b 0a 20 20 73 71 6c 69 74 65 33 5f   *pX;.  sqlite3_
9970: 76 61 6c 75 65 20 2a 70 56 61 6c 3b 0a 20 20 69  value *pVal;.  i
9980: 6e 74 65 72 70 20 3d 20 28 54 63 6c 5f 49 6e 74  nterp = (Tcl_Int
9990: 65 72 70 20 2a 29 73 71 6c 69 74 65 33 5f 75 73  erp *)sqlite3_us
99a0: 65 72 5f 64 61 74 61 28 70 43 74 78 29 3b 0a 20  er_data(pCtx);. 
99b0: 20 70 58 20 3d 20 54 63 6c 5f 4e 65 77 53 74 72   pX = Tcl_NewStr
99c0: 69 6e 67 4f 62 6a 28 22 74 65 73 74 5f 66 75 6e  ingObj("test_fun
99d0: 63 74 69 6f 6e 22 2c 20 2d 31 29 3b 0a 20 20 54  ction", -1);.  T
99e0: 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74 28  cl_IncrRefCount(
99f0: 70 58 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f  pX);.  Tcl_ListO
9a00: 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  bjAppendElement(
9a10: 69 6e 74 65 72 70 2c 20 70 58 2c 20 54 63 6c 5f  interp, pX, Tcl_
9a20: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 55 54  NewStringObj("UT
9a30: 46 2d 31 36 4c 45 22 2c 20 2d 31 29 29 3b 0a 20  F-16LE", -1));. 
9a40: 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65   Tcl_ListObjAppe
9a50: 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70  ndElement(interp
9a60: 2c 20 70 58 2c 20 0a 20 20 20 20 20 20 54 63 6c  , pX, .      Tcl
9a70: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 73 71  _NewStringObj(sq
9a80: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
9a90: 28 61 72 67 76 5b 30 5d 29 2c 20 2d 31 29 29 3b  (argv[0]), -1));
9aa0: 0a 20 20 54 63 6c 5f 45 76 61 6c 4f 62 6a 45 78  .  Tcl_EvalObjEx
9ab0: 28 69 6e 74 65 72 70 2c 20 70 58 2c 20 30 29 3b  (interp, pX, 0);
9ac0: 0a 20 20 54 63 6c 5f 44 65 63 72 52 65 66 43 6f  .  Tcl_DecrRefCo
9ad0: 75 6e 74 28 70 58 29 3b 0a 20 20 70 56 61 6c 20  unt(pX);.  pVal 
9ae0: 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65  = sqlite3ValueNe
9af0: 77 28 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 61  w();.  sqlite3Va
9b00: 6c 75 65 53 65 74 53 74 72 28 70 56 61 6c 2c 20  lueSetStr(pVal, 
9b10: 2d 31 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  -1, Tcl_GetStrin
9b20: 67 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29 2c  gResult(interp),
9b30: 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 55   .      SQLITE_U
9b40: 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  TF8, SQLITE_STAT
9b50: 49 43 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72  IC);.  sqlite3_r
9b60: 65 73 75 6c 74 5f 74 65 78 74 28 70 43 74 78 2c  esult_text(pCtx,
9b70: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
9b80: 78 74 28 70 56 61 6c 29 2c 2d 31 2c 53 51 4c 49  xt(pVal),-1,SQLI
9b90: 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20  TE_TRANSIENT);. 
9ba0: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65   sqlite3ValueFre
9bb0: 65 28 70 56 61 6c 29 3b 0a 7d 0a 73 74 61 74 69  e(pVal);.}.stati
9bc0: 63 20 76 6f 69 64 20 74 65 73 74 5f 66 75 6e 63  c void test_func
9bd0: 74 69 6f 6e 5f 75 74 66 31 36 62 65 28 0a 20 20  tion_utf16be(.  
9be0: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
9bf0: 2a 70 43 74 78 2c 20 0a 20 20 69 6e 74 20 6e 41  *pCtx, .  int nA
9c00: 72 67 2c 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  rg,.  sqlite3_va
9c10: 6c 75 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20  lue **argv.){.  
9c20: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
9c30: 72 70 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70  rp;.  Tcl_Obj *p
9c40: 58 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  X;.  sqlite3_val
9c50: 75 65 20 2a 70 56 61 6c 3b 0a 20 20 69 6e 74 65  ue *pVal;.  inte
9c60: 72 70 20 3d 20 28 54 63 6c 5f 49 6e 74 65 72 70  rp = (Tcl_Interp
9c70: 20 2a 29 73 71 6c 69 74 65 33 5f 75 73 65 72 5f   *)sqlite3_user_
9c80: 64 61 74 61 28 70 43 74 78 29 3b 0a 20 20 70 58  data(pCtx);.  pX
9c90: 20 3d 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67   = Tcl_NewString
9ca0: 4f 62 6a 28 22 74 65 73 74 5f 66 75 6e 63 74 69  Obj("test_functi
9cb0: 6f 6e 22 2c 20 2d 31 29 3b 0a 20 20 54 63 6c 5f  on", -1);.  Tcl_
9cc0: 49 6e 63 72 52 65 66 43 6f 75 6e 74 28 70 58 29  IncrRefCount(pX)
9cd0: 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41  ;.  Tcl_ListObjA
9ce0: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74  ppendElement(int
9cf0: 65 72 70 2c 20 70 58 2c 20 54 63 6c 5f 4e 65 77  erp, pX, Tcl_New
9d00: 53 74 72 69 6e 67 4f 62 6a 28 22 55 54 46 2d 31  StringObj("UTF-1
9d10: 36 42 45 22 2c 20 2d 31 29 29 3b 0a 20 20 54 63  6BE", -1));.  Tc
9d20: 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45  l_ListObjAppendE
9d30: 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 70  lement(interp, p
9d40: 58 2c 20 0a 20 20 20 20 20 20 54 63 6c 5f 4e 65  X, .      Tcl_Ne
9d50: 77 53 74 72 69 6e 67 4f 62 6a 28 73 71 6c 69 74  wStringObj(sqlit
9d60: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72  e3_value_text(ar
9d70: 67 76 5b 30 5d 29 2c 20 2d 31 29 29 3b 0a 20 20  gv[0]), -1));.  
9d80: 54 63 6c 5f 45 76 61 6c 4f 62 6a 45 78 28 69 6e  Tcl_EvalObjEx(in
9d90: 74 65 72 70 2c 20 70 58 2c 20 30 29 3b 0a 20 20  terp, pX, 0);.  
9da0: 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74  Tcl_DecrRefCount
9db0: 28 70 58 29 3b 0a 20 20 70 56 61 6c 20 3d 20 73  (pX);.  pVal = s
9dc0: 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 29  qlite3ValueNew()
9dd0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65  ;.  sqlite3Value
9de0: 53 65 74 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c  SetStr(pVal, -1,
9df0: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 52 65   Tcl_GetStringRe
9e00: 73 75 6c 74 28 69 6e 74 65 72 70 29 2c 20 0a 20  sult(interp), . 
9e10: 20 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38       SQLITE_UTF8
9e20: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
9e30: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75  ;.  sqlite3_resu
9e40: 6c 74 5f 74 65 78 74 31 36 6c 65 28 70 43 74 78  lt_text16le(pCtx
9e50: 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
9e60: 74 65 78 74 31 36 6c 65 28 70 56 61 6c 29 2c 0a  text16le(pVal),.
9e70: 20 20 20 20 20 20 2d 31 2c 20 53 51 4c 49 54 45        -1, SQLITE
9e80: 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 73  _TRANSIENT);.  s
9e90: 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28  qlite3ValueFree(
9ea0: 70 56 61 6c 29 3b 0a 7d 0a 23 65 6e 64 69 66 20  pVal);.}.#endif 
9eb0: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  /* SQLITE_OMIT_U
9ec0: 54 46 31 36 20 2a 2f 0a 73 74 61 74 69 63 20 69  TF16 */.static i
9ed0: 6e 74 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e  nt test_function
9ee0: 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
9ef0: 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
9f00: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
9f10: 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
9f20: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
9f30: 0a 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .){.#ifndef SQLI
9f40: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20  TE_OMIT_UTF16.  
9f50: 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69  sqlite3 *db;.  i
9f60: 6e 74 20 76 61 6c 3b 0a 0a 20 20 69 66 28 20 6f  nt val;..  if( o
9f70: 62 6a 63 21 3d 35 20 29 20 67 6f 74 6f 20 62 61  bjc!=5 ) goto ba
9f80: 64 5f 61 72 67 73 3b 0a 20 20 69 66 28 20 67 65  d_args;.  if( ge
9f90: 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tDbPointer(inter
9fa0: 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
9fb0: 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20  (objv[1]), &db) 
9fc0: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
9fd0: 4f 52 3b 0a 0a 20 20 69 66 28 20 54 43 4c 5f 4f  OR;..  if( TCL_O
9fe0: 4b 21 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61  K!=Tcl_GetBoolea
9ff0: 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  nFromObj(interp,
a000: 20 6f 62 6a 76 5b 32 5d 2c 20 26 76 61 6c 29 20   objv[2], &val) 
a010: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
a020: 4f 52 3b 0a 20 20 69 66 28 20 76 61 6c 20 29 7b  OR;.  if( val ){
a030: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72 65  .    sqlite3_cre
a040: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c  ate_function(db,
a050: 20 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22   "test_function"
a060: 2c 20 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  , 1, SQLITE_UTF8
a070: 2c 20 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72  , .        inter
a080: 70 2c 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e  p, test_function
a090: 5f 75 74 66 38 2c 20 30 2c 20 30 29 3b 0a 20 20  _utf8, 0, 0);.  
a0a0: 7d 0a 20 20 69 66 28 20 54 43 4c 5f 4f 4b 21 3d  }.  if( TCL_OK!=
a0b0: 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72  Tcl_GetBooleanFr
a0c0: 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
a0d0: 6a 76 5b 33 5d 2c 20 26 76 61 6c 29 20 29 20 72  jv[3], &val) ) r
a0e0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
a0f0: 0a 20 20 69 66 28 20 76 61 6c 20 29 7b 0a 20 20  .  if( val ){.  
a100: 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65    sqlite3_create
a110: 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22 74  _function(db, "t
a120: 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 31  est_function", 1
a130: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  , SQLITE_UTF16LE
a140: 2c 20 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72  , .        inter
a150: 70 2c 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e  p, test_function
a160: 5f 75 74 66 31 36 6c 65 2c 20 30 2c 20 30 29 3b  _utf16le, 0, 0);
a170: 0a 20 20 7d 0a 20 20 69 66 28 20 54 43 4c 5f 4f  .  }.  if( TCL_O
a180: 4b 21 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61  K!=Tcl_GetBoolea
a190: 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  nFromObj(interp,
a1a0: 20 6f 62 6a 76 5b 34 5d 2c 20 26 76 61 6c 29 20   objv[4], &val) 
a1b0: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
a1c0: 4f 52 3b 0a 20 20 69 66 28 20 76 61 6c 20 29 7b  OR;.  if( val ){
a1d0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72 65  .    sqlite3_cre
a1e0: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c  ate_function(db,
a1f0: 20 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22   "test_function"
a200: 2c 20 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  , 1, SQLITE_UTF1
a210: 36 42 45 2c 20 0a 20 20 20 20 20 20 20 20 69 6e  6BE, .        in
a220: 74 65 72 70 2c 20 74 65 73 74 5f 66 75 6e 63 74  terp, test_funct
a230: 69 6f 6e 5f 75 74 66 31 36 62 65 2c 20 30 2c 20  ion_utf16be, 0, 
a240: 30 29 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72  0);.  }..  retur
a250: 6e 20 54 43 4c 5f 4f 4b 3b 0a 62 61 64 5f 61 72  n TCL_OK;.bad_ar
a260: 67 73 3a 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64  gs:.  Tcl_Append
a270: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
a280: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
a290: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20  ould be \"",.   
a2a0: 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
a2b0: 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c  FromObj(objv[0],
a2c0: 20 30 29 2c 20 22 20 3c 44 42 3e 20 3c 75 74 66   0), " <DB> <utf
a2d0: 38 3e 20 3c 75 74 66 31 36 6c 65 3e 20 3c 75 74  8> <utf16le> <ut
a2e0: 66 31 36 62 65 3e 22 2c 20 30 29 3b 0a 23 65 6e  f16be>", 0);.#en
a2f0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
a300: 49 54 5f 55 54 46 31 36 20 2a 2f 0a 20 20 72 65  IT_UTF16 */.  re
a310: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
a320: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
a330: 20 20 20 20 20 20 20 20 74 65 73 74 5f 65 72 72          test_err
a340: 73 74 72 20 3c 65 72 72 20 63 6f 64 65 3e 0a 2a  str <err code>.*
a350: 2a 0a 2a 2a 20 54 65 73 74 20 74 68 61 74 20 74  *.** Test that t
a360: 68 65 20 65 6e 67 6c 69 73 68 20 6c 61 6e 67 75  he english langu
a370: 61 67 65 20 73 74 72 69 6e 67 20 65 71 75 69 76  age string equiv
a380: 61 6c 65 6e 74 73 20 66 6f 72 20 73 71 6c 69 74  alents for sqlit
a390: 65 20 65 72 72 6f 72 20 63 6f 64 65 73 0a 2a 2a  e error codes.**
a3a0: 20 61 72 65 20 73 61 6e 65 2e 20 54 68 65 20 70   are sane. The p
a3b0: 61 72 61 6d 65 74 65 72 20 69 73 20 61 6e 20 69  arameter is an i
a3c0: 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74  nteger represent
a3d0: 69 6e 67 20 61 6e 20 73 71 6c 69 74 65 20 65 72  ing an sqlite er
a3e0: 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a 20 54 68 65  ror code..** The
a3f0: 20 72 65 73 75 6c 74 20 69 73 20 61 20 6c 69 73   result is a lis
a400: 74 20 6f 66 20 74 77 6f 20 65 6c 65 6d 65 6e 74  t of two element
a410: 73 2c 20 74 68 65 20 73 74 72 69 6e 67 20 72 65  s, the string re
a420: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
a430: 74 68 65 0a 2a 2a 20 65 72 72 6f 72 20 63 6f 64  the.** error cod
a440: 65 20 61 6e 64 20 74 68 65 20 65 6e 67 6c 69 73  e and the englis
a450: 68 20 6c 61 6e 67 75 61 67 65 20 65 78 70 6c 61  h language expla
a460: 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61 74 69  nation..*/.stati
a470: 63 20 69 6e 74 20 74 65 73 74 5f 65 72 72 73 74  c int test_errst
a480: 72 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  r(.  void * clie
a490: 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
a4a0: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
a4b0: 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
a4c0: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
a4d0: 5d 0a 29 7b 0a 20 20 63 68 61 72 20 2a 7a 43 6f  ].){.  char *zCo
a4e0: 64 65 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69  de;.  int i;.  i
a4f0: 66 28 20 6f 62 6a 63 21 3d 31 20 29 7b 0a 20 20  f( objc!=1 ){.  
a500: 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72    Tcl_WrongNumAr
a510: 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62  gs(interp, 1, ob
a520: 6a 76 2c 20 22 3c 65 72 72 6f 72 20 63 6f 64 65  jv, "<error code
a530: 3e 22 29 3b 0a 20 20 7d 0a 0a 20 20 7a 43 6f 64  >");.  }..  zCod
a540: 65 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  e = Tcl_GetStrin
a550: 67 28 6f 62 6a 76 5b 31 5d 29 3b 0a 20 20 66 6f  g(objv[1]);.  fo
a560: 72 28 69 3d 30 3b 20 69 3c 32 30 30 3b 20 69 2b  r(i=0; i<200; i+
a570: 2b 29 7b 0a 20 20 20 20 69 66 28 20 30 3d 3d 73  +){.    if( 0==s
a580: 74 72 63 6d 70 28 65 72 72 6f 72 4e 61 6d 65 28  trcmp(errorName(
a590: 69 29 2c 20 7a 43 6f 64 65 29 20 29 20 62 72 65  i), zCode) ) bre
a5a0: 61 6b 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 53 65  ak;.  }.  Tcl_Se
a5b0: 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  tResult(interp, 
a5c0: 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 45  (char *)sqlite3E
a5d0: 72 72 53 74 72 28 69 29 2c 20 30 29 3b 0a 20 20  rrStr(i), 0);.  
a5e0: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
a5f0: 0a 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c  ..static int sql
a600: 69 74 65 33 5f 63 72 61 73 68 70 61 72 61 6d 73  ite3_crashparams
a610: 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
a620: 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
a630: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
a640: 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
a650: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
a660: 0a 29 7b 0a 23 69 66 64 65 66 20 4f 53 5f 54 45  .){.#ifdef OS_TE
a670: 53 54 0a 20 20 69 6e 74 20 64 65 6c 61 79 3b 0a  ST.  int delay;.
a680: 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 20    if( objc!=3 ) 
a690: 67 6f 74 6f 20 62 61 64 5f 61 72 67 73 3b 0a 20  goto bad_args;. 
a6a0: 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46   if( Tcl_GetIntF
a6b0: 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
a6c0: 62 6a 76 5b 31 5d 2c 20 26 64 65 6c 61 79 29 20  bjv[1], &delay) 
a6d0: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
a6e0: 4f 52 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74  OR;.  sqlite3Set
a6f0: 43 72 61 73 68 50 61 72 61 6d 73 28 64 65 6c 61  CrashParams(dela
a700: 79 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  y, Tcl_GetString
a710: 28 6f 62 6a 76 5b 32 5d 29 29 3b 0a 23 65 6e 64  (objv[2]));.#end
a720: 69 66 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  if.  return TCL_
a730: 4f 4b 3b 0a 0a 23 69 66 64 65 66 20 4f 53 5f 54  OK;..#ifdef OS_T
a740: 45 53 54 0a 62 61 64 5f 61 72 67 73 3a 0a 20 20  EST.bad_args:.  
a750: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
a760: 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
a770: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
a780: 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 54 63 6c  e \"",.      Tcl
a790: 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62  _GetStringFromOb
a7a0: 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22  j(objv[0], 0), "
a7b0: 3c 64 65 6c 61 79 3e 20 3c 66 69 6c 65 6e 61 6d  <delay> <filenam
a7c0: 65 3e 22 2c 20 30 29 3b 0a 20 20 72 65 74 75 72  e>", 0);.  retur
a7d0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 23 65 6e  n TCL_ERROR;.#en
a7e0: 64 69 66 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73  dif.}.../*.** Us
a7f0: 61 67 65 3a 20 20 20 20 62 72 65 61 6b 70 6f 69  age:    breakpoi
a800: 6e 74 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  nt.**.** This ro
a810: 75 74 69 6e 65 20 65 78 69 73 74 73 20 66 6f 72  utine exists for
a820: 20 6f 6e 65 20 70 75 72 70 6f 73 65 20 2d 20 74   one purpose - t
a830: 6f 20 70 72 6f 76 69 64 65 20 61 20 70 6c 61 63  o provide a plac
a840: 65 20 74 6f 20 70 75 74 20 61 0a 2a 2a 20 62 72  e to put a.** br
a850: 65 61 6b 70 6f 69 6e 74 20 77 69 74 68 20 47 44  eakpoint with GD
a860: 42 20 74 68 61 74 20 63 61 6e 20 62 65 20 74 72  B that can be tr
a870: 69 67 67 65 72 65 64 20 75 73 69 6e 67 20 54 43  iggered using TC
a880: 4c 20 63 6f 64 65 2e 20 20 54 68 65 20 75 73 65  L code.  The use
a890: 0a 2a 2a 20 66 6f 72 20 74 68 69 73 20 69 73 20  .** for this is 
a8a0: 77 68 65 6e 20 61 20 70 61 72 74 69 63 75 6c 61  when a particula
a8b0: 72 20 74 65 73 74 20 66 61 69 6c 73 20 6f 6e 20  r test fails on 
a8c0: 28 73 61 79 29 20 74 68 65 20 31 34 38 35 74 68  (say) the 1485th
a8d0: 20 69 74 65 72 61 74 69 6f 6e 2e 0a 2a 2a 20 49   iteration..** I
a8e0: 6e 20 74 68 65 20 54 43 4c 20 74 65 73 74 20 73  n the TCL test s
a8f0: 63 72 69 70 74 2c 20 77 65 20 63 61 6e 20 61 64  cript, we can ad
a900: 64 20 63 6f 64 65 20 6c 69 6b 65 20 74 68 69 73  d code like this
a910: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 69 66 20 7b  :.**.**     if {
a920: 24 69 3d 3d 31 34 38 35 7d 20 62 72 65 61 6b 70  $i==1485} breakp
a930: 6f 69 6e 74 0a 2a 2a 0a 2a 2a 20 54 68 65 6e 20  oint.**.** Then 
a940: 72 75 6e 20 74 65 73 74 66 69 78 74 75 72 65 20  run testfixture 
a950: 69 6e 20 74 68 65 20 64 65 62 75 67 67 65 72 20  in the debugger 
a960: 61 6e 64 20 77 61 69 74 20 66 6f 72 20 74 68 65  and wait for the
a970: 20 62 72 65 61 6b 70 6f 69 6e 74 20 74 6f 0a 2a   breakpoint to.*
a980: 2a 20 66 69 72 65 2e 20 20 54 68 65 6e 20 61 64  * fire.  Then ad
a990: 64 69 74 69 6f 6e 61 6c 20 62 72 65 61 6b 70 6f  ditional breakpo
a9a0: 69 6e 74 73 20 63 61 6e 20 62 65 20 73 65 74 20  ints can be set 
a9b0: 74 6f 20 74 72 61 63 65 20 64 6f 77 6e 20 74 68  to trace down th
a9c0: 65 20 62 75 67 2e 0a 2a 2f 0a 73 74 61 74 69 63  e bug..*/.static
a9d0: 20 69 6e 74 20 74 65 73 74 5f 62 72 65 61 6b 70   int test_breakp
a9e0: 6f 69 6e 74 28 0a 20 20 76 6f 69 64 20 2a 4e 6f  oint(.  void *No
a9f0: 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74  tUsed,.  Tcl_Int
aa00: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
aa10: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
aa20: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
aa30: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
aa40: 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20   */.  int argc, 
aa50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
aa60: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
aa70: 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  nts */.  char **
aa80: 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20  argv            
aa90: 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20  /* Text of each 
aaa0: 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20  argument */.){. 
aab0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 20   return TCL_OK; 
aac0: 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f          /* Do no
aad0: 74 68 69 6e 67 20 2a 2f 0a 7d 0a 0a 2f 2a 0a 2a  thing */.}../*.*
aae0: 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74  * Usage:   sqlit
aaf0: 65 33 5f 62 69 6e 64 5f 69 6e 74 20 20 53 54 4d  e3_bind_int  STM
ab00: 54 20 4e 20 56 41 4c 55 45 0a 2a 2a 0a 2a 2a 20  T N VALUE.**.** 
ab10: 54 65 73 74 20 74 68 65 20 73 71 6c 69 74 65 33  Test the sqlite3
ab20: 5f 62 69 6e 64 5f 69 6e 74 20 69 6e 74 65 72 66  _bind_int interf
ab30: 61 63 65 2e 20 20 53 54 4d 54 20 69 73 20 61 20  ace.  STMT is a 
ab40: 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
ab50: 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20  nt..** N is the 
ab60: 69 6e 64 65 78 20 6f 66 20 61 20 77 69 6c 64 63  index of a wildc
ab70: 61 72 64 20 69 6e 20 74 68 65 20 70 72 65 70 61  ard in the prepa
ab80: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  red statement.  
ab90: 54 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20  This command.** 
aba0: 62 69 6e 64 73 20 61 20 33 32 2d 62 69 74 20 69  binds a 32-bit i
abb0: 6e 74 65 67 65 72 20 56 41 4c 55 45 20 74 6f 20  nteger VALUE to 
abc0: 74 68 61 74 20 77 69 6c 64 63 61 72 64 2e 0a 2a  that wildcard..*
abd0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
abe0: 74 5f 62 69 6e 64 5f 69 6e 74 28 0a 20 20 76 6f  t_bind_int(.  vo
abf0: 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
ac00: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
ac10: 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
ac20: 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
ac30: 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
ac40: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
ac50: 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a  tmt;.  int idx;.
ac60: 20 20 69 6e 74 20 76 61 6c 75 65 3b 0a 20 20 69    int value;.  i
ac70: 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62  nt rc;..  if( ob
ac80: 6a 63 21 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=4 ){.    Tcl
ac90: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
aca0: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
acb0: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
acc0: 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f  "",.        Tcl_
acd0: 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a  GetStringFromObj
ace0: 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20  (objv[0], 0), " 
acf0: 53 54 4d 54 20 4e 20 56 41 4c 55 45 22 2c 20 30  STMT N VALUE", 0
ad00: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
ad10: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
ad20: 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  if( getStmtPoint
ad30: 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
ad40: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
ad50: 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74  ), &pStmt) ) ret
ad60: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
ad70: 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46   if( Tcl_GetIntF
ad80: 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
ad90: 62 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20 29 20  bjv[2], &idx) ) 
ada0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
adb0: 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49  ;.  if( Tcl_GetI
adc0: 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  ntFromObj(interp
add0: 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 76 61 6c 75  , objv[3], &valu
ade0: 65 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  e) ) return TCL_
adf0: 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73  ERROR;..  rc = s
ae00: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28  qlite3_bind_int(
ae10: 70 53 74 6d 74 2c 20 69 64 78 2c 20 76 61 6c 75  pStmt, idx, valu
ae20: 65 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  e);.  if( sqlite
ae30: 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74  3TestErrCode(int
ae40: 65 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53  erp, StmtToDb(pS
ae50: 74 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74 75  tmt), rc) ) retu
ae60: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
ae70: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
ae80: 4b 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  K ){.    return 
ae90: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
aea0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
aeb0: 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  .}.../*.** Usage
aec0: 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  :   sqlite3_bind
aed0: 5f 69 6e 74 36 34 20 20 53 54 4d 54 20 4e 20 56  _int64  STMT N V
aee0: 41 4c 55 45 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20  ALUE.**.** Test 
aef0: 74 68 65 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  the sqlite3_bind
af00: 5f 69 6e 74 36 34 20 69 6e 74 65 72 66 61 63 65  _int64 interface
af10: 2e 20 20 53 54 4d 54 20 69 73 20 61 20 70 72 65  .  STMT is a pre
af20: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e  pared statement.
af30: 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20 69 6e 64  .** N is the ind
af40: 65 78 20 6f 66 20 61 20 77 69 6c 64 63 61 72 64  ex of a wildcard
af50: 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
af60: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 69   statement.  Thi
af70: 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e  s command.** bin
af80: 64 73 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65  ds a 64-bit inte
af90: 67 65 72 20 56 41 4c 55 45 20 74 6f 20 74 68 61  ger VALUE to tha
afa0: 74 20 77 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73  t wildcard..*/.s
afb0: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62  tatic int test_b
afc0: 69 6e 64 5f 69 6e 74 36 34 28 0a 20 20 76 6f 69  ind_int64(.  voi
afd0: 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
afe0: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
aff0: 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
b000: 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
b010: 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73  ST objv[].){.  s
b020: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
b030: 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20  mt;.  int idx;. 
b040: 20 69 36 34 20 76 61 6c 75 65 3b 0a 20 20 69 6e   i64 value;.  in
b050: 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  t rc;..  if( obj
b060: 63 21 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=4 ){.    Tcl_
b070: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
b080: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
b090: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
b0a0: 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47  ",.        Tcl_G
b0b0: 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28  etStringFromObj(
b0c0: 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 53  objv[0], 0), " S
b0d0: 54 4d 54 20 4e 20 56 41 4c 55 45 22 2c 20 30 29  TMT N VALUE", 0)
b0e0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
b0f0: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69  _ERROR;.  }..  i
b100: 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
b110: 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
b120: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
b130: 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
b140: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
b150: 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72  if( Tcl_GetIntFr
b160: 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
b170: 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20 29 20 72  jv[2], &idx) ) r
b180: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
b190: 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 57 69  .  if( Tcl_GetWi
b1a0: 64 65 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  deIntFromObj(int
b1b0: 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 76  erp, objv[3], &v
b1c0: 61 6c 75 65 29 20 29 20 72 65 74 75 72 6e 20 54  alue) ) return T
b1d0: 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20  CL_ERROR;..  rc 
b1e0: 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  = sqlite3_bind_i
b1f0: 6e 74 36 34 28 70 53 74 6d 74 2c 20 69 64 78 2c  nt64(pStmt, idx,
b200: 20 76 61 6c 75 65 29 3b 0a 20 20 69 66 28 20 73   value);.  if( s
b210: 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64  qlite3TestErrCod
b220: 65 28 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f  e(interp, StmtTo
b230: 44 62 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29  Db(pStmt), rc) )
b240: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
b250: 52 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  R;.  if( rc!=SQL
b260: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65  ITE_OK ){.    re
b270: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
b280: 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54 43    }..  return TC
b290: 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  L_OK;.}.../*.** 
b2a0: 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33  Usage:   sqlite3
b2b0: 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 20 20 53 54  _bind_double  ST
b2c0: 4d 54 20 4e 20 56 41 4c 55 45 0a 2a 2a 0a 2a 2a  MT N VALUE.**.**
b2d0: 20 54 65 73 74 20 74 68 65 20 73 71 6c 69 74 65   Test the sqlite
b2e0: 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 20 69 6e  3_bind_double in
b2f0: 74 65 72 66 61 63 65 2e 20 20 53 54 4d 54 20 69  terface.  STMT i
b300: 73 20 61 20 70 72 65 70 61 72 65 64 20 73 74 61  s a prepared sta
b310: 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20  tement..** N is 
b320: 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20 77  the index of a w
b330: 69 6c 64 63 61 72 64 20 69 6e 20 74 68 65 20 70  ildcard in the p
b340: 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
b350: 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64  t.  This command
b360: 0a 2a 2a 20 62 69 6e 64 73 20 61 20 36 34 2d 62  .** binds a 64-b
b370: 69 74 20 69 6e 74 65 67 65 72 20 56 41 4c 55 45  it integer VALUE
b380: 20 74 6f 20 74 68 61 74 20 77 69 6c 64 63 61 72   to that wildcar
b390: 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  d..*/.static int
b3a0: 20 74 65 73 74 5f 62 69 6e 64 5f 64 6f 75 62 6c   test_bind_doubl
b3b0: 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  e(.  void * clie
b3c0: 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
b3d0: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
b3e0: 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
b3f0: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
b400: 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ].){.  sqlite3_s
b410: 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e  tmt *pStmt;.  in
b420: 74 20 69 64 78 3b 0a 20 20 64 6f 75 62 6c 65 20  t idx;.  double 
b430: 76 61 6c 75 65 3b 0a 20 20 69 6e 74 20 72 63 3b  value;.  int rc;
b440: 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 34 20  ..  if( objc!=4 
b450: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
b460: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
b470: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
b480: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20  hould be \"",.  
b490: 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
b4a0: 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b  ingFromObj(objv[
b4b0: 30 5d 2c 20 30 29 2c 20 22 20 53 54 4d 54 20 4e  0], 0), " STMT N
b4c0: 20 56 41 4c 55 45 22 2c 20 30 29 3b 0a 20 20 20   VALUE", 0);.   
b4d0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
b4e0: 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65  R;.  }..  if( ge
b4f0: 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74  tStmtPointer(int
b500: 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
b510: 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53  ng(objv[1]), &pS
b520: 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43  tmt) ) return TC
b530: 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54  L_ERROR;.  if( T
b540: 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a  cl_GetIntFromObj
b550: 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d  (interp, objv[2]
b560: 2c 20 26 69 64 78 29 20 29 20 72 65 74 75 72 6e  , &idx) ) return
b570: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
b580: 28 20 54 63 6c 5f 47 65 74 44 6f 75 62 6c 65 46  ( Tcl_GetDoubleF
b590: 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
b5a0: 62 6a 76 5b 33 5d 2c 20 26 76 61 6c 75 65 29 20  bjv[3], &value) 
b5b0: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
b5c0: 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69  OR;..  rc = sqli
b5d0: 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28  te3_bind_double(
b5e0: 70 53 74 6d 74 2c 20 69 64 78 2c 20 76 61 6c 75  pStmt, idx, valu
b5f0: 65 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  e);.  if( sqlite
b600: 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74  3TestErrCode(int
b610: 65 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53  erp, StmtToDb(pS
b620: 74 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74 75  tmt), rc) ) retu
b630: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
b640: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
b650: 4b 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  K ){.    return 
b660: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
b670: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
b680: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
b690: 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f     sqlite3_bind_
b6a0: 6e 75 6c 6c 20 20 53 54 4d 54 20 4e 0a 2a 2a 0a  null  STMT N.**.
b6b0: 2a 2a 20 54 65 73 74 20 74 68 65 20 73 71 6c 69  ** Test the sqli
b6c0: 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 20 69 6e  te3_bind_null in
b6d0: 74 65 72 66 61 63 65 2e 20 20 53 54 4d 54 20 69  terface.  STMT i
b6e0: 73 20 61 20 70 72 65 70 61 72 65 64 20 73 74 61  s a prepared sta
b6f0: 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20  tement..** N is 
b700: 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20 77  the index of a w
b710: 69 6c 64 63 61 72 64 20 69 6e 20 74 68 65 20 70  ildcard in the p
b720: 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
b730: 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64  t.  This command
b740: 0a 2a 2a 20 62 69 6e 64 73 20 61 20 4e 55 4c 4c  .** binds a NULL
b750: 20 74 6f 20 74 68 65 20 77 69 6c 64 63 61 72 64   to the wildcard
b760: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
b770: 74 65 73 74 5f 62 69 6e 64 5f 6e 75 6c 6c 28 0a  test_bind_null(.
b780: 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
b790: 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
b7a0: 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
b7b0: 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
b7c0: 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
b7d0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  {.  sqlite3_stmt
b7e0: 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69   *pStmt;.  int i
b7f0: 64 78 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20  dx;.  int rc;.. 
b800: 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a   if( objc!=3 ){.
b810: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
b820: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
b830: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
b840: 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20  ld be \"",.     
b850: 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
b860: 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c  FromObj(objv[0],
b870: 20 30 29 2c 20 22 20 53 54 4d 54 20 4e 22 2c 20   0), " STMT N", 
b880: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
b890: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
b8a0: 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
b8b0: 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
b8c0: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
b8d0: 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
b8e0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
b8f0: 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
b900: 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
b910: 6f 62 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20 29  objv[2], &idx) )
b920: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
b930: 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  R;..  rc = sqlit
b940: 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 70 53 74  e3_bind_null(pSt
b950: 6d 74 2c 20 69 64 78 29 3b 0a 20 20 69 66 28 20  mt, idx);.  if( 
b960: 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f  sqlite3TestErrCo
b970: 64 65 28 69 6e 74 65 72 70 2c 20 53 74 6d 74 54  de(interp, StmtT
b980: 6f 44 62 28 70 53 74 6d 74 29 2c 20 72 63 29 20  oDb(pStmt), rc) 
b990: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
b9a0: 4f 52 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51  OR;.  if( rc!=SQ
b9b0: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
b9c0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
b9d0: 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54  .  }..  return T
b9e0: 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
b9f0: 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33  Usage:   sqlite3
ba00: 5f 62 69 6e 64 5f 74 65 78 74 20 20 53 54 4d 54  _bind_text  STMT
ba10: 20 4e 20 53 54 52 49 4e 47 20 42 59 54 45 53 0a   N STRING BYTES.
ba20: 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 73  **.** Test the s
ba30: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74  qlite3_bind_text
ba40: 20 69 6e 74 65 72 66 61 63 65 2e 20 20 53 54 4d   interface.  STM
ba50: 54 20 69 73 20 61 20 70 72 65 70 61 72 65 64 20  T is a prepared 
ba60: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20  statement..** N 
ba70: 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
ba80: 61 20 77 69 6c 64 63 61 72 64 20 69 6e 20 74 68  a wildcard in th
ba90: 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
baa0: 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d  ment.  This comm
bab0: 61 6e 64 0a 2a 2a 20 62 69 6e 64 73 20 61 20 55  and.** binds a U
bac0: 54 46 2d 38 20 73 74 72 69 6e 67 20 53 54 52 49  TF-8 string STRI
bad0: 4e 47 20 74 6f 20 74 68 65 20 77 69 6c 64 63 61  NG to the wildca
bae0: 72 64 2e 20 20 54 68 65 20 73 74 72 69 6e 67 20  rd.  The string 
baf0: 69 73 20 42 59 54 45 53 20 62 79 74 65 73 0a 2a  is BYTES bytes.*
bb00: 2a 20 6c 6f 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69  * long..*/.stati
bb10: 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f  c int test_bind_
bb20: 74 65 78 74 28 0a 20 20 76 6f 69 64 20 2a 20 63  text(.  void * c
bb30: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
bb40: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
bb50: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
bb60: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
bb70: 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
bb80: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
bb90: 20 69 6e 74 20 69 64 78 3b 0a 20 20 69 6e 74 20   int idx;.  int 
bba0: 62 79 74 65 73 3b 0a 20 20 63 68 61 72 20 2a 76  bytes;.  char *v
bbb0: 61 6c 75 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a  alue;.  int rc;.
bbc0: 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 35 20 29  .  if( objc!=5 )
bbd0: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
bbe0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
bbf0: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
bc00: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20  ould be \"",.   
bc10: 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
bc20: 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30  ngFromObj(objv[0
bc30: 5d 2c 20 30 29 2c 20 22 20 53 54 4d 54 20 4e 20  ], 0), " STMT N 
bc40: 56 41 4c 55 45 20 42 59 54 45 53 22 2c 20 30 29  VALUE BYTES", 0)
bc50: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
bc60: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69  _ERROR;.  }..  i
bc70: 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
bc80: 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
bc90: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
bca0: 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
bcb0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
bcc0: 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72  if( Tcl_GetIntFr
bcd0: 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
bce0: 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20 29 20 72  jv[2], &idx) ) r
bcf0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
bd00: 0a 20 20 76 61 6c 75 65 20 3d 20 54 63 6c 5f 47  .  value = Tcl_G
bd10: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 33 5d  etString(objv[3]
bd20: 29 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  );.  if( Tcl_Get
bd30: 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
bd40: 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 26 62 79 74  p, objv[4], &byt
bd50: 65 73 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  es) ) return TCL
bd60: 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20  _ERROR;..  rc = 
bd70: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
bd80: 74 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 76 61  t(pStmt, idx, va
bd90: 6c 75 65 2c 20 62 79 74 65 73 2c 20 53 51 4c 49  lue, bytes, SQLI
bda0: 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20  TE_TRANSIENT);. 
bdb0: 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74   if( sqlite3Test
bdc0: 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20  ErrCode(interp, 
bdd0: 53 74 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 2c  StmtToDb(pStmt),
bde0: 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43   rc) ) return TC
bdf0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72  L_ERROR;.  if( r
be00: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
be10: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
be20: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 73 71 6c  sult(interp, sql
be30: 69 74 65 33 54 65 73 74 45 72 72 6f 72 4e 61 6d  ite3TestErrorNam
be40: 65 28 72 63 29 2c 20 30 29 3b 0a 20 20 20 20 72  e(rc), 0);.    r
be50: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
be60: 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54  .  }..  return T
be70: 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
be80: 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33  Usage:   sqlite3
be90: 5f 62 69 6e 64 5f 74 65 78 74 31 36 20 20 53 54  _bind_text16  ST
bea0: 4d 54 20 4e 20 53 54 52 49 4e 47 20 42 59 54 45  MT N STRING BYTE
beb0: 53 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65  S.**.** Test the
bec0: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65   sqlite3_bind_te
bed0: 78 74 31 36 20 69 6e 74 65 72 66 61 63 65 2e 20  xt16 interface. 
bee0: 20 53 54 4d 54 20 69 73 20 61 20 70 72 65 70 61   STMT is a prepa
bef0: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  red statement..*
bf00: 2a 20 4e 20 69 73 20 74 68 65 20 69 6e 64 65 78  * N is the index
bf10: 20 6f 66 20 61 20 77 69 6c 64 63 61 72 64 20 69   of a wildcard i
bf20: 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  n the prepared s
bf30: 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 69 73 20  tatement.  This 
bf40: 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64 73  command.** binds
bf50: 20 61 20 55 54 46 2d 31 36 20 73 74 72 69 6e 67   a UTF-16 string
bf60: 20 53 54 52 49 4e 47 20 74 6f 20 74 68 65 20 77   STRING to the w
bf70: 69 6c 64 63 61 72 64 2e 20 20 54 68 65 20 73 74  ildcard.  The st
bf80: 72 69 6e 67 20 69 73 20 42 59 54 45 53 20 62 79  ring is BYTES by
bf90: 74 65 73 0a 2a 2a 20 6c 6f 6e 67 2e 0a 2a 2f 0a  tes.** long..*/.
bfa0: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
bfb0: 62 69 6e 64 5f 74 65 78 74 31 36 28 0a 20 20 76  bind_text16(.  v
bfc0: 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
bfd0: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
bfe0: 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
bff0: 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
c000: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23  ONST objv[].){.#
c010: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
c020: 49 54 5f 55 54 46 31 36 0a 20 20 73 71 6c 69 74  IT_UTF16.  sqlit
c030: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a  e3_stmt *pStmt;.
c040: 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 69 6e 74    int idx;.  int
c050: 20 62 79 74 65 73 3b 0a 20 20 63 68 61 72 20 2a   bytes;.  char *
c060: 76 61 6c 75 65 3b 0a 20 20 69 6e 74 20 72 63 3b  value;.  int rc;
c070: 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 35 20  ..  if( objc!=5 
c080: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
c090: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
c0a0: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
c0b0: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20  hould be \"",.  
c0c0: 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
c0d0: 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b  ingFromObj(objv[
c0e0: 30 5d 2c 20 30 29 2c 20 22 20 53 54 4d 54 20 4e  0], 0), " STMT N
c0f0: 20 56 41 4c 55 45 20 42 59 54 45 53 22 2c 20 30   VALUE BYTES", 0
c100: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
c110: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
c120: 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  if( getStmtPoint
c130: 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
c140: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
c150: 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74  ), &pStmt) ) ret
c160: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
c170: 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46   if( Tcl_GetIntF
c180: 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
c190: 62 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20 29 20  bjv[2], &idx) ) 
c1a0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
c1b0: 3b 0a 20 20 76 61 6c 75 65 20 3d 20 54 63 6c 5f  ;.  value = Tcl_
c1c0: 47 65 74 42 79 74 65 41 72 72 61 79 46 72 6f 6d  GetByteArrayFrom
c1d0: 4f 62 6a 28 6f 62 6a 76 5b 33 5d 2c 20 30 29 3b  Obj(objv[3], 0);
c1e0: 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e  .  if( Tcl_GetIn
c1f0: 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
c200: 20 6f 62 6a 76 5b 34 5d 2c 20 26 62 79 74 65 73   objv[4], &bytes
c210: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
c220: 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71  RROR;..  rc = sq
c230: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 31  lite3_bind_text1
c240: 36 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 28 76  6(pStmt, idx, (v
c250: 6f 69 64 20 2a 29 76 61 6c 75 65 2c 20 62 79 74  oid *)value, byt
c260: 65 73 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  es, SQLITE_TRANS
c270: 49 45 4e 54 29 3b 0a 20 20 69 66 28 20 73 71 6c  IENT);.  if( sql
c280: 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28  ite3TestErrCode(
c290: 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62  interp, StmtToDb
c2a0: 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29 20 72  (pStmt), rc) ) r
c2b0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
c2c0: 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
c2d0: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74 75  E_OK ){.    retu
c2e0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
c2f0: 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  }..#endif /* SQL
c300: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a  ITE_OMIT_UTF16 *
c310: 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  /.  return TCL_O
c320: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
c330: 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e  e:   sqlite3_bin
c340: 64 5f 62 6c 6f 62 20 20 53 54 4d 54 20 4e 20 44  d_blob  STMT N D
c350: 41 54 41 20 42 59 54 45 53 0a 2a 2a 0a 2a 2a 20  ATA BYTES.**.** 
c360: 54 65 73 74 20 74 68 65 20 73 71 6c 69 74 65 33  Test the sqlite3
c370: 5f 62 69 6e 64 5f 62 6c 6f 62 20 69 6e 74 65 72  _bind_blob inter
c380: 66 61 63 65 2e 20 20 53 54 4d 54 20 69 73 20 61  face.  STMT is a
c390: 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
c3a0: 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20 74 68 65  ent..** N is the
c3b0: 20 69 6e 64 65 78 20 6f 66 20 61 20 77 69 6c 64   index of a wild
c3c0: 63 61 72 64 20 69 6e 20 74 68 65 20 70 72 65 70  card in the prep
c3d0: 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 20  ared statement. 
c3e0: 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a   This command.**
c3f0: 20 62 69 6e 64 73 20 61 20 42 4c 4f 42 20 74 6f   binds a BLOB to
c400: 20 74 68 65 20 77 69 6c 64 63 61 72 64 2e 20 20   the wildcard.  
c410: 54 68 65 20 42 4c 4f 42 20 69 73 20 42 59 54 45  The BLOB is BYTE
c420: 53 20 62 79 74 65 73 20 69 6e 20 73 69 7a 65 2e  S bytes in size.
c430: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
c440: 65 73 74 5f 62 69 6e 64 5f 62 6c 6f 62 28 0a 20  est_bind_blob(. 
c450: 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
c460: 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
c470: 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
c480: 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
c490: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
c4a0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
c4b0: 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64  *pStmt;.  int id
c4c0: 78 3b 0a 20 20 69 6e 74 20 62 79 74 65 73 3b 0a  x;.  int bytes;.
c4d0: 20 20 63 68 61 72 20 2a 76 61 6c 75 65 3b 0a 20    char *value;. 
c4e0: 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20   int rc;..  if( 
c4f0: 6f 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20 54  objc!=5 ){.    T
c500: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
c510: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
c520: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
c530: 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63   \"",.        Tc
c540: 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f  l_GetStringFromO
c550: 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20  bj(objv[0], 0), 
c560: 22 20 53 54 4d 54 20 4e 20 44 41 54 41 20 42 59  " STMT N DATA BY
c570: 54 45 53 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  TES", 0);.    re
c580: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
c590: 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74    }..  if( getSt
c5a0: 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  mtPointer(interp
c5b0: 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
c5c0: 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74  objv[1]), &pStmt
c5d0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
c5e0: 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f  RROR;.  if( Tcl_
c5f0: 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e  GetIntFromObj(in
c600: 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26  terp, objv[2], &
c610: 69 64 78 29 20 29 20 72 65 74 75 72 6e 20 54 43  idx) ) return TC
c620: 4c 5f 45 52 52 4f 52 3b 0a 20 20 76 61 6c 75 65  L_ERROR;.  value
c630: 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67   = Tcl_GetString
c640: 28 6f 62 6a 76 5b 33 5d 29 3b 0a 20 20 69 66 28  (objv[3]);.  if(
c650: 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f   Tcl_GetIntFromO
c660: 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
c670: 34 5d 2c 20 26 62 79 74 65 73 29 20 29 20 72 65  4], &bytes) ) re
c680: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
c690: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
c6a0: 62 69 6e 64 5f 62 6c 6f 62 28 70 53 74 6d 74 2c  bind_blob(pStmt,
c6b0: 20 69 64 78 2c 20 76 61 6c 75 65 2c 20 62 79 74   idx, value, byt
c6c0: 65 73 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  es, SQLITE_TRANS
c6d0: 49 45 4e 54 29 3b 0a 20 20 69 66 28 20 73 71 6c  IENT);.  if( sql
c6e0: 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28  ite3TestErrCode(
c6f0: 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62  interp, StmtToDb
c700: 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29 20 72  (pStmt), rc) ) r
c710: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
c720: 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
c730: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74 75  E_OK ){.    retu
c740: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
c750: 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  }..  return TCL_
c760: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
c770: 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69  ge:   sqlite3_bi
c780: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f 75  nd_parameter_cou
c790: 6e 74 20 20 53 54 4d 54 0a 2a 2a 0a 2a 2a 20 52  nt  STMT.**.** R
c7a0: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
c7b0: 20 6f 66 20 77 69 6c 64 63 61 72 64 73 20 69 6e   of wildcards in
c7c0: 20 74 68 65 20 67 69 76 65 6e 20 73 74 61 74 65   the given state
c7d0: 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ment..*/.static 
c7e0: 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f 70 61  int test_bind_pa
c7f0: 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 28 0a 20  rameter_count(. 
c800: 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
c810: 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
c820: 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
c830: 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
c840: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
c850: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
c860: 2a 70 53 74 6d 74 3b 0a 0a 20 20 69 66 28 20 6f  *pStmt;..  if( o
c870: 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  bjc!=2 ){.    Tc
c880: 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69  l_WrongNumArgs(i
c890: 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20  nterp, 1, objv, 
c8a0: 22 53 54 4d 54 22 29 3b 0a 20 20 20 20 72 65 74  "STMT");.    ret
c8b0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
c8c0: 20 7d 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74   }.  if( getStmt
c8d0: 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
c8e0: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
c8f0: 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20  jv[1]), &pStmt) 
c900: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
c910: 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a  OR;.  Tcl_SetObj
c920: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
c930: 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c  cl_NewIntObj(sql
c940: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
c950: 74 65 72 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29  ter_count(pStmt)
c960: 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ));.  return TCL
c970: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
c980: 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 62  age:   sqlite3_b
c990: 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61  ind_parameter_na
c9a0: 6d 65 20 20 53 54 4d 54 20 20 4e 0a 2a 2a 0a 2a  me  STMT  N.**.*
c9b0: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61 6d  * Return the nam
c9c0: 65 20 6f 66 20 74 68 65 20 4e 74 68 20 77 69 6c  e of the Nth wil
c9d0: 64 63 61 72 64 2e 20 20 54 68 65 20 66 69 72 73  dcard.  The firs
c9e0: 74 20 77 69 6c 64 63 61 72 64 20 69 73 20 31 2e  t wildcard is 1.
c9f0: 0a 2a 2a 20 41 6e 20 65 6d 70 74 79 20 73 74 72  .** An empty str
ca00: 69 6e 67 20 69 73 20 72 65 74 75 72 6e 65 64 20  ing is returned 
ca10: 69 66 20 4e 20 69 73 20 6f 75 74 20 6f 66 20 72  if N is out of r
ca20: 61 6e 67 65 20 6f 72 20 69 66 20 74 68 65 20 77  ange or if the w
ca30: 69 6c 64 63 61 72 64 0a 2a 2a 20 69 73 20 6e 61  ildcard.** is na
ca40: 6d 65 6c 65 73 73 2e 0a 2a 2f 0a 73 74 61 74 69  meless..*/.stati
ca50: 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f  c int test_bind_
ca60: 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 0a  parameter_name(.
ca70: 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
ca80: 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
ca90: 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
caa0: 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
cab0: 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
cac0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  {.  sqlite3_stmt
cad0: 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69   *pStmt;.  int i
cae0: 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33  ;..  if( objc!=3
caf0: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e   ){.    Tcl_Wron
cb00: 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c  gNumArgs(interp,
cb10: 20 31 2c 20 6f 62 6a 76 2c 20 22 53 54 4d 54 20   1, objv, "STMT 
cb20: 4e 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  N");.    return 
cb30: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
cb40: 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
cb50: 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
cb60: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
cb70: 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
cb80: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
cb90: 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
cba0: 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
cbb0: 6f 62 6a 76 5b 32 5d 2c 20 26 69 29 20 29 20 72  objv[2], &i) ) r
cbc0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
cbd0: 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  .  Tcl_SetObjRes
cbe0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 0a 20 20 20  ult(interp, .   
cbf0: 20 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f    Tcl_NewStringO
cc00: 62 6a 28 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  bj(sqlite3_bind_
cc10: 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 70  parameter_name(p
cc20: 53 74 6d 74 2c 69 29 2c 2d 31 29 0a 20 20 29 3b  Stmt,i),-1).  );
cc30: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
cc40: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
cc50: 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  :   sqlite3_bind
cc60: 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78  _parameter_index
cc70: 20 20 53 54 4d 54 20 20 4e 41 4d 45 0a 2a 2a 0a    STMT  NAME.**.
cc80: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 69 6e  ** Return the in
cc90: 64 65 78 20 6f 66 20 74 68 65 20 77 69 6c 64 63  dex of the wildc
cca0: 61 72 64 20 63 61 6c 6c 65 64 20 4e 41 4d 45 2e  ard called NAME.
ccb0: 20 20 52 65 74 75 72 6e 20 30 20 69 66 20 74 68    Return 0 if th
ccc0: 65 72 65 20 69 73 0a 2a 2a 20 6e 6f 20 73 75 63  ere is.** no suc
ccd0: 68 20 77 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73  h wildcard..*/.s
cce0: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62  tatic int test_b
ccf0: 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e  ind_parameter_in
cd00: 64 65 78 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  dex(.  void * cl
cd10: 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
cd20: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
cd30: 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
cd40: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
cd50: 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
cd60: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 0a 20  _stmt *pStmt;.. 
cd70: 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a   if( objc!=3 ){.
cd80: 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d      Tcl_WrongNum
cd90: 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20  Args(interp, 1, 
cda0: 6f 62 6a 76 2c 20 22 53 54 4d 54 20 4e 41 4d 45  objv, "STMT NAME
cdb0: 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  ");.    return T
cdc0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
cdd0: 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  if( getStmtPoint
cde0: 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
cdf0: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
ce00: 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74  ), &pStmt) ) ret
ce10: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
ce20: 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c   Tcl_SetObjResul
ce30: 74 28 69 6e 74 65 72 70 2c 20 0a 20 20 20 20 20  t(interp, .     
ce40: 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 0a 20  Tcl_NewIntObj(. 
ce50: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69        sqlite3_bi
ce60: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64  nd_parameter_ind
ce70: 65 78 28 70 53 74 6d 74 2c 54 63 6c 5f 47 65 74  ex(pStmt,Tcl_Get
ce80: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 29  String(objv[2]))
ce90: 0a 20 20 20 20 20 29 0a 20 20 29 3b 0a 20 20 72  .     ).  );.  r
cea0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
ceb0: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20  ./*.** Usage:   
cec0: 73 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f 62 69  sqlite3_clear_bi
ced0: 6e 64 69 6e 67 73 20 53 54 4d 54 0a 2a 2a 0a 2a  ndings STMT.**.*
cee0: 2f 0a 23 69 66 20 30 0a 73 74 61 74 69 63 20 69  /.#if 0.static i
cef0: 6e 74 20 74 65 73 74 5f 63 6c 65 61 72 5f 62 69  nt test_clear_bi
cf00: 6e 64 69 6e 67 73 28 0a 20 20 76 6f 69 64 20 2a  ndings(.  void *
cf10: 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
cf20: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
cf30: 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
cf40: 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
cf50: 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
cf60: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
cf70: 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20  ..  if( objc!=2 
cf80: 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67  ){.    Tcl_Wrong
cf90: 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20  NumArgs(interp, 
cfa0: 31 2c 20 6f 62 6a 76 2c 20 22 53 54 4d 54 22 29  1, objv, "STMT")
cfb0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
cfc0: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
cfd0: 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
cfe0: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
cff0: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
d000: 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
d010: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54  n TCL_ERROR;.  T
d020: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
d030: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49  interp, Tcl_NewI
d040: 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33 5f 63 6c  ntObj(sqlite3_cl
d050: 65 61 72 5f 62 69 6e 64 69 6e 67 73 28 70 53 74  ear_bindings(pSt
d060: 6d 74 29 29 29 3b 0a 20 20 72 65 74 75 72 6e 20  mt)));.  return 
d070: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66  TCL_OK;.}.#endif
d080: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
d090: 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20 44  qlite3_errcode D
d0a0: 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  B.**.** Return t
d0b0: 68 65 20 73 74 72 69 6e 67 20 72 65 70 72 65 73  he string repres
d0c0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
d0d0: 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 71 6c 69  most recent sqli
d0e0: 74 65 33 5f 2a 20 41 50 49 0a 2a 2a 20 65 72 72  te3_* API.** err
d0f0: 6f 72 20 63 6f 64 65 2e 20 65 2e 67 2e 20 22 53  or code. e.g. "S
d100: 51 4c 49 54 45 5f 45 52 52 4f 52 22 2e 0a 2a 2f  QLITE_ERROR"..*/
d110: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
d120: 5f 65 72 72 63 6f 64 65 28 0a 20 20 76 6f 69 64  _errcode(.  void
d130: 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
d140: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
d150: 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
d160: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
d170: 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
d180: 6c 69 74 65 33 20 2a 64 62 3b 0a 0a 20 20 69 66  lite3 *db;..  if
d190: 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
d1a0: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
d1b0: 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
d1c0: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
d1d0: 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20  be \"", .       
d1e0: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
d1f0: 6a 76 5b 30 5d 29 2c 20 22 20 44 42 22 2c 20 30  jv[0]), " DB", 0
d200: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
d210: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
d220: 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
d230: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
d240: 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
d250: 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
d260: 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53  L_ERROR;.  Tcl_S
d270: 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
d280: 20 28 63 68 61 72 20 2a 29 65 72 72 6f 72 4e 61   (char *)errorNa
d290: 6d 65 28 73 71 6c 69 74 65 33 5f 65 72 72 63 6f  me(sqlite3_errco
d2a0: 64 65 28 64 62 29 29 2c 20 30 29 3b 0a 20 20 72  de(db)), 0);.  r
d2b0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
d2c0: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20  ./*.** Usage:   
d2d0: 74 65 73 74 5f 65 72 72 6d 73 67 20 44 42 0a 2a  test_errmsg DB.*
d2e0: 2a 0a 2a 2a 20 52 65 74 75 72 6e 73 20 74 68 65  *.** Returns the
d2f0: 20 55 54 46 2d 38 20 72 65 70 72 65 73 65 6e 74   UTF-8 represent
d300: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 65 72 72  ation of the err
d310: 6f 72 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e  or message strin
d320: 67 20 66 6f 72 20 74 68 65 0a 2a 2a 20 6d 6f 73  g for the.** mos
d330: 74 20 72 65 63 65 6e 74 20 73 71 6c 69 74 65 33  t recent sqlite3
d340: 5f 2a 20 41 50 49 20 63 61 6c 6c 2e 0a 2a 2f 0a  _* API call..*/.
d350: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
d360: 65 72 72 6d 73 67 28 0a 20 20 76 6f 69 64 20 2a  errmsg(.  void *
d370: 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
d380: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
d390: 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
d3a0: 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
d3b0: 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
d3c0: 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74  te3 *db;.  const
d3d0: 20 63 68 61 72 20 2a 7a 45 72 72 3b 0a 0a 20 20   char *zErr;..  
d3e0: 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20  if( objc!=2 ){. 
d3f0: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
d400: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
d410: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
d420: 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20  d be \"", .     
d430: 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28    Tcl_GetString(
d440: 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44 42 22 2c  objv[0]), " DB",
d450: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
d460: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
d470: 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
d480: 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
d490: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
d4a0: 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
d4b0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 7a 45  TCL_ERROR;..  zE
d4c0: 72 72 20 3d 20 73 71 6c 69 74 65 33 5f 65 72 72  rr = sqlite3_err
d4d0: 6d 73 67 28 64 62 29 3b 0a 20 20 54 63 6c 5f 53  msg(db);.  Tcl_S
d4e0: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
d4f0: 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  rp, Tcl_NewStrin
d500: 67 4f 62 6a 28 7a 45 72 72 2c 20 2d 31 29 29 3b  gObj(zErr, -1));
d510: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
d520: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
d530: 3a 20 20 20 74 65 73 74 5f 65 72 72 6d 73 67 31  :   test_errmsg1
d540: 36 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72  6 DB.**.** Retur
d550: 6e 73 20 74 68 65 20 55 54 46 2d 31 36 20 72 65  ns the UTF-16 re
d560: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
d570: 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  the error messag
d580: 65 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65  e string for the
d590: 0a 2a 2a 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  .** most recent 
d5a0: 73 71 6c 69 74 65 33 5f 2a 20 41 50 49 20 63 61  sqlite3_* API ca
d5b0: 6c 6c 2e 20 54 68 69 73 20 69 73 20 61 20 62 79  ll. This is a by
d5c0: 74 65 20 61 72 72 61 79 20 6f 62 6a 65 63 74 20  te array object 
d5d0: 61 74 20 74 68 65 20 54 43 4c 20 0a 2a 2a 20 6c  at the TCL .** l
d5e0: 65 76 65 6c 2c 20 61 6e 64 20 69 74 20 69 6e 63  evel, and it inc
d5f0: 6c 75 64 65 73 20 74 68 65 20 30 78 30 30 20 30  ludes the 0x00 0
d600: 78 30 30 20 74 65 72 6d 69 6e 61 74 6f 72 20 62  x00 terminator b
d610: 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64 20  ytes at the end 
d620: 6f 66 20 74 68 65 0a 2a 2a 20 55 54 46 2d 31 36  of the.** UTF-16
d630: 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 73 74 61 74   string..*/.stat
d640: 69 63 20 69 6e 74 20 74 65 73 74 5f 65 72 72 6d  ic int test_errm
d650: 73 67 31 36 28 0a 20 20 76 6f 69 64 20 2a 20 63  sg16(.  void * c
d660: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
d670: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
d680: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
d690: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
d6a0: 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20  jv[].){.#ifndef 
d6b0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
d6c0: 36 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  6.  sqlite3 *db;
d6d0: 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a  .  const void *z
d6e0: 45 72 72 3b 0a 20 20 69 6e 74 20 62 79 74 65 73  Err;.  int bytes
d6f0: 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32  ;..  if( objc!=2
d700: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
d710: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
d720: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
d730: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a  should be \"", .
d740: 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
d750: 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22  ring(objv[0]), "
d760: 20 44 42 22 2c 20 30 29 3b 0a 20 20 20 20 72 65   DB", 0);.    re
d770: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
d780: 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
d790: 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
d7a0: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
d7b0: 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65  v[1]), &db) ) re
d7c0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
d7d0: 0a 20 20 7a 45 72 72 20 3d 20 73 71 6c 69 74 65  .  zErr = sqlite
d7e0: 33 5f 65 72 72 6d 73 67 31 36 28 64 62 29 3b 0a  3_errmsg16(db);.
d7f0: 20 20 62 79 74 65 73 20 3d 20 73 71 6c 69 74 65    bytes = sqlite
d800: 33 75 74 66 31 36 42 79 74 65 4c 65 6e 28 7a 45  3utf16ByteLen(zE
d810: 72 72 2c 20 2d 31 29 3b 0a 20 20 54 63 6c 5f 53  rr, -1);.  Tcl_S
d820: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
d830: 72 70 2c 20 54 63 6c 5f 4e 65 77 42 79 74 65 41  rp, Tcl_NewByteA
d840: 72 72 61 79 4f 62 6a 28 7a 45 72 72 2c 20 62 79  rrayObj(zErr, by
d850: 74 65 73 29 29 3b 0a 23 65 6e 64 69 66 20 2f 2a  tes));.#endif /*
d860: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
d870: 31 36 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54  16 */.  return T
d880: 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
d890: 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 70  Usage: sqlite3_p
d8a0: 72 65 70 61 72 65 20 44 42 20 73 71 6c 20 62 79  repare DB sql by
d8b0: 74 65 73 20 74 61 69 6c 76 61 72 0a 2a 2a 0a 2a  tes tailvar.**.*
d8c0: 2a 20 43 6f 6d 70 69 6c 65 20 75 70 20 74 6f 20  * Compile up to 
d8d0: 3c 62 79 74 65 73 3e 20 62 79 74 65 73 20 6f 66  <bytes> bytes of
d8e0: 20 74 68 65 20 73 75 70 70 6c 69 65 64 20 53 51   the supplied SQ
d8f0: 4c 20 73 74 72 69 6e 67 20 3c 73 71 6c 3e 20 75  L string <sql> u
d900: 73 69 6e 67 0a 2a 2a 20 64 61 74 61 62 61 73 65  sing.** database
d910: 20 68 61 6e 64 6c 65 20 3c 44 42 3e 2e 20 54 68   handle <DB>. Th
d920: 65 20 70 61 72 61 6d 65 74 65 72 20 3c 74 61 69  e parameter <tai
d930: 6c 76 61 6c 3e 20 69 73 20 74 68 65 20 6e 61 6d  lval> is the nam
d940: 65 20 6f 66 20 61 20 67 6c 6f 62 61 6c 0a 2a 2a  e of a global.**
d950: 20 76 61 72 69 61 62 6c 65 20 74 68 61 74 20 69   variable that i
d960: 73 20 73 65 74 20 74 6f 20 74 68 65 20 75 6e 75  s set to the unu
d970: 73 65 64 20 70 6f 72 74 69 6f 6e 20 6f 66 20 3c  sed portion of <
d980: 73 71 6c 3e 20 28 69 66 20 61 6e 79 29 2e 20 41  sql> (if any). A
d990: 0a 2a 2a 20 53 54 4d 54 20 68 61 6e 64 6c 65 20  .** STMT handle 
d9a0: 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a  is returned..*/.
d9b0: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
d9c0: 70 72 65 70 61 72 65 28 0a 20 20 76 6f 69 64 20  prepare(.  void 
d9d0: 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
d9e0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
d9f0: 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
da00: 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
da10: 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
da20: 69 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73  ite3 *db;.  cons
da30: 74 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20  t char *zSql;.  
da40: 69 6e 74 20 62 79 74 65 73 3b 0a 20 20 63 6f 6e  int bytes;.  con
da50: 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 20 3d  st char *zTail =
da60: 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74   0;.  sqlite3_st
da70: 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30 3b 0a 20  mt *pStmt = 0;. 
da80: 20 63 68 61 72 20 7a 42 75 66 5b 35 30 5d 3b 0a   char zBuf[50];.
da90: 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28    int rc;..  if(
daa0: 20 6f 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20   objc!=5 ){.    
dab0: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
dac0: 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
dad0: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
dae0: 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54  e \"", .       T
daf0: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
db00: 76 5b 30 5d 29 2c 20 22 20 44 42 20 73 71 6c 20  v[0]), " DB sql 
db10: 62 79 74 65 73 20 74 61 69 6c 76 61 72 22 2c 20  bytes tailvar", 
db20: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
db30: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
db40: 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72  if( getDbPointer
db50: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
db60: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
db70: 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
db80: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 53 71 6c  CL_ERROR;.  zSql
db90: 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67   = Tcl_GetString
dba0: 28 6f 62 6a 76 5b 32 5d 29 3b 0a 20 20 69 66 28  (objv[2]);.  if(
dbb0: 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f   Tcl_GetIntFromO
dbc0: 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
dbd0: 33 5d 2c 20 26 62 79 74 65 73 29 20 29 20 72 65  3], &bytes) ) re
dbe0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
dbf0: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
dc00: 70 72 65 70 61 72 65 28 64 62 2c 20 7a 53 71 6c  prepare(db, zSql
dc10: 2c 20 62 79 74 65 73 2c 20 26 70 53 74 6d 74 2c  , bytes, &pStmt,
dc20: 20 26 7a 54 61 69 6c 29 3b 0a 20 20 69 66 28 20   &zTail);.  if( 
dc30: 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f  sqlite3TestErrCo
dc40: 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72  de(interp, db, r
dc50: 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  c) ) return TCL_
dc60: 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 7a 54 61  ERROR;.  if( zTa
dc70: 69 6c 20 29 7b 0a 20 20 20 20 69 66 28 20 62 79  il ){.    if( by
dc80: 74 65 73 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20  tes>=0 ){.      
dc90: 62 79 74 65 73 20 3d 20 62 79 74 65 73 20 2d 20  bytes = bytes - 
dca0: 28 7a 54 61 69 6c 2d 7a 53 71 6c 29 3b 0a 20 20  (zTail-zSql);.  
dcb0: 20 20 7d 0a 20 20 20 20 54 63 6c 5f 4f 62 6a 53    }.    Tcl_ObjS
dcc0: 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 6f  etVar2(interp, o
dcd0: 62 6a 76 5b 34 5d 2c 20 30 2c 20 54 63 6c 5f 4e  bjv[4], 0, Tcl_N
dce0: 65 77 53 74 72 69 6e 67 4f 62 6a 28 7a 54 61 69  ewStringObj(zTai
dcf0: 6c 2c 20 62 79 74 65 73 29 2c 20 30 29 3b 0a 20  l, bytes), 0);. 
dd00: 20 7d 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c   }.  if( rc!=SQL
dd10: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 61 73  ITE_OK ){.    as
dd20: 73 65 72 74 28 20 70 53 74 6d 74 3d 3d 30 20 29  sert( pStmt==0 )
dd30: 3b 0a 20 20 20 20 73 70 72 69 6e 74 66 28 7a 42  ;.    sprintf(zB
dd40: 75 66 2c 20 22 28 25 64 29 20 22 2c 20 72 63 29  uf, "(%d) ", rc)
dd50: 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  ;.    Tcl_Append
dd60: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a  Result(interp, z
dd70: 42 75 66 2c 20 73 71 6c 69 74 65 33 5f 65 72 72  Buf, sqlite3_err
dd80: 6d 73 67 28 64 62 29 2c 20 30 29 3b 0a 20 20 20  msg(db), 0);.   
dd90: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
dda0: 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 53  R;.  }..  if( pS
ddb0: 74 6d 74 20 29 7b 0a 20 20 20 20 69 66 28 20 6d  tmt ){.    if( m
ddc0: 61 6b 65 50 6f 69 6e 74 65 72 53 74 72 28 69 6e  akePointerStr(in
ddd0: 74 65 72 70 2c 20 7a 42 75 66 2c 20 70 53 74 6d  terp, zBuf, pStm
dde0: 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  t) ) return TCL_
ddf0: 45 52 52 4f 52 3b 0a 20 20 20 20 54 63 6c 5f 41  ERROR;.    Tcl_A
de00: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
de10: 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 20 20  rp, zBuf, 0);.  
de20: 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  }.  return TCL_O
de30: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
de40: 65 3a 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  e: sqlite3_prepa
de50: 72 65 20 44 42 20 73 71 6c 20 62 79 74 65 73 20  re DB sql bytes 
de60: 74 61 69 6c 76 61 72 0a 2a 2a 0a 2a 2a 20 43 6f  tailvar.**.** Co
de70: 6d 70 69 6c 65 20 75 70 20 74 6f 20 3c 62 79 74  mpile up to <byt
de80: 65 73 3e 20 62 79 74 65 73 20 6f 66 20 74 68 65  es> bytes of the
de90: 20 73 75 70 70 6c 69 65 64 20 53 51 4c 20 73 74   supplied SQL st
dea0: 72 69 6e 67 20 3c 73 71 6c 3e 20 75 73 69 6e 67  ring <sql> using
deb0: 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 68 61 6e  .** database han
dec0: 64 6c 65 20 3c 44 42 3e 2e 20 54 68 65 20 70 61  dle <DB>. The pa
ded0: 72 61 6d 65 74 65 72 20 3c 74 61 69 6c 76 61 6c  rameter <tailval
dee0: 3e 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  > is the name of
def0: 20 61 20 67 6c 6f 62 61 6c 0a 2a 2a 20 76 61 72   a global.** var
df00: 69 61 62 6c 65 20 74 68 61 74 20 69 73 20 73 65  iable that is se
df10: 74 20 74 6f 20 74 68 65 20 75 6e 75 73 65 64 20  t to the unused 
df20: 70 6f 72 74 69 6f 6e 20 6f 66 20 3c 73 71 6c 3e  portion of <sql>
df30: 20 28 69 66 20 61 6e 79 29 2e 20 41 0a 2a 2a 20   (if any). A.** 
df40: 53 54 4d 54 20 68 61 6e 64 6c 65 20 69 73 20 72  STMT handle is r
df50: 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a 73 74 61 74  eturned..*/.stat
df60: 69 63 20 69 6e 74 20 74 65 73 74 5f 70 72 65 70  ic int test_prep
df70: 61 72 65 31 36 28 0a 20 20 76 6f 69 64 20 2a 20  are16(.  void * 
df80: 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
df90: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
dfa0: 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
dfb0: 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
dfc0: 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66  bjv[].){.#ifndef
dfd0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
dfe0: 31 36 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  16.  sqlite3 *db
dff0: 3b 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  ;.  const void *
e000: 7a 53 71 6c 3b 0a 20 20 63 6f 6e 73 74 20 76 6f  zSql;.  const vo
e010: 69 64 20 2a 7a 54 61 69 6c 20 3d 20 30 3b 0a 20  id *zTail = 0;. 
e020: 20 54 63 6c 5f 4f 62 6a 20 2a 70 54 61 69 6c 20   Tcl_Obj *pTail 
e030: 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73  = 0;.  sqlite3_s
e040: 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30 3b 0a  tmt *pStmt = 0;.
e050: 20 20 63 68 61 72 20 7a 42 75 66 5b 35 30 5d 3b    char zBuf[50];
e060: 20 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e   .  int rc;.  in
e070: 74 20 62 79 74 65 73 3b 20 20 20 20 20 20 20 20  t bytes;        
e080: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 69          /* The i
e090: 6e 74 65 67 65 72 20 73 70 65 63 69 66 69 65 64  nteger specified
e0a0: 20 61 73 20 61 72 67 20 33 20 2a 2f 0a 20 20 69   as arg 3 */.  i
e0b0: 6e 74 20 6f 62 6a 6c 65 6e 3b 20 20 20 20 20 20  nt objlen;      
e0c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
e0d0: 62 79 74 65 2d 61 72 72 61 79 20 6c 65 6e 67 74  byte-array lengt
e0e0: 68 20 6f 66 20 61 72 67 20 32 20 2a 2f 0a 0a 20  h of arg 2 */.. 
e0f0: 20 69 66 28 20 6f 62 6a 63 21 3d 35 20 29 7b 0a   if( objc!=5 ){.
e100: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
e110: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
e120: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
e130: 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20  ld be \"", .    
e140: 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
e150: 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44 42 20  (objv[0]), " DB 
e160: 73 71 6c 20 62 79 74 65 73 20 74 61 69 6c 76 61  sql bytes tailva
e170: 72 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  r", 0);.    retu
e180: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
e190: 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  }.  if( getDbPoi
e1a0: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
e1b0: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
e1c0: 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74 75  1]), &db) ) retu
e1d0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
e1e0: 7a 53 71 6c 20 3d 20 54 63 6c 5f 47 65 74 42 79  zSql = Tcl_GetBy
e1f0: 74 65 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28 6f  teArrayFromObj(o
e200: 62 6a 76 5b 32 5d 2c 20 26 6f 62 6a 6c 65 6e 29  bjv[2], &objlen)
e210: 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49  ;.  if( Tcl_GetI
e220: 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  ntFromObj(interp
e230: 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 62 79 74 65  , objv[3], &byte
e240: 73 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  s) ) return TCL_
e250: 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73  ERROR;..  rc = s
e260: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31 36  qlite3_prepare16
e270: 28 64 62 2c 20 7a 53 71 6c 2c 20 62 79 74 65 73  (db, zSql, bytes
e280: 2c 20 26 70 53 74 6d 74 2c 20 26 7a 54 61 69 6c  , &pStmt, &zTail
e290: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
e2a0: 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65  TestErrCode(inte
e2b0: 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65  rp, db, rc) ) re
e2c0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
e2d0: 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
e2e0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
e2f0: 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 7a 54 61  ;.  }..  if( zTa
e300: 69 6c 20 29 7b 0a 20 20 20 20 6f 62 6a 6c 65 6e  il ){.    objlen
e310: 20 3d 20 6f 62 6a 6c 65 6e 20 2d 20 28 28 75 38   = objlen - ((u8
e320: 20 2a 29 7a 54 61 69 6c 2d 28 75 38 20 2a 29 7a   *)zTail-(u8 *)z
e330: 53 71 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  Sql);.  }else{. 
e340: 20 20 20 6f 62 6a 6c 65 6e 20 3d 20 30 3b 0a 20     objlen = 0;. 
e350: 20 7d 0a 20 20 70 54 61 69 6c 20 3d 20 54 63 6c   }.  pTail = Tcl
e360: 5f 4e 65 77 42 79 74 65 41 72 72 61 79 4f 62 6a  _NewByteArrayObj
e370: 28 28 75 38 20 2a 29 7a 54 61 69 6c 2c 20 6f 62  ((u8 *)zTail, ob
e380: 6a 6c 65 6e 29 3b 0a 20 20 54 63 6c 5f 49 6e 63  jlen);.  Tcl_Inc
e390: 72 52 65 66 43 6f 75 6e 74 28 70 54 61 69 6c 29  rRefCount(pTail)
e3a0: 3b 0a 20 20 54 63 6c 5f 4f 62 6a 53 65 74 56 61  ;.  Tcl_ObjSetVa
e3b0: 72 32 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  r2(interp, objv[
e3c0: 34 5d 2c 20 30 2c 20 70 54 61 69 6c 2c 20 30 29  4], 0, pTail, 0)
e3d0: 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52 65 66 43  ;.  Tcl_DecrRefC
e3e0: 6f 75 6e 74 28 70 54 61 69 6c 29 3b 0a 0a 20 20  ount(pTail);..  
e3f0: 69 66 28 20 70 53 74 6d 74 20 29 7b 0a 20 20 20  if( pStmt ){.   
e400: 20 69 66 28 20 6d 61 6b 65 50 6f 69 6e 74 65 72   if( makePointer
e410: 53 74 72 28 69 6e 74 65 72 70 2c 20 7a 42 75 66  Str(interp, zBuf
e420: 2c 20 70 53 74 6d 74 29 20 29 20 72 65 74 75 72  , pStmt) ) retur
e430: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
e440: 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73  .  Tcl_AppendRes
e450: 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66  ult(interp, zBuf
e460: 2c 20 30 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  , 0);.#endif /* 
e470: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
e480: 36 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43  6 */.  return TC
e490: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
e4a0: 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 6f 70  sage: sqlite3_op
e4b0: 65 6e 20 66 69 6c 65 6e 61 6d 65 20 3f 6f 70 74  en filename ?opt
e4c0: 69 6f 6e 73 2d 6c 69 73 74 3f 0a 2a 2f 0a 73 74  ions-list?.*/.st
e4d0: 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 6f 70  atic int test_op
e4e0: 65 6e 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  en(.  void * cli
e4f0: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
e500: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
e510: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
e520: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
e530: 5b 5d 0a 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68  [].){.  const ch
e540: 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 0a 20  ar *zFilename;. 
e550: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
e560: 69 6e 74 20 72 63 3b 0a 20 20 63 68 61 72 20 7a  int rc;.  char z
e570: 42 75 66 5b 31 30 30 5d 3b 0a 0a 20 20 69 66 28  Buf[100];..  if(
e580: 20 6f 62 6a 63 21 3d 33 20 26 26 20 6f 62 6a 63   objc!=3 && objc
e590: 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=2 ){.    Tcl_A
e5a0: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
e5b0: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
e5c0: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
e5d0: 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65  , .       Tcl_Ge
e5e0: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29  tString(objv[0])
e5f0: 2c 20 22 20 66 69 6c 65 6e 61 6d 65 20 6f 70 74  , " filename opt
e600: 69 6f 6e 73 2d 6c 69 73 74 22 2c 20 30 29 3b 0a  ions-list", 0);.
e610: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
e620: 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 7a 46 69  RROR;.  }..  zFi
e630: 6c 65 6e 61 6d 65 20 3d 20 54 63 6c 5f 47 65 74  lename = Tcl_Get
e640: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 3b  String(objv[1]);
e650: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
e660: 6f 70 65 6e 28 7a 46 69 6c 65 6e 61 6d 65 2c 20  open(zFilename, 
e670: 26 64 62 29 3b 0a 20 20 0a 20 20 69 66 28 20 6d  &db);.  .  if( m
e680: 61 6b 65 50 6f 69 6e 74 65 72 53 74 72 28 69 6e  akePointerStr(in
e690: 74 65 72 70 2c 20 7a 42 75 66 2c 20 64 62 29 20  terp, zBuf, db) 
e6a0: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
e6b0: 4f 52 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64  OR;.  Tcl_Append
e6c0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a  Result(interp, z
e6d0: 42 75 66 2c 20 30 29 3b 0a 20 20 72 65 74 75 72  Buf, 0);.  retur
e6e0: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
e6f0: 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65  ** Usage: sqlite
e700: 33 5f 6f 70 65 6e 31 36 20 66 69 6c 65 6e 61 6d  3_open16 filenam
e710: 65 20 6f 70 74 69 6f 6e 73 0a 2a 2f 0a 73 74 61  e options.*/.sta
e720: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 6f 70 65  tic int test_ope
e730: 6e 31 36 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  n16(.  void * cl
e740: 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
e750: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
e760: 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
e770: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
e780: 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20 53  v[].){.#ifndef S
e790: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
e7a0: 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a  .  const void *z
e7b0: 46 69 6c 65 6e 61 6d 65 3b 0a 20 20 73 71 6c 69  Filename;.  sqli
e7c0: 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72  te3 *db;.  int r
e7d0: 63 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 31  c;.  char zBuf[1
e7e0: 30 30 5d 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63  00];..  if( objc
e7f0: 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=3 ){.    Tcl_A
e800: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
e810: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
e820: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
e830: 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65  , .       Tcl_Ge
e840: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29  tString(objv[0])
e850: 2c 20 22 20 66 69 6c 65 6e 61 6d 65 20 6f 70 74  , " filename opt
e860: 69 6f 6e 73 2d 6c 69 73 74 22 2c 20 30 29 3b 0a  ions-list", 0);.
e870: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
e880: 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 7a 46 69  RROR;.  }..  zFi
e890: 6c 65 6e 61 6d 65 20 3d 20 54 63 6c 5f 47 65 74  lename = Tcl_Get
e8a0: 42 79 74 65 41 72 72 61 79 46 72 6f 6d 4f 62 6a  ByteArrayFromObj
e8b0: 28 6f 62 6a 76 5b 31 5d 2c 20 30 29 3b 0a 20 20  (objv[1], 0);.  
e8c0: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 6f 70 65  rc = sqlite3_ope
e8d0: 6e 31 36 28 7a 46 69 6c 65 6e 61 6d 65 2c 20 26  n16(zFilename, &
e8e0: 64 62 29 3b 0a 20 20 0a 20 20 69 66 28 20 6d 61  db);.  .  if( ma
e8f0: 6b 65 50 6f 69 6e 74 65 72 53 74 72 28 69 6e 74  kePointerStr(int
e900: 65 72 70 2c 20 7a 42 75 66 2c 20 64 62 29 20 29  erp, zBuf, db) )
e910: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
e920: 52 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  R;.  Tcl_AppendR
e930: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42  esult(interp, zB
e940: 75 66 2c 20 30 29 3b 0a 23 65 6e 64 69 66 20 2f  uf, 0);.#endif /
e950: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  * SQLITE_OMIT_UT
e960: 46 31 36 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20  F16 */.  return 
e970: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
e980: 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
e990: 63 6f 6d 70 6c 65 74 65 31 36 20 3c 55 54 46 2d  complete16 <UTF-
e9a0: 31 36 20 73 74 72 69 6e 67 3e 0a 2a 2a 0a 2a 2a  16 string>.**.**
e9b0: 20 52 65 74 75 72 6e 20 31 20 69 66 20 74 68 65   Return 1 if the
e9c0: 20 73 75 70 70 6c 69 65 64 20 61 72 67 75 6d 65   supplied argume
e9d0: 6e 74 20 69 73 20 61 20 63 6f 6d 70 6c 65 74 65  nt is a complete
e9e0: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2c 20   SQL statement, 
e9f0: 6f 72 20 7a 65 72 6f 0a 2a 2a 20 6f 74 68 65 72  or zero.** other
ea00: 77 69 73 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  wise..*/.static 
ea10: 69 6e 74 20 74 65 73 74 5f 63 6f 6d 70 6c 65 74  int test_complet
ea20: 65 31 36 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  e16(.  void * cl
ea30: 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
ea40: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
ea50: 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
ea60: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
ea70: 76 5b 5d 0a 29 7b 0a 23 69 66 20 21 64 65 66 69  v[].){.#if !defi
ea80: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
ea90: 43 4f 4d 50 4c 45 54 45 29 20 26 26 20 21 64 65  COMPLETE) && !de
eaa0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
eab0: 54 5f 55 54 46 31 36 29 0a 20 20 63 68 61 72 20  T_UTF16).  char 
eac0: 2a 7a 42 75 66 3b 0a 0a 20 20 69 66 28 20 6f 62  *zBuf;..  if( ob
ead0: 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=2 ){.    Tcl
eae0: 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e  _WrongNumArgs(in
eaf0: 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22  terp, 1, objv, "
eb00: 3c 75 74 66 2d 31 36 20 73 71 6c 3e 22 29 3b 0a  <utf-16 sql>");.
eb10: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
eb20: 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 7a 42 75  RROR;.  }..  zBu
eb30: 66 20 3d 20 54 63 6c 5f 47 65 74 42 79 74 65 41  f = Tcl_GetByteA
eb40: 72 72 61 79 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76  rrayFromObj(objv
eb50: 5b 31 5d 2c 20 30 29 3b 0a 20 20 54 63 6c 5f 53  [1], 0);.  Tcl_S
eb60: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
eb70: 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62  rp, Tcl_NewIntOb
eb80: 6a 28 73 71 6c 69 74 65 33 5f 63 6f 6d 70 6c 65  j(sqlite3_comple
eb90: 74 65 31 36 28 7a 42 75 66 29 29 29 3b 0a 23 65  te16(zBuf)));.#e
eba0: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
ebb0: 4d 49 54 5f 43 4f 4d 50 4c 45 54 45 20 26 26 20  MIT_COMPLETE && 
ebc0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
ebd0: 36 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43  6 */.  return TC
ebe0: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
ebf0: 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 73 74  sage: sqlite3_st
ec00: 65 70 20 53 54 4d 54 0a 2a 2a 0a 2a 2a 20 41 64  ep STMT.**.** Ad
ec10: 76 61 6e 63 65 20 74 68 65 20 73 74 61 74 65 6d  vance the statem
ec20: 65 6e 74 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ent to the next 
ec30: 72 6f 77 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  row..*/.static i
ec40: 6e 74 20 74 65 73 74 5f 73 74 65 70 28 0a 20 20  nt test_step(.  
ec50: 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
ec60: 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
ec70: 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
ec80: 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
ec90: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
eca0: 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
ecb0: 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 72 63 3b  pStmt;.  int rc;
ecc0: 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20  ..  if( objc!=2 
ecd0: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
ece0: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
ecf0: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
ed00: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20  hould be \"", . 
ed10: 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
ed20: 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20  ing(objv[0]), " 
ed30: 53 54 4d 54 22 2c 20 30 29 3b 0a 20 20 20 20 72  STMT", 0);.    r
ed40: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
ed50: 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53  .  }..  if( getS
ed60: 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tmtPointer(inter
ed70: 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
ed80: 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d  (objv[1]), &pStm
ed90: 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  t) ) return TCL_
eda0: 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71  ERROR;.  rc = sq
edb0: 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74  lite3_step(pStmt
edc0: 29 3b 0a 0a 20 20 2f 2a 20 69 66 28 20 72 63 21  );..  /* if( rc!
edd0: 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 26 26 20  =SQLITE_DONE && 
ede0: 72 63 21 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29  rc!=SQLITE_ROW )
edf0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
ee00: 52 3b 20 2a 2f 0a 20 20 54 63 6c 5f 53 65 74 52  R; */.  Tcl_SetR
ee10: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63  esult(interp, (c
ee20: 68 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28  har *)errorName(
ee30: 72 63 29 2c 20 30 29 3b 0a 20 20 72 65 74 75 72  rc), 0);.  retur
ee40: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
ee50: 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65  ** Usage: sqlite
ee60: 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 53  3_column_count S
ee70: 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72  TMT .**.** Retur
ee80: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
ee90: 63 6f 6c 75 6d 6e 73 20 72 65 74 75 72 6e 65 64  columns returned
eea0: 20 62 79 20 74 68 65 20 73 71 6c 20 73 74 61 74   by the sql stat
eeb0: 65 6d 65 6e 74 20 53 54 4d 54 2e 0a 2a 2f 0a 73  ement STMT..*/.s
eec0: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63  tatic int test_c
eed0: 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 0a 20 20 76  olumn_count(.  v
eee0: 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
eef0: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
ef00: 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
ef10: 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
ef20: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
ef30: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
ef40: 53 74 6d 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  Stmt;..  if( obj
ef50: 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
ef60: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
ef70: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
ef80: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
ef90: 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
efa0: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
efb0: 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e  ), " STMT column
efc0: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
efd0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
efe0: 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  ..  if( getStmtP
eff0: 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
f000: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
f010: 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29  v[1]), &pStmt) )
f020: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
f030: 52 3b 0a 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a  R;..  Tcl_SetObj
f040: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
f050: 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c  cl_NewIntObj(sql
f060: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e  ite3_column_coun
f070: 74 28 70 53 74 6d 74 29 29 29 3b 0a 20 20 72 65  t(pStmt)));.  re
f080: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
f090: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  /*.** Usage: sql
f0a0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65  ite3_column_type
f0b0: 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a   STMT column.**.
f0c0: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 74 79  ** Return the ty
f0d0: 70 65 20 6f 66 20 74 68 65 20 64 61 74 61 20 69  pe of the data i
f0e0: 6e 20 63 6f 6c 75 6d 6e 20 27 63 6f 6c 75 6d 6e  n column 'column
f0f0: 27 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  ' of the current
f100: 20 72 6f 77 2e 0a 2a 2f 0a 73 74 61 74 69 63 20   row..*/.static 
f110: 69 6e 74 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f  int test_column_
f120: 74 79 70 65 28 0a 20 20 76 6f 69 64 20 2a 20 63  type(.  void * c
f130: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
f140: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
f150: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
f160: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
f170: 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
f180: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
f190: 20 69 6e 74 20 63 6f 6c 3b 0a 20 20 69 6e 74 20   int col;.  int 
f1a0: 74 70 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  tp;..  if( objc!
f1b0: 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =3 ){.    Tcl_Ap
f1c0: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
f1d0: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
f1e0: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
f1f0: 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74   .       Tcl_Get
f200: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c  String(objv[0]),
f210: 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c   " STMT column",
f220: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
f230: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
f240: 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
f250: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
f260: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
f270: 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72  1]), &pStmt) ) r
f280: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
f290: 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e  .  if( Tcl_GetIn
f2a0: 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
f2b0: 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20   objv[2], &col) 
f2c0: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
f2d0: 4f 52 3b 0a 0a 20 20 74 70 20 3d 20 73 71 6c 69  OR;..  tp = sqli
f2e0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 28  te3_column_type(
f2f0: 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20 73  pStmt, col);.  s
f300: 77 69 74 63 68 28 20 74 70 20 29 7b 0a 20 20 20  witch( tp ){.   
f310: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4e 54   case SQLITE_INT
f320: 45 47 45 52 3a 20 0a 20 20 20 20 20 20 54 63 6c  EGER: .      Tcl
f330: 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
f340: 70 2c 20 22 49 4e 54 45 47 45 52 22 2c 20 54 43  p, "INTEGER", TC
f350: 4c 5f 53 54 41 54 49 43 29 3b 20 0a 20 20 20 20  L_STATIC); .    
f360: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
f370: 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 3a 0a 20  e SQLITE_NULL:. 
f380: 20 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75       Tcl_SetResu
f390: 6c 74 28 69 6e 74 65 72 70 2c 20 22 4e 55 4c 4c  lt(interp, "NULL
f3a0: 22 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 20  ", TCL_STATIC); 
f3b0: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
f3c0: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 46 4c    case SQLITE_FL
f3d0: 4f 41 54 3a 0a 20 20 20 20 20 20 54 63 6c 5f 53  OAT:.      Tcl_S
f3e0: 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
f3f0: 20 22 46 4c 4f 41 54 22 2c 20 54 43 4c 5f 53 54   "FLOAT", TCL_ST
f400: 41 54 49 43 29 3b 20 0a 20 20 20 20 20 20 62 72  ATIC); .      br
f410: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
f420: 4c 49 54 45 5f 54 45 58 54 3a 0a 20 20 20 20 20  LITE_TEXT:.     
f430: 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69   Tcl_SetResult(i
f440: 6e 74 65 72 70 2c 20 22 54 45 58 54 22 2c 20 54  nterp, "TEXT", T
f450: 43 4c 5f 53 54 41 54 49 43 29 3b 20 0a 20 20 20  CL_STATIC); .   
f460: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
f470: 73 65 20 53 51 4c 49 54 45 5f 42 4c 4f 42 3a 0a  se SQLITE_BLOB:.
f480: 20 20 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73        Tcl_SetRes
f490: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 42 4c 4f  ult(interp, "BLO
f4a0: 42 22 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b  B", TCL_STATIC);
f4b0: 20 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20   .      break;. 
f4c0: 20 20 20 64 65 66 61 75 6c 74 3a 0a 20 20 20 20     default:.    
f4d0: 20 20 61 73 73 65 72 74 28 30 29 3b 0a 20 20 7d    assert(0);.  }
f4e0: 0a 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ..  return TCL_O
f4f0: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
f500: 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  e: sqlite3_colum
f510: 6e 5f 69 6e 74 36 34 20 53 54 4d 54 20 63 6f 6c  n_int64 STMT col
f520: 75 6d 6e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e  umn.**.** Return
f530: 20 74 68 65 20 64 61 74 61 20 69 6e 20 63 6f 6c   the data in col
f540: 75 6d 6e 20 27 63 6f 6c 75 6d 6e 27 20 6f 66 20  umn 'column' of 
f550: 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
f560: 63 61 73 74 20 61 73 20 61 6e 0a 2a 2a 20 77 69  cast as an.** wi
f570: 64 65 20 28 36 34 2d 62 69 74 29 20 69 6e 74 65  de (64-bit) inte
f580: 67 65 72 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ger..*/.static i
f590: 6e 74 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 69  nt test_column_i
f5a0: 6e 74 36 34 28 0a 20 20 76 6f 69 64 20 2a 20 63  nt64(.  void * c
f5b0: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
f5c0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
f5d0: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
f5e0: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
f5f0: 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
f600: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
f610: 20 69 6e 74 20 63 6f 6c 3b 0a 20 20 69 36 34 20   int col;.  i64 
f620: 69 56 61 6c 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  iVal;..  if( obj
f630: 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
f640: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
f650: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
f660: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
f670: 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
f680: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
f690: 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e  ), " STMT column
f6a0: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
f6b0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
f6c0: 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  ..  if( getStmtP
f6d0: 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
f6e0: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
f6f0: 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29  v[1]), &pStmt) )
f700: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
f710: 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  R;.  if( Tcl_Get
f720: 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
f730: 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c  p, objv[2], &col
f740: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
f750: 52 52 4f 52 3b 0a 0a 20 20 69 56 61 6c 20 3d 20  RROR;..  iVal = 
f760: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
f770: 6e 74 36 34 28 70 53 74 6d 74 2c 20 63 6f 6c 29  nt64(pStmt, col)
f780: 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65  ;.  Tcl_SetObjRe
f790: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
f7a0: 5f 4e 65 77 57 69 64 65 49 6e 74 4f 62 6a 28 69  _NewWideIntObj(i
f7b0: 56 61 6c 29 29 3b 0a 20 20 72 65 74 75 72 6e 20  Val));.  return 
f7c0: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
f7d0: 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
f7e0: 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 20 53 54 4d 54  column_blob STMT
f7f0: 20 63 6f 6c 75 6d 6e 0a 2a 2f 0a 73 74 61 74 69   column.*/.stati
f800: 63 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c 75 6d  c int test_colum
f810: 6e 5f 62 6c 6f 62 28 0a 20 20 76 6f 69 64 20 2a  n_blob(.  void *
f820: 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
f830: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
f840: 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
f850: 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
f860: 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
f870: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
f880: 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a 0a 20 20 69  .  int col;..  i
f890: 6e 74 20 6c 65 6e 3b 0a 20 20 63 6f 6e 73 74 20  nt len;.  const 
f8a0: 76 6f 69 64 20 2a 70 42 6c 6f 62 3b 0a 0a 20 20  void *pBlob;..  
f8b0: 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20  if( objc!=3 ){. 
f8c0: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
f8d0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
f8e0: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
f8f0: 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20  d be \"", .     
f900: 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28    Tcl_GetString(
f910: 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54  objv[0]), " STMT
f920: 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20   column", 0);.  
f930: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
f940: 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67  OR;.  }..  if( g
f950: 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e  etStmtPointer(in
f960: 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
f970: 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70  ing(objv[1]), &p
f980: 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
f990: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
f9a0: 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62  Tcl_GetIntFromOb
f9b0: 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32  j(interp, objv[2
f9c0: 5d 2c 20 26 63 6f 6c 29 20 29 20 72 65 74 75 72  ], &col) ) retur
f9d0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
f9e0: 70 42 6c 6f 62 20 3d 20 73 71 6c 69 74 65 33 5f  pBlob = sqlite3_
f9f0: 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 70 53 74 6d  column_blob(pStm
fa00: 74 2c 20 63 6f 6c 29 3b 0a 20 20 6c 65 6e 20 3d  t, col);.  len =
fa10: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
fa20: 62 79 74 65 73 28 70 53 74 6d 74 2c 20 63 6f 6c  bytes(pStmt, col
fa30: 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52  );.  Tcl_SetObjR
fa40: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
fa50: 6c 5f 4e 65 77 42 79 74 65 41 72 72 61 79 4f 62  l_NewByteArrayOb
fa60: 6a 28 70 42 6c 6f 62 2c 20 6c 65 6e 29 29 3b 0a  j(pBlob, len));.
fa70: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
fa80: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
fa90: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
faa0: 64 6f 75 62 6c 65 20 53 54 4d 54 20 63 6f 6c 75  double STMT colu
fab0: 6d 6e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  mn.**.** Return 
fac0: 74 68 65 20 64 61 74 61 20 69 6e 20 63 6f 6c 75  the data in colu
fad0: 6d 6e 20 27 63 6f 6c 75 6d 6e 27 20 6f 66 20 74  mn 'column' of t
fae0: 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 63  he current row c
faf0: 61 73 74 20 61 73 20 61 20 64 6f 75 62 6c 65 2e  ast as a double.
fb00: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
fb10: 65 73 74 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c  est_column_doubl
fb20: 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  e(.  void * clie
fb30: 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
fb40: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
fb50: 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
fb60: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
fb70: 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ].){.  sqlite3_s
fb80: 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e  tmt *pStmt;.  in
fb90: 74 20 63 6f 6c 3b 0a 20 20 64 6f 75 62 6c 65 20  t col;.  double 
fba0: 72 56 61 6c 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  rVal;..  if( obj
fbb0: 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
fbc0: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
fbd0: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
fbe0: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
fbf0: 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
fc00: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
fc10: 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e  ), " STMT column
fc20: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
fc30: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
fc40: 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  ..  if( getStmtP
fc50: 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
fc60: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
fc70: 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29  v[1]), &pStmt) )
fc80: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
fc90: 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  R;.  if( Tcl_Get
fca0: 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
fcb0: 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c  p, objv[2], &col
fcc0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
fcd0: 52 52 4f 52 3b 0a 0a 20 20 72 56 61 6c 20 3d 20  RROR;..  rVal = 
fce0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
fcf0: 6f 75 62 6c 65 28 70 53 74 6d 74 2c 20 63 6f 6c  ouble(pStmt, col
fd00: 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52  );.  Tcl_SetObjR
fd10: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
fd20: 6c 5f 4e 65 77 44 6f 75 62 6c 65 4f 62 6a 28 72  l_NewDoubleObj(r
fd30: 56 61 6c 29 29 3b 0a 20 20 72 65 74 75 72 6e 20  Val));.  return 
fd40: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
fd50: 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
fd60: 64 61 74 61 5f 63 6f 75 6e 74 20 53 54 4d 54 20  data_count STMT 
fd70: 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  .**.** Return th
fd80: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
fd90: 6d 6e 73 20 72 65 74 75 72 6e 65 64 20 62 79 20  mns returned by 
fda0: 74 68 65 20 73 71 6c 20 73 74 61 74 65 6d 65 6e  the sql statemen
fdb0: 74 20 53 54 4d 54 2e 0a 2a 2f 0a 73 74 61 74 69  t STMT..*/.stati
fdc0: 63 20 69 6e 74 20 74 65 73 74 5f 64 61 74 61 5f  c int test_data_
fdd0: 63 6f 75 6e 74 28 0a 20 20 76 6f 69 64 20 2a 20  count(.  void * 
fde0: 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
fdf0: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
fe00: 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
fe10: 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
fe20: 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74  bjv[].){.  sqlit
fe30: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a  e3_stmt *pStmt;.
fe40: 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29  .  if( objc!=2 )
fe50: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
fe60: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
fe70: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
fe80: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20  ould be \"", .  
fe90: 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
fea0: 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53  ng(objv[0]), " S
feb0: 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b  TMT column", 0);
fec0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
fed0: 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66  ERROR;.  }..  if
fee0: 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
fef0: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
ff00: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
ff10: 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
ff20: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
ff30: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
ff40: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
ff50: 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33 5f 64  IntObj(sqlite3_d
ff60: 61 74 61 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29  ata_count(pStmt)
ff70: 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ));.  return TCL
ff80: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
ff90: 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c  age: sqlite3_col
ffa0: 75 6d 6e 5f 74 65 78 74 20 53 54 4d 54 20 63 6f  umn_text STMT co
ffb0: 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65  lumn.**.** Usage
ffc0: 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  : sqlite3_column
ffd0: 5f 64 65 63 6c 74 79 70 65 20 53 54 4d 54 20 63  _decltype STMT c
ffe0: 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67  olumn.**.** Usag
fff0: 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  e: sqlite3_colum
10000 6e 5f 6e 61 6d 65 20 53 54 4d 54 20 63 6f 6c 75  n_name STMT colu
10010 6d 6e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  mn.*/.static int
10020 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66 38 28   test_stmt_utf8(
10030 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
10040 44 61 74 61 2c 20 20 20 20 20 20 20 20 2f 2a 20  Data,        /* 
10050 50 6f 69 6e 74 65 72 20 74 6f 20 53 51 4c 69 74  Pointer to SQLit
10060 65 20 41 50 49 20 66 75 6e 63 74 69 6f 6e 20 74  e API function t
10070 6f 20 62 65 20 69 6e 76 6f 6b 65 20 2a 2f 0a 20  o be invoke */. 
10080 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
10090 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
100a0 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
100b0 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
100c0 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
100d0 74 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a 20 20  t;.  int col;.  
100e0 63 6f 6e 73 74 20 63 68 61 72 20 2a 28 2a 78 46  const char *(*xF
100f0 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 73 74 6d  unc)(sqlite3_stm
10100 74 2a 2c 20 69 6e 74 29 20 3d 20 63 6c 69 65 6e  t*, int) = clien
10110 74 44 61 74 61 3b 0a 20 20 63 6f 6e 73 74 20 63  tData;.  const c
10120 68 61 72 20 2a 7a 52 65 74 3b 0a 0a 20 20 69 66  har *zRet;..  if
10130 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20  ( objc!=3 ){.   
10140 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
10150 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
10160 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
10170 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20  be \"", .       
10180 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
10190 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20 63  jv[0]), " STMT c
101a0 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20  olumn", 0);.    
101b0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
101c0 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
101d0 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
101e0 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
101f0 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
10200 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
10210 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63  _ERROR;.  if( Tc
10220 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
10230 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c  interp, objv[2],
10240 20 26 63 6f 6c 29 20 29 20 72 65 74 75 72 6e 20   &col) ) return 
10250 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 52 65  TCL_ERROR;.  zRe
10260 74 20 3d 20 78 46 75 6e 63 28 70 53 74 6d 74 2c  t = xFunc(pStmt,
10270 20 63 6f 6c 29 3b 0a 20 20 69 66 28 20 7a 52 65   col);.  if( zRe
10280 74 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74  t ){.    Tcl_Set
10290 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28  Result(interp, (
102a0 63 68 61 72 20 2a 29 7a 52 65 74 2c 20 30 29 3b  char *)zRet, 0);
102b0 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43  .  }.  return TC
102c0 4c 5f 4f 4b 3b 0a 7d 0a 0a 73 74 61 74 69 63 20  L_OK;.}..static 
102d0 69 6e 74 20 74 65 73 74 5f 67 6c 6f 62 61 6c 5f  int test_global_
102e0 72 65 63 6f 76 65 72 28 0a 20 20 76 6f 69 64 20  recover(.  void 
102f0 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
10300 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
10310 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
10320 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
10330 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64   objv[].){.#ifnd
10340 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 47  ef SQLITE_OMIT_G
10350 4c 4f 42 41 4c 52 45 43 4f 56 45 52 0a 20 20 69  LOBALRECOVER.  i
10360 6e 74 20 72 63 3b 0a 20 20 69 66 28 20 6f 62 6a  nt rc;.  if( obj
10370 63 21 3d 31 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=1 ){.    Tcl_
10380 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74  WrongNumArgs(int
10390 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 22  erp, 1, objv, ""
103a0 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
103b0 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72  L_ERROR;.  }.  r
103c0 63 20 3d 20 73 71 6c 69 74 65 33 5f 67 6c 6f 62  c = sqlite3_glob
103d0 61 6c 5f 72 65 63 6f 76 65 72 28 29 3b 0a 20 20  al_recover();.  
103e0 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
103f0 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 65 72  terp, (char *)er
10400 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c  rorName(rc), TCL
10410 5f 53 54 41 54 49 43 29 3b 0a 23 65 6e 64 69 66  _STATIC);.#endif
10420 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
10430 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
10440 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  : sqlite3_column
10450 5f 74 65 78 74 20 53 54 4d 54 20 63 6f 6c 75 6d  _text STMT colum
10460 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  n.**.** Usage: s
10470 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65  qlite3_column_de
10480 63 6c 74 79 70 65 20 53 54 4d 54 20 63 6f 6c 75  cltype STMT colu
10490 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  mn.**.** Usage: 
104a0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e  sqlite3_column_n
104b0 61 6d 65 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a  ame STMT column.
104c0 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
104d0 73 74 5f 73 74 6d 74 5f 75 74 66 31 36 28 0a 20  st_stmt_utf16(. 
104e0 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
104f0 74 61 2c 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ta,     /* Point
10500 65 72 20 74 6f 20 53 51 4c 69 74 65 20 41 50 49  er to SQLite API
10510 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20   function to be 
10520 69 6e 76 6f 6b 65 64 20 2a 2f 0a 20 20 54 63 6c  invoked */.  Tcl
10530 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
10540 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
10550 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
10560 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20  jv[].){.#ifndef 
10570 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
10580 36 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  6.  sqlite3_stmt
10590 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63   *pStmt;.  int c
105a0 6f 6c 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70  ol;.  Tcl_Obj *p
105b0 52 65 74 3b 0a 20 20 63 6f 6e 73 74 20 76 6f 69  Ret;.  const voi
105c0 64 20 2a 7a 4e 61 6d 65 31 36 3b 0a 20 20 63 6f  d *zName16;.  co
105d0 6e 73 74 20 76 6f 69 64 20 2a 28 2a 78 46 75 6e  nst void *(*xFun
105e0 63 29 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a  c)(sqlite3_stmt*
105f0 2c 20 69 6e 74 29 20 3d 20 63 6c 69 65 6e 74 44  , int) = clientD
10600 61 74 61 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63  ata;..  if( objc
10610 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=3 ){.    Tcl_A
10620 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
10630 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
10640 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
10650 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65  , .       Tcl_Ge
10660 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29  tString(objv[0])
10670 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22  , " STMT column"
10680 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
10690 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
106a0 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f  .  if( getStmtPo
106b0 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
106c0 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
106d0 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20  [1]), &pStmt) ) 
106e0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
106f0 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49  ;.  if( Tcl_GetI
10700 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  ntFromObj(interp
10710 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29  , objv[2], &col)
10720 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
10730 52 4f 52 3b 0a 0a 20 20 7a 4e 61 6d 65 31 36 20  ROR;..  zName16 
10740 3d 20 78 46 75 6e 63 28 70 53 74 6d 74 2c 20 63  = xFunc(pStmt, c
10750 6f 6c 29 3b 0a 20 20 69 66 28 20 7a 4e 61 6d 65  ol);.  if( zName
10760 31 36 20 29 7b 0a 20 20 20 20 70 52 65 74 20 3d  16 ){.    pRet =
10770 20 54 63 6c 5f 4e 65 77 42 79 74 65 41 72 72 61   Tcl_NewByteArra
10780 79 4f 62 6a 28 7a 4e 61 6d 65 31 36 2c 20 73 71  yObj(zName16, sq
10790 6c 69 74 65 33 75 74 66 31 36 42 79 74 65 4c 65  lite3utf16ByteLe
107a0 6e 28 7a 4e 61 6d 65 31 36 2c 20 2d 31 29 2b 32  n(zName16, -1)+2
107b0 29 3b 0a 20 20 20 20 54 63 6c 5f 53 65 74 4f 62  );.    Tcl_SetOb
107c0 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
107d0 70 52 65 74 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  pRet);.  }.#endi
107e0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
107f0 5f 55 54 46 31 36 20 2a 2f 0a 0a 20 20 72 65 74  _UTF16 */..  ret
10800 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
10810 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69  *.** Usage: sqli
10820 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 53  te3_column_int S
10830 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a  TMT column.**.**
10840 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
10850 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 20 53 54 4d  column_bytes STM
10860 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55  T column.**.** U
10870 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f  sage: sqlite3_co
10880 6c 75 6d 6e 5f 62 79 74 65 73 31 36 20 53 54 4d  lumn_bytes16 STM
10890 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2f 0a 73  T column.**.*/.s
108a0 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 73  tatic int test_s
108b0 74 6d 74 5f 69 6e 74 28 0a 20 20 76 6f 69 64 20  tmt_int(.  void 
108c0 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 20 20  * clientData,   
108d0 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 53   /* Pointer to S
108e0 51 4c 69 74 65 20 41 50 49 20 66 75 6e 63 74 69  QLite API functi
108f0 6f 6e 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64  on to be invoked
10900 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70   */.  Tcl_Interp
10910 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
10920 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
10930 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
10940 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
10950 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63 6f  *pStmt;.  int co
10960 6c 3b 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e 63  l;.  int (*xFunc
10970 29 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 2c  )(sqlite3_stmt*,
10980 20 69 6e 74 29 20 3d 20 63 6c 69 65 6e 74 44 61   int) = clientDa
10990 74 61 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  ta;..  if( objc!
109a0 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =3 ){.    Tcl_Ap
109b0 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
109c0 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
109d0 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
109e0 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74   .       Tcl_Get
109f0 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c  String(objv[0]),
10a00 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c   " STMT column",
10a10 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
10a20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
10a30 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
10a40 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
10a50 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
10a60 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72  1]), &pStmt) ) r
10a70 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
10a80 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e  .  if( Tcl_GetIn
10a90 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
10aa0 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20   objv[2], &col) 
10ab0 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
10ac0 4f 52 3b 0a 0a 20 20 54 63 6c 5f 53 65 74 4f 62  OR;..  Tcl_SetOb
10ad0 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
10ae0 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 78 46  Tcl_NewIntObj(xF
10af0 75 6e 63 28 70 53 74 6d 74 2c 20 63 6f 6c 29 29  unc(pStmt, col))
10b00 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
10b10 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53  OK;.}..#ifndef S
10b20 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 49 53 4b 49  QLITE_OMIT_DISKI
10b30 4f 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  O./*.** Usage:  
10b40 73 71 6c 69 74 65 33 4f 73 4f 70 65 6e 52 65 61  sqlite3OsOpenRea
10b50 64 57 72 69 74 65 20 3c 66 69 6c 65 6e 61 6d 65  dWrite <filename
10b60 3e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  >.*/.static int 
10b70 74 65 73 74 5f 73 71 6c 69 74 65 33 4f 73 4f 70  test_sqlite3OsOp
10b80 65 6e 52 65 61 64 57 72 69 74 65 28 0a 20 20 76  enReadWrite(.  v
10b90 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
10ba0 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
10bb0 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
10bc0 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
10bd0 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
10be0 20 4f 73 46 69 6c 65 20 2a 20 70 46 69 6c 65 3b   OsFile * pFile;
10bf0 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e 74  .  int rc;.  int
10c00 20 64 75 6d 6d 79 3b 0a 20 20 63 68 61 72 20 7a   dummy;.  char z
10c10 42 75 66 5b 31 30 30 5d 3b 0a 0a 20 20 69 66 28  Buf[100];..  if(
10c20 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20   objc!=2 ){.    
10c30 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
10c40 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
10c50 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
10c60 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54  e \"", .       T
10c70 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
10c80 76 5b 30 5d 29 2c 20 22 20 66 69 6c 65 6e 61 6d  v[0]), " filenam
10c90 65 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  e", 0);.    retu
10ca0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
10cb0 7d 0a 0a 20 20 70 46 69 6c 65 20 3d 20 73 71 6c  }..  pFile = sql
10cc0 69 74 65 4d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66  iteMalloc(sizeof
10cd0 28 4f 73 46 69 6c 65 29 29 3b 0a 20 20 72 63 20  (OsFile));.  rc 
10ce0 3d 20 73 71 6c 69 74 65 33 4f 73 4f 70 65 6e 52  = sqlite3OsOpenR
10cf0 65 61 64 57 72 69 74 65 28 54 63 6c 5f 47 65 74  eadWrite(Tcl_Get
10d00 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
10d10 20 70 46 69 6c 65 2c 20 26 64 75 6d 6d 79 29 3b   pFile, &dummy);
10d20 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
10d30 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69  E_OK ){.    sqli
10d40 74 65 46 72 65 65 28 70 46 69 6c 65 29 3b 0a 20  teFree(pFile);. 
10d50 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74     Tcl_SetResult
10d60 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a  (interp, (char *
10d70 29 65 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20  )errorName(rc), 
10d80 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  TCL_STATIC);.   
10d90 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
10da0 52 3b 0a 20 20 7d 0a 20 20 6d 61 6b 65 50 6f 69  R;.  }.  makePoi
10db0 6e 74 65 72 53 74 72 28 69 6e 74 65 72 70 2c 20  nterStr(interp, 
10dc0 7a 42 75 66 2c 20 70 46 69 6c 65 29 3b 0a 20 20  zBuf, pFile);.  
10dd0 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
10de0 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a  terp, zBuf, 0);.
10df0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
10e00 4f 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OR;.}../*.** Usa
10e10 67 65 3a 20 20 73 71 6c 69 74 65 33 4f 73 43 6c  ge:  sqlite3OsCl
10e20 6f 73 65 20 3c 66 69 6c 65 20 68 61 6e 64 6c 65  ose <file handle
10e30 3e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  >.*/.static int 
10e40 74 65 73 74 5f 73 71 6c 69 74 65 33 4f 73 43 6c  test_sqlite3OsCl
10e50 6f 73 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  ose(.  void * cl
10e60 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
10e70 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
10e80 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
10e90 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
10ea0 76 5b 5d 0a 29 7b 0a 20 20 4f 73 46 69 6c 65 20  v[].){.  OsFile 
10eb0 2a 20 70 46 69 6c 65 3b 0a 20 20 69 6e 74 20 72  * pFile;.  int r
10ec0 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  c;..  if( objc!=
10ed0 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  2 ){.    Tcl_App
10ee0 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
10ef0 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
10f00 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
10f10 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  .       Tcl_GetS
10f20 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20  tring(objv[0]), 
10f30 22 20 66 69 6c 65 68 61 6e 64 6c 65 22 2c 20 30  " filehandle", 0
10f40 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
10f50 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
10f60 69 66 28 20 67 65 74 46 69 6c 65 50 6f 69 6e 74  if( getFilePoint
10f70 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
10f80 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
10f90 29 2c 20 26 70 46 69 6c 65 29 20 29 7b 0a 20 20  ), &pFile) ){.  
10fa0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
10fb0 4f 52 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73  OR;.  }.  rc = s
10fc0 71 6c 69 74 65 33 4f 73 43 6c 6f 73 65 28 70 46  qlite3OsClose(pF
10fd0 69 6c 65 29 3b 0a 20 20 69 66 28 20 72 63 21 3d  ile);.  if( rc!=
10fe0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
10ff0 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69   Tcl_SetResult(i
11000 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 65  nterp, (char *)e
11010 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43  rrorName(rc), TC
11020 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 72  L_STATIC);.    r
11030 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
11040 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 46 72 65  .  }.  sqliteFre
11050 65 28 70 46 69 6c 65 29 3b 0a 20 20 72 65 74 75  e(pFile);.  retu
11060 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
11070 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
11080 74 65 33 4f 73 4c 6f 63 6b 20 3c 66 69 6c 65 20  te3OsLock <file 
11090 68 61 6e 64 6c 65 3e 20 3c 6c 6f 63 6b 74 79 70  handle> <locktyp
110a0 65 3e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  e>.*/.static int
110b0 20 74 65 73 74 5f 73 71 6c 69 74 65 33 4f 73 4c   test_sqlite3OsL
110c0 6f 63 6b 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  ock(.  void * cl
110d0 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
110e0 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
110f0 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
11100 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
11110 76 5b 5d 0a 29 7b 0a 20 20 4f 73 46 69 6c 65 20  v[].){.  OsFile 
11120 2a 20 70 46 69 6c 65 3b 0a 20 20 69 6e 74 20 72  * pFile;.  int r
11130 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  c;..  if( objc!=
11140 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  3 ){.    Tcl_App
11150 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
11160 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
11170 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
11180 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74  .        Tcl_Get
11190 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c  String(objv[0]),
111a0 20 0a 20 20 20 20 20 20 20 20 22 20 66 69 6c 65   .        " file
111b0 68 61 6e 64 6c 65 20 28 53 48 41 52 45 44 7c 52  handle (SHARED|R
111c0 45 53 45 52 56 45 44 7c 50 45 4e 44 49 4e 47 7c  ESERVED|PENDING|
111d0 45 58 43 4c 55 53 49 56 45 29 22 2c 20 30 29 3b  EXCLUSIVE)", 0);
111e0 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
111f0 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66  ERROR;.  }..  if
11200 28 20 67 65 74 46 69 6c 65 50 6f 69 6e 74 65 72  ( getFilePointer
11210 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
11220 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
11230 20 26 70 46 69 6c 65 29 20 29 7b 0a 20 20 20 20   &pFile) ){.    
11240 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
11250 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 30 3d 3d  ;.  }..  if( 0==
11260 73 74 72 63 6d 70 28 22 53 48 41 52 45 44 22 2c  strcmp("SHARED",
11270 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
11280 62 6a 76 5b 32 5d 29 29 20 29 7b 0a 20 20 20 20  bjv[2])) ){.    
11290 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 4c 6f  rc = sqlite3OsLo
112a0 63 6b 28 70 46 69 6c 65 2c 20 53 48 41 52 45 44  ck(pFile, SHARED
112b0 5f 4c 4f 43 4b 29 3b 0a 20 20 7d 0a 20 20 65 6c  _LOCK);.  }.  el
112c0 73 65 20 69 66 28 20 30 3d 3d 73 74 72 63 6d 70  se if( 0==strcmp
112d0 28 22 52 45 53 45 52 56 45 44 22 2c 20 54 63 6c  ("RESERVED", Tcl
112e0 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
112f0 32 5d 29 29 20 29 7b 0a 20 20 20 20 72 63 20 3d  2])) ){.    rc =
11300 20 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b 28 70   sqlite3OsLock(p
11310 46 69 6c 65 2c 20 52 45 53 45 52 56 45 44 5f 4c  File, RESERVED_L
11320 4f 43 4b 29 3b 0a 20 20 7d 0a 20 20 65 6c 73 65  OCK);.  }.  else
11330 20 69 66 28 20 30 3d 3d 73 74 72 63 6d 70 28 22   if( 0==strcmp("
11340 50 45 4e 44 49 4e 47 22 2c 20 54 63 6c 5f 47 65  PENDING", Tcl_Ge
11350 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29  tString(objv[2])
11360 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  ) ){.    rc = sq
11370 6c 69 74 65 33 4f 73 4c 6f 63 6b 28 70 46 69 6c  lite3OsLock(pFil
11380 65 2c 20 50 45 4e 44 49 4e 47 5f 4c 4f 43 4b 29  e, PENDING_LOCK)
11390 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66 28  ;.  }.  else if(
113a0 20 30 3d 3d 73 74 72 63 6d 70 28 22 45 58 43 4c   0==strcmp("EXCL
113b0 55 53 49 56 45 22 2c 20 54 63 6c 5f 47 65 74 53  USIVE", Tcl_GetS
113c0 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 29 20  tring(objv[2])) 
113d0 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
113e0 74 65 33 4f 73 4c 6f 63 6b 28 70 46 69 6c 65 2c  te3OsLock(pFile,
113f0 20 45 58 43 4c 55 53 49 56 45 5f 4c 4f 43 4b 29   EXCLUSIVE_LOCK)
11400 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 54  ;.  }else{.    T
11410 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
11420 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
11430 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
11440 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 20 54   \"", .        T
11450 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
11460 76 5b 30 5d 29 2c 20 0a 20 20 20 20 20 20 20 20  v[0]), .        
11470 22 20 66 69 6c 65 68 61 6e 64 6c 65 20 28 53 48  " filehandle (SH
11480 41 52 45 44 7c 52 45 53 45 52 56 45 44 7c 50 45  ARED|RESERVED|PE
11490 4e 44 49 4e 47 7c 45 58 43 4c 55 53 49 56 45 29  NDING|EXCLUSIVE)
114a0 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
114b0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
114c0 0a 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ..  if( rc!=SQLI
114d0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c  TE_OK ){.    Tcl
114e0 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
114f0 70 2c 20 28 63 68 61 72 20 2a 29 65 72 72 6f 72  p, (char *)error
11500 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54  Name(rc), TCL_ST
11510 41 54 49 43 29 3b 0a 20 20 20 20 72 65 74 75 72  ATIC);.    retur
11520 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
11530 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
11540 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
11550 3a 20 20 73 71 6c 69 74 65 33 4f 73 55 6e 6c 6f  :  sqlite3OsUnlo
11560 63 6b 20 3c 66 69 6c 65 20 68 61 6e 64 6c 65 3e  ck <file handle>
11570 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
11580 65 73 74 5f 73 71 6c 69 74 65 33 4f 73 55 6e 6c  est_sqlite3OsUnl
11590 6f 63 6b 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  ock(.  void * cl
115a0 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
115b0 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
115c0 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
115d0 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
115e0 76 5b 5d 0a 29 7b 0a 20 20 4f 73 46 69 6c 65 20  v[].){.  OsFile 
115f0 2a 20 70 46 69 6c 65 3b 0a 20 20 69 6e 74 20 72  * pFile;.  int r
11600 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  c;..  if( objc!=
11610 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  2 ){.    Tcl_App
11620 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
11630 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
11640 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
11650 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  .       Tcl_GetS
11660 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20  tring(objv[0]), 
11670 22 20 66 69 6c 65 68 61 6e 64 6c 65 22 2c 20 30  " filehandle", 0
11680 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
11690 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
116a0 69 66 28 20 67 65 74 46 69 6c 65 50 6f 69 6e 74  if( getFilePoint
116b0 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
116c0 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
116d0 29 2c 20 26 70 46 69 6c 65 29 20 29 7b 0a 20 20  ), &pFile) ){.  
116e0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
116f0 4f 52 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73  OR;.  }.  rc = s
11700 71 6c 69 74 65 33 4f 73 55 6e 6c 6f 63 6b 28 70  qlite3OsUnlock(p
11710 46 69 6c 65 2c 20 4e 4f 5f 4c 4f 43 4b 29 3b 0a  File, NO_LOCK);.
11720 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
11730 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53  _OK ){.    Tcl_S
11740 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
11750 20 28 63 68 61 72 20 2a 29 65 72 72 6f 72 4e 61   (char *)errorNa
11760 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54  me(rc), TCL_STAT
11770 49 43 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  IC);.    return 
11780 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
11790 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
117a0 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
117b0 20 73 71 6c 69 74 65 33 4f 73 54 65 6d 70 46 69   sqlite3OsTempFi
117c0 6c 65 4e 61 6d 65 0a 2a 2f 0a 73 74 61 74 69 63  leName.*/.static
117d0 20 69 6e 74 20 74 65 73 74 5f 73 71 6c 69 74 65   int test_sqlite
117e0 33 4f 73 54 65 6d 70 46 69 6c 65 4e 61 6d 65 28  3OsTempFileName(
117f0 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
11800 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
11810 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
11820 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
11830 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
11840 29 7b 0a 20 20 63 68 61 72 20 7a 46 69 6c 65 5b  ){.  char zFile[
11850 53 51 4c 49 54 45 5f 54 45 4d 50 4e 41 4d 45 5f  SQLITE_TEMPNAME_
11860 53 49 5a 45 5d 3b 0a 20 20 69 6e 74 20 72 63 3b  SIZE];.  int rc;
11870 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ..  rc = sqlite3
11880 4f 73 54 65 6d 70 46 69 6c 65 4e 61 6d 65 28 7a  OsTempFileName(z
11890 46 69 6c 65 29 3b 0a 20 20 69 66 28 20 72 63 21  File);.  if( rc!
118a0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
118b0 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28    Tcl_SetResult(
118c0 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29  interp, (char *)
118d0 65 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54  errorName(rc), T
118e0 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  CL_STATIC);.    
118f0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
11900 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 41 70 70 65  ;.  }.  Tcl_Appe
11910 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
11920 20 7a 46 69 6c 65 2c 20 30 29 3b 0a 20 20 72 65   zFile, 0);.  re
11930 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 23  turn TCL_OK;.}.#
11940 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  endif../*.** Usa
11950 67 65 3a 20 20 73 71 6c 69 74 65 5f 73 65 74 5f  ge:  sqlite_set_
11960 6d 61 67 69 63 20 20 44 42 20 20 4d 41 47 49 43  magic  DB  MAGIC
11970 2d 4e 55 4d 42 45 52 0a 2a 2a 0a 2a 2a 20 53 65  -NUMBER.**.** Se
11980 74 20 74 68 65 20 64 62 2d 3e 6d 61 67 69 63 20  t the db->magic 
11990 76 61 6c 75 65 2e 20 20 54 68 69 73 20 69 73 20  value.  This is 
119a0 75 73 65 64 20 74 6f 20 74 65 73 74 20 65 72 72  used to test err
119b0 6f 72 20 72 65 63 6f 76 65 72 79 20 6c 6f 67 69  or recovery logi
119c0 63 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  c..*/.static int
119d0 20 73 71 6c 69 74 65 5f 73 65 74 5f 6d 61 67 69   sqlite_set_magi
119e0 63 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  c(.  void * clie
119f0 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
11a00 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
11a10 69 6e 74 20 61 72 67 63 2c 0a 20 20 63 68 61 72  int argc,.  char
11a20 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 73 71 6c   **argv.){.  sql
11a30 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 66 28 20  ite3 *db;.  if( 
11a40 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54  argc!=3 ){.    T
11a50 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
11a60 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
11a70 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
11a80 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20   \"", argv[0],. 
11a90 20 20 20 20 20 20 20 20 22 20 44 42 20 4d 41 47          " DB MAG
11aa0 49 43 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  IC", 0);.    ret
11ab0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
11ac0 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f   }.  if( getDbPo
11ad0 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72  inter(interp, ar
11ae0 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65  gv[1], &db) ) re
11af0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
11b00 20 20 69 66 28 20 73 74 72 63 6d 70 28 61 72 67    if( strcmp(arg
11b10 76 5b 32 5d 2c 20 22 53 51 4c 49 54 45 5f 4d 41  v[2], "SQLITE_MA
11b20 47 49 43 5f 4f 50 45 4e 22 29 3d 3d 30 20 29 7b  GIC_OPEN")==0 ){
11b30 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d  .    db->magic =
11b40 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50   SQLITE_MAGIC_OP
11b50 45 4e 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  EN;.  }else if( 
11b60 73 74 72 63 6d 70 28 61 72 67 76 5b 32 5d 2c 20  strcmp(argv[2], 
11b70 22 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c  "SQLITE_MAGIC_CL
11b80 4f 53 45 44 22 29 3d 3d 30 20 29 7b 0a 20 20 20  OSED")==0 ){.   
11b90 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c   db->magic = SQL
11ba0 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44  ITE_MAGIC_CLOSED
11bb0 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74  ;.  }else if( st
11bc0 72 63 6d 70 28 61 72 67 76 5b 32 5d 2c 20 22 53  rcmp(argv[2], "S
11bd0 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59  QLITE_MAGIC_BUSY
11be0 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 64 62 2d  ")==0 ){.    db-
11bf0 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f  >magic = SQLITE_
11c00 4d 41 47 49 43 5f 42 55 53 59 3b 0a 20 20 7d 65  MAGIC_BUSY;.  }e
11c10 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 61  lse if( strcmp(a
11c20 72 67 76 5b 32 5d 2c 20 22 53 51 4c 49 54 45 5f  rgv[2], "SQLITE_
11c30 4d 41 47 49 43 5f 45 52 52 4f 52 22 29 3d 3d 30  MAGIC_ERROR")==0
11c40 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69   ){.    db->magi
11c50 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  c = SQLITE_MAGIC
11c60 5f 45 52 52 4f 52 3b 0a 20 20 7d 65 6c 73 65 20  _ERROR;.  }else 
11c70 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69  if( Tcl_GetInt(i
11c80 6e 74 65 72 70 2c 20 61 72 67 76 5b 32 5d 2c 20  nterp, argv[2], 
11c90 26 64 62 2d 3e 6d 61 67 69 63 29 20 29 7b 0a 20  &db->magic) ){. 
11ca0 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
11cb0 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  ROR;.  }.  retur
11cc0 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
11cd0 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
11ce0 65 33 5f 69 6e 74 65 72 72 75 70 74 20 20 44 42  e3_interrupt  DB
11cf0 20 0a 2a 2a 0a 2a 2a 20 54 72 69 67 67 65 72 20   .**.** Trigger 
11d00 61 6e 20 69 6e 74 65 72 72 75 70 74 20 6f 6e 20  an interrupt on 
11d10 44 42 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  DB.*/.static int
11d20 20 74 65 73 74 5f 69 6e 74 65 72 72 75 70 74 28   test_interrupt(
11d30 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
11d40 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
11d50 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
11d60 74 20 61 72 67 63 2c 0a 20 20 63 68 61 72 20 2a  t argc,.  char *
11d70 2a 61 72 67 76 0a 29 7b 0a 20 20 73 71 6c 69 74  *argv.){.  sqlit
11d80 65 33 20 2a 64 62 3b 0a 20 20 69 66 28 20 61 72  e3 *db;.  if( ar
11d90 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=2 ){.    Tcl
11da0 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
11db0 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
11dc0 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
11dd0 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 22 20 44  "", argv[0], " D
11de0 42 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  B", 0);.    retu
11df0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
11e00 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  }.  if( getDbPoi
11e10 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67  nter(interp, arg
11e20 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74  v[1], &db) ) ret
11e30 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
11e40 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
11e50 70 74 28 64 62 29 3b 0a 20 20 72 65 74 75 72 6e  pt(db);.  return
11e60 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 73 74 61 74   TCL_OK;.}..stat
11e70 69 63 20 75 38 20 2a 73 71 6c 69 74 65 33 5f 73  ic u8 *sqlite3_s
11e80 74 61 63 6b 5f 62 61 73 65 6c 69 6e 65 20 3d 20  tack_baseline = 
11e90 30 3b 0a 0a 2f 2a 0a 2a 2a 20 46 69 6c 6c 20 74  0;../*.** Fill t
11ea0 68 65 20 73 74 61 63 6b 20 77 69 74 68 20 61 20  he stack with a 
11eb0 6b 6e 6f 77 6e 20 62 69 74 70 61 74 74 65 72 6e  known bitpattern
11ec0 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
11ed0 20 70 72 65 70 53 74 61 63 6b 28 76 6f 69 64 29   prepStack(void)
11ee0 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 75 33 32  {.  int i;.  u32
11ef0 20 62 69 67 42 75 66 5b 36 35 35 33 36 5d 3b 0a   bigBuf[65536];.
11f00 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 73 69 7a    for(i=0; i<siz
11f10 65 6f 66 28 62 69 67 42 75 66 29 3b 20 69 2b 2b  eof(bigBuf); i++
11f20 29 20 62 69 67 42 75 66 5b 69 5d 20 3d 20 30 78  ) bigBuf[i] = 0x
11f30 64 65 61 64 62 65 65 66 3b 0a 20 20 73 71 6c 69  deadbeef;.  sqli
11f40 74 65 33 5f 73 74 61 63 6b 5f 62 61 73 65 6c 69  te3_stack_baseli
11f50 6e 65 20 3d 20 28 75 38 2a 29 26 62 69 67 42 75  ne = (u8*)&bigBu
11f60 66 5b 36 35 35 33 36 5d 3b 0a 7d 0a 0a 2f 2a 0a  f[65536];.}../*.
11f70 2a 2a 20 47 65 74 20 74 68 65 20 63 75 72 72 65  ** Get the curre
11f80 6e 74 20 73 74 61 63 6b 20 64 65 70 74 68 2e 20  nt stack depth. 
11f90 20 55 73 65 64 20 66 6f 72 20 64 65 62 75 67 67   Used for debugg
11fa0 69 6e 67 20 6f 6e 6c 79 2e 0a 2a 2f 0a 75 36 34  ing only..*/.u64
11fb0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 44 65 70   sqlite3StackDep
11fc0 74 68 28 76 6f 69 64 29 7b 0a 20 20 75 38 20 78  th(void){.  u8 x
11fd0 3b 0a 20 20 72 65 74 75 72 6e 20 28 75 36 34 29  ;.  return (u64)
11fe0 28 73 71 6c 69 74 65 33 5f 73 74 61 63 6b 5f 62  (sqlite3_stack_b
11ff0 61 73 65 6c 69 6e 65 20 2d 20 26 78 29 3b 0a 7d  aseline - &x);.}
12000 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
12010 73 71 6c 69 74 65 33 5f 73 74 61 63 6b 5f 75 73  sqlite3_stack_us
12020 65 64 20 44 42 20 53 51 4c 0a 2a 2a 0a 2a 2a 20  ed DB SQL.**.** 
12030 54 72 79 20 74 6f 20 6d 65 61 73 75 72 65 20 74  Try to measure t
12040 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20 73 74 61  he amount of sta
12050 63 6b 20 73 70 61 63 65 20 75 73 65 64 20 62 79  ck space used by
12060 20 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74   a call to sqlit
12070 65 33 5f 65 78 65 63 0a 2a 2f 0a 73 74 61 74 69  e3_exec.*/.stati
12080 63 20 69 6e 74 20 74 65 73 74 5f 73 74 61 63 6b  c int test_stack
12090 5f 75 73 65 64 28 0a 20 20 76 6f 69 64 20 2a 20  _used(.  void * 
120a0 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
120b0 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
120c0 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a 20 20  ,.  int argc,.  
120d0 63 68 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a 20  char **argv.){. 
120e0 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
120f0 69 6e 74 20 69 3b 0a 20 20 69 66 28 20 61 72 67  int i;.  if( arg
12100 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
12110 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
12120 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
12130 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
12140 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20  ", argv[0], .   
12150 20 20 20 20 20 22 20 44 42 20 53 51 4c 22 2c 20       " DB SQL", 
12160 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
12170 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
12180 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72  if( getDbPointer
12190 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d  (interp, argv[1]
121a0 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
121b0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 70 72 65  TCL_ERROR;.  pre
121c0 70 53 74 61 63 6b 28 29 3b 0a 20 20 73 71 6c 69  pStack();.  sqli
121d0 74 65 33 5f 65 78 65 63 28 64 62 2c 20 61 72 67  te3_exec(db, arg
121e0 76 5b 32 5d 2c 20 30 2c 20 30 2c 20 30 29 3b 0a  v[2], 0, 0, 0);.
121f0 20 20 66 6f 72 28 69 3d 36 35 35 33 35 3b 20 69    for(i=65535; i
12200 3e 3d 30 20 26 26 20 28 28 75 33 32 2a 29 73 71  >=0 && ((u32*)sq
12210 6c 69 74 65 33 5f 73 74 61 63 6b 5f 62 61 73 65  lite3_stack_base
12220 6c 69 6e 65 29 5b 2d 69 5d 3d 3d 30 78 64 65 61  line)[-i]==0xdea
12230 64 62 65 65 66 3b 20 69 2d 2d 29 7b 7d 0a 20 20  dbeef; i--){}.  
12240 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
12250 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
12260 49 6e 74 4f 62 6a 28 69 2a 34 29 29 3b 0a 20 20  IntObj(i*4));.  
12270 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
12280 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
12290 71 6c 69 74 65 5f 64 65 6c 65 74 65 5f 66 75 6e  qlite_delete_fun
122a0 63 74 69 6f 6e 20 44 42 20 66 75 6e 63 74 69 6f  ction DB functio
122b0 6e 2d 6e 61 6d 65 0a 2a 2a 0a 2a 2a 20 44 65 6c  n-name.**.** Del
122c0 65 74 65 20 74 68 65 20 75 73 65 72 20 66 75 6e  ete the user fun
122d0 63 74 69 6f 6e 20 27 66 75 6e 63 74 69 6f 6e 2d  ction 'function-
122e0 6e 61 6d 65 27 20 66 72 6f 6d 20 64 61 74 61 62  name' from datab
122f0 61 73 65 20 68 61 6e 64 6c 65 20 44 42 2e 20 49  ase handle DB. I
12300 74 0a 2a 2a 20 69 73 20 61 73 73 75 6d 65 64 20  t.** is assumed 
12310 74 68 61 74 20 74 68 65 20 75 73 65 72 20 66 75  that the user fu
12320 6e 63 74 69 6f 6e 20 77 61 73 20 63 72 65 61 74  nction was creat
12330 65 64 20 61 73 20 55 54 46 38 2c 20 61 6e 79 20  ed as UTF8, any 
12340 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 61 72 67  number of.** arg
12350 75 6d 65 6e 74 73 20 28 74 68 65 20 77 61 79 20  uments (the way 
12360 74 68 65 20 54 43 4c 20 69 6e 74 65 72 66 61 63  the TCL interfac
12370 65 20 64 6f 65 73 20 69 74 29 2e 0a 2a 2f 0a 73  e does it)..*/.s
12380 74 61 74 69 63 20 69 6e 74 20 64 65 6c 65 74 65  tatic int delete
12390 5f 66 75 6e 63 74 69 6f 6e 28 0a 20 20 76 6f 69  _function(.  voi
123a0 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
123b0 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
123c0 74 65 72 70 2c 0a 20 20 69 6e 74 20 61 72 67 63  terp,.  int argc
123d0 2c 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 0a  ,.  char **argv.
123e0 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 73  ){.  int rc;.  s
123f0 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 66  qlite3 *db;.  if
12400 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20  ( argc!=3 ){.   
12410 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
12420 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
12430 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
12440 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c  be \"", argv[0],
12450 20 0a 20 20 20 20 20 20 20 20 22 20 44 42 20 66   .        " DB f
12460 75 6e 63 74 69 6f 6e 2d 6e 61 6d 65 22 2c 20 30  unction-name", 0
12470 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
12480 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
12490 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
124a0 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c  interp, argv[1],
124b0 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
124c0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d  CL_ERROR;.  rc =
124d0 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
124e0 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 61 72 67  function(db, arg
124f0 76 5b 32 5d 2c 20 2d 31 2c 20 53 51 4c 49 54 45  v[2], -1, SQLITE
12500 5f 55 54 46 38 2c 20 30 2c 20 30 2c 20 30 2c 20  _UTF8, 0, 0, 0, 
12510 30 29 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65 73  0);.  Tcl_SetRes
12520 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61  ult(interp, (cha
12530 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72 63  r *)errorName(rc
12540 29 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a  ), TCL_STATIC);.
12550 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
12560 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
12570 20 73 71 6c 69 74 65 5f 64 65 6c 65 74 65 5f 63   sqlite_delete_c
12580 6f 6c 6c 61 74 69 6f 6e 20 44 42 20 63 6f 6c 6c  ollation DB coll
12590 61 74 69 6f 6e 2d 6e 61 6d 65 0a 2a 2a 0a 2a 2a  ation-name.**.**
125a0 20 44 65 6c 65 74 65 20 74 68 65 20 63 6f 6c 6c   Delete the coll
125b0 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 27  ation sequence '
125c0 63 6f 6c 6c 61 74 69 6f 6e 2d 6e 61 6d 65 27 20  collation-name' 
125d0 66 72 6f 6d 20 64 61 74 61 62 61 73 65 20 68 61  from database ha
125e0 6e 64 6c 65 20 0a 2a 2a 20 44 42 2e 20 49 74 20  ndle .** DB. It 
125f0 69 73 20 61 73 73 75 6d 65 64 20 74 68 61 74 20  is assumed that 
12600 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  the collation se
12610 71 75 65 6e 63 65 20 77 61 73 20 63 72 65 61 74  quence was creat
12620 65 64 20 61 73 20 55 54 46 38 20 28 74 68 65 20  ed as UTF8 (the 
12630 0a 2a 2a 20 77 61 79 20 74 68 65 20 54 43 4c 20  .** way the TCL 
12640 69 6e 74 65 72 66 61 63 65 20 64 6f 65 73 20 69  interface does i
12650 74 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  t)..*/.static in
12660 74 20 64 65 6c 65 74 65 5f 63 6f 6c 6c 61 74 69  t delete_collati
12670 6f 6e 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  on(.  void * cli
12680 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
12690 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
126a0 20 69 6e 74 20 61 72 67 63 2c 0a 20 20 63 68 61   int argc,.  cha
126b0 72 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 69 6e  r **argv.){.  in
126c0 74 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 20  t rc;.  sqlite3 
126d0 2a 64 62 3b 0a 20 20 69 66 28 20 61 72 67 63 21  *db;.  if( argc!
126e0 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =3 ){.    Tcl_Ap
126f0 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
12700 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
12710 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
12720 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20   argv[0], .     
12730 20 20 20 22 20 44 42 20 66 75 6e 63 74 69 6f 6e     " DB function
12740 2d 6e 61 6d 65 22 2c 20 30 29 3b 0a 20 20 20 20  -name", 0);.    
12750 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
12760 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44  ;.  }.  if( getD
12770 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  bPointer(interp,
12780 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29   argv[1], &db) )
12790 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
127a0 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  R;.  rc = sqlite
127b0 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69  3_create_collati
127c0 6f 6e 28 64 62 2c 20 61 72 67 76 5b 32 5d 2c 20  on(db, argv[2], 
127d0 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 20  SQLITE_UTF8, 0, 
127e0 30 29 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65 73  0);.  Tcl_SetRes
127f0 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61  ult(interp, (cha
12800 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72 63  r *)errorName(rc
12810 29 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a  ), TCL_STATIC);.
12820 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
12830 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
12840 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74   sqlite3_get_aut
12850 6f 63 6f 6d 6d 69 74 20 44 42 0a 2a 2a 0a 2a 2a  ocommit DB.**.**
12860 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20   Return true if 
12870 74 68 65 20 64 61 74 61 62 61 73 65 20 44 42 20  the database DB 
12880 69 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  is currently in 
12890 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 6d 6f 64 65  auto-commit mode
128a0 2e 0a 2a 2a 20 52 65 74 75 72 6e 20 66 61 6c 73  ..** Return fals
128b0 65 20 69 66 20 6e 6f 74 2e 0a 2a 2f 0a 73 74 61  e if not..*/.sta
128c0 74 69 63 20 69 6e 74 20 67 65 74 5f 61 75 74 6f  tic int get_auto
128d0 63 6f 6d 6d 69 74 28 0a 20 20 76 6f 69 64 20 2a  commit(.  void *
128e0 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
128f0 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
12900 70 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a 20  p,.  int argc,. 
12910 20 63 68 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a   char **argv.){.
12920 20 20 63 68 61 72 20 7a 42 75 66 5b 33 30 5d 3b    char zBuf[30];
12930 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a  .  sqlite3 *db;.
12940 20 20 69 66 28 20 61 72 67 63 21 3d 32 20 29 7b    if( argc!=2 ){
12950 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
12960 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
12970 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
12980 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76  uld be \"", argv
12990 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 20 22 20  [0], .        " 
129a0 44 42 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  DB", 0);.    ret
129b0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
129c0 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f   }.  if( getDbPo
129d0 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72  inter(interp, ar
129e0 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65  gv[1], &db) ) re
129f0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
12a00 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20    sprintf(zBuf, 
12a10 22 25 64 22 2c 20 73 71 6c 69 74 65 33 5f 67 65  "%d", sqlite3_ge
12a20 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 28 64 62 29  t_autocommit(db)
12a30 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  );.  Tcl_AppendR
12a40 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42  esult(interp, zB
12a50 75 66 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e  uf, 0);.  return
12a60 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
12a70 2a 20 55 73 61 67 65 3a 20 20 74 63 6c 5f 76 61  * Usage:  tcl_va
12a80 72 69 61 62 6c 65 5f 74 79 70 65 20 56 41 52 49  riable_type VARI
12a90 41 42 4c 45 4e 41 4d 45 0a 2a 2a 0a 2a 2a 20 52  ABLENAME.**.** R
12aa0 65 74 75 72 6e 20 74 68 65 20 6e 61 6d 65 20 6f  eturn the name o
12ab0 66 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  f the internal r
12ac0 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 66 6f  epresentation fo
12ad0 72 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f  r the.** value o
12ae0 66 20 74 68 65 20 67 69 76 65 6e 20 76 61 72 69  f the given vari
12af0 61 62 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  able..*/.static 
12b00 69 6e 74 20 74 63 6c 5f 76 61 72 69 61 62 6c 65  int tcl_variable
12b10 5f 74 79 70 65 28 0a 20 20 76 6f 69 64 20 2a 20  _type(.  void * 
12b20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
12b30 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
12b40 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
12b50 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
12b60 62 6a 76 5b 5d 0a 29 7b 0a 20 20 54 63 6c 5f 4f  bjv[].){.  Tcl_O
12b70 62 6a 20 2a 70 56 61 72 3b 0a 20 20 69 66 28 20  bj *pVar;.  if( 
12b80 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  objc!=2 ){.    T
12b90 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28  cl_WrongNumArgs(
12ba0 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c  interp, 1, objv,
12bb0 20 22 56 41 52 49 41 42 4c 45 22 29 3b 0a 20 20   "VARIABLE");.  
12bc0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
12bd0 4f 52 3b 0a 20 20 7d 0a 20 20 70 56 61 72 20 3d  OR;.  }.  pVar =
12be0 20 54 63 6c 5f 47 65 74 56 61 72 32 45 78 28 69   Tcl_GetVar2Ex(i
12bf0 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
12c00 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 30  ring(objv[1]), 0
12c10 2c 20 54 43 4c 5f 4c 45 41 56 45 5f 45 52 52 5f  , TCL_LEAVE_ERR_
12c20 4d 53 47 29 3b 0a 20 20 69 66 28 20 70 56 61 72  MSG);.  if( pVar
12c30 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 54 43 4c  ==0 ) return TCL
12c40 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 70 56  _ERROR;.  if( pV
12c50 61 72 2d 3e 74 79 70 65 50 74 72 20 29 7b 0a 20  ar->typePtr ){. 
12c60 20 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73     Tcl_SetObjRes
12c70 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
12c80 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 70 56 61  NewStringObj(pVa
12c90 72 2d 3e 74 79 70 65 50 74 72 2d 3e 6e 61 6d 65  r->typePtr->name
12ca0 2c 20 2d 31 29 29 3b 0a 20 20 7d 0a 20 20 72 65  , -1));.  }.  re
12cb0 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
12cc0 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69  /*.** This routi
12cd0 6e 65 20 73 65 74 73 20 65 6e 74 72 69 65 73 20  ne sets entries 
12ce0 69 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 3a 3a  in the global ::
12cf0 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 28 29  sqlite_options()
12d00 20 61 72 72 61 79 20 76 61 72 69 61 62 6c 65 0a   array variable.
12d10 2a 2a 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20  ** according to 
12d20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  the compile-time
12d30 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f   configuration o
12d40 66 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  f the database. 
12d50 20 54 65 73 74 0a 2a 2a 20 70 72 6f 63 65 64 75   Test.** procedu
12d60 72 65 73 20 75 73 65 20 74 68 69 73 20 74 6f 20  res use this to 
12d70 64 65 74 65 72 6d 69 6e 65 20 77 68 65 6e 20 74  determine when t
12d80 65 73 74 73 20 73 68 6f 75 6c 64 20 62 65 20 6f  ests should be o
12d90 6d 69 74 74 65 64 2e 0a 2a 2f 0a 73 74 61 74 69  mitted..*/.stati
12da0 63 20 76 6f 69 64 20 73 65 74 5f 6f 70 74 69 6f  c void set_optio
12db0 6e 73 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  ns(Tcl_Interp *i
12dc0 6e 74 65 72 70 29 7b 0a 23 69 66 64 65 66 20 53  nterp){.#ifdef S
12dd0 51 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f 57 49  QLITE_32BIT_ROWI
12de0 44 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  D.  Tcl_SetVar2(
12df0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
12e00 6f 70 74 69 6f 6e 73 22 2c 20 22 72 6f 77 69 64  options", "rowid
12e10 33 32 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  32", "1", TCL_GL
12e20 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
12e30 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  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 72 6f 77 69 64  options", "rowid
12e60 33 32 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  32", "0", TCL_GL
12e70 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
12e80 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
12e90 45 5f 43 41 53 45 5f 53 45 4e 53 49 54 49 56 45  E_CASE_SENSITIVE
12ea0 5f 4c 49 4b 45 0a 20 20 54 63 6c 5f 53 65 74 56  _LIKE.  Tcl_SetV
12eb0 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
12ec0 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 22 63 61  ite_options","ca
12ed0 73 65 73 65 6e 73 69 74 69 76 65 6c 69 6b 65 22  sesensitivelike"
12ee0 2c 22 31 22 2c 54 43 4c 5f 47 4c 4f 42 41 4c 5f  ,"1",TCL_GLOBAL_
12ef0 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
12f00 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
12f10 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
12f20 6e 73 22 2c 22 63 61 73 65 73 65 6e 73 69 74 69  ns","casesensiti
12f30 76 65 6c 69 6b 65 22 2c 22 30 22 2c 54 43 4c 5f  velike","0",TCL_
12f40 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
12f50 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
12f60 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53 0a  ITE_DISABLE_LFS.
12f70 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
12f80 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
12f90 74 69 6f 6e 73 22 2c 20 22 6c 66 73 22 2c 20 22  tions", "lfs", "
12fa0 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
12fb0 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
12fc0 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
12fd0 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
12fe0 73 22 2c 20 22 6c 66 73 22 2c 20 22 31 22 2c 20  s", "lfs", "1", 
12ff0 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
13000 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
13010 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54   SQLITE_OMIT_ALT
13020 45 52 54 41 42 4c 45 0a 20 20 54 63 6c 5f 53 65  ERTABLE.  Tcl_Se
13030 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
13040 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
13050 22 61 6c 74 65 72 74 61 62 6c 65 22 2c 20 22 30  "altertable", "0
13060 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
13070 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
13080 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
13090 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
130a0 22 2c 20 22 61 6c 74 65 72 74 61 62 6c 65 22 2c  ", "altertable",
130b0 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
130c0 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
130d0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
130e0 49 54 5f 41 4e 41 4c 59 5a 45 0a 20 20 54 63 6c  IT_ANALYZE.  Tcl
130f0 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
13100 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
13110 22 2c 20 22 61 6e 61 6c 79 7a 65 22 2c 20 22 30  ", "analyze", "0
13120 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
13130 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
13140 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
13150 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
13160 22 2c 20 22 61 6e 61 6c 79 7a 65 22 2c 20 22 31  ", "analyze", "1
13170 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
13180 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
13190 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
131a0 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20  AUTHORIZATION.  
131b0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
131c0 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
131d0 6f 6e 73 22 2c 20 22 61 75 74 68 22 2c 20 22 30  ons", "auth", "0
131e0 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
131f0 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
13200 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
13210 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
13220 22 2c 20 22 61 75 74 68 22 2c 20 22 31 22 2c 20  ", "auth", "1", 
13230 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
13240 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
13250 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
13260 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 54 63 6c  OINCREMENT.  Tcl
13270 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
13280 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
13290 22 2c 20 22 61 75 74 6f 69 6e 63 22 2c 20 22 30  ", "autoinc", "0
132a0 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
132b0 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
132c0 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
132d0 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
132e0 22 2c 20 22 61 75 74 6f 69 6e 63 22 2c 20 22 31  ", "autoinc", "1
132f0 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
13300 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
13310 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
13320 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 54 63 6c  AUTOVACUUM.  Tcl
13330 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
13340 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
13350 22 2c 20 22 61 75 74 6f 76 61 63 75 75 6d 22 2c  ", "autovacuum",
13360 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
13370 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
13380 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
13390 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
133a0 6f 6e 73 22 2c 20 22 61 75 74 6f 76 61 63 75 75  ons", "autovacuu
133b0 6d 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  m", "1", TCL_GLO
133c0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
133d0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
133e0 5f 41 55 54 4f 56 41 43 55 55 4d 20 2a 2f 0a 23  _AUTOVACUUM */.#
133f0 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
13400 54 45 5f 44 45 46 41 55 4c 54 5f 41 55 54 4f 56  TE_DEFAULT_AUTOV
13410 41 43 55 55 4d 29 20 7c 7c 20 53 51 4c 49 54 45  ACUUM) || SQLITE
13420 5f 44 45 46 41 55 4c 54 5f 41 55 54 4f 56 41 43  _DEFAULT_AUTOVAC
13430 55 55 4d 3d 3d 30 0a 20 20 54 63 6c 5f 53 65 74  UUM==0.  Tcl_Set
13440 56 61 72 32 28 69 6e 74 65 72 70 2c 22 73 71 6c  Var2(interp,"sql
13450 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 22 64 65  ite_options","de
13460 66 61 75 6c 74 5f 61 75 74 6f 76 61 63 75 75 6d  fault_autovacuum
13470 22 2c 22 30 22 2c 54 43 4c 5f 47 4c 4f 42 41 4c  ","0",TCL_GLOBAL
13480 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
13490 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
134a0 72 70 2c 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  rp,"sqlite_optio
134b0 6e 73 22 2c 22 64 65 66 61 75 6c 74 5f 61 75 74  ns","default_aut
134c0 6f 76 61 63 75 75 6d 22 2c 22 31 22 2c 54 43 4c  ovacuum","1",TCL
134d0 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
134e0 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
134f0 4c 49 54 45 5f 4f 4d 49 54 5f 42 45 54 57 45 45  LITE_OMIT_BETWEE
13500 4e 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 0a 20  N_OPTIMIZATION. 
13510 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
13520 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
13530 69 6f 6e 73 22 2c 20 22 62 65 74 77 65 65 6e 5f  ions", "between_
13540 6f 70 74 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  opt", "0", TCL_G
13550 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
13560 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
13570 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
13580 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 62 65 74 77  _options", "betw
13590 65 65 6e 5f 6f 70 74 22 2c 20 22 31 22 2c 20 54  een_opt", "1", T
135a0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
135b0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
135c0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 4c 4f 42  SQLITE_OMIT_BLOB
135d0 5f 4c 49 54 45 52 41 4c 0a 20 20 54 63 6c 5f 53  _LITERAL.  Tcl_S
135e0 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
135f0 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
13600 20 22 62 6c 6f 62 6c 69 74 22 2c 20 22 30 22 2c   "bloblit", "0",
13610 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
13620 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
13630 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
13640 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
13650 20 22 62 6c 6f 62 6c 69 74 22 2c 20 22 31 22 2c   "bloblit", "1",
13660 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
13670 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
13680 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41  f SQLITE_OMIT_CA
13690 53 54 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  ST.  Tcl_SetVar2
136a0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
136b0 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63 61 73 74  _options", "cast
136c0 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
136d0 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
136e0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
136f0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
13700 74 69 6f 6e 73 22 2c 20 22 63 61 73 74 22 2c 20  tions", "cast", 
13710 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
13720 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
13730 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
13740 54 5f 43 48 45 43 4b 0a 20 20 54 63 6c 5f 53 65  T_CHECK.  Tcl_Se
13750 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
13760 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
13770 22 63 68 65 63 6b 22 2c 20 22 30 22 2c 20 54 43  "check", "0", TC
13780 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
13790 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
137a0 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
137b0 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63  ite_options", "c
137c0 68 65 63 6b 22 2c 20 22 31 22 2c 20 54 43 4c 5f  heck", "1", TCL_
137d0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
137e0 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
137f0 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 4c 45 54  ITE_OMIT_COMPLET
13800 45 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  E.  Tcl_SetVar2(
13810 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
13820 6f 70 74 69 6f 6e 73 22 2c 20 22 63 6f 6d 70 6c  options", "compl
13830 65 74 65 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  ete", "0", TCL_G
13840 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
13850 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
13860 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
13870 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63 6f 6d 70  _options", "comp
13880 6c 65 74 65 22 2c 20 22 31 22 2c 20 54 43 4c 5f  lete", "1", TCL_
13890 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
138a0 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
138b0 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 4f 55 4e  ITE_OMIT_COMPOUN
138c0 44 5f 53 45 4c 45 43 54 0a 20 20 54 63 6c 5f 53  D_SELECT.  Tcl_S
138d0 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
138e0 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
138f0 20 22 63 6f 6d 70 6f 75 6e 64 22 2c 20 22 30 22   "compound", "0"
13900 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
13910 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
13920 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
13930 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
13940 2c 20 22 63 6f 6d 70 6f 75 6e 64 22 2c 20 22 31  , "compound", "1
13950 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
13960 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
13970 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
13980 43 4f 4e 46 4c 49 43 54 5f 43 4c 41 55 53 45 0a  CONFLICT_CLAUSE.
13990 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
139a0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
139b0 74 69 6f 6e 73 22 2c 20 22 63 6f 6e 66 6c 69 63  tions", "conflic
139c0 74 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  t", "0", TCL_GLO
139d0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
139e0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
139f0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
13a00 70 74 69 6f 6e 73 22 2c 20 22 63 6f 6e 66 6c 69  ptions", "confli
13a10 63 74 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  ct", "1", TCL_GL
13a20 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
13a30 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
13a40 45 5f 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f  E_OMIT_DATETIME_
13a50 46 55 4e 43 53 0a 20 20 54 63 6c 5f 53 65 74 56  FUNCS.  Tcl_SetV
13a60 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
13a70 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 64  ite_options", "d
13a80 61 74 65 74 69 6d 65 22 2c 20 22 30 22 2c 20 54  atetime", "0", T
13a90 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
13aa0 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
13ab0 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
13ac0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
13ad0 64 61 74 65 74 69 6d 65 22 2c 20 22 31 22 2c 20  datetime", "1", 
13ae0 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
13af0 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
13b00 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 49 53   SQLITE_OMIT_DIS
13b10 4b 49 4f 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  KIO.  Tcl_SetVar
13b20 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
13b30 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 64 69 73  e_options", "dis
13b40 6b 69 6f 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  kio", "0", TCL_G
13b50 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
13b60 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
13b70 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
13b80 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 64 69 73 6b  _options", "disk
13b90 69 6f 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  io", "1", TCL_GL
13ba0 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
13bb0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
13bc0 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20  E_OMIT_EXPLAIN. 
13bd0 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
13be0 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
13bf0 69 6f 6e 73 22 2c 20 22 65 78 70 6c 61 69 6e 22  ions", "explain"
13c00 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
13c10 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
13c20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
13c30 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
13c40 69 6f 6e 73 22 2c 20 22 65 78 70 6c 61 69 6e 22  ions", "explain"
13c50 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
13c60 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
13c70 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
13c80 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
13c90 4e 54 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  NT.  Tcl_SetVar2
13ca0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
13cb0 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 66 6c 6f 61  _options", "floa
13cc0 74 69 6e 67 70 6f 69 6e 74 22 2c 20 22 30 22 2c  tingpoint", "0",
13cd0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
13ce0 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
13cf0 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
13d00 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
13d10 20 22 66 6c 6f 61 74 69 6e 67 70 6f 69 6e 74 22   "floatingpoint"
13d20 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
13d30 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
13d40 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
13d50 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a  MIT_FOREIGN_KEY.
13d60 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
13d70 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
13d80 74 69 6f 6e 73 22 2c 20 22 66 6f 72 65 69 67 6e  tions", "foreign
13d90 6b 65 79 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  key", "0", TCL_G
13da0 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
13db0 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
13dc0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
13dd0 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 66 6f 72 65  _options", "fore
13de0 69 67 6e 6b 65 79 22 2c 20 22 31 22 2c 20 54 43  ignkey", "1", TC
13df0 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
13e00 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
13e10 51 4c 49 54 45 5f 4f 4d 49 54 5f 47 4c 4f 42 41  QLITE_OMIT_GLOBA
13e20 4c 52 45 43 4f 56 45 52 0a 20 20 54 63 6c 5f 53  LRECOVER.  Tcl_S
13e30 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
13e40 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
13e50 20 22 67 6c 6f 62 61 6c 72 65 63 6f 76 65 72 22   "globalrecover"
13e60 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
13e70 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
13e80 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
13e90 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
13ea0 69 6f 6e 73 22 2c 20 22 67 6c 6f 62 61 6c 72 65  ions", "globalre
13eb0 63 6f 76 65 72 22 2c 20 22 31 22 2c 20 54 43 4c  cover", "1", TCL
13ec0 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
13ed0 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
13ee0 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52  LITE_OMIT_INTEGR
13ef0 49 54 59 5f 43 48 45 43 4b 0a 20 20 54 63 6c 5f  ITY_CHECK.  Tcl_
13f00 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
13f10 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
13f20 2c 20 22 69 6e 74 65 67 72 69 74 79 63 6b 22 2c  , "integrityck",
13f30 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
13f40 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
13f50 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
13f60 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
13f70 6f 6e 73 22 2c 20 22 69 6e 74 65 67 72 69 74 79  ons", "integrity
13f80 63 6b 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  ck", "1", TCL_GL
13f90 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
13fa0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
13fb0 45 5f 4f 4d 49 54 5f 4c 49 4b 45 5f 4f 50 54 49  E_OMIT_LIKE_OPTI
13fc0 4d 49 5a 41 54 49 4f 4e 0a 20 20 54 63 6c 5f 53  MIZATION.  Tcl_S
13fd0 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
13fe0 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
13ff0 20 22 6c 69 6b 65 5f 6f 70 74 22 2c 20 22 30 22   "like_opt", "0"
14000 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
14010 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
14020 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
14030 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
14040 2c 20 22 6c 69 6b 65 5f 6f 70 74 22 2c 20 22 31  , "like_opt", "1
14050 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
14060 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
14070 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
14080 4d 45 4d 4f 52 59 44 42 0a 20 20 54 63 6c 5f 53  MEMORYDB.  Tcl_S
14090 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
140a0 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
140b0 20 22 6d 65 6d 6f 72 79 64 62 22 2c 20 22 30 22   "memorydb", "0"
140c0 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
140d0 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
140e0 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
140f0 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
14100 2c 20 22 6d 65 6d 6f 72 79 64 62 22 2c 20 22 31  , "memorydb", "1
14110 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
14120 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
14130 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
14140 4f 52 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 0a  OR_OPTIMIZATION.
14150 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
14160 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
14170 74 69 6f 6e 73 22 2c 20 22 6f 72 5f 6f 70 74 22  tions", "or_opt"
14180 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
14190 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
141a0 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
141b0 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
141c0 69 6f 6e 73 22 2c 20 22 6f 72 5f 6f 70 74 22 2c  ions", "or_opt",
141d0 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
141e0 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
141f0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
14200 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
14210 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
14220 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
14230 70 74 69 6f 6e 73 22 2c 20 22 70 61 67 65 72 5f  ptions", "pager_
14240 70 72 61 67 6d 61 73 22 2c 20 22 30 22 2c 20 54  pragmas", "0", T
14250 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
14260 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
14270 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
14280 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
14290 70 61 67 65 72 5f 70 72 61 67 6d 61 73 22 2c 20  pager_pragmas", 
142a0 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
142b0 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
142c0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
142d0 54 5f 50 41 52 53 45 52 0a 20 20 54 63 6c 5f 53  T_PARSER.  Tcl_S
142e0 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
142f0 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
14300 20 22 70 61 72 73 65 72 22 2c 20 22 30 22 2c 20   "parser", "0", 
14310 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
14320 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
14330 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
14340 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
14350 22 70 61 72 73 65 72 22 2c 20 22 31 22 2c 20 54  "parser", "1", T
14360 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
14370 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66  .#endif..#if def
14380 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
14390 5f 50 52 41 47 4d 41 29 20 7c 7c 20 64 65 66 69  _PRAGMA) || defi
143a0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
143b0 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 20 20  FLAG_PRAGMAS).  
143c0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
143d0 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
143e0 6f 6e 73 22 2c 20 22 70 72 61 67 6d 61 22 2c 20  ons", "pragma", 
143f0 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
14400 4f 4e 4c 59 29 3b 0a 20 20 54 63 6c 5f 53 65 74  ONLY);.  Tcl_Set
14410 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
14420 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
14430 69 6e 74 65 67 72 69 74 79 63 6b 22 2c 20 22 30  integrityck", "0
14440 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
14450 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
14460 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
14470 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
14480 22 2c 20 22 70 72 61 67 6d 61 22 2c 20 22 31 22  ", "pragma", "1"
14490 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
144a0 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  Y);.#endif..#ifd
144b0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
144c0 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
144d0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
144e0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
144f0 70 74 69 6f 6e 73 22 2c 20 22 70 72 6f 67 72 65  ptions", "progre
14500 73 73 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  ss", "0", TCL_GL
14510 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
14520 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
14530 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
14540 6f 70 74 69 6f 6e 73 22 2c 20 22 70 72 6f 67 72  options", "progr
14550 65 73 73 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47  ess", "1", TCL_G
14560 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
14570 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
14580 54 45 5f 4f 4d 49 54 5f 52 45 49 4e 44 45 58 0a  TE_OMIT_REINDEX.
14590 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
145a0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
145b0 74 69 6f 6e 73 22 2c 20 22 72 65 69 6e 64 65 78  tions", "reindex
145c0 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
145d0 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
145e0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
145f0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
14600 74 69 6f 6e 73 22 2c 20 22 72 65 69 6e 64 65 78  tions", "reindex
14610 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
14620 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
14630 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
14640 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41 47  OMIT_SCHEMA_PRAG
14650 4d 41 53 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  MAS.  Tcl_SetVar
14660 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
14670 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 73 63 68  e_options", "sch
14680 65 6d 61 5f 70 72 61 67 6d 61 73 22 2c 20 22 30  ema_pragmas", "0
14690 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
146a0 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
146b0 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
146c0 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
146d0 22 2c 20 22 73 63 68 65 6d 61 5f 70 72 61 67 6d  ", "schema_pragm
146e0 61 73 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  as", "1", TCL_GL
146f0 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
14700 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
14710 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45  E_OMIT_SCHEMA_VE
14720 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 0a 20 20  RSION_PRAGMAS.  
14730 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
14740 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
14750 6f 6e 73 22 2c 20 22 73 63 68 65 6d 61 5f 76 65  ons", "schema_ve
14760 72 73 69 6f 6e 22 2c 20 22 30 22 2c 20 54 43 4c  rsion", "0", TCL
14770 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
14780 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
14790 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
147a0 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 73 63  te_options", "sc
147b0 68 65 6d 61 5f 76 65 72 73 69 6f 6e 22 2c 20 22  hema_version", "
147c0 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
147d0 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
147e0 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
147f0 5f 53 55 42 51 55 45 52 59 0a 20 20 54 63 6c 5f  _SUBQUERY.  Tcl_
14800 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
14810 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
14820 2c 20 22 73 75 62 71 75 65 72 79 22 2c 20 22 30  , "subquery", "0
14830 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
14840 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
14850 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
14860 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
14870 22 2c 20 22 73 75 62 71 75 65 72 79 22 2c 20 22  ", "subquery", "
14880 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
14890 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
148a0 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
148b0 5f 54 43 4c 5f 56 41 52 49 41 42 4c 45 0a 20 20  _TCL_VARIABLE.  
148c0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
148d0 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
148e0 6f 6e 73 22 2c 20 22 74 63 6c 76 61 72 22 2c 20  ons", "tclvar", 
148f0 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
14900 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
14910 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
14920 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
14930 6e 73 22 2c 20 22 74 63 6c 76 61 72 22 2c 20 22  ns", "tclvar", "
14940 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
14950 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
14960 66 20 64 65 66 69 6e 65 64 28 54 48 52 45 41 44  f defined(THREAD
14970 53 41 46 45 29 20 26 26 20 54 48 52 45 41 44 53  SAFE) && THREADS
14980 41 46 45 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  AFE.  Tcl_SetVar
14990 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
149a0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 74 68 72  e_options", "thr
149b0 65 61 64 73 61 66 65 22 2c 20 22 31 22 2c 20 54  eadsafe", "1", T
149c0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
149d0 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
149e0 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
149f0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
14a00 74 68 72 65 61 64 73 61 66 65 22 2c 20 22 30 22  threadsafe", "0"
14a10 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
14a20 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  Y);.#endif..#ifd
14a30 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
14a40 52 41 43 45 0a 20 20 54 63 6c 5f 53 65 74 56 61  RACE.  Tcl_SetVa
14a50 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
14a60 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 74 72  te_options", "tr
14a70 61 63 65 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  ace", "0", TCL_G
14a80 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
14a90 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
14aa0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
14ab0 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 74 72 61 63  _options", "trac
14ac0 65 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  e", "1", TCL_GLO
14ad0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
14ae0 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
14af0 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20  _OMIT_TRIGGER.  
14b00 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
14b10 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
14b20 6f 6e 73 22 2c 20 22 74 72 69 67 67 65 72 22 2c  ons", "trigger",
14b30 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
14b40 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
14b50 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
14b60 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
14b70 6f 6e 73 22 2c 20 22 74 72 69 67 67 65 72 22 2c  ons", "trigger",
14b80 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
14b90 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
14ba0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
14bb0 49 54 5f 54 45 4d 50 44 42 0a 20 20 54 63 6c 5f  IT_TEMPDB.  Tcl_
14bc0 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
14bd0 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
14be0 2c 20 22 74 65 6d 70 64 62 22 2c 20 22 30 22 2c  , "tempdb", "0",
14bf0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
14c00 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
14c10 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
14c20 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
14c30 20 22 74 65 6d 70 64 62 22 2c 20 22 31 22 2c 20   "tempdb", "1", 
14c40 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
14c50 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
14c60 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
14c70 31 36 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  16.  Tcl_SetVar2
14c80 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
14c90 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 75 74 66 31  _options", "utf1
14ca0 36 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  6", "0", TCL_GLO
14cb0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
14cc0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
14cd0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
14ce0 70 74 69 6f 6e 73 22 2c 20 22 75 74 66 31 36 22  ptions", "utf16"
14cf0 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
14d00 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
14d10 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
14d20 4d 49 54 5f 56 41 43 55 55 4d 0a 20 20 54 63 6c  MIT_VACUUM.  Tcl
14d30 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
14d40 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
14d50 22 2c 20 22 76 61 63 75 75 6d 22 2c 20 22 30 22  ", "vacuum", "0"
14d60 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
14d70 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
14d80 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
14d90 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
14da0 2c 20 22 76 61 63 75 75 6d 22 2c 20 22 31 22 2c  , "vacuum", "1",
14db0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
14dc0 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
14dd0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
14de0 45 57 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  EW.  Tcl_SetVar2
14df0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
14e00 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 76 69 65 77  _options", "view
14e10 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
14e20 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
14e30 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
14e40 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
14e50 74 69 6f 6e 73 22 2c 20 22 76 69 65 77 22 2c 20  tions", "view", 
14e60 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
14e70 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 7d 0a  ONLY);.#endif.}.
14e80 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  ./*.** Register 
14e90 63 6f 6d 6d 61 6e 64 73 20 77 69 74 68 20 74 68  commands with th
14ea0 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
14eb0 72 2e 0a 2a 2f 0a 69 6e 74 20 53 71 6c 69 74 65  r..*/.int Sqlite
14ec0 74 65 73 74 31 5f 49 6e 69 74 28 54 63 6c 5f 49  test1_Init(Tcl_I
14ed0 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 29 7b 0a  nterp *interp){.
14ee0 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c    extern int sql
14ef0 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e  ite3_search_coun
14f00 74 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20  t;.  extern int 
14f10 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
14f20 74 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72  t_count;.  exter
14f30 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6f 70  n int sqlite3_op
14f40 65 6e 5f 66 69 6c 65 5f 63 6f 75 6e 74 3b 0a 20  en_file_count;. 
14f50 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69   extern int sqli
14f60 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 3b 0a  te3_sort_count;.
14f70 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c    extern int sql
14f80 69 74 65 33 5f 63 75 72 72 65 6e 74 5f 74 69 6d  ite3_current_tim
14f90 65 3b 0a 20 20 73 74 61 74 69 63 20 73 74 72 75  e;.  static stru
14fa0 63 74 20 7b 0a 20 20 20 20 20 63 68 61 72 20 2a  ct {.     char *
14fb0 7a 4e 61 6d 65 3b 0a 20 20 20 20 20 54 63 6c 5f  zName;.     Tcl_
14fc0 43 6d 64 50 72 6f 63 20 2a 78 50 72 6f 63 3b 0a  CmdProc *xProc;.
14fd0 20 20 7d 20 61 43 6d 64 5b 5d 20 3d 20 7b 0a 20    } aCmd[] = {. 
14fe0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d      { "sqlite3_m
14ff0 70 72 69 6e 74 66 5f 69 6e 74 22 2c 20 20 20 20  printf_int",    
15000 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
15010 72 6f 63 2a 29 73 71 6c 69 74 65 33 5f 6d 70 72  roc*)sqlite3_mpr
15020 69 6e 74 66 5f 69 6e 74 20 20 20 20 7d 2c 0a 20  intf_int    },. 
15030 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d      { "sqlite3_m
15040 70 72 69 6e 74 66 5f 69 6e 74 36 34 22 2c 20 20  printf_int64",  
15050 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
15060 72 6f 63 2a 29 73 71 6c 69 74 65 33 5f 6d 70 72  roc*)sqlite3_mpr
15070 69 6e 74 66 5f 69 6e 74 36 34 20 20 7d 2c 0a 20  intf_int64  },. 
15080 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d      { "sqlite3_m
15090 70 72 69 6e 74 66 5f 73 74 72 22 2c 20 20 20 20  printf_str",    
150a0 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
150b0 72 6f 63 2a 29 73 71 6c 69 74 65 33 5f 6d 70 72  roc*)sqlite3_mpr
150c0 69 6e 74 66 5f 73 74 72 20 20 20 20 7d 2c 0a 20  intf_str    },. 
150d0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d      { "sqlite3_m
150e0 70 72 69 6e 74 66 5f 73 74 72 6f 6e 6c 79 22 2c  printf_stronly",
150f0 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
15100 72 6f 63 2a 29 73 71 6c 69 74 65 33 5f 6d 70 72  roc*)sqlite3_mpr
15110 69 6e 74 66 5f 73 74 72 6f 6e 6c 79 7d 2c 0a 20  intf_stronly},. 
15120 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d      { "sqlite3_m
15130 70 72 69 6e 74 66 5f 64 6f 75 62 6c 65 22 2c 20  printf_double", 
15140 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
15150 72 6f 63 2a 29 73 71 6c 69 74 65 33 5f 6d 70 72  roc*)sqlite3_mpr
15160 69 6e 74 66 5f 64 6f 75 62 6c 65 20 7d 2c 0a 20  intf_double },. 
15170 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d      { "sqlite3_m
15180 70 72 69 6e 74 66 5f 73 63 61 6c 65 64 22 2c 20  printf_scaled", 
15190 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
151a0 72 6f 63 2a 29 73 71 6c 69 74 65 33 5f 6d 70 72  roc*)sqlite3_mpr
151b0 69 6e 74 66 5f 73 63 61 6c 65 64 20 7d 2c 0a 20  intf_scaled },. 
151c0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d      { "sqlite3_m
151d0 70 72 69 6e 74 66 5f 68 65 78 64 6f 75 62 6c 65  printf_hexdouble
151e0 22 2c 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f  ",   (Tcl_CmdPro
151f0 63 2a 29 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  c*)sqlite3_mprin
15200 74 66 5f 68 65 78 64 6f 75 62 6c 65 7d 2c 0a 20  tf_hexdouble},. 
15210 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d      { "sqlite3_m
15220 70 72 69 6e 74 66 5f 7a 5f 74 65 73 74 22 2c 20  printf_z_test", 
15230 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
15240 72 6f 63 2a 29 74 65 73 74 5f 6d 70 72 69 6e 74  roc*)test_mprint
15250 66 5f 7a 20 20 20 20 20 20 20 20 7d 2c 0a 20 20  f_z        },.  
15260 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6c 61     { "sqlite3_la
15270 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 22  st_insert_rowid"
15280 2c 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72  ,     (Tcl_CmdPr
15290 6f 63 2a 29 74 65 73 74 5f 6c 61 73 74 5f 72 6f  oc*)test_last_ro
152a0 77 69 64 20 20 20 20 20 20 20 7d 2c 0a 20 20 20  wid       },.   
152b0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 78 65    { "sqlite3_exe
152c0 63 5f 70 72 69 6e 74 66 22 2c 20 20 20 20 20 20  c_printf",      
152d0 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f       (Tcl_CmdPro
152e0 63 2a 29 74 65 73 74 5f 65 78 65 63 5f 70 72 69  c*)test_exec_pri
152f0 6e 74 66 20 20 20 20 20 20 7d 2c 0a 20 20 20 20  ntf      },.    
15300 20 7b 20 22 73 71 6c 69 74 65 33 5f 67 65 74 5f   { "sqlite3_get_
15310 74 61 62 6c 65 5f 70 72 69 6e 74 66 22 2c 20 20  table_printf",  
15320 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63      (Tcl_CmdProc
15330 2a 29 74 65 73 74 5f 67 65 74 5f 74 61 62 6c 65  *)test_get_table
15340 5f 70 72 69 6e 74 66 20 7d 2c 0a 20 20 20 20 20  _printf },.     
15350 7b 20 22 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65  { "sqlite3_close
15360 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ",              
15370 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
15380 29 73 71 6c 69 74 65 5f 74 65 73 74 5f 63 6c 6f  )sqlite_test_clo
15390 73 65 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b  se     },.     {
153a0 20 22 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65   "sqlite3_create
153b0 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 20 20 20 20  _function",     
153c0 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29    (Tcl_CmdProc*)
153d0 74 65 73 74 5f 63 72 65 61 74 65 5f 66 75 6e 63  test_create_func
153e0 74 69 6f 6e 20 20 7d 2c 0a 20 20 20 20 20 7b 20  tion  },.     { 
153f0 22 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  "sqlite3_create_
15400 61 67 67 72 65 67 61 74 65 22 2c 20 20 20 20 20  aggregate",     
15410 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74   (Tcl_CmdProc*)t
15420 65 73 74 5f 63 72 65 61 74 65 5f 61 67 67 72 65  est_create_aggre
15430 67 61 74 65 20 7d 2c 0a 20 20 20 20 20 7b 20 22  gate },.     { "
15440 73 71 6c 69 74 65 5f 72 65 67 69 73 74 65 72 5f  sqlite_register_
15450 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20  test_function", 
15460 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65  (Tcl_CmdProc*)te
15470 73 74 5f 72 65 67 69 73 74 65 72 5f 66 75 6e 63  st_register_func
15480 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73      },.     { "s
15490 71 6c 69 74 65 5f 61 62 6f 72 74 22 2c 20 20 20  qlite_abort",   
154a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
154b0 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c  Tcl_CmdProc*)sql
154c0 69 74 65 5f 61 62 6f 72 74 20 20 20 20 20 20 20  ite_abort       
154d0 20 20 20 7d 2c 0a 23 69 66 64 65 66 20 53 51 4c     },.#ifdef SQL
154e0 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 20  ITE_MEMDEBUG.   
154f0 20 20 7b 20 22 73 71 6c 69 74 65 5f 6d 61 6c 6c    { "sqlite_mall
15500 6f 63 5f 66 61 69 6c 22 2c 20 20 20 20 20 20 20  oc_fail",       
15510 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f       (Tcl_CmdPro
15520 63 2a 29 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63  c*)sqlite_malloc
15530 5f 66 61 69 6c 20 20 20 20 7d 2c 0a 20 20 20 20  _fail    },.    
15540 20 7b 20 22 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f   { "sqlite_mallo
15550 63 5f 73 74 61 74 22 2c 20 20 20 20 20 20 20 20  c_stat",        
15560 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63      (Tcl_CmdProc
15570 2a 29 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f  *)sqlite_malloc_
15580 73 74 61 74 20 20 20 20 7d 2c 0a 23 65 6e 64 69  stat    },.#endi
15590 66 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  f.     { "sqlite
155a0 5f 62 69 6e 64 22 2c 20 20 20 20 20 20 20 20 20  _bind",         
155b0 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43            (Tcl_C
155c0 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 62 69 6e  mdProc*)test_bin
155d0 64 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c  d             },
155e0 0a 20 20 20 20 20 7b 20 22 62 72 65 61 6b 70 6f  .     { "breakpo
155f0 69 6e 74 22 2c 20 20 20 20 20 20 20 20 20 20 20  int",           
15600 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d           (Tcl_Cm
15610 64 50 72 6f 63 2a 29 74 65 73 74 5f 62 72 65 61  dProc*)test_brea
15620 6b 70 6f 69 6e 74 20 20 20 20 20 20 20 7d 2c 0a  kpoint       },.
15630 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
15640 6b 65 79 22 2c 20 20 20 20 20 20 20 20 20 20 20  key",           
15650 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64          (Tcl_Cmd
15660 50 72 6f 63 2a 29 74 65 73 74 5f 6b 65 79 20 20  Proc*)test_key  
15670 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
15680 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 72      { "sqlite3_r
15690 65 6b 65 79 22 2c 20 20 20 20 20 20 20 20 20 20  ekey",          
156a0 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
156b0 72 6f 63 2a 29 74 65 73 74 5f 72 65 6b 65 79 20  roc*)test_rekey 
156c0 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20             },.  
156d0 20 20 20 7b 20 22 73 71 6c 69 74 65 5f 73 65 74     { "sqlite_set
156e0 5f 6d 61 67 69 63 22 2c 20 20 20 20 20 20 20 20  _magic",        
156f0 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72        (Tcl_CmdPr
15700 6f 63 2a 29 73 71 6c 69 74 65 5f 73 65 74 5f 6d  oc*)sqlite_set_m
15710 61 67 69 63 20 20 20 20 20 20 7d 2c 0a 20 20 20  agic      },.   
15720 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 69 6e 74    { "sqlite3_int
15730 65 72 72 75 70 74 22 2c 20 20 20 20 20 20 20 20  errupt",        
15740 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f       (Tcl_CmdPro
15750 63 2a 29 74 65 73 74 5f 69 6e 74 65 72 72 75 70  c*)test_interrup
15760 74 20 20 20 20 20 20 20 20 7d 2c 0a 23 69 66 20  t        },.#if 
15770 30 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  0.     { "sqlite
15780 33 5f 73 6c 65 65 70 22 2c 20 20 20 20 20 20 20  3_sleep",       
15790 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43            (Tcl_C
157a0 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 73 6c 65  mdProc*)test_sle
157b0 65 70 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c  ep            },
157c0 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 7b 20 22  .#endif.     { "
157d0 73 71 6c 69 74 65 5f 64 65 6c 65 74 65 5f 66 75  sqlite_delete_fu
157e0 6e 63 74 69 6f 6e 22 2c 20 20 20 20 20 20 20 20  nction",        
157f0 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 64 65  (Tcl_CmdProc*)de
15800 6c 65 74 65 5f 66 75 6e 63 74 69 6f 6e 20 20 20  lete_function   
15810 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73      },.     { "s
15820 71 6c 69 74 65 5f 64 65 6c 65 74 65 5f 63 6f 6c  qlite_delete_col
15830 6c 61 74 69 6f 6e 22 2c 20 20 20 20 20 20 20 28  lation",       (
15840 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 64 65 6c  Tcl_CmdProc*)del
15850 65 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 20 20 20  ete_collation   
15860 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71     },.     { "sq
15870 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f  lite3_get_autoco
15880 6d 6d 69 74 22 2c 20 20 20 20 20 20 20 20 28 54  mmit",        (T
15890 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 67 65 74 5f  cl_CmdProc*)get_
158a0 61 75 74 6f 63 6f 6d 6d 69 74 20 20 20 20 20 20  autocommit      
158b0 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c    },.     { "sql
158c0 69 74 65 33 5f 73 74 61 63 6b 5f 75 73 65 64 22  ite3_stack_used"
158d0 2c 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63  ,            (Tc
158e0 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f  l_CmdProc*)test_
158f0 73 74 61 63 6b 5f 75 73 65 64 20 20 20 20 20 20  stack_used      
15900 20 7d 2c 0a 20 20 7d 3b 0a 20 20 73 74 61 74 69   },.  };.  stati
15910 63 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20  c struct {.     
15920 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20  char *zName;.   
15930 20 20 54 63 6c 5f 4f 62 6a 43 6d 64 50 72 6f 63    Tcl_ObjCmdProc
15940 20 2a 78 50 72 6f 63 3b 0a 20 20 20 20 20 76 6f   *xProc;.     vo
15950 69 64 20 2a 63 6c 69 65 6e 74 44 61 74 61 3b 0a  id *clientData;.
15960 20 20 7d 20 61 4f 62 6a 43 6d 64 5b 5d 20 3d 20    } aObjCmd[] = 
15970 7b 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  {.     { "sqlite
15980 33 5f 62 69 6e 64 5f 69 6e 74 22 2c 20 20 20 20  3_bind_int",    
15990 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 62            test_b
159a0 69 6e 64 5f 69 6e 74 2c 20 20 20 20 20 20 30 20  ind_int,      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 69 6e 74 36 34 22 2c 20  e3_bind_int64", 
159d0 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f             test_
159e0 62 69 6e 64 5f 69 6e 74 36 34 2c 20 20 20 20 30  bind_int64,    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 64 6f 75 62 6c 65 22  te3_bind_double"
15a10 2c 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74  ,           test
15a20 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 2c 20 20 20  _bind_double,   
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 6e 75 6c 6c 22 2c  ite3_bind_null",
15a50 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73               tes
15a60 74 5f 62 69 6e 64 5f 6e 75 6c 6c 20 20 20 20 20  t_bind_null     
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 74 65 78 74 22  lite3_bind_text"
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 74 65 78 74 20 20 20 20  st_bind_text    
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 74 65 78 74  qlite3_bind_text
15ad0 31 36 22 2c 20 20 20 20 20 20 20 20 20 20 20 74  16",           t
15ae0 65 73 74 5f 62 69 6e 64 5f 74 65 78 74 31 36 20  est_bind_text16 
15af0 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22    ,0 },.     { "
15b00 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f  sqlite3_bind_blo
15b10 62 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  b",             
15b20 74 65 73 74 5f 62 69 6e 64 5f 62 6c 6f 62 20 20  test_bind_blob  
15b30 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20     ,0 },.     { 
15b40 22 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61  "sqlite3_bind_pa
15b50 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 22 2c 20  rameter_count", 
15b60 20 74 65 73 74 5f 62 69 6e 64 5f 70 61 72 61 6d   test_bind_param
15b70 65 74 65 72 5f 63 6f 75 6e 74 2c 20 30 7d 2c 0a  eter_count, 0},.
15b80 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
15b90 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e  bind_parameter_n
15ba0 61 6d 65 22 2c 20 20 20 74 65 73 74 5f 62 69 6e  ame",   test_bin
15bb0 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
15bc0 2c 20 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73  ,  0},.     { "s
15bd0 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
15be0 6d 65 74 65 72 5f 69 6e 64 65 78 22 2c 20 20 74  meter_index",  t
15bf0 65 73 74 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  est_bind_paramet
15c00 65 72 5f 69 6e 64 65 78 2c 20 30 7d 2c 0a 23 69  er_index, 0},.#i
15c10 66 20 30 0a 20 20 20 20 20 7b 20 22 73 71 6c 69  f 0.     { "sqli
15c20 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e  te3_clear_bindin
15c30 67 73 22 2c 20 20 20 20 20 20 20 20 74 65 73 74  gs",        test
15c40 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73 2c  _clear_bindings,
15c50 20 30 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 20 20   0},.#endif.    
15c60 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 72 72 63   { "sqlite3_errc
15c70 6f 64 65 22 2c 20 20 20 20 20 20 20 20 20 20 20  ode",           
15c80 20 20 20 20 74 65 73 74 5f 65 72 72 63 6f 64 65      test_errcode
15c90 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20         ,0 },.   
15ca0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 72 72    { "sqlite3_err
15cb0 6d 73 67 22 2c 20 20 20 20 20 20 20 20 20 20 20  msg",           
15cc0 20 20 20 20 20 74 65 73 74 5f 65 72 72 6d 73 67       test_errmsg
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 65 72     { "sqlite3_er
15cf0 72 6d 73 67 31 36 22 2c 20 20 20 20 20 20 20 20  rmsg16",        
15d00 20 20 20 20 20 20 74 65 73 74 5f 65 72 72 6d 73        test_errms
15d10 67 31 36 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20  g16      ,0 },. 
15d20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6f      { "sqlite3_o
15d30 70 65 6e 22 2c 20 20 20 20 20 20 20 20 20 20 20  pen",           
15d40 20 20 20 20 20 20 20 74 65 73 74 5f 6f 70 65 6e         test_open
15d50 20 20 20 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a            ,0 },.
15d60 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
15d70 6f 70 65 6e 31 36 22 2c 20 20 20 20 20 20 20 20  open16",        
15d80 20 20 20 20 20 20 20 20 74 65 73 74 5f 6f 70 65          test_ope
15d90 6e 31 36 20 20 20 20 20 20 20 20 2c 30 20 7d 2c  n16        ,0 },
15da0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
15db0 5f 63 6f 6d 70 6c 65 74 65 31 36 22 2c 20 20 20  _complete16",   
15dc0 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 63 6f           test_co
15dd0 6d 70 6c 65 74 65 31 36 20 20 20 20 2c 30 20 7d  mplete16    ,0 }
15de0 2c 0a 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  ,..     { "sqlit
15df0 65 33 5f 70 72 65 70 61 72 65 22 2c 20 20 20 20  e3_prepare",    
15e00 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f             test_
15e10 70 72 65 70 61 72 65 20 20 20 20 20 20 20 2c 30  prepare       ,0
15e20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
15e30 74 65 33 5f 70 72 65 70 61 72 65 31 36 22 2c 20  te3_prepare16", 
15e40 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
15e50 5f 70 72 65 70 61 72 65 31 36 20 20 20 20 20 2c  _prepare16     ,
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 66 69 6e 61 6c 69 7a 65 22 2c 20  ite3_finalize", 
15e80 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73               tes
15e90 74 5f 66 69 6e 61 6c 69 7a 65 20 20 20 20 20 20  t_finalize      
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 72 65 73 65 74 22 2c 20 20 20  lite3_reset",   
15ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65                te
15ed0 73 74 5f 72 65 73 65 74 20 20 20 20 20 20 20 20  st_reset        
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 65 78 70 69 72 65 64 22 2c  qlite3_expired",
15f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
15f10 65 73 74 5f 65 78 70 69 72 65 64 20 20 20 20 20  est_expired     
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 74 72 61 6e 73 66 65 72  sqlite3_transfer
15f40 5f 62 69 6e 64 69 6e 67 73 22 2c 20 20 20 20 20  _bindings",     
15f50 74 65 73 74 5f 74 72 61 6e 73 66 65 72 5f 62 69  test_transfer_bi
15f60 6e 64 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20  nd ,0 },.     { 
15f70 22 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73  "sqlite3_changes
15f80 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ",              
15f90 20 74 65 73 74 5f 63 68 61 6e 67 65 73 20 20 20   test_changes   
15fa0 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b      ,0 },.     {
15fb0 20 22 73 71 6c 69 74 65 33 5f 73 74 65 70 22 2c   "sqlite3_step",
15fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fd0 20 20 74 65 73 74 5f 73 74 65 70 20 20 20 20 20    test_step     
15fe0 20 20 20 20 20 2c 30 20 7d 2c 0a 0a 20 20 20 20       ,0 },..    
15ff0 20 2f 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75   /* sqlite3_colu
16000 6d 6e 5f 2a 28 29 20 41 50 49 20 2a 2f 0a 20 20  mn_*() API */.  
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 63 6f 75 6e 74 22 2c 20 20 20 20  lumn_count",    
16030 20 20 20 20 20 20 74 65 73 74 5f 63 6f 6c 75 6d        test_colum
16040 6e 5f 63 6f 75 6e 74 20 20 2c 30 20 7d 2c 0a 20  n_count  ,0 },. 
16050 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 64      { "sqlite3_d
16060 61 74 61 5f 63 6f 75 6e 74 22 2c 20 20 20 20 20  ata_count",     
16070 20 20 20 20 20 20 20 74 65 73 74 5f 64 61 74 61         test_data
16080 5f 63 6f 75 6e 74 20 20 20 20 2c 30 20 7d 2c 0a  _count    ,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 74 79 70 65 22 2c 20 20 20  column_type",   
160b0 20 20 20 20 20 20 20 20 74 65 73 74 5f 63 6f 6c          test_col
160c0 75 6d 6e 5f 74 79 70 65 20 20 20 2c 30 20 7d 2c  umn_type   ,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 62 6c 6f 62 22 2c 20 20  _column_blob",  
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 62 6c 6f 62 20 20 20 2c 30 20 7d  lumn_blob   ,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 64 6f 75 62 6c 65 22  3_column_double"
16130 2c 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 63  ,         test_c
16140 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 20 2c 30 20  olumn_double ,0 
16150 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
16160 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 22  e3_column_int64"
16170 2c 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f  ,          test_
16180 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 20 20 2c 30  column_int64  ,0
16190 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
161a0 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 22  te3_column_text"
161b0 2c 20 20 20 20 20 20 20 74 65 73 74 5f 73 74 6d  ,       test_stm
161c0 74 5f 75 74 66 38 2c 20 20 73 71 6c 69 74 65 33  t_utf8,  sqlite3
161d0 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 20 20 20  _column_text    
161e0 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c    },.     { "sql
161f0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c  ite3_column_decl
16200 74 79 70 65 22 2c 20 20 20 74 65 73 74 5f 73 74  type",   test_st
16210 6d 74 5f 75 74 66 38 2c 20 20 73 71 6c 69 74 65  mt_utf8,  sqlite
16220 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70  3_column_decltyp
16230 65 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  e  },.     { "sq
16240 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  lite3_column_nam
16250 65 22 2c 20 20 20 20 20 20 20 74 65 73 74 5f 73  e",       test_s
16260 74 6d 74 5f 75 74 66 38 2c 20 20 73 71 6c 69 74  tmt_utf8,  sqlit
16270 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 20 20  e3_column_name  
16280 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73      },.     { "s
16290 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
162a0 74 22 2c 20 20 20 20 20 20 20 20 74 65 73 74 5f  t",        test_
162b0 73 74 6d 74 5f 69 6e 74 2c 20 20 20 73 71 6c 69  stmt_int,   sqli
162c0 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 20  te3_column_int  
162d0 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22       },.     { "
162e0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62  sqlite3_column_b
162f0 79 74 65 73 22 2c 20 20 20 20 20 20 74 65 73 74  ytes",      test
16300 5f 73 74 6d 74 5f 69 6e 74 2c 20 20 20 73 71 6c  _stmt_int,   sql
16310 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65  ite3_column_byte
16320 73 20 20 20 20 20 7d 2c 0a 23 69 66 6e 64 65 66  s     },.#ifndef
16330 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
16340 31 36 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  16.     { "sqlit
16350 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 31  e3_column_bytes1
16360 36 22 2c 20 20 20 20 74 65 73 74 5f 73 74 6d 74  6",    test_stmt
16370 5f 69 6e 74 2c 20 20 20 73 71 6c 69 74 65 33 5f  _int,   sqlite3_
16380 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 31 36 20 20  column_bytes16  
16390 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
163a0 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31  te3_column_text1
163b0 36 22 2c 20 20 20 20 20 74 65 73 74 5f 73 74 6d  6",     test_stm
163c0 74 5f 75 74 66 31 36 2c 20 73 71 6c 69 74 65 33  t_utf16, sqlite3
163d0 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 20 20  _column_text16  
163e0 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c    },.     { "sql
163f0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c  ite3_column_decl
16400 74 79 70 65 31 36 22 2c 20 74 65 73 74 5f 73 74  type16", test_st
16410 6d 74 5f 75 74 66 31 36 2c 20 73 71 6c 69 74 65  mt_utf16, sqlite
16420 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70  3_column_decltyp
16430 65 31 36 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  e16},.     { "sq
16440 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  lite3_column_nam
16450 65 31 36 22 2c 20 20 20 20 20 74 65 73 74 5f 73  e16",     test_s
16460 74 6d 74 5f 75 74 66 31 36 2c 20 73 71 6c 69 74  tmt_utf16, sqlit
16470 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36  e3_column_name16
16480 20 20 20 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20      },.#endif.  
16490 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 67 6c     { "sqlite3_gl
164a0 6f 62 61 6c 5f 72 65 63 6f 76 65 72 22 2c 20 20  obal_recover",  
164b0 20 20 74 65 73 74 5f 67 6c 6f 62 61 6c 5f 72 65    test_global_re
164c0 63 6f 76 65 72 2c 20 30 20 20 20 7d 2c 0a 0a 20  cover, 0   },.. 
164d0 20 20 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 73      /* Functions
164e0 20 66 72 6f 6d 20 6f 73 2e 68 20 2a 2f 0a 23 69   from os.h */.#i
164f0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
16500 54 5f 44 49 53 4b 49 4f 0a 20 20 20 20 20 7b 20  T_DISKIO.     { 
16510 22 73 71 6c 69 74 65 33 4f 73 4f 70 65 6e 52 65  "sqlite3OsOpenRe
16520 61 64 57 72 69 74 65 22 2c 74 65 73 74 5f 73 71  adWrite",test_sq
16530 6c 69 74 65 33 4f 73 4f 70 65 6e 52 65 61 64 57  lite3OsOpenReadW
16540 72 69 74 65 2c 20 30 20 7d 2c 0a 20 20 20 20 20  rite, 0 },.     
16550 7b 20 22 73 71 6c 69 74 65 33 4f 73 43 6c 6f 73  { "sqlite3OsClos
16560 65 22 2c 20 20 20 20 20 20 20 20 74 65 73 74 5f  e",        test_
16570 73 71 6c 69 74 65 33 4f 73 43 6c 6f 73 65 2c 20  sqlite3OsClose, 
16580 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
16590 69 74 65 33 4f 73 4c 6f 63 6b 22 2c 20 20 20 20  ite3OsLock",    
165a0 20 20 20 20 20 74 65 73 74 5f 73 71 6c 69 74 65       test_sqlite
165b0 33 4f 73 4c 6f 63 6b 2c 20 30 20 7d 2c 0a 20 20  3OsLock, 0 },.  
165c0 20 20 20 7b 20 22 73 71 6c 69 74 65 33 4f 73 54     { "sqlite3OsT
165d0 65 6d 70 46 69 6c 65 4e 61 6d 65 22 2c 20 74 65  empFileName", te
165e0 73 74 5f 73 71 6c 69 74 65 33 4f 73 54 65 6d 70  st_sqlite3OsTemp
165f0 46 69 6c 65 4e 61 6d 65 2c 20 30 20 7d 2c 0a 20  FileName, 0 },. 
16600 20 20 0a 20 20 20 20 20 2f 2a 20 43 75 73 74 6f    .     /* Custo
16610 6d 20 74 65 73 74 20 69 6e 74 65 72 66 61 63 65  m test interface
16620 73 20 2a 2f 0a 20 20 20 20 20 7b 20 22 73 71 6c  s */.     { "sql
16630 69 74 65 33 4f 73 55 6e 6c 6f 63 6b 22 2c 20 20  ite3OsUnlock",  
16640 20 20 20 20 20 20 20 74 65 73 74 5f 73 71 6c 69         test_sqli
16650 74 65 33 4f 73 55 6e 6c 6f 63 6b 2c 20 30 20 20  te3OsUnlock, 0  
16660 20 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 6e    },.#endif.#ifn
16670 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
16680 55 54 46 31 36 0a 20 20 20 20 20 7b 20 22 61 64  UTF16.     { "ad
16690 64 5f 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22 2c  d_test_collate",
166a0 20 20 20 20 20 20 20 20 74 65 73 74 5f 63 6f 6c          test_col
166b0 6c 61 74 65 2c 20 30 20 20 20 20 20 20 20 20 20  late, 0         
166c0 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 61 64     },.     { "ad
166d0 64 5f 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e  d_test_collate_n
166e0 65 65 64 65 64 22 2c 20 74 65 73 74 5f 63 6f 6c  eeded", test_col
166f0 6c 61 74 65 5f 6e 65 65 64 65 64 2c 20 30 20 20  late_needed, 0  
16700 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 61 64     },.     { "ad
16710 64 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22  d_test_function"
16720 2c 20 20 20 20 20 20 20 74 65 73 74 5f 66 75 6e  ,       test_fun
16730 63 74 69 6f 6e 2c 20 30 20 20 20 20 20 20 20 20  ction, 0        
16740 20 20 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 20     },.#endif.   
16750 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 72 61    { "sqlite3_cra
16760 73 68 70 61 72 61 6d 73 22 2c 20 20 20 20 20 73  shparams",     s
16770 71 6c 69 74 65 33 5f 63 72 61 73 68 70 61 72 61  qlite3_crashpara
16780 6d 73 2c 20 30 20 20 20 20 20 7d 2c 0a 20 20 20  ms, 0     },.   
16790 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 74 65 73    { "sqlite3_tes
167a0 74 5f 65 72 72 73 74 72 22 2c 20 20 20 20 20 74  t_errstr",     t
167b0 65 73 74 5f 65 72 72 73 74 72 2c 20 30 20 20 20  est_errstr, 0   
167c0 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
167d0 20 20 7b 20 22 74 63 6c 5f 76 61 72 69 61 62 6c    { "tcl_variabl
167e0 65 5f 74 79 70 65 22 2c 20 20 20 20 20 20 20 74  e_type",       t
167f0 63 6c 5f 76 61 72 69 61 62 6c 65 5f 74 79 70 65  cl_variable_type
16800 2c 20 30 20 20 20 20 20 20 20 7d 2c 0a 20 20 7d  , 0       },.  }
16810 3b 0a 20 20 73 74 61 74 69 63 20 69 6e 74 20 62  ;.  static int b
16820 69 74 6d 61 73 6b 5f 73 69 7a 65 20 3d 20 73 69  itmask_size = si
16830 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 3b  zeof(Bitmask)*8;
16840 0a 20 20 69 6e 74 20 69 3b 0a 20 20 65 78 74 65  .  int i;.  exte
16850 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6f  rn int sqlite3_o
16860 73 5f 74 72 61 63 65 3b 0a 20 20 65 78 74 65 72  s_trace;.  exter
16870 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 68  n int sqlite3_wh
16880 65 72 65 5f 74 72 61 63 65 3b 0a 20 20 65 78 74  ere_trace;.  ext
16890 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ern int sqlite3_
168a0 73 79 6e 63 5f 63 6f 75 6e 74 2c 20 73 71 6c 69  sync_count, sqli
168b0 74 65 33 5f 66 75 6c 6c 73 79 6e 63 5f 63 6f 75  te3_fullsync_cou
168c0 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74  nt;.  extern int
168d0 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 74 65 6d   sqlite3_opentem
168e0 70 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72  p_count;.  exter
168f0 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 65  n int sqlite3_me
16900 6d 55 73 65 64 3b 0a 20 20 65 78 74 65 72 6e 20  mUsed;.  extern 
16910 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 4d  int sqlite3_memM
16920 61 78 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74  ax;.  extern int
16930 20 73 71 6c 69 74 65 33 5f 6c 69 6b 65 5f 63 6f   sqlite3_like_co
16940 75 6e 74 3b 0a 23 69 66 20 4f 53 5f 57 49 4e 0a  unt;.#if OS_WIN.
16950 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c    extern int sql
16960 69 74 65 33 5f 6f 73 5f 74 79 70 65 3b 0a 23 65  ite3_os_type;.#e
16970 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
16980 54 45 5f 44 45 42 55 47 0a 20 20 65 78 74 65 72  TE_DEBUG.  exter
16990 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 76 64  n int sqlite3_vd
169a0 62 65 5f 61 64 64 6f 70 5f 74 72 61 63 65 3b 0a  be_addop_trace;.
169b0 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
169c0 4c 49 54 45 5f 54 45 53 54 0a 20 20 65 78 74 65  LITE_TEST.  exte
169d0 72 6e 20 63 68 61 72 20 73 71 6c 69 74 65 33 5f  rn char sqlite3_
169e0 71 75 65 72 79 5f 70 6c 61 6e 5b 5d 3b 0a 20 20  query_plan[];.  
169f0 73 74 61 74 69 63 20 63 68 61 72 20 2a 71 75 65  static char *que
16a00 72 79 5f 70 6c 61 6e 20 3d 20 73 71 6c 69 74 65  ry_plan = sqlite
16a10 33 5f 71 75 65 72 79 5f 70 6c 61 6e 3b 0a 23 65  3_query_plan;.#e
16a20 6e 64 69 66 0a 0a 20 20 66 6f 72 28 69 3d 30 3b  ndif..  for(i=0;
16a30 20 69 3c 73 69 7a 65 6f 66 28 61 43 6d 64 29 2f   i<sizeof(aCmd)/
16a40 73 69 7a 65 6f 66 28 61 43 6d 64 5b 30 5d 29 3b  sizeof(aCmd[0]);
16a50 20 69 2b 2b 29 7b 0a 20 20 20 20 54 63 6c 5f 43   i++){.    Tcl_C
16a60 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 69 6e 74  reateCommand(int
16a70 65 72 70 2c 20 61 43 6d 64 5b 69 5d 2e 7a 4e 61  erp, aCmd[i].zNa
16a80 6d 65 2c 20 61 43 6d 64 5b 69 5d 2e 78 50 72 6f  me, aCmd[i].xPro
16a90 63 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 20 20  c, 0, 0);.  }.  
16aa0 66 6f 72 28 69 3d 30 3b 20 69 3c 73 69 7a 65 6f  for(i=0; i<sizeo
16ab0 66 28 61 4f 62 6a 43 6d 64 29 2f 73 69 7a 65 6f  f(aObjCmd)/sizeo
16ac0 66 28 61 4f 62 6a 43 6d 64 5b 30 5d 29 3b 20 69  f(aObjCmd[0]); i
16ad0 2b 2b 29 7b 0a 20 20 20 20 54 63 6c 5f 43 72 65  ++){.    Tcl_Cre
16ae0 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e  ateObjCommand(in
16af0 74 65 72 70 2c 20 61 4f 62 6a 43 6d 64 5b 69 5d  terp, aObjCmd[i]
16b00 2e 7a 4e 61 6d 65 2c 20 0a 20 20 20 20 20 20 20  .zName, .       
16b10 20 61 4f 62 6a 43 6d 64 5b 69 5d 2e 78 50 72 6f   aObjCmd[i].xPro
16b20 63 2c 20 61 4f 62 6a 43 6d 64 5b 69 5d 2e 63 6c  c, aObjCmd[i].cl
16b30 69 65 6e 74 44 61 74 61 2c 20 30 29 3b 0a 20 20  ientData, 0);.  
16b40 7d 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  }.  Tcl_LinkVar(
16b50 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
16b60 73 65 61 72 63 68 5f 63 6f 75 6e 74 22 2c 20 0a  search_count", .
16b70 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71        (char*)&sq
16b80 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75  lite3_search_cou
16b90 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54  nt, TCL_LINK_INT
16ba0 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72  );.  Tcl_LinkVar
16bb0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
16bc0 5f 73 6f 72 74 5f 63 6f 75 6e 74 22 2c 20 0a 20  _sort_count", . 
16bd0 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c       (char*)&sql
16be0 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2c  ite3_sort_count,
16bf0 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a   TCL_LINK_INT);.
16c00 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e    Tcl_LinkVar(in
16c10 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6c 69  terp, "sqlite_li
16c20 6b 65 5f 63 6f 75 6e 74 22 2c 20 0a 20 20 20 20  ke_count", .    
16c30 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65    (char*)&sqlite
16c40 33 5f 6c 69 6b 65 5f 63 6f 75 6e 74 2c 20 54 43  3_like_count, TC
16c50 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54  L_LINK_INT);.  T
16c60 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72  cl_LinkVar(inter
16c70 70 2c 20 22 73 71 6c 69 74 65 5f 69 6e 74 65 72  p, "sqlite_inter
16c80 72 75 70 74 5f 63 6f 75 6e 74 22 2c 20 0a 20 20  rupt_count", .  
16c90 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69      (char*)&sqli
16ca0 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
16cb0 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e  unt, TCL_LINK_IN
16cc0 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61  T);.  Tcl_LinkVa
16cd0 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  r(interp, "sqlit
16ce0 65 5f 6f 70 65 6e 5f 66 69 6c 65 5f 63 6f 75 6e  e_open_file_coun
16cf0 74 22 2c 20 0a 20 20 20 20 20 20 28 63 68 61 72  t", .      (char
16d00 2a 29 26 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f  *)&sqlite3_open_
16d10 66 69 6c 65 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f  file_count, TCL_
16d20 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c  LINK_INT);.  Tcl
16d30 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c  _LinkVar(interp,
16d40 20 22 73 71 6c 69 74 65 5f 63 75 72 72 65 6e 74   "sqlite_current
16d50 5f 74 69 6d 65 22 2c 20 0a 20 20 20 20 20 20 28  _time", .      (
16d60 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 63  char*)&sqlite3_c
16d70 75 72 72 65 6e 74 5f 74 69 6d 65 2c 20 54 43 4c  urrent_time, TCL
16d80 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63  _LINK_INT);.  Tc
16d90 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70  l_LinkVar(interp
16da0 2c 20 22 73 71 6c 69 74 65 5f 6f 73 5f 74 72 61  , "sqlite_os_tra
16db0 63 65 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72  ce",.      (char
16dc0 2a 29 26 73 71 6c 69 74 65 33 5f 6f 73 5f 74 72  *)&sqlite3_os_tr
16dd0 61 63 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e  ace, TCL_LINK_IN
16de0 54 29 3b 0a 23 69 66 20 4f 53 5f 57 49 4e 0a 20  T);.#if OS_WIN. 
16df0 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
16e00 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 73 5f  erp, "sqlite_os_
16e10 74 79 70 65 22 2c 0a 20 20 20 20 20 20 28 63 68  type",.      (ch
16e20 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6f 73 5f  ar*)&sqlite3_os_
16e30 74 79 70 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49  type, TCL_LINK_I
16e40 4e 54 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64  NT);.#endif.#ifd
16e50 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
16e60 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
16e70 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 71 75 65  erp, "sqlite_que
16e80 72 79 5f 70 6c 61 6e 22 2c 0a 20 20 20 20 20 20  ry_plan",.      
16e90 28 63 68 61 72 2a 29 26 71 75 65 72 79 5f 70 6c  (char*)&query_pl
16ea0 61 6e 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 53 54 52  an, TCL_LINK_STR
16eb0 49 4e 47 7c 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41  ING|TCL_LINK_REA
16ec0 44 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  D_ONLY);.#endif.
16ed0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
16ee0 42 55 47 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61  BUG.  Tcl_LinkVa
16ef0 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  r(interp, "sqlit
16f00 65 5f 61 64 64 6f 70 5f 74 72 61 63 65 22 2c 0a  e_addop_trace",.
16f10 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71        (char*)&sq
16f20 6c 69 74 65 33 5f 76 64 62 65 5f 61 64 64 6f 70  lite3_vdbe_addop
16f30 5f 74 72 61 63 65 2c 20 54 43 4c 5f 4c 49 4e 4b  _trace, TCL_LINK
16f40 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e  _INT);.  Tcl_Lin
16f50 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71  kVar(interp, "sq
16f60 6c 69 74 65 5f 77 68 65 72 65 5f 74 72 61 63 65  lite_where_trace
16f70 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29  ",.      (char*)
16f80 26 73 71 6c 69 74 65 33 5f 77 68 65 72 65 5f 74  &sqlite3_where_t
16f90 72 61 63 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49  race, TCL_LINK_I
16fa0 4e 54 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64  NT);.#endif.#ifd
16fb0 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ef SQLITE_MEMDEB
16fc0 55 47 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72  UG.  Tcl_LinkVar
16fd0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
16fe0 5f 6d 65 6d 75 73 65 64 22 2c 0a 20 20 20 20 20  _memused",.     
16ff0 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33   (char*)&sqlite3
17000 5f 6d 65 6d 55 73 65 64 2c 20 54 43 4c 5f 4c 49  _memUsed, TCL_LI
17010 4e 4b 5f 49 4e 54 20 7c 20 54 43 4c 5f 4c 49 4e  NK_INT | TCL_LIN
17020 4b 5f 52 45 41 44 5f 4f 4e 4c 59 29 3b 0a 20 20  K_READ_ONLY);.  
17030 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
17040 72 70 2c 20 22 73 71 6c 69 74 65 5f 6d 65 6d 6d  rp, "sqlite_memm
17050 61 78 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72  ax",.      (char
17060 2a 29 26 73 71 6c 69 74 65 33 5f 6d 65 6d 4d 61  *)&sqlite3_memMa
17070 78 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 20  x, TCL_LINK_INT 
17080 7c 20 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41 44 5f  | TCL_LINK_READ_
17090 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 23 69  ONLY);.#endif.#i
170a0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
170b0 54 5f 44 49 53 4b 49 4f 0a 20 20 54 63 6c 5f 4c  T_DISKIO.  Tcl_L
170c0 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22  inkVar(interp, "
170d0 73 71 6c 69 74 65 5f 6f 70 65 6e 74 65 6d 70 5f  sqlite_opentemp_
170e0 63 6f 75 6e 74 22 2c 0a 20 20 20 20 20 20 28 63  count",.      (c
170f0 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6f 70  har*)&sqlite3_op
17100 65 6e 74 65 6d 70 5f 63 6f 75 6e 74 2c 20 54 43  entemp_count, TC
17110 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23 65 6e  L_LINK_INT);.#en
17120 64 69 66 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61  dif.  Tcl_LinkVa
17130 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  r(interp, "sqlit
17140 65 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f 76 61  e_static_bind_va
17150 6c 75 65 22 2c 0a 20 20 20 20 20 20 28 63 68 61  lue",.      (cha
17160 72 2a 29 26 73 71 6c 69 74 65 5f 73 74 61 74 69  r*)&sqlite_stati
17170 63 5f 62 69 6e 64 5f 76 61 6c 75 65 2c 20 54 43  c_bind_value, TC
17180 4c 5f 4c 49 4e 4b 5f 53 54 52 49 4e 47 29 3b 0a  L_LINK_STRING);.
17190 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e    Tcl_LinkVar(in
171a0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 74 65  terp, "sqlite_te
171b0 6d 70 5f 64 69 72 65 63 74 6f 72 79 22 2c 0a 20  mp_directory",. 
171c0 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c       (char*)&sql
171d0 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74  ite3_temp_direct
171e0 6f 72 79 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 53 54  ory, TCL_LINK_ST
171f0 52 49 4e 47 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e  RING);.  Tcl_Lin
17200 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 62 69  kVar(interp, "bi
17210 74 6d 61 73 6b 5f 73 69 7a 65 22 2c 0a 20 20 20  tmask_size",.   
17220 20 20 20 28 63 68 61 72 2a 29 26 62 69 74 6d 61     (char*)&bitma
17230 73 6b 5f 73 69 7a 65 2c 20 54 43 4c 5f 4c 49 4e  sk_size, TCL_LIN
17240 4b 5f 49 4e 54 7c 54 43 4c 5f 4c 49 4e 4b 5f 52  K_INT|TCL_LINK_R
17250 45 41 44 5f 4f 4e 4c 59 29 3b 0a 23 69 66 20 4f  EAD_ONLY);.#if O
17260 53 5f 55 4e 49 58 0a 20 20 54 63 6c 5f 4c 69 6e  S_UNIX.  Tcl_Lin
17270 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71  kVar(interp, "sq
17280 6c 69 74 65 5f 73 79 6e 63 5f 63 6f 75 6e 74 22  lite_sync_count"
17290 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26  ,.      (char*)&
172a0 73 71 6c 69 74 65 33 5f 73 79 6e 63 5f 63 6f 75  sqlite3_sync_cou
172b0 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54  nt, TCL_LINK_INT
172c0 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72  );.  Tcl_LinkVar
172d0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
172e0 5f 66 75 6c 6c 73 79 6e 63 5f 63 6f 75 6e 74 22  _fullsync_count"
172f0 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26  ,.      (char*)&
17300 73 71 6c 69 74 65 33 5f 66 75 6c 6c 73 79 6e 63  sqlite3_fullsync
17310 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b  _count, TCL_LINK
17320 5f 49 4e 54 29 3b 0a 23 65 6e 64 69 66 20 2f 2a  _INT);.#endif /*
17330 20 4f 53 5f 55 4e 49 58 20 2a 2f 0a 20 20 73 65   OS_UNIX */.  se
17340 74 5f 6f 70 74 69 6f 6e 73 28 69 6e 74 65 72 70  t_options(interp
17350 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
17360 4f 4b 3b 0a 7d 0a                                OK;.}.