/ Hex Artifact Content
Login

Artifact 8c320f043b869c08fca86c4f01de027774eb85a8:


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 32 38 20 32 30 30 35 2f 30 31  ,v 1.128 2005/01
0240: 2f 32 35 20 30 34 3a 32 37 3a 35 35 20 64 61 6e  /25 04:27:55 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 73 74 61 74 69 63 20 63 6f 6e 73 74 20  >..static const 
02d0: 63 68 61 72 20 2a 20 65 72 72 6f 72 4e 61 6d 65  char * errorName
02e0: 28 69 6e 74 20 72 63 29 7b 0a 20 20 63 6f 6e 73  (int rc){.  cons
02f0: 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 20 3d 20  t char *zName = 
0300: 30 3b 0a 20 20 73 77 69 74 63 68 28 20 72 63 20  0;.  switch( rc 
0310: 29 7b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  ){.    case SQLI
0320: 54 45 5f 4f 4b 3a 20 20 20 20 20 20 20 20 20 7a  TE_OK:         z
0330: 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4f  Name = "SQLITE_O
0340: 4b 22 3b 20 20 20 20 20 20 20 20 20 20 62 72 65  K";          bre
0350: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
0360: 49 54 45 5f 45 52 52 4f 52 3a 20 20 20 20 20 20  ITE_ERROR:      
0370: 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f  zName = "SQLITE_
0380: 45 52 52 4f 52 22 3b 20 20 20 20 20 20 20 62 72  ERROR";       br
0390: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
03a0: 4c 49 54 45 5f 49 4e 54 45 52 4e 41 4c 3a 20 20  LITE_INTERNAL:  
03b0: 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45   zName = "SQLITE
03c0: 5f 49 4e 54 45 52 4e 41 4c 22 3b 20 20 20 20 62  _INTERNAL";    b
03d0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
03e0: 51 4c 49 54 45 5f 50 45 52 4d 3a 20 20 20 20 20  QLITE_PERM:     
03f0: 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54    zName = "SQLIT
0400: 45 5f 50 45 52 4d 22 3b 20 20 20 20 20 20 20 20  E_PERM";        
0410: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
0420: 53 51 4c 49 54 45 5f 41 42 4f 52 54 3a 20 20 20  SQLITE_ABORT:   
0430: 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49     zName = "SQLI
0440: 54 45 5f 41 42 4f 52 54 22 3b 20 20 20 20 20 20  TE_ABORT";      
0450: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
0460: 20 53 51 4c 49 54 45 5f 42 55 53 59 3a 20 20 20   SQLITE_BUSY:   
0470: 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c      zName = "SQL
0480: 49 54 45 5f 42 55 53 59 22 3b 20 20 20 20 20 20  ITE_BUSY";      
0490: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
04a0: 65 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3a  e SQLITE_LOCKED:
04b0: 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51       zName = "SQ
04c0: 4c 49 54 45 5f 4c 4f 43 4b 45 44 22 3b 20 20 20  LITE_LOCKED";   
04d0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
04e0: 73 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3a  se SQLITE_NOMEM:
04f0: 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53        zName = "S
0500: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 22 3b 20 20 20  QLITE_NOMEM";   
0510: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
0520: 61 73 65 20 53 51 4c 49 54 45 5f 52 45 41 44 4f  ase SQLITE_READO
0530: 4e 4c 59 3a 20 20 20 7a 4e 61 6d 65 20 3d 20 22  NLY:   zName = "
0540: 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 22  SQLITE_READONLY"
0550: 3b 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  ;    break;.    
0560: 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4e 54 45  case SQLITE_INTE
0570: 52 52 55 50 54 3a 20 20 7a 4e 61 6d 65 20 3d 20  RRUPT:  zName = 
0580: 22 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50  "SQLITE_INTERRUP
0590: 54 22 3b 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  T";   break;.   
05a0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4f 45   case SQLITE_IOE
05b0: 52 52 3a 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d  RR:      zName =
05c0: 20 22 53 51 4c 49 54 45 5f 49 4f 45 52 52 22 3b   "SQLITE_IOERR";
05d0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
05e0: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f    case SQLITE_CO
05f0: 52 52 55 50 54 3a 20 20 20 20 7a 4e 61 6d 65 20  RRUPT:    zName 
0600: 3d 20 22 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  = "SQLITE_CORRUP
0610: 54 22 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  T";     break;. 
0620: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4e     case SQLITE_N
0630: 4f 54 46 4f 55 4e 44 3a 20 20 20 7a 4e 61 6d 65  OTFOUND:   zName
0640: 20 3d 20 22 53 51 4c 49 54 45 5f 4e 4f 54 46 4f   = "SQLITE_NOTFO
0650: 55 4e 44 22 3b 20 20 20 20 62 72 65 61 6b 3b 0a  UND";    break;.
0660: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
0670: 46 55 4c 4c 3a 20 20 20 20 20 20 20 7a 4e 61 6d  FULL:       zNam
0680: 65 20 3d 20 22 53 51 4c 49 54 45 5f 46 55 4c 4c  e = "SQLITE_FULL
0690: 22 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ";        break;
06a0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
06b0: 5f 43 41 4e 54 4f 50 45 4e 3a 20 20 20 7a 4e 61  _CANTOPEN:   zNa
06c0: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 43 41 4e  me = "SQLITE_CAN
06d0: 54 4f 50 45 4e 22 3b 20 20 20 20 62 72 65 61 6b  TOPEN";    break
06e0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
06f0: 45 5f 50 52 4f 54 4f 43 4f 4c 3a 20 20 20 7a 4e  E_PROTOCOL:   zN
0700: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 50 52  ame = "SQLITE_PR
0710: 4f 54 4f 43 4f 4c 22 3b 20 20 20 20 62 72 65 61  OTOCOL";    brea
0720: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
0730: 54 45 5f 45 4d 50 54 59 3a 20 20 20 20 20 20 7a  TE_EMPTY:      z
0740: 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 45  Name = "SQLITE_E
0750: 4d 50 54 59 22 3b 20 20 20 20 20 20 20 62 72 65  MPTY";       bre
0760: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
0770: 49 54 45 5f 53 43 48 45 4d 41 3a 20 20 20 20 20  ITE_SCHEMA:     
0780: 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f  zName = "SQLITE_
0790: 53 43 48 45 4d 41 22 3b 20 20 20 20 20 20 62 72  SCHEMA";      br
07a0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
07b0: 4c 49 54 45 5f 54 4f 4f 42 49 47 3a 20 20 20 20  LITE_TOOBIG:    
07c0: 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45   zName = "SQLITE
07d0: 5f 54 4f 4f 42 49 47 22 3b 20 20 20 20 20 20 62  _TOOBIG";      b
07e0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
07f0: 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
0800: 3a 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54  : zName = "SQLIT
0810: 45 5f 43 4f 4e 53 54 52 41 49 4e 54 22 3b 20 20  E_CONSTRAINT";  
0820: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
0830: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3a  SQLITE_MISMATCH:
0840: 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49     zName = "SQLI
0850: 54 45 5f 4d 49 53 4d 41 54 43 48 22 3b 20 20 20  TE_MISMATCH";   
0860: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
0870: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3a 20   SQLITE_MISUSE: 
0880: 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c      zName = "SQL
0890: 49 54 45 5f 4d 49 53 55 53 45 22 3b 20 20 20 20  ITE_MISUSE";    
08a0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
08b0: 65 20 53 51 4c 49 54 45 5f 4e 4f 4c 46 53 3a 20  e SQLITE_NOLFS: 
08c0: 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51       zName = "SQ
08d0: 4c 49 54 45 5f 4e 4f 4c 46 53 22 3b 20 20 20 20  LITE_NOLFS";    
08e0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
08f0: 73 65 20 53 51 4c 49 54 45 5f 41 55 54 48 3a 20  se SQLITE_AUTH: 
0900: 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53        zName = "S
0910: 51 4c 49 54 45 5f 41 55 54 48 22 3b 20 20 20 20  QLITE_AUTH";    
0920: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
0930: 61 73 65 20 53 51 4c 49 54 45 5f 46 4f 52 4d 41  ase SQLITE_FORMA
0940: 54 3a 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22  T:     zName = "
0950: 53 51 4c 49 54 45 5f 46 4f 52 4d 41 54 22 3b 20  SQLITE_FORMAT"; 
0960: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
0970: 63 61 73 65 20 53 51 4c 49 54 45 5f 52 41 4e 47  case SQLITE_RANG
0980: 45 3a 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20  E:      zName = 
0990: 22 53 51 4c 49 54 45 5f 52 41 4e 47 45 22 3b 20  "SQLITE_RANGE"; 
09a0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
09b0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 52 4f 57   case SQLITE_ROW
09c0: 3a 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d  :        zName =
09d0: 20 22 53 51 4c 49 54 45 5f 52 4f 57 22 3b 20 20   "SQLITE_ROW";  
09e0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
09f0: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 44 4f    case SQLITE_DO
0a00: 4e 45 3a 20 20 20 20 20 20 20 7a 4e 61 6d 65 20  NE:       zName 
0a10: 3d 20 22 53 51 4c 49 54 45 5f 44 4f 4e 45 22 3b  = "SQLITE_DONE";
0a20: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
0a30: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4e     case SQLITE_N
0a40: 4f 54 41 44 42 3a 20 20 20 20 20 7a 4e 61 6d 65  OTADB:     zName
0a50: 20 3d 20 22 53 51 4c 49 54 45 5f 4e 4f 54 41 44   = "SQLITE_NOTAD
0a60: 42 22 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  B";      break;.
0a70: 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20      default:    
0a80: 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d              zNam
0a90: 65 20 3d 20 22 53 51 4c 49 54 45 5f 55 6e 6b 6e  e = "SQLITE_Unkn
0aa0: 6f 77 6e 22 3b 20 20 20 20 20 62 72 65 61 6b 3b  own";     break;
0ab0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a 4e  .  }.  return zN
0ac0: 61 6d 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6f  ame;.}../*.** Co
0ad0: 6e 76 65 72 74 20 61 6e 20 73 71 6c 69 74 65 33  nvert an sqlite3
0ae0: 5f 73 74 6d 74 2a 20 69 6e 74 6f 20 61 6e 20 73  _stmt* into an s
0af0: 71 6c 69 74 65 33 2a 2e 20 20 54 68 69 73 20 64  qlite3*.  This d
0b00: 65 70 65 6e 64 73 20 6f 6e 20 74 68 65 0a 2a 2a  epends on the.**
0b10: 20 66 61 63 74 20 74 68 61 74 20 74 68 65 20 73   fact that the s
0b20: 71 6c 69 74 65 33 2a 20 69 73 20 74 68 65 20 66  qlite3* is the f
0b30: 69 72 73 74 20 66 69 65 6c 64 20 69 6e 20 74 68  irst field in th
0b40: 65 20 56 64 62 65 20 73 74 72 75 63 74 75 72 65  e Vdbe structure
0b50: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 74 6d  ..*/.#define Stm
0b60: 74 54 6f 44 62 28 58 29 20 20 20 28 2a 28 73 71  tToDb(X)   (*(sq
0b70: 6c 69 74 65 33 2a 2a 29 28 58 29 29 0a 0a 2f 2a  lite3**)(X))../*
0b80: 0a 2a 2a 20 43 68 65 63 6b 20 61 20 72 65 74 75  .** Check a retu
0b90: 72 6e 20 76 61 6c 75 65 20 74 6f 20 6d 61 6b 65  rn value to make
0ba0: 20 73 75 72 65 20 69 74 20 61 67 72 65 65 73 20   sure it agrees 
0bb0: 77 69 74 68 20 74 68 65 20 72 65 73 75 6c 74 73  with the results
0bc0: 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  .** from sqlite3
0bd0: 5f 65 72 72 63 6f 64 65 2e 0a 2a 2f 0a 69 6e 74  _errcode..*/.int
0be0: 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43   sqlite3TestErrC
0bf0: 6f 64 65 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ode(Tcl_Interp *
0c00: 69 6e 74 65 72 70 2c 20 73 71 6c 69 74 65 33 20  interp, sqlite3 
0c10: 2a 64 62 2c 20 69 6e 74 20 72 63 29 7b 0a 20 20  *db, int rc){.  
0c20: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4d  if( rc!=SQLITE_M
0c30: 49 53 55 53 45 20 26 26 20 72 63 21 3d 53 51 4c  ISUSE && rc!=SQL
0c40: 49 54 45 5f 4f 4b 20 26 26 20 73 71 6c 69 74 65  ITE_OK && sqlite
0c50: 33 5f 65 72 72 63 6f 64 65 28 64 62 29 21 3d 72  3_errcode(db)!=r
0c60: 63 20 29 7b 0a 20 20 20 20 63 68 61 72 20 7a 42  c ){.    char zB
0c70: 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 69 6e 74  uf[200];.    int
0c80: 20 72 32 20 3d 20 73 71 6c 69 74 65 33 5f 65 72   r2 = sqlite3_er
0c90: 72 63 6f 64 65 28 64 62 29 3b 0a 20 20 20 20 73  rcode(db);.    s
0ca0: 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 65 72  printf(zBuf, "er
0cb0: 72 6f 72 20 63 6f 64 65 20 25 73 20 28 25 64 29  ror code %s (%d)
0cc0: 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20   does not match 
0cd0: 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20  sqlite3_errcode 
0ce0: 25 73 20 28 25 64 29 22 2c 0a 20 20 20 20 20 20  %s (%d)",.      
0cf0: 20 65 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20   errorName(rc), 
0d00: 72 63 2c 20 65 72 72 6f 72 4e 61 6d 65 28 72 32  rc, errorName(r2
0d10: 29 2c 20 72 32 29 3b 0a 20 20 20 20 54 63 6c 5f  ), r2);.    Tcl_
0d20: 52 65 73 65 74 52 65 73 75 6c 74 28 69 6e 74 65  ResetResult(inte
0d30: 72 70 29 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70  rp);.    Tcl_App
0d40: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
0d50: 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 20 20 20 20  , zBuf, 0);.    
0d60: 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20  return 1;.  }.  
0d70: 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a  return 0;.}../*.
0d80: 2a 2a 20 44 65 63 6f 64 65 20 61 20 70 6f 69 6e  ** Decode a poin
0d90: 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65  ter to an sqlite
0da0: 33 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 73 74 61  3 object..*/.sta
0db0: 74 69 63 20 69 6e 74 20 67 65 74 44 62 50 6f 69  tic int getDbPoi
0dc0: 6e 74 65 72 28 54 63 6c 5f 49 6e 74 65 72 70 20  nter(Tcl_Interp 
0dd0: 2a 69 6e 74 65 72 70 2c 20 63 6f 6e 73 74 20 63  *interp, const c
0de0: 68 61 72 20 2a 7a 41 2c 20 73 71 6c 69 74 65 33  har *zA, sqlite3
0df0: 20 2a 2a 70 70 44 62 29 7b 0a 20 20 2a 70 70 44   **ppDb){.  *ppD
0e00: 62 20 3d 20 28 73 71 6c 69 74 65 33 2a 29 73 71  b = (sqlite3*)sq
0e10: 6c 69 74 65 33 54 65 78 74 54 6f 50 74 72 28 7a  lite3TextToPtr(z
0e20: 41 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  A);.  return TCL
0e30: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 65  _OK;.}../*.** De
0e40: 63 6f 64 65 20 61 20 70 6f 69 6e 74 65 72 20 74  code a pointer t
0e50: 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 73 74 6d  o an sqlite3_stm
0e60: 74 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 73 74 61  t object..*/.sta
0e70: 74 69 63 20 69 6e 74 20 67 65 74 53 74 6d 74 50  tic int getStmtP
0e80: 6f 69 6e 74 65 72 28 0a 20 20 54 63 6c 5f 49 6e  ointer(.  Tcl_In
0e90: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 0a 20  terp *interp, . 
0ea0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 72   const char *zAr
0eb0: 67 2c 20 20 0a 20 20 73 71 6c 69 74 65 33 5f 73  g,  .  sqlite3_s
0ec0: 74 6d 74 20 2a 2a 70 70 53 74 6d 74 0a 29 7b 0a  tmt **ppStmt.){.
0ed0: 20 20 2a 70 70 53 74 6d 74 20 3d 20 28 73 71 6c    *ppStmt = (sql
0ee0: 69 74 65 33 5f 73 74 6d 74 2a 29 73 71 6c 69 74  ite3_stmt*)sqlit
0ef0: 65 33 54 65 78 74 54 6f 50 74 72 28 7a 41 72 67  e3TextToPtr(zArg
0f00: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
0f10: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 65 63  OK;.}../*.** Dec
0f20: 6f 64 65 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  ode a pointer to
0f30: 20 61 6e 20 73 71 6c 69 74 65 33 5f 73 74 6d 74   an sqlite3_stmt
0f40: 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 73 74 61 74   object..*/.stat
0f50: 69 63 20 69 6e 74 20 67 65 74 46 69 6c 65 50 6f  ic int getFilePo
0f60: 69 6e 74 65 72 28 0a 20 20 54 63 6c 5f 49 6e 74  inter(.  Tcl_Int
0f70: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 0a 20 20  erp *interp, .  
0f80: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 72 67  const char *zArg
0f90: 2c 20 20 0a 20 20 4f 73 46 69 6c 65 20 2a 2a 70  ,  .  OsFile **p
0fa0: 70 46 69 6c 65 0a 29 7b 0a 20 20 2a 70 70 46 69  pFile.){.  *ppFi
0fb0: 6c 65 20 3d 20 28 4f 73 46 69 6c 65 2a 29 73 71  le = (OsFile*)sq
0fc0: 6c 69 74 65 33 54 65 78 74 54 6f 50 74 72 28 7a  lite3TextToPtr(z
0fd0: 41 72 67 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  Arg);.  return T
0fe0: 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
0ff0: 47 65 6e 65 72 61 74 65 20 61 20 74 65 78 74 20  Generate a text 
1000: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
1010: 66 20 61 20 70 6f 69 6e 74 65 72 20 74 68 61 74  f a pointer that
1020: 20 63 61 6e 20 62 65 20 75 6e 64 65 72 73 74 6f   can be understo
1030: 6f 64 0a 2a 2a 20 62 79 20 74 68 65 20 67 65 74  od.** by the get
1040: 44 62 50 6f 69 6e 74 65 72 20 61 6e 64 20 67 65  DbPointer and ge
1050: 74 56 6d 50 6f 69 6e 74 65 72 20 72 6f 75 74 69  tVmPointer routi
1060: 6e 65 73 20 61 62 6f 76 65 2e 0a 2a 2a 0a 2a 2a  nes above..**.**
1070: 20 54 68 65 20 70 72 6f 62 6c 65 6d 20 69 73 2c   The problem is,
1080: 20 6f 6e 20 73 6f 6d 65 20 6d 61 63 68 69 6e 65   on some machine
1090: 73 20 28 53 6f 6c 61 72 69 73 29 20 69 66 20 79  s (Solaris) if y
10a0: 6f 75 20 64 6f 20 61 20 70 72 69 6e 74 66 20 77  ou do a printf w
10b0: 69 74 68 0a 2a 2a 20 22 25 70 22 20 79 6f 75 20  ith.** "%p" you 
10c0: 63 61 6e 6e 6f 74 20 74 75 72 6e 20 61 72 6f 75  cannot turn arou
10d0: 6e 64 20 61 6e 64 20 64 6f 20 61 20 73 63 61 6e  nd and do a scan
10e0: 66 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  f with the same 
10f0: 22 25 70 22 20 61 6e 64 0a 2a 2a 20 67 65 74 20  "%p" and.** get 
1100: 79 6f 75 72 20 70 6f 69 6e 74 65 72 20 62 61 63  your pointer bac
1110: 6b 2e 20 20 59 6f 75 20 68 61 76 65 20 74 6f 20  k.  You have to 
1120: 70 72 65 70 65 6e 64 20 61 20 22 30 78 22 20 62  prepend a "0x" b
1130: 65 66 6f 72 65 20 69 74 20 77 69 6c 6c 0a 2a 2a  efore it will.**
1140: 20 77 6f 72 6b 2e 20 20 4f 72 20 61 74 20 6c 65   work.  Or at le
1150: 61 73 74 20 74 68 61 74 20 69 73 20 77 68 61 74  ast that is what
1160: 20 69 73 20 72 65 70 6f 72 74 65 64 20 74 6f 20   is reported to 
1170: 6d 65 20 28 64 72 68 29 2e 20 20 42 75 74 20 74  me (drh).  But t
1180: 68 69 73 0a 2a 2a 20 62 65 68 61 76 69 6f 72 20  his.** behavior 
1190: 76 61 72 69 65 73 20 66 72 6f 6d 20 6d 61 63 68  varies from mach
11a0: 69 6e 65 20 74 6f 20 6d 61 63 68 69 6e 65 2e 20  ine to machine. 
11b0: 20 54 68 65 20 73 6f 6c 75 74 69 6f 6e 20 75 73   The solution us
11c0: 65 64 20 68 65 72 20 69 73 0a 2a 2a 20 74 6f 20  ed her is.** to 
11d0: 74 65 73 74 20 74 68 65 20 73 74 72 69 6e 67 20  test the string 
11e0: 72 69 67 68 74 20 61 66 74 65 72 20 69 74 20 69  right after it i
11f0: 73 20 67 65 6e 65 72 61 74 65 64 20 74 6f 20 73  s generated to s
1200: 65 65 20 69 66 20 69 74 20 63 61 6e 20 62 65 0a  ee if it can be.
1210: 2a 2a 20 75 6e 64 65 72 73 74 6f 6f 64 20 62 79  ** understood by
1220: 20 73 63 61 6e 66 2c 20 61 6e 64 20 69 66 20 6e   scanf, and if n
1230: 6f 74 2c 20 74 72 79 20 70 72 65 70 65 6e 64 69  ot, try prependi
1240: 6e 67 20 61 6e 20 22 30 78 22 20 74 6f 20 73 65  ng an "0x" to se
1250: 65 20 69 66 0a 2a 2a 20 74 68 61 74 20 68 65 6c  e if.** that hel
1260: 70 73 2e 20 20 49 66 20 6e 6f 74 68 69 6e 67 20  ps.  If nothing 
1270: 77 6f 72 6b 73 2c 20 61 20 66 61 74 61 6c 20 65  works, a fatal e
1280: 72 72 6f 72 20 69 73 20 67 65 6e 65 72 61 74 65  rror is generate
1290: 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  d..*/.static int
12a0: 20 6d 61 6b 65 50 6f 69 6e 74 65 72 53 74 72 28   makePointerStr(
12b0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
12c0: 72 70 2c 20 63 68 61 72 20 2a 7a 50 74 72 2c 20  rp, char *zPtr, 
12d0: 76 6f 69 64 20 2a 70 29 7b 0a 20 20 73 71 6c 69  void *p){.  sqli
12e0: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30  te3_snprintf(100
12f0: 2c 20 7a 50 74 72 2c 20 22 25 70 22 2c 20 70 29  , zPtr, "%p", p)
1300: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
1310: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  K;.}../*.** The 
1320: 63 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69 6e 65  callback routine
1330: 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 65 78 65   for sqlite3_exe
1340: 63 5f 70 72 69 6e 74 66 28 29 2e 0a 2a 2f 0a 73  c_printf()..*/.s
1350: 74 61 74 69 63 20 69 6e 74 20 65 78 65 63 5f 70  tatic int exec_p
1360: 72 69 6e 74 66 5f 63 62 28 76 6f 69 64 20 2a 70  rintf_cb(void *p
1370: 41 72 67 2c 20 69 6e 74 20 61 72 67 63 2c 20 63  Arg, int argc, c
1380: 68 61 72 20 2a 2a 61 72 67 76 2c 20 63 68 61 72  har **argv, char
1390: 20 2a 2a 6e 61 6d 65 29 7b 0a 20 20 54 63 6c 5f   **name){.  Tcl_
13a0: 44 53 74 72 69 6e 67 20 2a 73 74 72 20 3d 20 28  DString *str = (
13b0: 54 63 6c 5f 44 53 74 72 69 6e 67 2a 29 70 41 72  Tcl_DString*)pAr
13c0: 67 3b 0a 20 20 69 6e 74 20 69 3b 0a 0a 20 20 69  g;.  int i;..  i
13d0: 66 28 20 54 63 6c 5f 44 53 74 72 69 6e 67 4c 65  f( Tcl_DStringLe
13e0: 6e 67 74 68 28 73 74 72 29 3d 3d 30 20 29 7b 0a  ngth(str)==0 ){.
13f0: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 61      for(i=0; i<a
1400: 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  rgc; i++){.     
1410: 20 54 63 6c 5f 44 53 74 72 69 6e 67 41 70 70 65   Tcl_DStringAppe
1420: 6e 64 45 6c 65 6d 65 6e 74 28 73 74 72 2c 20 6e  ndElement(str, n
1430: 61 6d 65 5b 69 5d 20 3f 20 6e 61 6d 65 5b 69 5d  ame[i] ? name[i]
1440: 20 3a 20 22 4e 55 4c 4c 22 29 3b 0a 20 20 20 20   : "NULL");.    
1450: 7d 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 3b  }.  }.  for(i=0;
1460: 20 69 3c 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20   i<argc; i++){. 
1470: 20 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 41 70     Tcl_DStringAp
1480: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 73 74 72 2c  pendElement(str,
1490: 20 61 72 67 76 5b 69 5d 20 3f 20 61 72 67 76 5b   argv[i] ? argv[
14a0: 69 5d 20 3a 20 22 4e 55 4c 4c 22 29 3b 0a 20 20  i] : "NULL");.  
14b0: 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a  }.  return 0;.}.
14c0: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
14d0: 71 6c 69 74 65 33 5f 65 78 65 63 5f 70 72 69 6e  qlite3_exec_prin
14e0: 74 66 20 20 44 42 20 20 46 4f 52 4d 41 54 20 20  tf  DB  FORMAT  
14f0: 53 54 52 49 4e 47 0a 2a 2a 0a 2a 2a 20 49 6e 76  STRING.**.** Inv
1500: 6f 6b 65 20 74 68 65 20 73 71 6c 69 74 65 33 5f  oke the sqlite3_
1510: 65 78 65 63 5f 70 72 69 6e 74 66 28 29 20 69 6e  exec_printf() in
1520: 74 65 72 66 61 63 65 20 75 73 69 6e 67 20 74 68  terface using th
1530: 65 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 0a  e open database.
1540: 2a 2a 20 44 42 2e 20 20 54 68 65 20 53 51 4c 20  ** DB.  The SQL 
1550: 69 73 20 74 68 65 20 73 74 72 69 6e 67 20 46 4f  is the string FO
1560: 52 4d 41 54 2e 20 20 54 68 65 20 66 6f 72 6d 61  RMAT.  The forma
1570: 74 20 73 74 72 69 6e 67 20 73 68 6f 75 6c 64 20  t string should 
1580: 63 6f 6e 74 61 69 6e 0a 2a 2a 20 6f 6e 65 20 25  contain.** one %
1590: 73 20 6f 72 20 25 71 2e 20 20 53 54 52 49 4e 47  s or %q.  STRING
15a0: 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 69 6e   is the value in
15b0: 73 65 72 74 65 64 20 69 6e 74 6f 20 25 73 20 6f  serted into %s o
15c0: 72 20 25 71 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  r %q..*/.static 
15d0: 69 6e 74 20 74 65 73 74 5f 65 78 65 63 5f 70 72  int test_exec_pr
15e0: 69 6e 74 66 28 0a 20 20 76 6f 69 64 20 2a 4e 6f  intf(.  void *No
15f0: 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74  tUsed,.  Tcl_Int
1600: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
1610: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
1620: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
1630: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
1640: 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20   */.  int argc, 
1650: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1660: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
1670: 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  nts */.  char **
1680: 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20  argv            
1690: 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20  /* Text of each 
16a0: 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20  argument */.){. 
16b0: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
16c0: 54 63 6c 5f 44 53 74 72 69 6e 67 20 73 74 72 3b  Tcl_DString str;
16d0: 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 68 61  .  int rc;.  cha
16e0: 72 20 2a 7a 45 72 72 20 3d 20 30 3b 0a 20 20 63  r *zErr = 0;.  c
16f0: 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 63 68 61  har *zSql;.  cha
1700: 72 20 7a 42 75 66 5b 33 30 5d 3b 0a 20 20 69 66  r zBuf[30];.  if
1710: 28 20 61 72 67 63 21 3d 34 20 29 7b 0a 20 20 20  ( argc!=4 ){.   
1720: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
1730: 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
1740: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
1750: 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c  be \"", argv[0],
1760: 20 0a 20 20 20 20 20 20 20 22 20 44 42 20 46 4f   .       " DB FO
1770: 52 4d 41 54 20 53 54 52 49 4e 47 22 2c 20 30 29  RMAT STRING", 0)
1780: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
1790: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
17a0: 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69  ( getDbPointer(i
17b0: 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20  nterp, argv[1], 
17c0: 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
17d0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 44  L_ERROR;.  Tcl_D
17e0: 53 74 72 69 6e 67 49 6e 69 74 28 26 73 74 72 29  StringInit(&str)
17f0: 3b 0a 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74  ;.  zSql = sqlit
1800: 65 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b  e3_mprintf(argv[
1810: 32 5d 2c 20 61 72 67 76 5b 33 5d 29 3b 0a 20 20  2], argv[3]);.  
1820: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65  rc = sqlite3_exe
1830: 63 28 64 62 2c 20 7a 53 71 6c 2c 20 65 78 65 63  c(db, zSql, exec
1840: 5f 70 72 69 6e 74 66 5f 63 62 2c 20 26 73 74 72  _printf_cb, &str
1850: 2c 20 26 7a 45 72 72 29 3b 0a 20 20 73 71 6c 69  , &zErr);.  sqli
1860: 74 65 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a  te3_free(zSql);.
1870: 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20    sprintf(zBuf, 
1880: 22 25 64 22 2c 20 72 63 29 3b 0a 20 20 54 63 6c  "%d", rc);.  Tcl
1890: 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  _AppendElement(i
18a0: 6e 74 65 72 70 2c 20 7a 42 75 66 29 3b 0a 20 20  nterp, zBuf);.  
18b0: 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e  Tcl_AppendElemen
18c0: 74 28 69 6e 74 65 72 70 2c 20 72 63 3d 3d 53 51  t(interp, rc==SQ
18d0: 4c 49 54 45 5f 4f 4b 20 3f 20 54 63 6c 5f 44 53  LITE_OK ? Tcl_DS
18e0: 74 72 69 6e 67 56 61 6c 75 65 28 26 73 74 72 29  tringValue(&str)
18f0: 20 3a 20 7a 45 72 72 29 3b 0a 20 20 54 63 6c 5f   : zErr);.  Tcl_
1900: 44 53 74 72 69 6e 67 46 72 65 65 28 26 73 74 72  DStringFree(&str
1910: 29 3b 0a 20 20 69 66 28 20 7a 45 72 72 20 29 20  );.  if( zErr ) 
1920: 66 72 65 65 28 7a 45 72 72 29 3b 0a 20 20 69 66  free(zErr);.  if
1930: 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72  ( sqlite3TestErr
1940: 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c  Code(interp, db,
1950: 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43   rc) ) return TC
1960: 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74 75 72  L_ERROR;.  retur
1970: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
1980: 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
1990: 65 33 5f 6d 70 72 69 6e 74 66 5f 7a 5f 74 65 73  e3_mprintf_z_tes
19a0: 74 20 20 53 45 50 41 52 41 54 4f 52 20 20 41 52  t  SEPARATOR  AR
19b0: 47 30 20 20 41 52 47 31 20 2e 2e 2e 0a 2a 2a 0a  G0  ARG1 ....**.
19c0: 2a 2a 20 54 65 73 74 20 74 68 65 20 25 7a 20 66  ** Test the %z f
19d0: 6f 72 6d 61 74 20 6f 66 20 6d 70 72 69 6e 74 66  ormat of mprintf
19e0: 28 29 2e 20 20 55 73 65 20 6d 75 6c 74 69 70 6c  ().  Use multipl
19f0: 65 20 6d 70 72 69 6e 74 66 28 29 20 63 61 6c 6c  e mprintf() call
1a00: 73 20 74 6f 20 0a 2a 2a 20 63 6f 6e 63 61 74 65  s to .** concate
1a10: 6e 61 74 65 20 61 72 67 30 20 74 68 72 6f 75 67  nate arg0 throug
1a20: 68 20 61 72 67 6e 20 75 73 69 6e 67 20 73 65 70  h argn using sep
1a30: 61 72 61 74 6f 72 20 61 73 20 74 68 65 20 73 65  arator as the se
1a40: 70 61 72 61 74 6f 72 2e 0a 2a 2a 20 52 65 74 75  parator..** Retu
1a50: 72 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 0a 2a  rn the result..*
1a60: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
1a70: 74 5f 6d 70 72 69 6e 74 66 5f 7a 28 0a 20 20 76  t_mprintf_z(.  v
1a80: 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20  oid *NotUsed,.  
1a90: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
1aa0: 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43  rp,    /* The TC
1ab0: 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68  L interpreter th
1ac0: 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20  at invoked this 
1ad0: 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74  command */.  int
1ae0: 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20   argc,          
1af0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1b00: 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
1b10: 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20  char **argv     
1b20: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f         /* Text o
1b30: 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20  f each argument 
1b40: 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20 2a 7a 52  */.){.  char *zR
1b50: 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20 69 6e 74  esult = 0;.  int
1b60: 20 69 3b 0a 0a 20 20 66 6f 72 28 69 3d 32 3b 20   i;..  for(i=2; 
1b70: 69 3c 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20  i<argc; i++){.  
1b80: 20 20 7a 52 65 73 75 6c 74 20 3d 20 73 71 6c 69    zResult = sqli
1b90: 74 65 33 4d 50 72 69 6e 74 66 28 22 25 7a 25 73  te3MPrintf("%z%s
1ba0: 25 73 22 2c 20 7a 52 65 73 75 6c 74 2c 20 61 72  %s", zResult, ar
1bb0: 67 76 5b 31 5d 2c 20 61 72 67 76 5b 69 5d 29 3b  gv[1], argv[i]);
1bc0: 0a 20 20 7d 0a 20 20 54 63 6c 5f 41 70 70 65 6e  .  }.  Tcl_Appen
1bd0: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
1be0: 7a 52 65 73 75 6c 74 2c 20 30 29 3b 0a 20 20 73  zResult, 0);.  s
1bf0: 71 6c 69 74 65 46 72 65 65 28 7a 52 65 73 75 6c  qliteFree(zResul
1c00: 74 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  t);.  return TCL
1c10: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
1c20: 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 67 65  age:  sqlite3_ge
1c30: 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74 66 20 20  t_table_printf  
1c40: 44 42 20 20 46 4f 52 4d 41 54 20 20 53 54 52 49  DB  FORMAT  STRI
1c50: 4e 47 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20  NG.**.** Invoke 
1c60: 74 68 65 20 73 71 6c 69 74 65 33 5f 67 65 74 5f  the sqlite3_get_
1c70: 74 61 62 6c 65 5f 70 72 69 6e 74 66 28 29 20 69  table_printf() i
1c80: 6e 74 65 72 66 61 63 65 20 75 73 69 6e 67 20 74  nterface using t
1c90: 68 65 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65  he open database
1ca0: 0a 2a 2a 20 44 42 2e 20 20 54 68 65 20 53 51 4c  .** DB.  The SQL
1cb0: 20 69 73 20 74 68 65 20 73 74 72 69 6e 67 20 46   is the string F
1cc0: 4f 52 4d 41 54 2e 20 20 54 68 65 20 66 6f 72 6d  ORMAT.  The form
1cd0: 61 74 20 73 74 72 69 6e 67 20 73 68 6f 75 6c 64  at string should
1ce0: 20 63 6f 6e 74 61 69 6e 0a 2a 2a 20 6f 6e 65 20   contain.** one 
1cf0: 25 73 20 6f 72 20 25 71 2e 20 20 53 54 52 49 4e  %s or %q.  STRIN
1d00: 47 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 69  G is the value i
1d10: 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 25 73 20  nserted into %s 
1d20: 6f 72 20 25 71 2e 0a 2a 2f 0a 73 74 61 74 69 63  or %q..*/.static
1d30: 20 69 6e 74 20 74 65 73 74 5f 67 65 74 5f 74 61   int test_get_ta
1d40: 62 6c 65 5f 70 72 69 6e 74 66 28 0a 20 20 76 6f  ble_printf(.  vo
1d50: 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54  id *NotUsed,.  T
1d60: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
1d70: 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c  p,    /* The TCL
1d80: 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61   interpreter tha
1d90: 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63  t invoked this c
1da0: 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  ommand */.  int 
1db0: 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20  argc,           
1dc0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1dd0: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63  arguments */.  c
1de0: 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20  har **argv      
1df0: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
1e00: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a   each argument *
1e10: 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  /.){.  sqlite3 *
1e20: 64 62 3b 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e  db;.  Tcl_DStrin
1e30: 67 20 73 74 72 3b 0a 20 20 69 6e 74 20 72 63 3b  g str;.  int rc;
1e40: 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 20 3d 20  .  char *zErr = 
1e50: 30 3b 0a 20 20 69 6e 74 20 6e 52 6f 77 2c 20 6e  0;.  int nRow, n
1e60: 43 6f 6c 3b 0a 20 20 63 68 61 72 20 2a 2a 61 52  Col;.  char **aR
1e70: 65 73 75 6c 74 3b 0a 20 20 69 6e 74 20 69 3b 0a  esult;.  int i;.
1e80: 20 20 63 68 61 72 20 7a 42 75 66 5b 33 30 5d 3b    char zBuf[30];
1e90: 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20  .  char *zSql;. 
1ea0: 20 69 66 28 20 61 72 67 63 21 3d 34 20 29 7b 0a   if( argc!=4 ){.
1eb0: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
1ec0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
1ed0: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
1ee0: 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
1ef0: 30 5d 2c 20 0a 20 20 20 20 20 20 20 22 20 44 42  0], .       " DB
1f00: 20 46 4f 52 4d 41 54 20 53 54 52 49 4e 47 22 2c   FORMAT STRING",
1f10: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
1f20: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
1f30: 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
1f40: 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31  r(interp, argv[1
1f50: 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e  ], &db) ) return
1f60: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63   TCL_ERROR;.  Tc
1f70: 6c 5f 44 53 74 72 69 6e 67 49 6e 69 74 28 26 73  l_DStringInit(&s
1f80: 74 72 29 3b 0a 20 20 7a 53 71 6c 20 3d 20 73 71  tr);.  zSql = sq
1f90: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 61 72  lite3_mprintf(ar
1fa0: 67 76 5b 32 5d 2c 61 72 67 76 5b 33 5d 29 3b 0a  gv[2],argv[3]);.
1fb0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 67    rc = sqlite3_g
1fc0: 65 74 5f 74 61 62 6c 65 28 64 62 2c 20 7a 53 71  et_table(db, zSq
1fd0: 6c 2c 20 26 61 52 65 73 75 6c 74 2c 20 26 6e 52  l, &aResult, &nR
1fe0: 6f 77 2c 20 26 6e 43 6f 6c 2c 20 26 7a 45 72 72  ow, &nCol, &zErr
1ff0: 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65  );.  sqlite3_fre
2000: 65 28 7a 53 71 6c 29 3b 0a 20 20 73 70 72 69 6e  e(zSql);.  sprin
2010: 74 66 28 7a 42 75 66 2c 20 22 25 64 22 2c 20 72  tf(zBuf, "%d", r
2020: 63 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64  c);.  Tcl_Append
2030: 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20  Element(interp, 
2040: 7a 42 75 66 29 3b 0a 20 20 69 66 28 20 72 63 3d  zBuf);.  if( rc=
2050: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
2060: 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20    sprintf(zBuf, 
2070: 22 25 64 22 2c 20 6e 52 6f 77 29 3b 0a 20 20 20  "%d", nRow);.   
2080: 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65   Tcl_AppendEleme
2090: 6e 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 29  nt(interp, zBuf)
20a0: 3b 0a 20 20 20 20 73 70 72 69 6e 74 66 28 7a 42  ;.    sprintf(zB
20b0: 75 66 2c 20 22 25 64 22 2c 20 6e 43 6f 6c 29 3b  uf, "%d", nCol);
20c0: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 45  .    Tcl_AppendE
20d0: 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 7a  lement(interp, z
20e0: 42 75 66 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  Buf);.    for(i=
20f0: 30 3b 20 69 3c 28 6e 52 6f 77 2b 31 29 2a 6e 43  0; i<(nRow+1)*nC
2100: 6f 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  ol; i++){.      
2110: 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e  Tcl_AppendElemen
2120: 74 28 69 6e 74 65 72 70 2c 20 61 52 65 73 75 6c  t(interp, aResul
2130: 74 5b 69 5d 20 3f 20 61 52 65 73 75 6c 74 5b 69  t[i] ? aResult[i
2140: 5d 20 3a 20 22 4e 55 4c 4c 22 29 3b 0a 20 20 20  ] : "NULL");.   
2150: 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
2160: 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e  Tcl_AppendElemen
2170: 74 28 69 6e 74 65 72 70 2c 20 7a 45 72 72 29 3b  t(interp, zErr);
2180: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66  .  }.  sqlite3_f
2190: 72 65 65 5f 74 61 62 6c 65 28 61 52 65 73 75 6c  ree_table(aResul
21a0: 74 29 3b 0a 20 20 69 66 28 20 7a 45 72 72 20 29  t);.  if( zErr )
21b0: 20 66 72 65 65 28 7a 45 72 72 29 3b 0a 20 20 69   free(zErr);.  i
21c0: 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72  f( sqlite3TestEr
21d0: 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62  rCode(interp, db
21e0: 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54  , rc) ) return T
21f0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74 75  CL_ERROR;.  retu
2200: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f  rn TCL_OK;.}.../
2210: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
2220: 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74  ite3_last_insert
2230: 5f 72 6f 77 69 64 20 44 42 0a 2a 2a 0a 2a 2a 20  _rowid DB.**.** 
2240: 52 65 74 75 72 6e 73 20 74 68 65 20 69 6e 74 65  Returns the inte
2250: 67 65 72 20 52 4f 57 49 44 20 6f 66 20 74 68 65  ger ROWID of the
2260: 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 69 6e 73   most recent ins
2270: 65 72 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ert..*/.static i
2280: 6e 74 20 74 65 73 74 5f 6c 61 73 74 5f 72 6f 77  nt test_last_row
2290: 69 64 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55  id(.  void *NotU
22a0: 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  sed,.  Tcl_Inter
22b0: 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
22c0: 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
22d0: 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
22e0: 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
22f0: 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20  /.  int argc,   
2300: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
2310: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
2320: 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72  s */.  char **ar
2330: 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  gv            /*
2340: 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72   Text of each ar
2350: 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73  gument */.){.  s
2360: 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 63 68  qlite3 *db;.  ch
2370: 61 72 20 7a 42 75 66 5b 33 30 5d 3b 0a 0a 20 20  ar zBuf[30];..  
2380: 69 66 28 20 61 72 67 63 21 3d 32 20 29 7b 0a 20  if( argc!=2 ){. 
2390: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
23a0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
23b0: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
23c0: 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30  d be \"", argv[0
23d0: 5d 2c 20 22 20 44 42 5c 22 22 2c 20 30 29 3b 0a  ], " DB\"", 0);.
23e0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
23f0: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
2400: 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
2410: 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64  erp, argv[1], &d
2420: 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
2430: 45 52 52 4f 52 3b 0a 20 20 73 70 72 69 6e 74 66  ERROR;.  sprintf
2440: 28 7a 42 75 66 2c 20 22 25 6c 6c 64 22 2c 20 73  (zBuf, "%lld", s
2450: 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65  qlite3_last_inse
2460: 72 74 5f 72 6f 77 69 64 28 64 62 29 29 3b 0a 20  rt_rowid(db));. 
2470: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
2480: 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20  t(interp, zBuf, 
2490: 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c  0);.  return SQL
24a0: 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  ITE_OK;.}../*.**
24b0: 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33   Usage:  sqlite3
24c0: 5f 6b 65 79 20 44 42 20 4b 45 59 0a 2a 2a 0a 2a  _key DB KEY.**.*
24d0: 2a 20 53 65 74 20 74 68 65 20 63 6f 64 65 63 20  * Set the codec 
24e0: 6b 65 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  key..*/.static i
24f0: 6e 74 20 74 65 73 74 5f 6b 65 79 28 0a 20 20 76  nt test_key(.  v
2500: 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20  oid *NotUsed,.  
2510: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
2520: 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43  rp,    /* The TC
2530: 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68  L interpreter th
2540: 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20  at invoked this 
2550: 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74  command */.  int
2560: 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20   argc,          
2570: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
2580: 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
2590: 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20  char **argv     
25a0: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f         /* Text o
25b0: 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20  f each argument 
25c0: 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  */.){.  sqlite3 
25d0: 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  *db;.  const cha
25e0: 72 20 2a 7a 4b 65 79 3b 0a 20 20 69 6e 74 20 6e  r *zKey;.  int n
25f0: 4b 65 79 3b 0a 20 20 69 66 28 20 61 72 67 63 21  Key;.  if( argc!
2600: 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =3 ){.    Tcl_Ap
2610: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
2620: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
2630: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
2640: 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20   argv[0],.      
2650: 20 22 20 46 49 4c 45 4e 41 4d 45 5c 22 22 2c 20   " FILENAME\"", 
2660: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
2670: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
2680: 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72  if( getDbPointer
2690: 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d  (interp, argv[1]
26a0: 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
26b0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 4b 65  TCL_ERROR;.  zKe
26c0: 79 20 3d 20 61 72 67 76 5b 32 5d 3b 0a 20 20 6e  y = argv[2];.  n
26d0: 4b 65 79 20 3d 20 73 74 72 6c 65 6e 28 7a 4b 65  Key = strlen(zKe
26e0: 79 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  y);.#ifdef SQLIT
26f0: 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20 73 71  E_HAS_CODEC.  sq
2700: 6c 69 74 65 33 5f 6b 65 79 28 64 62 2c 20 7a 4b  lite3_key(db, zK
2710: 65 79 2c 20 6e 4b 65 79 29 3b 0a 23 65 6e 64 69  ey, nKey);.#endi
2720: 66 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  f.  return TCL_O
2730: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
2740: 65 3a 20 20 73 71 6c 69 74 65 33 5f 72 65 6b 65  e:  sqlite3_reke
2750: 79 20 44 42 20 4b 45 59 0a 2a 2a 0a 2a 2a 20 43  y DB KEY.**.** C
2760: 68 61 6e 67 65 20 74 68 65 20 63 6f 64 65 63 20  hange the codec 
2770: 6b 65 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  key..*/.static i
2780: 6e 74 20 74 65 73 74 5f 72 65 6b 65 79 28 0a 20  nt test_rekey(. 
2790: 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a   void *NotUsed,.
27a0: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
27b0: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
27c0: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
27d0: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
27e0: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
27f0: 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20  nt argc,        
2800: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
2810: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
2820: 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20    char **argv   
2830: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
2840: 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e   of each argumen
2850: 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65  t */.){.  sqlite
2860: 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20 63  3 *db;.  const c
2870: 68 61 72 20 2a 7a 4b 65 79 3b 0a 20 20 69 6e 74  har *zKey;.  int
2880: 20 6e 4b 65 79 3b 0a 20 20 69 66 28 20 61 72 67   nKey;.  if( arg
2890: 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
28a0: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
28b0: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
28c0: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
28d0: 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20  ", argv[0],.    
28e0: 20 20 20 22 20 46 49 4c 45 4e 41 4d 45 5c 22 22     " FILENAME\""
28f0: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
2900: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
2910: 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74    if( getDbPoint
2920: 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  er(interp, argv[
2930: 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72  1], &db) ) retur
2940: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a  n TCL_ERROR;.  z
2950: 4b 65 79 20 3d 20 61 72 67 76 5b 32 5d 3b 0a 20  Key = argv[2];. 
2960: 20 6e 4b 65 79 20 3d 20 73 74 72 6c 65 6e 28 7a   nKey = strlen(z
2970: 4b 65 79 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  Key);.#ifdef SQL
2980: 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20  ITE_HAS_CODEC.  
2990: 73 71 6c 69 74 65 33 5f 72 65 6b 65 79 28 64 62  sqlite3_rekey(db
29a0: 2c 20 7a 4b 65 79 2c 20 6e 4b 65 79 29 3b 0a 23  , zKey, nKey);.#
29b0: 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e 20 54  endif.  return T
29c0: 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
29d0: 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f  Usage:  sqlite3_
29e0: 63 6c 6f 73 65 20 44 42 0a 2a 2a 0a 2a 2a 20 43  close DB.**.** C
29f0: 6c 6f 73 65 73 20 74 68 65 20 64 61 74 61 62 61  loses the databa
2a00: 73 65 20 6f 70 65 6e 65 64 20 62 79 20 73 71 6c  se opened by sql
2a10: 69 74 65 33 5f 6f 70 65 6e 2e 0a 2a 2f 0a 73 74  ite3_open..*/.st
2a20: 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65 5f  atic int sqlite_
2a30: 74 65 73 74 5f 63 6c 6f 73 65 28 0a 20 20 76 6f  test_close(.  vo
2a40: 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54  id *NotUsed,.  T
2a50: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
2a60: 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c  p,    /* The TCL
2a70: 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61   interpreter tha
2a80: 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63  t invoked this c
2a90: 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  ommand */.  int 
2aa0: 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20  argc,           
2ab0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
2ac0: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63  arguments */.  c
2ad0: 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20  har **argv      
2ae0: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
2af0: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a   each argument *
2b00: 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  /.){.  sqlite3 *
2b10: 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  db;.  int rc;.  
2b20: 69 66 28 20 61 72 67 63 21 3d 32 20 29 7b 0a 20  if( argc!=2 ){. 
2b30: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
2b40: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
2b50: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
2b60: 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30  d be \"", argv[0
2b70: 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 49 4c 45  ],.       " FILE
2b80: 4e 41 4d 45 5c 22 22 2c 20 30 29 3b 0a 20 20 20  NAME\"", 0);.   
2b90: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
2ba0: 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74  R;.  }.  if( get
2bb0: 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  DbPointer(interp
2bc0: 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20  , argv[1], &db) 
2bd0: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
2be0: 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  OR;.  rc = sqlit
2bf0: 65 33 5f 63 6c 6f 73 65 28 64 62 29 3b 0a 20 20  e3_close(db);.  
2c00: 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
2c10: 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 65 72  terp, (char *)er
2c20: 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c  rorName(rc), TCL
2c30: 5f 53 54 41 54 49 43 29 3b 0a 20 20 72 65 74 75  _STATIC);.  retu
2c40: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
2c50: 0a 2a 2a 20 49 6d 70 6c 65 6d 65 6e 74 61 74 69  .** Implementati
2c60: 6f 6e 20 6f 66 20 74 68 65 20 78 5f 63 6f 61 6c  on of the x_coal
2c70: 65 73 63 65 28 29 20 66 75 6e 63 74 69 6f 6e 2e  esce() function.
2c80: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 66  .** Return the f
2c90: 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 6e 6f  irst argument no
2ca0: 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d 65 6e 74 2e  n-NULL argument.
2cb0: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
2cc0: 69 66 6e 75 6c 6c 46 75 6e 63 28 73 71 6c 69 74  ifnullFunc(sqlit
2cd0: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74  e3_context *cont
2ce0: 65 78 74 2c 20 69 6e 74 20 61 72 67 63 2c 20 73  ext, int argc, s
2cf0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
2d00: 72 67 76 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20  rgv){.  int i;. 
2d10: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 61 72 67 63   for(i=0; i<argc
2d20: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20  ; i++){.    if( 
2d30: 53 51 4c 49 54 45 5f 4e 55 4c 4c 21 3d 73 71 6c  SQLITE_NULL!=sql
2d40: 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28  ite3_value_type(
2d50: 61 72 67 76 5b 69 5d 29 20 29 7b 0a 20 20 20 20  argv[i]) ){.    
2d60: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
2d70: 5f 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 73  _text(context, s
2d80: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
2d90: 74 28 61 72 67 76 5b 69 5d 29 2c 20 2d 31 2c 0a  t(argv[i]), -1,.
2da0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
2db0: 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20  _TRANSIENT);.   
2dc0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
2dd0: 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 20 73    }.}../*.** A s
2de0: 74 72 75 63 74 75 72 65 20 69 6e 74 6f 20 77 68  tructure into wh
2df0: 69 63 68 20 74 6f 20 61 63 63 75 6d 75 6c 61 74  ich to accumulat
2e00: 65 20 74 65 78 74 2e 0a 2a 2f 0a 73 74 72 75 63  e text..*/.struc
2e10: 74 20 64 73 74 72 20 7b 0a 20 20 69 6e 74 20 6e  t dstr {.  int n
2e20: 41 6c 6c 6f 63 3b 20 20 2f 2a 20 53 70 61 63 65  Alloc;  /* Space
2e30: 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20   allocated */.  
2e40: 69 6e 74 20 6e 55 73 65 64 3b 20 20 20 2f 2a 20  int nUsed;   /* 
2e50: 53 70 61 63 65 20 75 73 65 64 20 2a 2f 0a 20 20  Space used */.  
2e60: 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20  char *z;     /* 
2e70: 54 68 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a  The space */.};.
2e80: 0a 2f 2a 0a 2a 2a 20 41 70 70 65 6e 64 20 74 65  ./*.** Append te
2e90: 78 74 20 74 6f 20 61 20 64 73 74 72 0a 2a 2f 0a  xt to a dstr.*/.
2ea0: 73 74 61 74 69 63 20 76 6f 69 64 20 64 73 74 72  static void dstr
2eb0: 41 70 70 65 6e 64 28 73 74 72 75 63 74 20 64 73  Append(struct ds
2ec0: 74 72 20 2a 70 2c 20 63 6f 6e 73 74 20 63 68 61  tr *p, const cha
2ed0: 72 20 2a 7a 2c 20 69 6e 74 20 64 69 76 69 64 65  r *z, int divide
2ee0: 72 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 73 74  r){.  int n = st
2ef0: 72 6c 65 6e 28 7a 29 3b 0a 20 20 69 66 28 20 70  rlen(z);.  if( p
2f00: 2d 3e 6e 55 73 65 64 20 2b 20 6e 20 2b 20 32 20  ->nUsed + n + 2 
2f10: 3e 20 70 2d 3e 6e 41 6c 6c 6f 63 20 29 7b 0a 20  > p->nAlloc ){. 
2f20: 20 20 20 63 68 61 72 20 2a 7a 4e 65 77 3b 0a 20     char *zNew;. 
2f30: 20 20 20 70 2d 3e 6e 41 6c 6c 6f 63 20 3d 20 70     p->nAlloc = p
2f40: 2d 3e 6e 41 6c 6c 6f 63 2a 32 20 2b 20 6e 20 2b  ->nAlloc*2 + n +
2f50: 20 32 30 30 3b 0a 20 20 20 20 7a 4e 65 77 20 3d   200;.    zNew =
2f60: 20 73 71 6c 69 74 65 52 65 61 6c 6c 6f 63 28 70   sqliteRealloc(p
2f70: 2d 3e 7a 2c 20 70 2d 3e 6e 41 6c 6c 6f 63 29 3b  ->z, p->nAlloc);
2f80: 0a 20 20 20 20 69 66 28 20 7a 4e 65 77 3d 3d 30  .    if( zNew==0
2f90: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
2fa0: 46 72 65 65 28 70 2d 3e 7a 29 3b 0a 20 20 20 20  Free(p->z);.    
2fb0: 20 20 6d 65 6d 73 65 74 28 70 2c 20 30 2c 20 73    memset(p, 0, s
2fc0: 69 7a 65 6f 66 28 2a 70 29 29 3b 0a 20 20 20 20  izeof(*p));.    
2fd0: 20 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a    return;.    }.
2fe0: 20 20 20 20 70 2d 3e 7a 20 3d 20 7a 4e 65 77 3b      p->z = zNew;
2ff0: 0a 20 20 7d 0a 20 20 69 66 28 20 64 69 76 69 64  .  }.  if( divid
3000: 65 72 20 26 26 20 70 2d 3e 6e 55 73 65 64 3e 30  er && p->nUsed>0
3010: 20 29 7b 0a 20 20 20 20 70 2d 3e 7a 5b 70 2d 3e   ){.    p->z[p->
3020: 6e 55 73 65 64 2b 2b 5d 20 3d 20 64 69 76 69 64  nUsed++] = divid
3030: 65 72 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79  er;.  }.  memcpy
3040: 28 26 70 2d 3e 7a 5b 70 2d 3e 6e 55 73 65 64 5d  (&p->z[p->nUsed]
3050: 2c 20 7a 2c 20 6e 2b 31 29 3b 0a 20 20 70 2d 3e  , z, n+1);.  p->
3060: 6e 55 73 65 64 20 2b 3d 20 6e 3b 0a 7d 0a 0a 2f  nUsed += n;.}../
3070: 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 64 20 66 6f 72  *.** Invoked for
3080: 20 65 61 63 68 20 63 61 6c 6c 62 61 63 6b 20 66   each callback f
3090: 72 6f 6d 20 73 71 6c 69 74 65 33 45 78 65 63 46  rom sqlite3ExecF
30a0: 75 6e 63 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  unc.*/.static in
30b0: 74 20 65 78 65 63 46 75 6e 63 43 61 6c 6c 62 61  t execFuncCallba
30c0: 63 6b 28 76 6f 69 64 20 2a 70 44 61 74 61 2c 20  ck(void *pData, 
30d0: 69 6e 74 20 61 72 67 63 2c 20 63 68 61 72 20 2a  int argc, char *
30e0: 2a 61 72 67 76 2c 20 63 68 61 72 20 2a 2a 4e 6f  *argv, char **No
30f0: 74 55 73 65 64 29 7b 0a 20 20 73 74 72 75 63 74  tUsed){.  struct
3100: 20 64 73 74 72 20 2a 70 20 3d 20 28 73 74 72 75   dstr *p = (stru
3110: 63 74 20 64 73 74 72 2a 29 70 44 61 74 61 3b 0a  ct dstr*)pData;.
3120: 20 20 69 6e 74 20 69 3b 0a 20 20 66 6f 72 28 69    int i;.  for(i
3130: 3d 30 3b 20 69 3c 61 72 67 63 3b 20 69 2b 2b 29  =0; i<argc; i++)
3140: 7b 0a 20 20 20 20 69 66 28 20 61 72 67 76 5b 69  {.    if( argv[i
3150: 5d 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 73  ]==0 ){.      ds
3160: 74 72 41 70 70 65 6e 64 28 70 2c 20 22 4e 55 4c  trAppend(p, "NUL
3170: 4c 22 2c 20 27 20 27 29 3b 0a 20 20 20 20 7d 65  L", ' ');.    }e
3180: 6c 73 65 7b 0a 20 20 20 20 20 20 64 73 74 72 41  lse{.      dstrA
3190: 70 70 65 6e 64 28 70 2c 20 61 72 67 76 5b 69 5d  ppend(p, argv[i]
31a0: 2c 20 27 20 27 29 3b 0a 20 20 20 20 7d 0a 20 20  , ' ');.    }.  
31b0: 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a  }.  return 0;.}.
31c0: 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c 65 6d 65 6e 74  ./*.** Implement
31d0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 78 5f 73  ation of the x_s
31e0: 71 6c 69 74 65 5f 65 78 65 63 28 29 20 66 75 6e  qlite_exec() fun
31f0: 63 74 69 6f 6e 2e 20 20 54 68 69 73 20 66 75 6e  ction.  This fun
3200: 63 74 69 6f 6e 20 74 61 6b 65 73 0a 2a 2a 20 61  ction takes.** a
3210: 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74   single argument
3220: 20 61 6e 64 20 61 74 74 65 6d 70 74 73 20 74 6f   and attempts to
3230: 20 65 78 65 63 75 74 65 20 74 68 61 74 20 61 72   execute that ar
3240: 67 75 6d 65 6e 74 20 61 73 20 53 51 4c 20 63 6f  gument as SQL co
3250: 64 65 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 69  de..** This is i
3260: 6c 6c 65 67 61 6c 20 61 6e 64 20 73 68 6f 75 6c  llegal and shoul
3270: 64 20 73 65 74 20 74 68 65 20 53 51 4c 49 54 45  d set the SQLITE
3280: 5f 4d 49 53 55 53 45 20 66 6c 61 67 20 6f 6e 20  _MISUSE flag on 
3290: 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a 2a 2a  the database..**
32a0: 0a 2a 2a 20 32 30 30 34 2d 4a 61 6e 2d 30 37 3a  .** 2004-Jan-07:
32b0: 20 20 57 65 20 68 61 76 65 20 63 68 61 6e 67 65    We have change
32c0: 64 20 74 68 69 73 20 74 6f 20 6d 61 6b 65 20 69  d this to make i
32d0: 74 20 6c 65 67 61 6c 20 74 6f 20 63 61 6c 6c 20  t legal to call 
32e0: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 0a 2a  sqlite3_exec().*
32f0: 2a 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20  * from within a 
3300: 66 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 2e 20 20  function call.  
3310: 0a 2a 2a 20 0a 2a 2a 20 54 68 69 73 20 72 6f 75  .** .** This rou
3320: 74 69 6e 65 20 73 69 6d 75 6c 61 74 65 73 20 74  tine simulates t
3330: 68 65 20 65 66 66 65 63 74 20 6f 66 20 68 61 76  he effect of hav
3340: 69 6e 67 20 74 77 6f 20 74 68 72 65 61 64 73 20  ing two threads 
3350: 61 74 74 65 6d 70 74 20 74 6f 0a 2a 2a 20 75 73  attempt to.** us
3360: 65 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  e the same datab
3370: 61 73 65 20 61 74 20 74 68 65 20 73 61 6d 65 20  ase at the same 
3380: 74 69 6d 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  time..*/.static 
3390: 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 65 63  void sqlite3Exec
33a0: 46 75 6e 63 28 0a 20 20 73 71 6c 69 74 65 33 5f  Func(.  sqlite3_
33b0: 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78 74  context *context
33c0: 2c 20 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20  , .  int argc,  
33d0: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
33e0: 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 73 74 72   **argv.){.  str
33f0: 75 63 74 20 64 73 74 72 20 78 3b 0a 20 20 6d 65  uct dstr x;.  me
3400: 6d 73 65 74 28 26 78 2c 20 30 2c 20 73 69 7a 65  mset(&x, 0, size
3410: 6f 66 28 78 29 29 3b 0a 20 20 73 71 6c 69 74 65  of(x));.  sqlite
3420: 33 5f 65 78 65 63 28 28 73 71 6c 69 74 65 33 2a  3_exec((sqlite3*
3430: 29 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61  )sqlite3_user_da
3440: 74 61 28 63 6f 6e 74 65 78 74 29 2c 0a 20 20 20  ta(context),.   
3450: 20 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65     sqlite3_value
3460: 5f 74 65 78 74 28 61 72 67 76 5b 30 5d 29 2c 0a  _text(argv[0]),.
3470: 20 20 20 20 20 20 65 78 65 63 46 75 6e 63 43 61        execFuncCa
3480: 6c 6c 62 61 63 6b 2c 20 26 78 2c 20 30 29 3b 0a  llback, &x, 0);.
3490: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
34a0: 5f 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 78  _text(context, x
34b0: 2e 7a 2c 20 78 2e 6e 55 73 65 64 2c 20 53 51 4c  .z, x.nUsed, SQL
34c0: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a  ITE_TRANSIENT);.
34d0: 20 20 73 71 6c 69 74 65 46 72 65 65 28 78 2e 7a    sqliteFree(x.z
34e0: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  );.}../*.** Usag
34f0: 65 3a 20 20 73 71 6c 69 74 65 5f 74 65 73 74 5f  e:  sqlite_test_
3500: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 20  create_function 
3510: 44 42 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 74 68  DB.**.** Call th
3520: 65 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  e sqlite3_create
3530: 5f 66 75 6e 63 74 69 6f 6e 20 41 50 49 20 6f 6e  _function API on
3540: 20 74 68 65 20 67 69 76 65 6e 20 64 61 74 61 62   the given datab
3550: 61 73 65 20 69 6e 20 6f 72 64 65 72 0a 2a 2a 20  ase in order.** 
3560: 74 6f 20 63 72 65 61 74 65 20 61 20 66 75 6e 63  to create a func
3570: 74 69 6f 6e 20 6e 61 6d 65 64 20 22 78 5f 63 6f  tion named "x_co
3580: 61 6c 65 73 63 65 22 2e 20 20 54 68 69 73 20 66  alesce".  This f
3590: 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 74 68 65  unction does the
35a0: 20 73 61 6d 65 20 74 68 69 6e 67 0a 2a 2a 20 61   same thing.** a
35b0: 73 20 74 68 65 20 22 63 6f 61 6c 65 73 63 65 22  s the "coalesce"
35c0: 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 69 73   function.  This
35d0: 20 66 75 6e 63 74 69 6f 6e 20 61 6c 73 6f 20 72   function also r
35e0: 65 67 69 73 74 65 72 73 20 61 6e 20 53 51 4c 20  egisters an SQL 
35f0: 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6e 61 6d 65  function.** name
3600: 64 20 22 78 5f 73 71 6c 69 74 65 5f 65 78 65 63  d "x_sqlite_exec
3610: 22 20 74 68 61 74 20 69 6e 76 6f 6b 65 73 20 73  " that invokes s
3620: 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2e 20 20  qlite3_exec().  
3630: 49 6e 76 6f 6b 69 6e 67 20 73 71 6c 69 74 65 33  Invoking sqlite3
3640: 5f 65 78 65 63 28 29 0a 2a 2a 20 69 6e 20 74 68  _exec().** in th
3650: 69 73 20 77 61 79 20 69 73 20 69 6c 6c 65 67 61  is way is illega
3660: 6c 20 72 65 63 75 72 73 69 6f 6e 20 61 6e 64 20  l recursion and 
3670: 73 68 6f 75 6c 64 20 72 61 69 73 65 20 61 6e 20  should raise an 
3680: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72  SQLITE_MISUSE er
3690: 72 6f 72 2e 0a 2a 2a 20 54 68 65 20 65 66 66 65  ror..** The effe
36a0: 63 74 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f  ct is similar to
36b0: 20 74 72 79 69 6e 67 20 74 6f 20 75 73 65 20 74   trying to use t
36c0: 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
36d0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 72 6f 6d   connection from
36e0: 0a 2a 2a 20 74 77 6f 20 74 68 72 65 61 64 73 20  .** two threads 
36f0: 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65  at the same time
3700: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6f 72 69 67  ..**.** The orig
3710: 69 6e 61 6c 20 6d 6f 74 69 76 61 74 69 6f 6e 20  inal motivation 
3720: 66 6f 72 20 74 68 69 73 20 72 6f 75 74 69 6e 65  for this routine
3730: 20 77 61 73 20 74 6f 20 62 65 20 61 62 6c 65 20   was to be able 
3740: 74 6f 20 63 61 6c 6c 20 74 68 65 0a 2a 2a 20 73  to call the.** s
3750: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
3760: 6e 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20  nction function 
3770: 77 68 69 6c 65 20 61 20 71 75 65 72 79 20 69 73  while a query is
3780: 20 69 6e 20 70 72 6f 67 72 65 73 73 20 69 6e 20   in progress in 
3790: 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 74 65 73 74  order.** to test
37a0: 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 49 53 55   the SQLITE_MISU
37b0: 53 45 20 64 65 74 65 63 74 69 6f 6e 20 6c 6f 67  SE detection log
37c0: 69 63 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ic..*/.static in
37d0: 74 20 74 65 73 74 5f 63 72 65 61 74 65 5f 66 75  t test_create_fu
37e0: 6e 63 74 69 6f 6e 28 0a 20 20 76 6f 69 64 20 2a  nction(.  void *
37f0: 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49  NotUsed,.  Tcl_I
3800: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20  nterp *interp,  
3810: 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74    /* The TCL int
3820: 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e  erpreter that in
3830: 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61  voked this comma
3840: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63  nd */.  int argc
3850: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
3860: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
3870: 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20  ments */.  char 
3880: 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20  **argv          
3890: 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63    /* Text of eac
38a0: 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b  h argument */.){
38b0: 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 73 71 6c  .  int rc;.  sql
38c0: 69 74 65 33 20 2a 64 62 3b 0a 20 20 65 78 74 65  ite3 *db;.  exte
38d0: 72 6e 20 76 6f 69 64 20 4d 64 35 5f 52 65 67 69  rn void Md5_Regi
38e0: 73 74 65 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ster(sqlite3*);.
38f0: 0a 20 20 69 66 28 20 61 72 67 63 21 3d 32 20 29  .  if( argc!=2 )
3900: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
3910: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
3920: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
3930: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
3940: 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 44  v[0],.       " D
3950: 42 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  B\"", 0);.    re
3960: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
3970: 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
3980: 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61  ointer(interp, a
3990: 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72  rgv[1], &db) ) r
39a0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
39b0: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
39c0: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
39d0: 64 62 2c 20 22 78 5f 63 6f 61 6c 65 73 63 65 22  db, "x_coalesce"
39e0: 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 41 4e 59  , -1, SQLITE_ANY
39f0: 2c 20 30 2c 20 0a 20 20 20 20 20 20 20 20 69 66  , 0, .        if
3a00: 6e 75 6c 6c 46 75 6e 63 2c 20 30 2c 20 30 29 3b  nullFunc, 0, 0);
3a10: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
3a20: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 2f 2a  _OMIT_UTF16.  /*
3a30: 20 55 73 65 20 74 68 65 20 73 71 6c 69 74 65 33   Use the sqlite3
3a40: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
3a50: 31 36 28 29 20 41 50 49 20 68 65 72 65 2e 20 4d  16() API here. M
3a60: 61 69 6e 6c 79 20 66 6f 72 20 66 75 6e 2c 20 62  ainly for fun, b
3a70: 75 74 20 61 6c 73 6f 20 0a 20 20 2a 2a 20 62 65  ut also .  ** be
3a80: 63 61 75 73 65 20 69 74 20 69 73 20 6e 6f 74 20  cause it is not 
3a90: 74 65 73 74 65 64 20 61 6e 79 77 68 65 72 65 20  tested anywhere 
3aa0: 65 6c 73 65 2e 20 2a 2f 0a 20 20 69 66 28 20 72  else. */.  if( r
3ab0: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
3ac0: 20 20 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75      sqlite3_valu
3ad0: 65 20 2a 70 56 61 6c 3b 0a 20 20 20 20 70 56 61  e *pVal;.    pVa
3ae0: 6c 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65  l = sqlite3Value
3af0: 4e 65 77 28 29 3b 0a 20 20 20 20 73 71 6c 69 74  New();.    sqlit
3b00: 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 70 56  e3ValueSetStr(pV
3b10: 61 6c 2c 20 2d 31 2c 20 22 78 5f 73 71 6c 69 74  al, -1, "x_sqlit
3b20: 65 5f 65 78 65 63 22 2c 20 53 51 4c 49 54 45 5f  e_exec", SQLITE_
3b30: 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41  UTF8, SQLITE_STA
3b40: 54 49 43 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  TIC);.    rc = s
3b50: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
3b60: 6e 63 74 69 6f 6e 31 36 28 64 62 2c 20 0a 20 20  nction16(db, .  
3b70: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
3b80: 74 65 33 56 61 6c 75 65 54 65 78 74 28 70 56 61  te3ValueText(pVa
3b90: 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e  l, SQLITE_UTF16N
3ba0: 41 54 49 56 45 29 2c 0a 20 20 20 20 20 20 20 20  ATIVE),.        
3bb0: 20 20 20 20 20 20 31 2c 20 53 51 4c 49 54 45 5f        1, SQLITE_
3bc0: 55 54 46 31 36 2c 20 64 62 2c 20 73 71 6c 69 74  UTF16, db, sqlit
3bd0: 65 33 45 78 65 63 46 75 6e 63 2c 20 30 2c 20 30  e3ExecFunc, 0, 0
3be0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 61  );.    sqlite3Va
3bf0: 6c 75 65 46 72 65 65 28 70 56 61 6c 29 3b 0a 20  lueFree(pVal);. 
3c00: 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28   }.#endif..  if(
3c10: 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43   sqlite3TestErrC
3c20: 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20  ode(interp, db, 
3c30: 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  rc) ) return TCL
3c40: 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53 65  _ERROR;.  Tcl_Se
3c50: 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  tResult(interp, 
3c60: 28 63 68 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d  (char *)errorNam
3c70: 65 28 72 63 29 2c 20 30 29 3b 0a 20 20 72 65 74  e(rc), 0);.  ret
3c80: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
3c90: 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f  *.** Routines to
3ca0: 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 78   implement the x
3cb0: 5f 63 6f 75 6e 74 28 29 20 61 67 67 72 65 67 61  _count() aggrega
3cc0: 74 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a  te function..*/.
3cd0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 43  typedef struct C
3ce0: 6f 75 6e 74 43 74 78 20 43 6f 75 6e 74 43 74 78  ountCtx CountCtx
3cf0: 3b 0a 73 74 72 75 63 74 20 43 6f 75 6e 74 43 74  ;.struct CountCt
3d00: 78 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 7d 3b 0a  x {.  int n;.};.
3d10: 73 74 61 74 69 63 20 76 6f 69 64 20 63 6f 75 6e  static void coun
3d20: 74 53 74 65 70 28 73 71 6c 69 74 65 33 5f 63 6f  tStep(sqlite3_co
3d30: 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c 20  ntext *context, 
3d40: 69 6e 74 20 61 72 67 63 2c 20 73 71 6c 69 74 65  int argc, sqlite
3d50: 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76 29 7b  3_value **argv){
3d60: 0a 20 20 43 6f 75 6e 74 43 74 78 20 2a 70 3b 0a  .  CountCtx *p;.
3d70: 20 20 70 20 3d 20 73 71 6c 69 74 65 33 5f 61 67    p = sqlite3_ag
3d80: 67 72 65 67 61 74 65 5f 63 6f 6e 74 65 78 74 28  gregate_context(
3d90: 63 6f 6e 74 65 78 74 2c 20 73 69 7a 65 6f 66 28  context, sizeof(
3da0: 2a 70 29 29 3b 0a 20 20 69 66 28 20 28 61 72 67  *p));.  if( (arg
3db0: 63 3d 3d 30 20 7c 7c 20 53 51 4c 49 54 45 5f 4e  c==0 || SQLITE_N
3dc0: 55 4c 4c 21 3d 73 71 6c 69 74 65 33 5f 76 61 6c  ULL!=sqlite3_val
3dd0: 75 65 5f 74 79 70 65 28 61 72 67 76 5b 30 5d 29  ue_type(argv[0])
3de0: 20 29 20 26 26 20 70 20 29 7b 0a 20 20 20 20 70   ) && p ){.    p
3df0: 2d 3e 6e 2b 2b 3b 0a 20 20 7d 0a 7d 20 20 20 0a  ->n++;.  }.}   .
3e00: 73 74 61 74 69 63 20 76 6f 69 64 20 63 6f 75 6e  static void coun
3e10: 74 46 69 6e 61 6c 69 7a 65 28 73 71 6c 69 74 65  tFinalize(sqlite
3e20: 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65  3_context *conte
3e30: 78 74 29 7b 0a 20 20 43 6f 75 6e 74 43 74 78 20  xt){.  CountCtx 
3e40: 2a 70 3b 0a 20 20 70 20 3d 20 73 71 6c 69 74 65  *p;.  p = sqlite
3e50: 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 6e 74  3_aggregate_cont
3e60: 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 73 69 7a  ext(context, siz
3e70: 65 6f 66 28 2a 70 29 29 3b 0a 20 20 73 71 6c 69  eof(*p));.  sqli
3e80: 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28 63  te3_result_int(c
3e90: 6f 6e 74 65 78 74 2c 20 70 20 3f 20 70 2d 3e 6e  ontext, p ? p->n
3ea0: 20 3a 20 30 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20   : 0);.}../*.** 
3eb0: 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 5f 74  Usage:  sqlite_t
3ec0: 65 73 74 5f 63 72 65 61 74 65 5f 61 67 67 72 65  est_create_aggre
3ed0: 67 61 74 65 20 44 42 0a 2a 2a 0a 2a 2a 20 43 61  gate DB.**.** Ca
3ee0: 6c 6c 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63  ll the sqlite3_c
3ef0: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 20 41  reate_function A
3f00: 50 49 20 6f 6e 20 74 68 65 20 67 69 76 65 6e 20  PI on the given 
3f10: 64 61 74 61 62 61 73 65 20 69 6e 20 6f 72 64 65  database in orde
3f20: 72 0a 2a 2a 20 74 6f 20 63 72 65 61 74 65 20 61  r.** to create a
3f30: 20 66 75 6e 63 74 69 6f 6e 20 6e 61 6d 65 64 20   function named 
3f40: 22 78 5f 63 6f 75 6e 74 22 2e 20 20 54 68 69 73  "x_count".  This
3f50: 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 74   function does t
3f60: 68 65 20 73 61 6d 65 20 74 68 69 6e 67 0a 2a 2a  he same thing.**
3f70: 20 61 73 20 74 68 65 20 22 6d 64 35 73 75 6d 22   as the "md5sum"
3f80: 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a   function..**.**
3f90: 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 6d 6f   The original mo
3fa0: 74 69 76 61 74 69 6f 6e 20 66 6f 72 20 74 68 69  tivation for thi
3fb0: 73 20 72 6f 75 74 69 6e 65 20 77 61 73 20 74 6f  s routine was to
3fc0: 20 62 65 20 61 62 6c 65 20 74 6f 20 63 61 6c 6c   be able to call
3fd0: 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f   the.** sqlite3_
3fe0: 63 72 65 61 74 65 5f 61 67 67 72 65 67 61 74 65  create_aggregate
3ff0: 20 66 75 6e 63 74 69 6f 6e 20 77 68 69 6c 65 20   function while 
4000: 61 20 71 75 65 72 79 20 69 73 20 69 6e 20 70 72  a query is in pr
4010: 6f 67 72 65 73 73 20 69 6e 20 6f 72 64 65 72 0a  ogress in order.
4020: 2a 2a 20 74 6f 20 74 65 73 74 20 74 68 65 20 53  ** to test the S
4030: 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 64 65 74  QLITE_MISUSE det
4040: 65 63 74 69 6f 6e 20 6c 6f 67 69 63 2e 0a 2a 2f  ection logic..*/
4050: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
4060: 5f 63 72 65 61 74 65 5f 61 67 67 72 65 67 61 74  _create_aggregat
4070: 65 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73  e(.  void *NotUs
4080: 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ed,.  Tcl_Interp
4090: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
40a0: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
40b0: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
40c0: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
40d0: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20  .  int argc,    
40e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
40f0: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
4100: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67   */.  char **arg
4110: 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  v            /* 
4120: 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67  Text of each arg
4130: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71  ument */.){.  sq
4140: 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74  lite3 *db;.  int
4150: 20 72 63 3b 0a 20 20 69 66 28 20 61 72 67 63 21   rc;.  if( argc!
4160: 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =2 ){.    Tcl_Ap
4170: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
4180: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
4190: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
41a0: 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20   argv[0],.      
41b0: 20 22 20 46 49 4c 45 4e 41 4d 45 5c 22 22 2c 20   " FILENAME\"", 
41c0: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
41d0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
41e0: 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72  if( getDbPointer
41f0: 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d  (interp, argv[1]
4200: 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
4210: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20  TCL_ERROR;.  rc 
4220: 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  = sqlite3_create
4230: 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22 78  _function(db, "x
4240: 5f 63 6f 75 6e 74 22 2c 20 30 2c 20 53 51 4c 49  _count", 0, SQLI
4250: 54 45 5f 55 54 46 38 2c 20 30 2c 20 30 2c 0a 20  TE_UTF8, 0, 0,. 
4260: 20 20 20 20 20 63 6f 75 6e 74 53 74 65 70 2c 63       countStep,c
4270: 6f 75 6e 74 46 69 6e 61 6c 69 7a 65 29 3b 0a 20  ountFinalize);. 
4280: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
4290: 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  OK ){.    sqlite
42a0: 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
42b0: 6e 28 64 62 2c 20 22 78 5f 63 6f 75 6e 74 22 2c  n(db, "x_count",
42c0: 20 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c   1, SQLITE_UTF8,
42d0: 20 30 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 63   0, 0,.        c
42e0: 6f 75 6e 74 53 74 65 70 2c 63 6f 75 6e 74 46 69  ountStep,countFi
42f0: 6e 61 6c 69 7a 65 29 3b 0a 20 20 7d 0a 20 20 69  nalize);.  }.  i
4300: 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72  f( sqlite3TestEr
4310: 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62  rCode(interp, db
4320: 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54  , rc) ) return T
4330: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74 75  CL_ERROR;.  retu
4340: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 0a  rn TCL_OK;.}....
4350: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
4360: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e  lite3_mprintf_in
4370: 74 20 46 4f 52 4d 41 54 20 49 4e 54 45 47 45 52  t FORMAT INTEGER
4380: 20 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45 52   INTEGER INTEGER
4390: 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69  .**.** Call mpri
43a0: 6e 74 66 20 77 69 74 68 20 74 68 72 65 65 20 69  ntf with three i
43b0: 6e 74 65 67 65 72 20 61 72 67 75 6d 65 6e 74 73  nteger arguments
43c0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73  .*/.static int s
43d0: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69  qlite3_mprintf_i
43e0: 6e 74 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55  nt(.  void *NotU
43f0: 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  sed,.  Tcl_Inter
4400: 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
4410: 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
4420: 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
4430: 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
4440: 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20  /.  int argc,   
4450: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
4460: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
4470: 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72  s */.  char **ar
4480: 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  gv            /*
4490: 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72   Text of each ar
44a0: 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69  gument */.){.  i
44b0: 6e 74 20 61 5b 33 5d 2c 20 69 3b 0a 20 20 63 68  nt a[3], i;.  ch
44c0: 61 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72 67  ar *z;.  if( arg
44d0: 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=5 ){.    Tcl_
44e0: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
44f0: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
4500: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
4510: 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20  ", argv[0],.    
4520: 20 20 20 22 20 46 4f 52 4d 41 54 20 49 4e 54 20     " FORMAT INT 
4530: 49 4e 54 20 49 4e 54 5c 22 22 2c 20 30 29 3b 0a  INT INT\"", 0);.
4540: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
4550: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 66 6f 72 28  RROR;.  }.  for(
4560: 69 3d 32 3b 20 69 3c 35 3b 20 69 2b 2b 29 7b 0a  i=2; i<5; i++){.
4570: 20 20 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49      if( Tcl_GetI
4580: 6e 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  nt(interp, argv[
4590: 69 5d 2c 20 26 61 5b 69 2d 32 5d 29 20 29 20 72  i], &a[i-2]) ) r
45a0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
45b0: 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74  .  }.  z = sqlit
45c0: 65 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b  e3_mprintf(argv[
45d0: 31 5d 2c 20 61 5b 30 5d 2c 20 61 5b 31 5d 2c 20  1], a[0], a[1], 
45e0: 61 5b 32 5d 29 3b 0a 20 20 54 63 6c 5f 41 70 70  a[2]);.  Tcl_App
45f0: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
4600: 2c 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74  , z, 0);.  sqlit
4610: 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65  e3_free(z);.  re
4620: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
4630: 2f 2a 0a 2a 2a 20 49 66 20 7a 4e 75 6d 20 72 65  /*.** If zNum re
4640: 70 72 65 73 65 6e 74 73 20 61 6e 20 69 6e 74 65  presents an inte
4650: 67 65 72 20 74 68 61 74 20 77 69 6c 6c 20 66 69  ger that will fi
4660: 74 20 69 6e 20 36 34 2d 62 69 74 73 2c 20 74 68  t in 64-bits, th
4670: 65 6e 20 73 65 74 0a 2a 2a 20 2a 70 56 61 6c 75  en set.** *pValu
4680: 65 20 74 6f 20 74 68 61 74 20 69 6e 74 65 67 65  e to that intege
4690: 72 20 61 6e 64 20 72 65 74 75 72 6e 20 74 72 75  r and return tru
46a0: 65 2e 20 20 4f 74 68 65 72 77 69 73 65 20 72 65  e.  Otherwise re
46b0: 74 75 72 6e 20 66 61 6c 73 65 2e 0a 2a 2f 0a 73  turn false..*/.s
46c0: 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65  tatic int sqlite
46d0: 33 47 65 74 49 6e 74 36 34 28 63 6f 6e 73 74 20  3GetInt64(const 
46e0: 63 68 61 72 20 2a 7a 4e 75 6d 2c 20 69 36 34 20  char *zNum, i64 
46f0: 2a 70 56 61 6c 75 65 29 7b 0a 20 20 69 66 28 20  *pValue){.  if( 
4700: 73 71 6c 69 74 65 33 46 69 74 73 49 6e 36 34 42  sqlite3FitsIn64B
4710: 69 74 73 28 7a 4e 75 6d 29 20 29 7b 0a 20 20 20  its(zNum) ){.   
4720: 20 73 71 6c 69 74 65 33 61 74 6f 69 36 34 28 7a   sqlite3atoi64(z
4730: 4e 75 6d 2c 20 70 56 61 6c 75 65 29 3b 0a 20 20  Num, pValue);.  
4740: 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a    return 1;.  }.
4750: 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f    return 0;.}../
4760: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
4770: 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74  ite3_mprintf_int
4780: 36 34 20 46 4f 52 4d 41 54 20 49 4e 54 45 47 45  64 FORMAT INTEGE
4790: 52 20 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45  R INTEGER INTEGE
47a0: 52 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72  R.**.** Call mpr
47b0: 69 6e 74 66 20 77 69 74 68 20 74 68 72 65 65 20  intf with three 
47c0: 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 61  64-bit integer a
47d0: 72 67 75 6d 65 6e 74 73 0a 2a 2f 0a 73 74 61 74  rguments.*/.stat
47e0: 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d  ic int sqlite3_m
47f0: 70 72 69 6e 74 66 5f 69 6e 74 36 34 28 0a 20 20  printf_int64(.  
4800: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
4810: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
4820: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
4830: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
4840: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
4850: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
4860: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
4870: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
4880: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
4890: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
48a0: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
48b0: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
48c0: 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a   */.){.  int i;.
48d0: 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 61    sqlite_int64 a
48e0: 5b 33 5d 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a  [3];.  char *z;.
48f0: 20 20 69 66 28 20 61 72 67 63 21 3d 35 20 29 7b    if( argc!=5 ){
4900: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
4910: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
4920: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
4930: 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76  uld be \"", argv
4940: 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 4f  [0],.       " FO
4950: 52 4d 41 54 20 49 4e 54 20 49 4e 54 20 49 4e 54  RMAT INT INT INT
4960: 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  \"", 0);.    ret
4970: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
4980: 20 7d 0a 20 20 66 6f 72 28 69 3d 32 3b 20 69 3c   }.  for(i=2; i<
4990: 35 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28  5; i++){.    if(
49a0: 20 21 73 71 6c 69 74 65 33 47 65 74 49 6e 74 36   !sqlite3GetInt6
49b0: 34 28 61 72 67 76 5b 69 5d 2c 20 26 61 5b 69 2d  4(argv[i], &a[i-
49c0: 32 5d 29 20 29 7b 0a 20 20 20 20 20 20 54 63 6c  2]) ){.      Tcl
49d0: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
49e0: 74 65 72 70 2c 20 22 61 72 67 75 6d 65 6e 74 20  terp, "argument 
49f0: 69 73 20 6e 6f 74 20 61 20 76 61 6c 69 64 20 36  is not a valid 6
4a00: 34 2d 62 69 74 20 69 6e 74 65 67 65 72 22 2c 20  4-bit integer", 
4a10: 30 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  0);.      return
4a20: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20   TCL_ERROR;.    
4a30: 7d 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69  }.  }.  z = sqli
4a40: 74 65 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76  te3_mprintf(argv
4a50: 5b 31 5d 2c 20 61 5b 30 5d 2c 20 61 5b 31 5d 2c  [1], a[0], a[1],
4a60: 20 61 5b 32 5d 29 3b 0a 20 20 54 63 6c 5f 41 70   a[2]);.  Tcl_Ap
4a70: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
4a80: 70 2c 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69  p, z, 0);.  sqli
4a90: 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72  te3_free(z);.  r
4aa0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
4ab0: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
4ac0: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73  qlite3_mprintf_s
4ad0: 74 72 20 46 4f 52 4d 41 54 20 49 4e 54 45 47 45  tr FORMAT INTEGE
4ae0: 52 20 49 4e 54 45 47 45 52 20 53 54 52 49 4e 47  R INTEGER STRING
4af0: 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69  .**.** Call mpri
4b00: 6e 74 66 20 77 69 74 68 20 74 77 6f 20 69 6e 74  ntf with two int
4b10: 65 67 65 72 20 61 72 67 75 6d 65 6e 74 73 20 61  eger arguments a
4b20: 6e 64 20 6f 6e 65 20 73 74 72 69 6e 67 20 61 72  nd one string ar
4b30: 67 75 6d 65 6e 74 0a 2a 2f 0a 73 74 61 74 69 63  gument.*/.static
4b40: 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 70 72   int sqlite3_mpr
4b50: 69 6e 74 66 5f 73 74 72 28 0a 20 20 76 6f 69 64  intf_str(.  void
4b60: 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c   *NotUsed,.  Tcl
4b70: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
4b80: 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69      /* The TCL i
4b90: 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20  nterpreter that 
4ba0: 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d  invoked this com
4bb0: 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72  mand */.  int ar
4bc0: 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  gc,             
4bd0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
4be0: 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61  guments */.  cha
4bf0: 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20  r **argv        
4c00: 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65      /* Text of e
4c10: 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  ach argument */.
4c20: 29 7b 0a 20 20 69 6e 74 20 61 5b 33 5d 2c 20 69  ){.  int a[3], i
4c30: 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69  ;.  char *z;.  i
4c40: 66 28 20 61 72 67 63 3c 34 20 7c 7c 20 61 72 67  f( argc<4 || arg
4c50: 63 3e 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  c>5 ){.    Tcl_A
4c60: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
4c70: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
4c80: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
4c90: 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20  , argv[0],.     
4ca0: 20 20 22 20 46 4f 52 4d 41 54 20 49 4e 54 20 49    " FORMAT INT I
4cb0: 4e 54 20 3f 53 54 52 49 4e 47 3f 5c 22 22 2c 20  NT ?STRING?\"", 
4cc0: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
4cd0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
4ce0: 66 6f 72 28 69 3d 32 3b 20 69 3c 34 3b 20 69 2b  for(i=2; i<4; i+
4cf0: 2b 29 7b 0a 20 20 20 20 69 66 28 20 54 63 6c 5f  +){.    if( Tcl_
4d00: 47 65 74 49 6e 74 28 69 6e 74 65 72 70 2c 20 61  GetInt(interp, a
4d10: 72 67 76 5b 69 5d 2c 20 26 61 5b 69 2d 32 5d 29  rgv[i], &a[i-2])
4d20: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
4d30: 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 73  ROR;.  }.  z = s
4d40: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 61  qlite3_mprintf(a
4d50: 72 67 76 5b 31 5d 2c 20 61 5b 30 5d 2c 20 61 5b  rgv[1], a[0], a[
4d60: 31 5d 2c 20 61 72 67 63 3e 34 20 3f 20 61 72 67  1], argc>4 ? arg
4d70: 76 5b 34 5d 20 3a 20 4e 55 4c 4c 29 3b 0a 20 20  v[4] : NULL);.  
4d80: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
4d90: 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a  (interp, z, 0);.
4da0: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
4db0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
4dc0: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
4dd0: 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70 72  ge:  sqlite3_mpr
4de0: 69 6e 74 66 5f 73 74 72 20 46 4f 52 4d 41 54 20  intf_str FORMAT 
4df0: 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45 52 20  INTEGER INTEGER 
4e00: 44 4f 55 42 4c 45 0a 2a 2a 0a 2a 2a 20 43 61 6c  DOUBLE.**.** Cal
4e10: 6c 20 6d 70 72 69 6e 74 66 20 77 69 74 68 20 74  l mprintf with t
4e20: 77 6f 20 69 6e 74 65 67 65 72 20 61 72 67 75 6d  wo integer argum
4e30: 65 6e 74 73 20 61 6e 64 20 6f 6e 65 20 64 6f 75  ents and one dou
4e40: 62 6c 65 20 61 72 67 75 6d 65 6e 74 0a 2a 2f 0a  ble argument.*/.
4e50: 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74  static int sqlit
4e60: 65 33 5f 6d 70 72 69 6e 74 66 5f 64 6f 75 62 6c  e3_mprintf_doubl
4e70: 65 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73  e(.  void *NotUs
4e80: 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ed,.  Tcl_Interp
4e90: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
4ea0: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
4eb0: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
4ec0: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
4ed0: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20  .  int argc,    
4ee0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
4ef0: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
4f00: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67   */.  char **arg
4f10: 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  v            /* 
4f20: 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67  Text of each arg
4f30: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e  ument */.){.  in
4f40: 74 20 61 5b 33 5d 2c 20 69 3b 0a 20 20 64 6f 75  t a[3], i;.  dou
4f50: 62 6c 65 20 72 3b 0a 20 20 63 68 61 72 20 2a 7a  ble r;.  char *z
4f60: 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 35 20  ;.  if( argc!=5 
4f70: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
4f80: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
4f90: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
4fa0: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72  hould be \"", ar
4fb0: 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20  gv[0],.       " 
4fc0: 46 4f 52 4d 41 54 20 49 4e 54 20 49 4e 54 20 53  FORMAT INT INT S
4fd0: 54 52 49 4e 47 5c 22 22 2c 20 30 29 3b 0a 20 20  TRING\"", 0);.  
4fe0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
4ff0: 4f 52 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d  OR;.  }.  for(i=
5000: 32 3b 20 69 3c 34 3b 20 69 2b 2b 29 7b 0a 20 20  2; i<4; i++){.  
5010: 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
5020: 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 69 5d  (interp, argv[i]
5030: 2c 20 26 61 5b 69 2d 32 5d 29 20 29 20 72 65 74  , &a[i-2]) ) ret
5040: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
5050: 20 7d 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74   }.  if( Tcl_Get
5060: 44 6f 75 62 6c 65 28 69 6e 74 65 72 70 2c 20 61  Double(interp, a
5070: 72 67 76 5b 34 5d 2c 20 26 72 29 20 29 20 72 65  rgv[4], &r) ) re
5080: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
5090: 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70    z = sqlite3_mp
50a0: 72 69 6e 74 66 28 61 72 67 76 5b 31 5d 2c 20 61  rintf(argv[1], a
50b0: 5b 30 5d 2c 20 61 5b 31 5d 2c 20 72 29 3b 0a 20  [0], a[1], r);. 
50c0: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
50d0: 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b  t(interp, z, 0);
50e0: 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  .  sqlite3_free(
50f0: 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  z);.  return TCL
5100: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
5110: 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70  age:  sqlite3_mp
5120: 72 69 6e 74 66 5f 73 74 72 20 46 4f 52 4d 41 54  rintf_str FORMAT
5130: 20 44 4f 55 42 4c 45 20 44 4f 55 42 4c 45 0a 2a   DOUBLE DOUBLE.*
5140: 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e 74  *.** Call mprint
5150: 66 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20  f with a single 
5160: 64 6f 75 62 6c 65 20 61 72 67 75 6d 65 6e 74 20  double argument 
5170: 77 68 69 63 68 20 69 73 20 74 68 65 20 70 72 6f  which is the pro
5180: 64 75 63 74 20 6f 66 20 74 68 65 0a 2a 2a 20 74  duct of the.** t
5190: 77 6f 20 61 72 67 75 6d 65 6e 74 73 20 67 69 76  wo arguments giv
51a0: 65 6e 20 61 62 6f 76 65 2e 20 20 54 68 69 73 20  en above.  This 
51b0: 69 73 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72  is used to gener
51c0: 61 74 65 20 6f 76 65 72 66 6c 6f 77 20 61 6e 64  ate overflow and
51d0: 20 75 6e 64 65 72 66 6c 6f 77 0a 2a 2a 20 64 6f   underflow.** do
51e0: 75 62 6c 65 73 20 74 6f 20 74 65 73 74 20 74 68  ubles to test th
51f0: 61 74 20 74 68 65 79 20 61 72 65 20 63 6f 6e 76  at they are conv
5200: 65 72 74 65 64 20 70 72 6f 70 65 72 6c 79 2e 0a  erted properly..
5210: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71  */.static int sq
5220: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 63  lite3_mprintf_sc
5230: 61 6c 65 64 28 0a 20 20 76 6f 69 64 20 2a 4e 6f  aled(.  void *No
5240: 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74  tUsed,.  Tcl_Int
5250: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
5260: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
5270: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
5280: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
5290: 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20   */.  int argc, 
52a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
52b0: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
52c0: 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  nts */.  char **
52d0: 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20  argv            
52e0: 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20  /* Text of each 
52f0: 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20  argument */.){. 
5300: 20 69 6e 74 20 69 3b 0a 20 20 64 6f 75 62 6c 65   int i;.  double
5310: 20 72 5b 32 5d 3b 0a 20 20 63 68 61 72 20 2a 7a   r[2];.  char *z
5320: 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 34 20  ;.  if( argc!=4 
5330: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
5340: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
5350: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
5360: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72  hould be \"", ar
5370: 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20  gv[0],.       " 
5380: 46 4f 52 4d 41 54 20 44 4f 55 42 4c 45 20 44 4f  FORMAT DOUBLE DO
5390: 55 42 4c 45 5c 22 22 2c 20 30 29 3b 0a 20 20 20  UBLE\"", 0);.   
53a0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
53b0: 52 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 32  R;.  }.  for(i=2
53c0: 3b 20 69 3c 34 3b 20 69 2b 2b 29 7b 0a 20 20 20  ; i<4; i++){.   
53d0: 20 69 66 28 20 54 63 6c 5f 47 65 74 44 6f 75 62   if( Tcl_GetDoub
53e0: 6c 65 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  le(interp, argv[
53f0: 69 5d 2c 20 26 72 5b 69 2d 32 5d 29 20 29 20 72  i], &r[i-2]) ) r
5400: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
5410: 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74  .  }.  z = sqlit
5420: 65 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b  e3_mprintf(argv[
5430: 31 5d 2c 20 72 5b 30 5d 2a 72 5b 31 5d 29 3b 0a  1], r[0]*r[1]);.
5440: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
5450: 6c 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29  lt(interp, z, 0)
5460: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65  ;.  sqlite3_free
5470: 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  (z);.  return TC
5480: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
5490: 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d  sage:  sqlite3_m
54a0: 70 72 69 6e 74 66 5f 73 74 72 6f 6e 6c 79 20 46  printf_stronly F
54b0: 4f 52 4d 41 54 20 53 54 52 49 4e 47 0a 2a 2a 0a  ORMAT STRING.**.
54c0: 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20  ** Call mprintf 
54d0: 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 64 6f  with a single do
54e0: 75 62 6c 65 20 61 72 67 75 6d 65 6e 74 20 77 68  uble argument wh
54f0: 69 63 68 20 69 73 20 74 68 65 20 70 72 6f 64 75  ich is the produ
5500: 63 74 20 6f 66 20 74 68 65 0a 2a 2a 20 74 77 6f  ct of the.** two
5510: 20 61 72 67 75 6d 65 6e 74 73 20 67 69 76 65 6e   arguments given
5520: 20 61 62 6f 76 65 2e 20 20 54 68 69 73 20 69 73   above.  This is
5530: 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74   used to generat
5540: 65 20 6f 76 65 72 66 6c 6f 77 20 61 6e 64 20 75  e overflow and u
5550: 6e 64 65 72 66 6c 6f 77 0a 2a 2a 20 64 6f 75 62  nderflow.** doub
5560: 6c 65 73 20 74 6f 20 74 65 73 74 20 74 68 61 74  les to test that
5570: 20 74 68 65 79 20 61 72 65 20 63 6f 6e 76 65 72   they are conver
5580: 74 65 64 20 70 72 6f 70 65 72 6c 79 2e 0a 2a 2f  ted properly..*/
5590: 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69  .static int sqli
55a0: 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72 6f  te3_mprintf_stro
55b0: 6e 6c 79 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74  nly(.  void *Not
55c0: 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Used,.  Tcl_Inte
55d0: 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
55e0: 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
55f0: 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
5600: 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
5610: 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20  */.  int argc,  
5620: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
5630: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
5640: 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  ts */.  char **a
5650: 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f  rgv            /
5660: 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61  * Text of each a
5670: 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20  rgument */.){.  
5680: 63 68 61 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61  char *z;.  if( a
5690: 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63  rgc!=3 ){.    Tc
56a0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
56b0: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
56c0: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
56d0: 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20  \"", argv[0],.  
56e0: 20 20 20 20 20 22 20 46 4f 52 4d 41 54 20 53 54       " FORMAT ST
56f0: 52 49 4e 47 5c 22 22 2c 20 30 29 3b 0a 20 20 20  RING\"", 0);.   
5700: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
5710: 52 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c  R;.  }.  z = sql
5720: 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 61 72 67  ite3_mprintf(arg
5730: 76 5b 31 5d 2c 20 61 72 67 76 5b 32 5d 29 3b 0a  v[1], argv[2]);.
5740: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
5750: 6c 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29  lt(interp, z, 0)
5760: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65  ;.  sqlite3_free
5770: 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  (z);.  return TC
5780: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
5790: 73 61 67 65 3a 20 73 71 6c 69 74 65 5f 6d 61 6c  sage: sqlite_mal
57a0: 6c 6f 63 5f 66 61 69 6c 20 4e 20 20 3f 52 45 50  loc_fail N  ?REP
57b0: 45 41 54 2d 49 4e 54 45 52 56 41 4c 3f 0a 2a 2a  EAT-INTERVAL?.**
57c0: 0a 2a 2a 20 52 69 67 20 73 71 6c 69 74 65 4d 61  .** Rig sqliteMa
57d0: 6c 6c 6f 63 28 29 20 74 6f 20 66 61 69 6c 20 6f  lloc() to fail o
57e0: 6e 20 74 68 65 20 4e 2d 74 68 20 63 61 6c 6c 20  n the N-th call 
57f0: 61 6e 64 20 65 76 65 72 79 20 52 45 50 45 41 54  and every REPEAT
5800: 2d 49 4e 54 45 52 56 41 4c 20 63 61 6c 6c 0a 2a  -INTERVAL call.*
5810: 2a 20 61 66 74 65 72 20 74 68 61 74 2e 20 20 49  * after that.  I
5820: 66 20 52 45 50 45 41 54 2d 49 4e 54 45 52 56 41  f REPEAT-INTERVA
5830: 4c 20 69 73 20 30 20 6f 72 20 69 73 20 6f 6d 69  L is 0 or is omi
5840: 74 74 65 64 2c 20 74 68 65 6e 20 6f 6e 6c 79 20  tted, then only 
5850: 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 6d 61 6c 6c  a single.** mall
5860: 6f 63 20 77 69 6c 6c 20 66 61 69 6c 2e 20 20 49  oc will fail.  I
5870: 66 20 52 45 50 45 41 54 2d 49 4e 54 45 52 56 41  f REPEAT-INTERVA
5880: 4c 20 69 73 20 31 20 74 68 65 6e 20 61 6c 6c 20  L is 1 then all 
5890: 6d 61 6c 6c 6f 63 73 20 61 66 74 65 72 20 74 68  mallocs after th
58a0: 65 0a 2a 2a 20 66 69 72 73 74 20 66 61 69 6c 75  e.** first failu
58b0: 72 65 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75 65  re will continue
58c0: 20 74 6f 20 66 61 69 6c 20 6f 6e 20 65 76 65 72   to fail on ever
58d0: 79 20 63 61 6c 6c 2e 20 20 49 66 20 52 45 50 45  y call.  If REPE
58e0: 41 54 2d 49 4e 54 45 52 56 41 4c 20 69 73 0a 2a  AT-INTERVAL is.*
58f0: 2a 20 32 20 74 68 65 6e 20 65 76 65 72 79 20 6f  * 2 then every o
5900: 74 68 65 72 20 6d 61 6c 6c 6f 63 20 77 69 6c 6c  ther malloc will
5910: 20 66 61 69 6c 2e 20 20 41 6e 64 20 73 6f 20 66   fail.  And so f
5920: 6f 72 74 68 2e 0a 2a 2a 0a 2a 2a 20 54 75 72 6e  orth..**.** Turn
5930: 20 6f 66 66 20 74 68 69 73 20 6d 65 63 68 61 6e   off this mechan
5940: 69 73 6d 20 61 6e 64 20 72 65 73 65 74 20 74 68  ism and reset th
5950: 65 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  e sqlite3_malloc
5960: 5f 66 61 69 6c 65 64 20 76 61 72 69 61 62 6c 65  _failed variable
5970: 20 69 73 20 4e 3d 3d 30 2e 0a 2a 2f 0a 23 69 66   is N==0..*/.#if
5980: 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45  def SQLITE_MEMDE
5990: 42 55 47 0a 73 74 61 74 69 63 20 69 6e 74 20 73  BUG.static int s
59a0: 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 66 61 69  qlite_malloc_fai
59b0: 6c 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73  l(.  void *NotUs
59c0: 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ed,.  Tcl_Interp
59d0: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
59e0: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
59f0: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
5a00: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
5a10: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20  .  int argc,    
5a20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
5a30: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
5a40: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67   */.  char **arg
5a50: 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  v            /* 
5a60: 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67  Text of each arg
5a70: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e  ument */.){.  in
5a80: 74 20 6e 3b 0a 20 20 69 6e 74 20 72 65 70 3b 0a  t n;.  int rep;.
5a90: 20 20 69 66 28 20 61 72 67 63 21 3d 32 20 26 26    if( argc!=2 &&
5aa0: 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20   argc!=3 ){.    
5ab0: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
5ac0: 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
5ad0: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
5ae0: 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20  e \"", argv[0], 
5af0: 22 20 4e 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20  " N\"", 0);.    
5b00: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
5b10: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 54 63 6c 5f  ;.  }.  if( Tcl_
5b20: 47 65 74 49 6e 74 28 69 6e 74 65 72 70 2c 20 61  GetInt(interp, a
5b30: 72 67 76 5b 31 5d 2c 20 26 6e 29 20 29 20 72 65  rgv[1], &n) ) re
5b40: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
5b50: 20 20 69 66 28 20 61 72 67 63 3d 3d 33 20 29 7b    if( argc==3 ){
5b60: 0a 20 20 20 20 69 66 28 20 54 63 6c 5f 47 65 74  .    if( Tcl_Get
5b70: 49 6e 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76  Int(interp, argv
5b80: 5b 32 5d 2c 20 26 72 65 70 29 20 29 20 72 65 74  [2], &rep) ) ret
5b90: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
5ba0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 70 20   }else{.    rep 
5bb0: 3d 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  = 0;.  }.  sqlit
5bc0: 65 33 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c 20 3d  e3_iMallocFail =
5bd0: 20 6e 3b 0a 20 20 73 71 6c 69 74 65 33 5f 69 4d   n;.  sqlite3_iM
5be0: 61 6c 6c 6f 63 52 65 73 65 74 20 3d 20 72 65 70  allocReset = rep
5bf0: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  ;.  sqlite3_mall
5c00: 6f 63 5f 66 61 69 6c 65 64 20 3d 20 30 3b 0a 20  oc_failed = 0;. 
5c10: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
5c20: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
5c30: 55 73 61 67 65 3a 20 73 71 6c 69 74 65 5f 6d 61  Usage: sqlite_ma
5c40: 6c 6c 6f 63 5f 73 74 61 74 0a 2a 2a 0a 2a 2a 20  lloc_stat.**.** 
5c50: 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  Return the numbe
5c60: 72 20 6f 66 20 70 72 69 6f 72 20 63 61 6c 6c 73  r of prior calls
5c70: 20 74 6f 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63   to sqliteMalloc
5c80: 28 29 20 61 6e 64 20 73 71 6c 69 74 65 46 72 65  () and sqliteFre
5c90: 65 28 29 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  e()..*/.#ifdef S
5ca0: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 73  QLITE_MEMDEBUG.s
5cb0: 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65  tatic int sqlite
5cc0: 5f 6d 61 6c 6c 6f 63 5f 73 74 61 74 28 0a 20 20  _malloc_stat(.  
5cd0: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
5ce0: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
5cf0: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
5d00: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
5d10: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
5d20: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
5d30: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
5d40: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
5d50: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
5d60: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
5d70: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
5d80: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
5d90: 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20 7a 42   */.){.  char zB
5da0: 75 66 5b 32 30 30 5d 3b 0a 20 20 73 70 72 69 6e  uf[200];.  sprin
5db0: 74 66 28 7a 42 75 66 2c 20 22 25 64 20 25 64 20  tf(zBuf, "%d %d 
5dc0: 25 64 22 2c 20 73 71 6c 69 74 65 33 5f 6e 4d 61  %d", sqlite3_nMa
5dd0: 6c 6c 6f 63 2c 20 73 71 6c 69 74 65 33 5f 6e 46  lloc, sqlite3_nF
5de0: 72 65 65 2c 20 73 71 6c 69 74 65 33 5f 69 4d 61  ree, sqlite3_iMa
5df0: 6c 6c 6f 63 46 61 69 6c 29 3b 0a 20 20 54 63 6c  llocFail);.  Tcl
5e00: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
5e10: 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a  terp, zBuf, 0);.
5e20: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
5e30: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  .}.#endif../*.**
5e40: 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 5f   Usage:  sqlite_
5e50: 61 62 6f 72 74 0a 2a 2a 0a 2a 2a 20 53 68 75 74  abort.**.** Shut
5e60: 64 6f 77 6e 20 74 68 65 20 70 72 6f 63 65 73 73  down the process
5e70: 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 54   immediately.  T
5e80: 68 69 73 20 69 73 20 6e 6f 74 20 61 20 63 6c 65  his is not a cle
5e90: 61 6e 20 73 68 75 74 64 6f 77 6e 2e 0a 2a 2a 20  an shutdown..** 
5ea0: 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20 69 73 20  This command is 
5eb0: 75 73 65 64 20 74 6f 20 74 65 73 74 20 74 68 65  used to test the
5ec0: 20 72 65 63 6f 76 65 72 61 62 69 6c 69 74 79 20   recoverability 
5ed0: 6f 66 20 61 20 64 61 74 61 62 61 73 65 20 69 6e  of a database in
5ee0: 0a 2a 2a 20 74 68 65 20 65 76 65 6e 74 20 6f 66  .** the event of
5ef0: 20 61 20 70 72 6f 67 72 61 6d 20 63 72 61 73 68   a program crash
5f00: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
5f10: 73 71 6c 69 74 65 5f 61 62 6f 72 74 28 0a 20 20  sqlite_abort(.  
5f20: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
5f30: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
5f40: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
5f50: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
5f60: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
5f70: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
5f80: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
5f90: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
5fa0: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
5fb0: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
5fc0: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
5fd0: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
5fe0: 20 2a 2f 0a 29 7b 0a 20 20 61 73 73 65 72 74 28   */.){.  assert(
5ff0: 20 69 6e 74 65 72 70 3d 3d 30 20 29 3b 20 20 20   interp==0 );   
6000: 2f 2a 20 54 68 69 73 20 77 69 6c 6c 20 61 6c 77  /* This will alw
6010: 61 79 73 20 66 61 69 6c 20 2a 2f 0a 20 20 72 65  ays fail */.  re
6020: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
6030: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
6040: 69 6e 67 20 72 6f 75 74 69 6e 65 20 69 73 20 61  ing routine is a
6050: 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 53 51   user-defined SQ
6060: 4c 20 66 75 6e 63 74 69 6f 6e 20 77 68 6f 73 65  L function whose
6070: 20 70 75 72 70 6f 73 65 0a 2a 2a 20 69 73 20 74   purpose.** is t
6080: 6f 20 74 65 73 74 20 74 68 65 20 73 71 6c 69 74  o test the sqlit
6090: 65 5f 73 65 74 5f 72 65 73 75 6c 74 28 29 20 41  e_set_result() A
60a0: 50 49 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  PI..*/.static vo
60b0: 69 64 20 74 65 73 74 46 75 6e 63 28 73 71 6c 69  id testFunc(sqli
60c0: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e  te3_context *con
60d0: 74 65 78 74 2c 20 69 6e 74 20 61 72 67 63 2c 20  text, int argc, 
60e0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
60f0: 61 72 67 76 29 7b 0a 20 20 77 68 69 6c 65 28 20  argv){.  while( 
6100: 61 72 67 63 3e 3d 32 20 29 7b 0a 20 20 20 20 63  argc>=2 ){.    c
6110: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 72 67 30  onst char *zArg0
6120: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
6130: 5f 74 65 78 74 28 61 72 67 76 5b 30 5d 29 3b 0a  _text(argv[0]);.
6140: 20 20 20 20 69 66 28 20 7a 41 72 67 30 20 29 7b      if( zArg0 ){
6150: 0a 20 20 20 20 20 20 69 66 28 20 30 3d 3d 73 71  .      if( 0==sq
6160: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 41 72  lite3StrICmp(zAr
6170: 67 30 2c 20 22 69 6e 74 22 29 20 29 7b 0a 20 20  g0, "int") ){.  
6180: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65        sqlite3_re
6190: 73 75 6c 74 5f 69 6e 74 28 63 6f 6e 74 65 78 74  sult_int(context
61a0: 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
61b0: 69 6e 74 28 61 72 67 76 5b 31 5d 29 29 3b 0a 20  int(argv[1]));. 
61c0: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73       }else if( s
61d0: 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 41  qlite3StrICmp(zA
61e0: 72 67 30 2c 22 69 6e 74 36 34 22 29 3d 3d 30 20  rg0,"int64")==0 
61f0: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
6200: 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 28  e3_result_int64(
6210: 63 6f 6e 74 65 78 74 2c 20 73 71 6c 69 74 65 33  context, sqlite3
6220: 5f 76 61 6c 75 65 5f 69 6e 74 36 34 28 61 72 67  _value_int64(arg
6230: 76 5b 31 5d 29 29 3b 0a 20 20 20 20 20 20 7d 65  v[1]));.      }e
6240: 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 53  lse if( sqlite3S
6250: 74 72 49 43 6d 70 28 7a 41 72 67 30 2c 22 73 74  trICmp(zArg0,"st
6260: 72 69 6e 67 22 29 3d 3d 30 20 29 7b 0a 20 20 20  ring")==0 ){.   
6270: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73       sqlite3_res
6280: 75 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65 78 74  ult_text(context
6290: 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
62a0: 74 65 78 74 28 61 72 67 76 5b 31 5d 29 2c 20 2d  text(argv[1]), -
62b0: 31 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  1,.            S
62c0: 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29  QLITE_TRANSIENT)
62d0: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
62e0: 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  ( sqlite3StrICmp
62f0: 28 7a 41 72 67 30 2c 22 64 6f 75 62 6c 65 22 29  (zArg0,"double")
6300: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73  ==0 ){.        s
6310: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f  qlite3_result_do
6320: 75 62 6c 65 28 63 6f 6e 74 65 78 74 2c 20 73 71  uble(context, sq
6330: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62  lite3_value_doub
6340: 6c 65 28 61 72 67 76 5b 31 5d 29 29 3b 0a 20 20  le(argv[1]));.  
6350: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71      }else if( sq
6360: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 41 72  lite3StrICmp(zAr
6370: 67 30 2c 22 6e 75 6c 6c 22 29 3d 3d 30 20 29 7b  g0,"null")==0 ){
6380: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
6390: 5f 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e  _result_null(con
63a0: 74 65 78 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c  text);.      }el
63b0: 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74  se if( sqlite3St
63c0: 72 49 43 6d 70 28 7a 41 72 67 30 2c 22 76 61 6c  rICmp(zArg0,"val
63d0: 75 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ue")==0 ){.     
63e0: 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c     sqlite3_resul
63f0: 74 5f 76 61 6c 75 65 28 63 6f 6e 74 65 78 74 2c  t_value(context,
6400: 20 61 72 67 76 5b 73 71 6c 69 74 65 33 5f 76 61   argv[sqlite3_va
6410: 6c 75 65 5f 69 6e 74 28 61 72 67 76 5b 31 5d 29  lue_int(argv[1])
6420: 5d 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  ]);.      }else{
6430: 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 65 72  .        goto er
6440: 72 6f 72 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d  ror_out;.      }
6450: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
6460: 20 20 67 6f 74 6f 20 65 72 72 6f 72 5f 6f 75 74    goto error_out
6470: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 72 67 63  ;.    }.    argc
6480: 20 2d 3d 20 32 3b 0a 20 20 20 20 61 72 67 76 20   -= 2;.    argv 
6490: 2b 3d 20 32 3b 0a 20 20 7d 0a 20 20 72 65 74 75  += 2;.  }.  retu
64a0: 72 6e 3b 0a 0a 65 72 72 6f 72 5f 6f 75 74 3a 0a  rn;..error_out:.
64b0: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
64c0: 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 22  _error(context,"
64d0: 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 73  first argument s
64e0: 68 6f 75 6c 64 20 62 65 20 6f 6e 65 20 6f 66 3a  hould be one of:
64f0: 20 22 0a 20 20 20 20 20 20 22 69 6e 74 20 69 6e   ".      "int in
6500: 74 36 34 20 73 74 72 69 6e 67 20 64 6f 75 62 6c  t64 string doubl
6510: 65 20 6e 75 6c 6c 20 76 61 6c 75 65 22 2c 20 2d  e null value", -
6520: 31 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  1);.}../*.** Usa
6530: 67 65 3a 20 20 20 73 71 6c 69 74 65 5f 72 65 67  ge:   sqlite_reg
6540: 69 73 74 65 72 5f 74 65 73 74 5f 66 75 6e 63 74  ister_test_funct
6550: 69 6f 6e 20 20 44 42 20 20 4e 41 4d 45 0a 2a 2a  ion  DB  NAME.**
6560: 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 74 68 65  .** Register the
6570: 20 74 65 73 74 20 53 51 4c 20 66 75 6e 63 74 69   test SQL functi
6580: 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  on on the databa
6590: 73 65 20 44 42 20 75 6e 64 65 72 20 74 68 65 20  se DB under the 
65a0: 6e 61 6d 65 20 4e 41 4d 45 2e 0a 2a 2f 0a 73 74  name NAME..*/.st
65b0: 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 72 65  atic int test_re
65c0: 67 69 73 74 65 72 5f 66 75 6e 63 28 0a 20 20 76  gister_func(.  v
65d0: 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20  oid *NotUsed,.  
65e0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
65f0: 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43  rp,    /* The TC
6600: 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68  L interpreter th
6610: 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20  at invoked this 
6620: 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74  command */.  int
6630: 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20   argc,          
6640: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
6650: 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
6660: 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20  char **argv     
6670: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f         /* Text o
6680: 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20  f each argument 
6690: 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  */.){.  sqlite3 
66a0: 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  *db;.  int rc;. 
66b0: 20 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a   if( argc!=3 ){.
66c0: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
66d0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
66e0: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
66f0: 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
6700: 30 5d 2c 20 0a 20 20 20 20 20 20 20 22 20 44 42  0], .       " DB
6710: 20 46 55 4e 43 54 49 4f 4e 2d 4e 41 4d 45 22 2c   FUNCTION-NAME",
6720: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
6730: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
6740: 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
6750: 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31  r(interp, argv[1
6760: 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e  ], &db) ) return
6770: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63   TCL_ERROR;.  rc
6780: 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74   = sqlite3_creat
6790: 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 61  e_function(db, a
67a0: 72 67 76 5b 32 5d 2c 20 2d 31 2c 20 53 51 4c 49  rgv[2], -1, SQLI
67b0: 54 45 5f 55 54 46 38 2c 20 30 2c 20 0a 20 20 20  TE_UTF8, 0, .   
67c0: 20 20 20 74 65 73 74 46 75 6e 63 2c 20 30 2c 20     testFunc, 0, 
67d0: 30 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 30 20  0);.  if( rc!=0 
67e0: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
67f0: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
6800: 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63  sqlite3ErrStr(rc
6810: 29 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ), 0);.    retur
6820: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
6830: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65  .  if( sqlite3Te
6840: 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70  stErrCode(interp
6850: 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65 74 75  , db, rc) ) retu
6860: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
6870: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
6880: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
6890: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
68a0: 20 20 53 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 46 69    STMT .**.** Fi
68b0: 6e 61 6c 69 7a 65 20 61 20 73 74 61 74 65 6d 65  nalize a stateme
68c0: 6e 74 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 73 74  nt handle..*/.st
68d0: 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 66 69  atic int test_fi
68e0: 6e 61 6c 69 7a 65 28 0a 20 20 76 6f 69 64 20 2a  nalize(.  void *
68f0: 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
6900: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
6910: 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
6920: 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
6930: 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
6940: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
6950: 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 73 71 6c  .  int rc;.  sql
6960: 69 74 65 33 20 2a 64 62 3b 0a 0a 20 20 69 66 28  ite3 *db;..  if(
6970: 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20   objc!=2 ){.    
6980: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
6990: 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
69a0: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
69b0: 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54  e \"",.        T
69c0: 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d  cl_GetStringFrom
69d0: 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c  Obj(objv[0], 0),
69e0: 20 22 20 3c 53 54 4d 54 3e 22 2c 20 30 29 3b 0a   " <STMT>", 0);.
69f0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
6a00: 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  RROR;.  }..  if(
6a10: 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28   getStmtPointer(
6a20: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
6a30: 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
6a40: 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e  &pStmt) ) return
6a50: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 69   TCL_ERROR;..  i
6a60: 66 28 20 70 53 74 6d 74 20 29 7b 0a 20 20 20 20  f( pStmt ){.    
6a70: 64 62 20 3d 20 53 74 6d 74 54 6f 44 62 28 70 53  db = StmtToDb(pS
6a80: 74 6d 74 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  tmt);.  }.  rc =
6a90: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
6aa0: 65 28 70 53 74 6d 74 29 3b 0a 20 20 54 63 6c 5f  e(pStmt);.  Tcl_
6ab0: 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70  SetResult(interp
6ac0: 2c 20 28 63 68 61 72 20 2a 29 65 72 72 6f 72 4e  , (char *)errorN
6ad0: 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54 41  ame(rc), TCL_STA
6ae0: 54 49 43 29 3b 0a 20 20 69 66 28 20 64 62 20 26  TIC);.  if( db &
6af0: 26 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72  & sqlite3TestErr
6b00: 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c  Code(interp, db,
6b10: 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43   rc) ) return TC
6b20: 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74 75 72  L_ERROR;.  retur
6b30: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
6b40: 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
6b50: 65 33 5f 72 65 73 65 74 20 20 53 54 4d 54 20 0a  e3_reset  STMT .
6b60: 2a 2a 0a 2a 2a 20 46 69 6e 61 6c 69 7a 65 20 61  **.** Finalize a
6b70: 20 73 74 61 74 65 6d 65 6e 74 20 68 61 6e 64 6c   statement handl
6b80: 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  e..*/.static int
6b90: 20 74 65 73 74 5f 72 65 73 65 74 28 0a 20 20 76   test_reset(.  v
6ba0: 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
6bb0: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
6bc0: 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
6bd0: 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
6be0: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
6bf0: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
6c00: 53 74 6d 74 3b 0a 20 20 69 6e 74 20 72 63 3b 0a  Stmt;.  int rc;.
6c10: 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29  .  if( objc!=2 )
6c20: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
6c30: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
6c40: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
6c50: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20  ould be \"",.   
6c60: 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
6c70: 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30  ngFromObj(objv[0
6c80: 5d 2c 20 30 29 2c 20 22 20 3c 53 54 4d 54 3e 22  ], 0), " <STMT>"
6c90: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
6ca0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
6cb0: 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f  .  if( getStmtPo
6cc0: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
6cd0: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
6ce0: 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20  [1]), &pStmt) ) 
6cf0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
6d00: 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  ;..  rc = sqlite
6d10: 33 5f 72 65 73 65 74 28 70 53 74 6d 74 29 3b 0a  3_reset(pStmt);.
6d20: 20 20 69 66 28 20 70 53 74 6d 74 20 26 26 20 0a    if( pStmt && .
6d30: 20 20 20 20 20 20 73 71 6c 69 74 65 33 54 65 73        sqlite3Tes
6d40: 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c  tErrCode(interp,
6d50: 20 53 74 6d 74 54 6f 44 62 28 70 53 74 6d 74 29   StmtToDb(pStmt)
6d60: 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54  , rc) ) return T
6d70: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f  CL_ERROR;.  Tcl_
6d80: 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70  SetResult(interp
6d90: 2c 20 28 63 68 61 72 20 2a 29 65 72 72 6f 72 4e  , (char *)errorN
6da0: 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54 41  ame(rc), TCL_STA
6db0: 54 49 43 29 3b 0a 20 20 69 66 28 20 72 63 20 29  TIC);.  if( rc )
6dc0: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  {.    return TCL
6dd0: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 65  _ERROR;.  }.  re
6de0: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
6df0: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
6e00: 6c 69 74 65 33 5f 65 78 70 69 72 65 64 20 53 54  lite3_expired ST
6e10: 4d 54 20 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e  MT .**.** Return
6e20: 20 54 52 55 45 20 69 66 20 61 20 72 65 63 6f 6d   TRUE if a recom
6e30: 70 69 6c 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  pilation of the 
6e40: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 72 65 63  statement is rec
6e50: 6f 6d 6d 65 6e 64 65 64 2e 0a 2a 2f 0a 73 74 61  ommended..*/.sta
6e60: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 65 78 70  tic int test_exp
6e70: 69 72 65 64 28 0a 20 20 76 6f 69 64 20 2a 20 63  ired(.  void * c
6e80: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
6e90: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
6ea0: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
6eb0: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
6ec0: 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
6ed0: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
6ee0: 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a   if( objc!=2 ){.
6ef0: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
6f00: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
6f10: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
6f20: 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20  ld be \"",.     
6f30: 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
6f40: 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c  FromObj(objv[0],
6f50: 20 30 29 2c 20 22 20 3c 53 54 4d 54 3e 22 2c 20   0), " <STMT>", 
6f60: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
6f70: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
6f80: 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  if( getStmtPoint
6f90: 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
6fa0: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
6fb0: 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74  ), &pStmt) ) ret
6fc0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
6fd0: 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c   Tcl_SetObjResul
6fe0: 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
6ff0: 77 42 6f 6f 6c 65 61 6e 4f 62 6a 28 73 71 6c 69  wBooleanObj(sqli
7000: 74 65 33 5f 65 78 70 69 72 65 64 28 70 53 74 6d  te3_expired(pStm
7010: 74 29 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  t)));.  return T
7020: 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
7030: 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f  Usage:  sqlite3_
7040: 63 68 61 6e 67 65 73 20 44 42 0a 2a 2a 0a 2a 2a  changes DB.**.**
7050: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   Return the numb
7060: 65 72 20 6f 66 20 63 68 61 6e 67 65 73 20 6d 61  er of changes ma
7070: 64 65 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  de to the databa
7080: 73 65 20 62 79 20 74 68 65 20 6c 61 73 74 20 53  se by the last S
7090: 51 4c 0a 2a 2a 20 65 78 65 63 75 74 69 6f 6e 2e  QL.** execution.
70a0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
70b0: 65 73 74 5f 63 68 61 6e 67 65 73 28 0a 20 20 76  est_changes(.  v
70c0: 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
70d0: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
70e0: 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
70f0: 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
7100: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
7110: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
7120: 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20  if( objc!=2 ){. 
7130: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
7140: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
7150: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
7160: 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20  d be \"",.      
7170: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
7180: 62 6a 76 5b 30 5d 29 2c 20 22 20 44 42 22 2c 20  bjv[0]), " DB", 
7190: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
71a0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
71b0: 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72  if( getDbPointer
71c0: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
71d0: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
71e0: 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
71f0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f  CL_ERROR;.  Tcl_
7200: 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
7210: 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f  erp, Tcl_NewIntO
7220: 62 6a 28 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  bj(sqlite3_chang
7230: 65 73 28 64 62 29 29 29 3b 0a 20 20 72 65 74 75  es(db)));.  retu
7240: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
7250: 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68 65 20  .** This is the 
7260: 22 73 74 61 74 69 63 5f 62 69 6e 64 5f 76 61 6c  "static_bind_val
7270: 75 65 22 20 74 68 61 74 20 76 61 72 69 61 62 6c  ue" that variabl
7280: 65 73 20 61 72 65 20 62 6f 75 6e 64 20 74 6f 20  es are bound to 
7290: 77 68 65 6e 0a 2a 2a 20 74 68 65 20 46 4c 41 47  when.** the FLAG
72a0: 20 6f 70 74 69 6f 6e 20 6f 66 20 73 71 6c 69 74   option of sqlit
72b0: 65 33 5f 62 69 6e 64 20 69 73 20 22 73 74 61 74  e3_bind is "stat
72c0: 69 63 22 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68  ic".*/.static ch
72d0: 61 72 20 2a 73 71 6c 69 74 65 5f 73 74 61 74 69  ar *sqlite_stati
72e0: 63 5f 62 69 6e 64 5f 76 61 6c 75 65 20 3d 20 30  c_bind_value = 0
72f0: 3b 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  ;../*.** Usage: 
7300: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 20 20 56   sqlite3_bind  V
7310: 4d 20 20 49 44 58 20 20 56 41 4c 55 45 20 20 46  M  IDX  VALUE  F
7320: 4c 41 47 53 0a 2a 2a 0a 2a 2a 20 53 65 74 73 20  LAGS.**.** Sets 
7330: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
7340: 20 49 44 58 2d 74 68 20 6f 63 63 75 72 61 6e 63   IDX-th occuranc
7350: 65 20 6f 66 20 22 3f 22 20 69 6e 20 74 68 65 20  e of "?" in the 
7360: 6f 72 69 67 69 6e 61 6c 20 53 51 4c 0a 2a 2a 20  original SQL.** 
7370: 73 74 72 69 6e 67 2e 20 20 56 41 4c 55 45 20 69  string.  VALUE i
7380: 73 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65 2e  s the new value.
7390: 20 20 49 66 20 46 4c 41 47 53 3d 3d 22 6e 75 6c    If FLAGS=="nul
73a0: 6c 22 20 74 68 65 6e 20 56 41 4c 55 45 20 69 73  l" then VALUE is
73b0: 0a 2a 2a 20 69 67 6e 6f 72 65 64 20 61 6e 64 20  .** ignored and 
73c0: 74 68 65 20 76 61 6c 75 65 20 69 73 20 73 65 74  the value is set
73d0: 20 74 6f 20 4e 55 4c 4c 2e 20 20 49 66 20 46 4c   to NULL.  If FL
73e0: 41 47 53 3d 3d 22 73 74 61 74 69 63 22 20 74 68  AGS=="static" th
73f0: 65 6e 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20  en.** the value 
7400: 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 76 61  is set to the va
7410: 6c 75 65 20 6f 66 20 61 20 73 74 61 74 69 63 20  lue of a static 
7420: 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 64 0a 2a  variable named.*
7430: 2a 20 22 73 71 6c 69 74 65 5f 73 74 61 74 69 63  * "sqlite_static
7440: 5f 62 69 6e 64 5f 76 61 6c 75 65 22 2e 20 20 49  _bind_value".  I
7450: 66 20 46 4c 41 47 53 3d 3d 22 6e 6f 72 6d 61 6c  f FLAGS=="normal
7460: 22 20 74 68 65 6e 20 61 20 63 6f 70 79 0a 2a 2a  " then a copy.**
7470: 20 6f 66 20 74 68 65 20 56 41 4c 55 45 20 69 73   of the VALUE is
7480: 20 6d 61 64 65 2e 0a 2a 2f 0a 73 74 61 74 69 63   made..*/.static
7490: 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 28 0a   int test_bind(.
74a0: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
74b0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
74c0: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
74d0: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
74e0: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
74f0: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
7500: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
7510: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
7520: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
7530: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
7540: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
7550: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
7560: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74  nt */.){.  sqlit
7570: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a  e3_stmt *pStmt;.
7580: 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20    int rc;.  int 
7590: 69 64 78 3b 0a 20 20 69 66 28 20 61 72 67 63 21  idx;.  if( argc!
75a0: 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =5 ){.    Tcl_Ap
75b0: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
75c0: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
75d0: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
75e0: 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20   argv[0], .     
75f0: 20 20 22 20 56 4d 20 49 44 58 20 56 41 4c 55 45    " VM IDX VALUE
7600: 20 28 6e 75 6c 6c 7c 73 74 61 74 69 63 7c 6e 6f   (null|static|no
7610: 72 6d 61 6c 29 5c 22 22 2c 20 30 29 3b 0a 20 20  rmal)\"", 0);.  
7620: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
7630: 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
7640: 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74  tStmtPointer(int
7650: 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 70  erp, argv[1], &p
7660: 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
7670: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
7680: 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74 65 72  Tcl_GetInt(inter
7690: 70 2c 20 61 72 67 76 5b 32 5d 2c 20 26 69 64 78  p, argv[2], &idx
76a0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
76b0: 52 52 4f 52 3b 0a 20 20 69 66 28 20 73 74 72 63  RROR;.  if( strc
76c0: 6d 70 28 61 72 67 76 5b 34 5d 2c 22 6e 75 6c 6c  mp(argv[4],"null
76d0: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20  ")==0 ){.    rc 
76e0: 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e  = sqlite3_bind_n
76f0: 75 6c 6c 28 70 53 74 6d 74 2c 20 69 64 78 29 3b  ull(pStmt, idx);
7700: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72  .  }else if( str
7710: 63 6d 70 28 61 72 67 76 5b 34 5d 2c 22 73 74 61  cmp(argv[4],"sta
7720: 74 69 63 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  tic")==0 ){.    
7730: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e  rc = sqlite3_bin
7740: 64 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 69 64  d_text(pStmt, id
7750: 78 2c 20 73 71 6c 69 74 65 5f 73 74 61 74 69 63  x, sqlite_static
7760: 5f 62 69 6e 64 5f 76 61 6c 75 65 2c 20 2d 31 2c  _bind_value, -1,
7770: 20 30 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28   0);.  }else if(
7780: 20 73 74 72 63 6d 70 28 61 72 67 76 5b 34 5d 2c   strcmp(argv[4],
7790: 22 6e 6f 72 6d 61 6c 22 29 3d 3d 30 20 29 7b 0a  "normal")==0 ){.
77a0: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
77b0: 5f 62 69 6e 64 5f 74 65 78 74 28 70 53 74 6d 74  _bind_text(pStmt
77c0: 2c 20 69 64 78 2c 20 61 72 67 76 5b 33 5d 2c 20  , idx, argv[3], 
77d0: 2d 31 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  -1, SQLITE_TRANS
77e0: 49 45 4e 54 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  IENT);.  }else{.
77f0: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
7800: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 34 74  sult(interp, "4t
7810: 68 20 61 72 67 75 6d 65 6e 74 20 73 68 6f 75 6c  h argument shoul
7820: 64 20 62 65 20 22 0a 20 20 20 20 20 20 20 20 22  d be ".        "
7830: 5c 22 6e 75 6c 6c 5c 22 20 6f 72 20 5c 22 73 74  \"null\" or \"st
7840: 61 74 69 63 5c 22 20 6f 72 20 5c 22 6e 6f 72 6d  atic\" or \"norm
7850: 61 6c 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72  al\"", 0);.    r
7860: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
7870: 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74  .  }.  if( sqlit
7880: 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e  e3TestErrCode(in
7890: 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70  terp, StmtToDb(p
78a0: 53 74 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74  Stmt), rc) ) ret
78b0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
78c0: 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 63   if( rc ){.    c
78d0: 68 61 72 20 7a 42 75 66 5b 35 30 5d 3b 0a 20 20  har zBuf[50];.  
78e0: 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20    sprintf(zBuf, 
78f0: 22 28 25 64 29 20 22 2c 20 72 63 29 3b 0a 20 20  "(%d) ", rc);.  
7900: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
7910: 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c  lt(interp, zBuf,
7920: 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72   sqlite3ErrStr(r
7930: 63 29 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  c), 0);.    retu
7940: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
7950: 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  }.  return TCL_O
7960: 4b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  K;.}..#ifndef SQ
7970: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
7980: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 61 64 64  /*.** Usage: add
7990: 5f 74 65 73 74 5f 63 6f 6c 6c 61 74 65 20 3c 64  _test_collate <d
79a0: 62 20 70 74 72 3e 20 3c 75 74 66 38 3e 20 3c 75  b ptr> <utf8> <u
79b0: 74 66 31 36 6c 65 3e 20 3c 75 74 66 31 36 62 65  tf16le> <utf16be
79c0: 3e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e  >.**.** This fun
79d0: 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f  ction is used to
79e0: 20 74 65 73 74 20 74 68 61 74 20 53 51 4c 69 74   test that SQLit
79f0: 65 20 73 65 6c 65 63 74 73 20 74 68 65 20 63 6f  e selects the co
7a00: 72 72 65 63 74 20 63 6f 6c 6c 61 74 69 6f 6e 0a  rrect collation.
7a10: 2a 2a 20 73 65 71 75 65 6e 63 65 20 63 61 6c 6c  ** sequence call
7a20: 62 61 63 6b 20 77 68 65 6e 20 6d 75 6c 74 69 70  back when multip
7a30: 6c 65 20 76 65 72 73 69 6f 6e 73 20 28 66 6f 72  le versions (for
7a40: 20 64 69 66 66 65 72 65 6e 74 20 74 65 78 74 20   different text 
7a50: 65 6e 63 6f 64 69 6e 67 73 29 0a 2a 2a 20 61 72  encodings).** ar
7a60: 65 20 61 76 61 69 6c 61 62 6c 65 2e 0a 2a 2a 0a  e available..**.
7a70: 2a 2a 20 43 61 6c 6c 69 6e 67 20 74 68 69 73 20  ** Calling this 
7a80: 72 6f 75 74 69 6e 65 20 72 65 67 69 73 74 65 72  routine register
7a90: 73 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20  s the collation 
7aa0: 73 65 71 75 65 6e 63 65 20 22 74 65 73 74 5f 63  sequence "test_c
7ab0: 6f 6c 6c 61 74 65 22 0a 2a 2a 20 77 69 74 68 20  ollate".** with 
7ac0: 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20  database handle 
7ad0: 3c 64 62 3e 2e 20 54 68 65 20 73 65 63 6f 6e 64  <db>. The second
7ae0: 20 61 72 67 75 6d 65 6e 74 20 6d 75 73 74 20 62   argument must b
7af0: 65 20 61 20 6c 69 73 74 20 6f 66 20 74 68 72 65  e a list of thre
7b00: 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 76 61 6c  e.** boolean val
7b10: 75 65 73 2e 20 49 66 20 74 68 65 20 66 69 72 73  ues. If the firs
7b20: 74 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20  t is true, then 
7b30: 61 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 65 73  a version of tes
7b40: 74 5f 63 6f 6c 6c 61 74 65 20 69 73 0a 2a 2a 20  t_collate is.** 
7b50: 72 65 67 69 73 74 65 72 65 64 20 66 6f 72 20 55  registered for U
7b60: 54 46 2d 38 2c 20 69 66 20 74 68 65 20 73 65 63  TF-8, if the sec
7b70: 6f 6e 64 20 69 73 20 74 72 75 65 2c 20 61 20 76  ond is true, a v
7b80: 65 72 73 69 6f 6e 20 69 73 20 72 65 67 69 73 74  ersion is regist
7b90: 65 72 65 64 20 66 6f 72 0a 2a 2a 20 55 54 46 2d  ered for.** UTF-
7ba0: 31 36 6c 65 2c 20 69 66 20 74 68 65 20 74 68 69  16le, if the thi
7bb0: 72 64 20 69 73 20 74 72 75 65 2c 20 61 20 55 54  rd is true, a UT
7bc0: 46 2d 31 36 62 65 20 76 65 72 73 69 6f 6e 20 69  F-16be version i
7bd0: 73 20 61 76 61 69 6c 61 62 6c 65 2e 0a 2a 2a 20  s available..** 
7be0: 50 72 65 76 69 6f 75 73 20 76 65 72 73 69 6f 6e  Previous version
7bf0: 73 20 6f 66 20 74 65 73 74 5f 63 6f 6c 6c 61 74  s of test_collat
7c00: 65 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 2a  e are deleted..*
7c10: 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 6c 61 74 69  *.** The collati
7c20: 6f 6e 20 73 65 71 75 65 6e 63 65 20 74 65 73 74  on sequence test
7c30: 5f 63 6f 6c 6c 61 74 65 20 69 73 20 69 6d 70 6c  _collate is impl
7c40: 65 6d 65 6e 74 65 64 20 62 79 20 63 61 6c 6c 69  emented by calli
7c50: 6e 67 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77  ng the.** follow
7c60: 69 6e 67 20 54 43 4c 20 73 63 72 69 70 74 3a 0a  ing TCL script:.
7c70: 2a 2a 0a 2a 2a 20 20 20 22 74 65 73 74 5f 63 6f  **.**   "test_co
7c80: 6c 6c 61 74 65 20 3c 65 6e 63 3e 20 3c 6c 68 73  llate <enc> <lhs
7c90: 3e 20 3c 72 68 73 3e 22 0a 2a 2a 0a 2a 2a 20 54  > <rhs>".**.** T
7ca0: 68 65 20 3c 6c 68 73 3e 20 61 6e 64 20 3c 72 68  he <lhs> and <rh
7cb0: 73 3e 20 61 72 65 20 74 68 65 20 74 77 6f 20 76  s> are the two v
7cc0: 61 6c 75 65 73 20 62 65 69 6e 67 20 63 6f 6d 70  alues being comp
7cd0: 61 72 65 64 2c 20 65 6e 63 6f 64 65 64 20 69 6e  ared, encoded in
7ce0: 20 55 54 46 2d 38 2e 0a 2a 2a 20 54 68 65 20 3c   UTF-8..** The <
7cf0: 65 6e 63 3e 20 70 61 72 61 6d 65 74 65 72 20 69  enc> parameter i
7d00: 73 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f  s the encoding o
7d10: 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20  f the collation 
7d20: 66 75 6e 63 74 69 6f 6e 20 74 68 61 74 0a 2a 2a  function that.**
7d30: 20 53 51 4c 69 74 65 20 73 65 6c 65 63 74 65 64   SQLite selected
7d40: 20 74 6f 20 63 61 6c 6c 2e 20 54 68 65 20 54 43   to call. The TC
7d50: 4c 20 74 65 73 74 20 73 63 72 69 70 74 20 69 6d  L test script im
7d60: 70 6c 65 6d 65 6e 74 73 20 74 68 65 0a 2a 2a 20  plements the.** 
7d70: 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22 20 70  "test_collate" p
7d80: 72 6f 63 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  roc..**.** Note 
7d90: 74 68 61 74 20 74 68 69 73 20 77 69 6c 6c 20 6f  that this will o
7da0: 6e 6c 79 20 77 6f 72 6b 20 77 69 74 68 20 6f 6e  nly work with on
7db0: 65 20 69 6e 74 65 70 72 65 74 65 72 20 61 74 20  e intepreter at 
7dc0: 61 20 74 69 6d 65 2c 20 61 73 20 74 68 65 0a 2a  a time, as the.*
7dd0: 2a 20 69 6e 74 65 72 70 20 70 6f 69 6e 74 65 72  * interp pointer
7de0: 20 74 6f 20 75 73 65 20 77 68 65 6e 20 65 76 61   to use when eva
7df0: 6c 75 61 74 69 6e 67 20 74 68 65 20 54 43 4c 20  luating the TCL 
7e00: 73 63 72 69 70 74 20 69 73 20 73 74 6f 72 65 64  script is stored
7e10: 20 69 6e 0a 2a 2a 20 70 54 65 73 74 43 6f 6c 6c   in.** pTestColl
7e20: 61 74 65 49 6e 74 65 72 70 2e 0a 2a 2f 0a 73 74  ateInterp..*/.st
7e30: 61 74 69 63 20 54 63 6c 5f 49 6e 74 65 72 70 2a  atic Tcl_Interp*
7e40: 20 70 54 65 73 74 43 6f 6c 6c 61 74 65 49 6e 74   pTestCollateInt
7e50: 65 72 70 3b 0a 73 74 61 74 69 63 20 69 6e 74 20  erp;.static int 
7e60: 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 66 75 6e  test_collate_fun
7e70: 63 28 0a 20 20 76 6f 69 64 20 2a 70 43 74 78 2c  c(.  void *pCtx,
7e80: 20 0a 20 20 69 6e 74 20 6e 41 2c 20 63 6f 6e 73   .  int nA, cons
7e90: 74 20 76 6f 69 64 20 2a 7a 41 2c 0a 20 20 69 6e  t void *zA,.  in
7ea0: 74 20 6e 42 2c 20 63 6f 6e 73 74 20 76 6f 69 64  t nB, const void
7eb0: 20 2a 7a 42 0a 29 7b 0a 20 20 54 63 6c 5f 49 6e   *zB.){.  Tcl_In
7ec0: 74 65 72 70 20 2a 69 20 3d 20 70 54 65 73 74 43  terp *i = pTestC
7ed0: 6f 6c 6c 61 74 65 49 6e 74 65 72 70 3b 0a 20 20  ollateInterp;.  
7ee0: 69 6e 74 20 65 6e 63 69 6e 20 3d 20 28 69 6e 74  int encin = (int
7ef0: 29 70 43 74 78 3b 0a 20 20 69 6e 74 20 72 65 73  )pCtx;.  int res
7f00: 3b 0a 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  ;..  sqlite3_val
7f10: 75 65 20 2a 70 56 61 6c 3b 0a 20 20 54 63 6c 5f  ue *pVal;.  Tcl_
7f20: 4f 62 6a 20 2a 70 58 3b 0a 0a 20 20 70 58 20 3d  Obj *pX;..  pX =
7f30: 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
7f40: 6a 28 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22  j("test_collate"
7f50: 2c 20 2d 31 29 3b 0a 20 20 54 63 6c 5f 49 6e 63  , -1);.  Tcl_Inc
7f60: 72 52 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a 0a  rRefCount(pX);..
7f70: 20 20 73 77 69 74 63 68 28 20 65 6e 63 69 6e 20    switch( encin 
7f80: 29 7b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  ){.    case SQLI
7f90: 54 45 5f 55 54 46 38 3a 0a 20 20 20 20 20 20 54  TE_UTF8:.      T
7fa0: 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64  cl_ListObjAppend
7fb0: 45 6c 65 6d 65 6e 74 28 69 2c 70 58 2c 54 63 6c  Element(i,pX,Tcl
7fc0: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 55  _NewStringObj("U
7fd0: 54 46 2d 38 22 2c 2d 31 29 29 3b 0a 20 20 20 20  TF-8",-1));.    
7fe0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
7ff0: 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  e SQLITE_UTF16LE
8000: 3a 0a 20 20 20 20 20 20 54 63 6c 5f 4c 69 73 74  :.      Tcl_List
8010: 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  ObjAppendElement
8020: 28 69 2c 70 58 2c 54 63 6c 5f 4e 65 77 53 74 72  (i,pX,Tcl_NewStr
8030: 69 6e 67 4f 62 6a 28 22 55 54 46 2d 31 36 4c 45  ingObj("UTF-16LE
8040: 22 2c 2d 31 29 29 3b 0a 20 20 20 20 20 20 62 72  ",-1));.      br
8050: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
8060: 4c 49 54 45 5f 55 54 46 31 36 42 45 3a 0a 20 20  LITE_UTF16BE:.  
8070: 20 20 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41      Tcl_ListObjA
8080: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 2c 70  ppendElement(i,p
8090: 58 2c 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  X,Tcl_NewStringO
80a0: 62 6a 28 22 55 54 46 2d 31 36 42 45 22 2c 2d 31  bj("UTF-16BE",-1
80b0: 29 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  ));.      break;
80c0: 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 0a 20 20  .    default:.  
80d0: 20 20 20 20 61 73 73 65 72 74 28 30 29 3b 0a 20      assert(0);. 
80e0: 20 7d 0a 0a 20 20 70 56 61 6c 20 3d 20 73 71 6c   }..  pVal = sql
80f0: 69 74 65 33 56 61 6c 75 65 4e 65 77 28 29 3b 0a  ite3ValueNew();.
8100: 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65    sqlite3ValueSe
8110: 74 53 74 72 28 70 56 61 6c 2c 20 6e 41 2c 20 7a  tStr(pVal, nA, z
8120: 41 2c 20 65 6e 63 69 6e 2c 20 53 51 4c 49 54 45  A, encin, SQLITE
8130: 5f 53 54 41 54 49 43 29 3b 0a 20 20 54 63 6c 5f  _STATIC);.  Tcl_
8140: 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65  ListObjAppendEle
8150: 6d 65 6e 74 28 69 2c 70 58 2c 54 63 6c 5f 4e 65  ment(i,pX,Tcl_Ne
8160: 77 53 74 72 69 6e 67 4f 62 6a 28 73 71 6c 69 74  wStringObj(sqlit
8170: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 56  e3_value_text(pV
8180: 61 6c 29 2c 2d 31 29 29 3b 0a 20 20 73 71 6c 69  al),-1));.  sqli
8190: 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 70  te3ValueSetStr(p
81a0: 56 61 6c 2c 20 6e 42 2c 20 7a 42 2c 20 65 6e 63  Val, nB, zB, enc
81b0: 69 6e 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  in, SQLITE_STATI
81c0: 43 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62  C);.  Tcl_ListOb
81d0: 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  jAppendElement(i
81e0: 2c 70 58 2c 54 63 6c 5f 4e 65 77 53 74 72 69 6e  ,pX,Tcl_NewStrin
81f0: 67 4f 62 6a 28 73 71 6c 69 74 65 33 5f 76 61 6c  gObj(sqlite3_val
8200: 75 65 5f 74 65 78 74 28 70 56 61 6c 29 2c 2d 31  ue_text(pVal),-1
8210: 29 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c  ));.  sqlite3Val
8220: 75 65 46 72 65 65 28 70 56 61 6c 29 3b 0a 0a 20  ueFree(pVal);.. 
8230: 20 54 63 6c 5f 45 76 61 6c 4f 62 6a 45 78 28 69   Tcl_EvalObjEx(i
8240: 2c 20 70 58 2c 20 30 29 3b 0a 20 20 54 63 6c 5f  , pX, 0);.  Tcl_
8250: 44 65 63 72 52 65 66 43 6f 75 6e 74 28 70 58 29  DecrRefCount(pX)
8260: 3b 0a 20 20 54 63 6c 5f 47 65 74 49 6e 74 46 72  ;.  Tcl_GetIntFr
8270: 6f 6d 4f 62 6a 28 69 2c 20 54 63 6c 5f 47 65 74  omObj(i, Tcl_Get
8280: 4f 62 6a 52 65 73 75 6c 74 28 69 29 2c 20 26 72  ObjResult(i), &r
8290: 65 73 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 65  es);.  return re
82a0: 73 3b 0a 7d 0a 73 74 61 74 69 63 20 69 6e 74 20  s;.}.static int 
82b0: 74 65 73 74 5f 63 6f 6c 6c 61 74 65 28 0a 20 20  test_collate(.  
82c0: 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
82d0: 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
82e0: 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
82f0: 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
8300: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
8310: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
8320: 20 69 6e 74 20 76 61 6c 3b 0a 20 20 73 71 6c 69   int val;.  sqli
8330: 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 3b  te3_value *pVal;
8340: 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66  .  int rc;..  if
8350: 28 20 6f 62 6a 63 21 3d 35 20 29 20 67 6f 74 6f  ( objc!=5 ) goto
8360: 20 62 61 64 5f 61 72 67 73 3b 0a 20 20 70 54 65   bad_args;.  pTe
8370: 73 74 43 6f 6c 6c 61 74 65 49 6e 74 65 72 70 20  stCollateInterp 
8380: 3d 20 69 6e 74 65 72 70 3b 0a 20 20 69 66 28 20  = interp;.  if( 
8390: 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
83a0: 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
83b0: 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62  ng(objv[1]), &db
83c0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
83d0: 52 52 4f 52 3b 0a 0a 20 20 69 66 28 20 54 43 4c  RROR;..  if( TCL
83e0: 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c  _OK!=Tcl_GetBool
83f0: 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  eanFromObj(inter
8400: 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 76 61 6c  p, objv[2], &val
8410: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
8420: 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c  RROR;.  rc = sql
8430: 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c  ite3_create_coll
8440: 61 74 69 6f 6e 28 64 62 2c 20 22 74 65 73 74 5f  ation(db, "test_
8450: 63 6f 6c 6c 61 74 65 22 2c 20 53 51 4c 49 54 45  collate", SQLITE
8460: 5f 55 54 46 38 2c 20 0a 20 20 20 20 20 20 20 20  _UTF8, .        
8470: 20 20 28 76 6f 69 64 20 2a 29 53 51 4c 49 54 45    (void *)SQLITE
8480: 5f 55 54 46 38 2c 20 76 61 6c 3f 74 65 73 74 5f  _UTF8, val?test_
8490: 63 6f 6c 6c 61 74 65 5f 66 75 6e 63 3a 30 29 3b  collate_func:0);
84a0: 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
84b0: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 66 28 20  E_OK ){.    if( 
84c0: 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 42  TCL_OK!=Tcl_GetB
84d0: 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e  ooleanFromObj(in
84e0: 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26  terp, objv[3], &
84f0: 76 61 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43  val) ) return TC
8500: 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 72 63 20  L_ERROR;.    rc 
8510: 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  = sqlite3_create
8520: 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 22  _collation(db, "
8530: 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22 2c 20 53  test_collate", S
8540: 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 2c 20 0a  QLITE_UTF16LE, .
8550: 20 20 20 20 20 20 20 20 20 20 20 20 28 76 6f 69              (voi
8560: 64 20 2a 29 53 51 4c 49 54 45 5f 55 54 46 31 36  d *)SQLITE_UTF16
8570: 4c 45 2c 20 76 61 6c 3f 74 65 73 74 5f 63 6f 6c  LE, val?test_col
8580: 6c 61 74 65 5f 66 75 6e 63 3a 30 29 3b 0a 20 20  late_func:0);.  
8590: 20 20 69 66 28 20 54 43 4c 5f 4f 4b 21 3d 54 63    if( TCL_OK!=Tc
85a0: 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d  l_GetBooleanFrom
85b0: 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
85c0: 5b 34 5d 2c 20 26 76 61 6c 29 20 29 20 72 65 74  [4], &val) ) ret
85d0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a  urn TCL_ERROR;..
85e0: 20 20 20 20 70 56 61 6c 20 3d 20 73 71 6c 69 74      pVal = sqlit
85f0: 65 33 56 61 6c 75 65 4e 65 77 28 29 3b 0a 20 20  e3ValueNew();.  
8600: 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65    sqlite3ValueSe
8610: 74 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c 20 22  tStr(pVal, -1, "
8620: 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22 2c 20 53  test_collate", S
8630: 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49  QLITE_UTF8, SQLI
8640: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
8650: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63  sqlite3_create_c
8660: 6f 6c 6c 61 74 69 6f 6e 31 36 28 64 62 2c 20 73  ollation16(db, s
8670: 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74 28  qlite3ValueText(
8680: 70 56 61 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46  pVal, SQLITE_UTF
8690: 31 36 4e 41 54 49 56 45 29 2c 20 0a 20 20 20 20  16NATIVE), .    
86a0: 20 20 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46        SQLITE_UTF
86b0: 31 36 42 45 2c 20 28 76 6f 69 64 20 2a 29 53 51  16BE, (void *)SQ
86c0: 4c 49 54 45 5f 55 54 46 31 36 42 45 2c 20 76 61  LITE_UTF16BE, va
86d0: 6c 3f 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 66  l?test_collate_f
86e0: 75 6e 63 3a 30 29 3b 0a 20 20 20 20 73 71 6c 69  unc:0);.    sqli
86f0: 74 65 33 56 61 6c 75 65 46 72 65 65 28 70 56 61  te3ValueFree(pVa
8700: 6c 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71  l);.  }.  if( sq
8710: 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65  lite3TestErrCode
8720: 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29  (interp, db, rc)
8730: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
8740: 52 4f 52 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  ROR;.  return TC
8750: 4c 5f 4f 4b 3b 0a 0a 62 61 64 5f 61 72 67 73 3a  L_OK;..bad_args:
8760: 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73  .  Tcl_AppendRes
8770: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
8780: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
8790: 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20  d be \"",.      
87a0: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f  Tcl_GetStringFro
87b0: 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29  mObj(objv[0], 0)
87c0: 2c 20 22 20 3c 44 42 3e 20 3c 75 74 66 38 3e 20  , " <DB> <utf8> 
87d0: 3c 75 74 66 31 36 6c 65 3e 20 3c 75 74 66 31 36  <utf16le> <utf16
87e0: 62 65 3e 22 2c 20 30 29 3b 0a 20 20 72 65 74 75  be>", 0);.  retu
87f0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 7d 0a  rn TCL_ERROR;.}.
8800: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74 65 73  .static void tes
8810: 74 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64  t_collate_needed
8820: 5f 63 62 28 0a 20 20 76 6f 69 64 20 2a 70 43 74  _cb(.  void *pCt
8830: 78 2c 20 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  x, .  sqlite3 *d
8840: 62 2c 0a 20 20 69 6e 74 20 65 54 65 78 74 52 65  b,.  int eTextRe
8850: 70 2c 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20  p,.  const void 
8860: 2a 6e 6f 74 55 73 65 64 0a 29 7b 0a 20 20 69 6e  *notUsed.){.  in
8870: 74 20 65 6e 63 20 3d 20 64 62 2d 3e 65 6e 63 3b  t enc = db->enc;
8880: 0a 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  .  sqlite3_creat
8890: 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 0a 20 20 20  e_collation(.   
88a0: 20 20 20 64 62 2c 20 22 74 65 73 74 5f 63 6f 6c     db, "test_col
88b0: 6c 61 74 65 22 2c 20 64 62 2d 3e 65 6e 63 2c 20  late", db->enc, 
88c0: 28 76 6f 69 64 20 2a 29 65 6e 63 2c 20 74 65 73  (void *)enc, tes
88d0: 74 5f 63 6f 6c 6c 61 74 65 5f 66 75 6e 63 29 3b  t_collate_func);
88e0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
88f0: 20 61 64 64 5f 74 65 73 74 5f 63 6f 6c 6c 61 74   add_test_collat
8900: 65 5f 6e 65 65 64 65 64 20 44 42 0a 2a 2f 0a 73  e_needed DB.*/.s
8910: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63  tatic int test_c
8920: 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64 28 0a 20  ollate_needed(. 
8930: 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
8940: 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
8950: 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
8960: 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
8970: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
8980: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a  .  sqlite3 *db;.
8990: 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28    int rc;..  if(
89a0: 20 6f 62 6a 63 21 3d 32 20 29 20 67 6f 74 6f 20   objc!=2 ) goto 
89b0: 62 61 64 5f 61 72 67 73 3b 0a 20 20 69 66 28 20  bad_args;.  if( 
89c0: 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
89d0: 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
89e0: 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62  ng(objv[1]), &db
89f0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
8a00: 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c  RROR;.  rc = sql
8a10: 69 74 65 33 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 6e  ite3_collation_n
8a20: 65 65 64 65 64 31 36 28 64 62 2c 20 30 2c 20 74  eeded16(db, 0, t
8a30: 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65 64  est_collate_need
8a40: 65 64 5f 63 62 29 3b 0a 20 20 69 66 28 20 73 71  ed_cb);.  if( sq
8a50: 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65  lite3TestErrCode
8a60: 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29  (interp, db, rc)
8a70: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
8a80: 52 4f 52 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  ROR;.  return TC
8a90: 4c 5f 4f 4b 3b 0a 0a 62 61 64 5f 61 72 67 73 3a  L_OK;..bad_args:
8aa0: 0a 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41  .  Tcl_WrongNumA
8ab0: 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f  rgs(interp, 1, o
8ac0: 62 6a 76 2c 20 22 44 42 22 29 3b 0a 20 20 72 65  bjv, "DB");.  re
8ad0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
8ae0: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
8af0: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f  TE_OMIT_UTF16 */
8b00: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 61  ../*.** Usage: a
8b10: 64 64 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e  dd_test_function
8b20: 20 3c 64 62 20 70 74 72 3e 20 3c 75 74 66 38 3e   <db ptr> <utf8>
8b30: 20 3c 75 74 66 31 36 6c 65 3e 20 3c 75 74 66 31   <utf16le> <utf1
8b40: 36 62 65 3e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  6be>.**.** This 
8b50: 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64  function is used
8b60: 20 74 6f 20 74 65 73 74 20 74 68 61 74 20 53 51   to test that SQ
8b70: 4c 69 74 65 20 73 65 6c 65 63 74 73 20 74 68 65  Lite selects the
8b80: 20 63 6f 72 72 65 63 74 20 75 73 65 72 0a 2a 2a   correct user.**
8b90: 20 66 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 62 61   function callba
8ba0: 63 6b 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65  ck when multiple
8bb0: 20 76 65 72 73 69 6f 6e 73 20 28 66 6f 72 20 64   versions (for d
8bc0: 69 66 66 65 72 65 6e 74 20 74 65 78 74 20 65 6e  ifferent text en
8bd0: 63 6f 64 69 6e 67 73 29 0a 2a 2a 20 61 72 65 20  codings).** are 
8be0: 61 76 61 69 6c 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  available..**.**
8bf0: 20 43 61 6c 6c 69 6e 67 20 74 68 69 73 20 72 6f   Calling this ro
8c00: 75 74 69 6e 65 20 72 65 67 69 73 74 65 72 73 20  utine registers 
8c10: 75 70 20 74 6f 20 74 68 72 65 65 20 76 65 72 73  up to three vers
8c20: 69 6f 6e 73 20 6f 66 20 74 68 65 20 75 73 65 72  ions of the user
8c30: 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 22 74 65   function.** "te
8c40: 73 74 5f 66 75 6e 63 74 69 6f 6e 22 20 77 69 74  st_function" wit
8c50: 68 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  h database handl
8c60: 65 20 3c 64 62 3e 2e 20 20 49 66 20 74 68 65 20  e <db>.  If the 
8c70: 73 65 63 6f 6e 64 20 61 72 67 75 6d 65 6e 74 20  second argument 
8c80: 69 73 0a 2a 2a 20 74 72 75 65 2c 20 74 68 65 6e  is.** true, then
8c90: 20 61 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 65   a version of te
8ca0: 73 74 5f 66 75 6e 63 74 69 6f 6e 20 69 73 20 72  st_function is r
8cb0: 65 67 69 73 74 65 72 65 64 20 66 6f 72 20 55 54  egistered for UT
8cc0: 46 2d 38 2c 20 69 66 20 74 68 65 0a 2a 2a 20 74  F-8, if the.** t
8cd0: 68 69 72 64 20 69 73 20 74 72 75 65 2c 20 61 20  hird is true, a 
8ce0: 76 65 72 73 69 6f 6e 20 69 73 20 72 65 67 69 73  version is regis
8cf0: 74 65 72 65 64 20 66 6f 72 20 55 54 46 2d 31 36  tered for UTF-16
8d00: 6c 65 2c 20 69 66 20 74 68 65 20 66 6f 75 72 74  le, if the fourt
8d10: 68 20 69 73 0a 2a 2a 20 74 72 75 65 2c 20 61 20  h is.** true, a 
8d20: 55 54 46 2d 31 36 62 65 20 76 65 72 73 69 6f 6e  UTF-16be version
8d30: 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 20   is available.  
8d40: 50 72 65 76 69 6f 75 73 20 76 65 72 73 69 6f 6e  Previous version
8d50: 73 20 6f 66 0a 2a 2a 20 74 65 73 74 5f 66 75 6e  s of.** test_fun
8d60: 63 74 69 6f 6e 20 61 72 65 20 64 65 6c 65 74 65  ction are delete
8d70: 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75 73 65  d..**.** The use
8d80: 72 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6d  r function is im
8d90: 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 61 6c  plemented by cal
8da0: 6c 69 6e 67 20 74 68 65 20 66 6f 6c 6c 6f 77 69  ling the followi
8db0: 6e 67 20 54 43 4c 20 73 63 72 69 70 74 3a 0a 2a  ng TCL script:.*
8dc0: 2a 0a 2a 2a 20 20 20 22 74 65 73 74 5f 66 75 6e  *.**   "test_fun
8dd0: 63 74 69 6f 6e 20 3c 65 6e 63 3e 20 3c 61 72 67  ction <enc> <arg
8de0: 3e 22 0a 2a 2a 0a 2a 2a 20 57 68 65 72 65 20 3c  >".**.** Where <
8df0: 65 6e 63 3e 20 69 73 20 6f 6e 65 20 6f 66 20 55  enc> is one of U
8e00: 54 46 2d 38 2c 20 55 54 46 2d 31 36 4c 45 20 6f  TF-8, UTF-16LE o
8e10: 72 20 55 54 46 31 36 42 45 2c 20 61 6e 64 20 3c  r UTF16BE, and <
8e20: 61 72 67 3e 20 69 73 20 74 68 65 0a 2a 2a 20 73  arg> is the.** s
8e30: 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 20 70  ingle argument p
8e40: 61 73 73 65 64 20 74 6f 20 74 68 65 20 53 51 4c  assed to the SQL
8e50: 20 66 75 6e 63 74 69 6f 6e 2e 20 54 68 65 20 76   function. The v
8e60: 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79  alue returned by
8e70: 0a 2a 2a 20 74 68 65 20 54 43 4c 20 73 63 72 69  .** the TCL scri
8e80: 70 74 20 69 73 20 75 73 65 64 20 61 73 20 74 68  pt is used as th
8e90: 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 6f  e return value o
8ea0: 66 20 74 68 65 20 53 51 4c 20 66 75 6e 63 74 69  f the SQL functi
8eb0: 6f 6e 2e 20 49 74 0a 2a 2a 20 69 73 20 70 61 73  on. It.** is pas
8ec0: 73 65 64 20 74 6f 20 53 51 4c 69 74 65 20 75 73  sed to SQLite us
8ed0: 69 6e 67 20 55 54 46 2d 31 36 42 45 20 66 6f 72  ing UTF-16BE for
8ee0: 20 61 20 55 54 46 2d 38 20 74 65 73 74 5f 66 75   a UTF-8 test_fu
8ef0: 6e 63 74 69 6f 6e 28 29 2c 20 55 54 46 2d 38 0a  nction(), UTF-8.
8f00: 2a 2a 20 66 6f 72 20 61 20 55 54 46 2d 31 36 4c  ** for a UTF-16L
8f10: 45 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 28  E test_function(
8f20: 29 2c 20 61 6e 64 20 55 54 46 2d 31 36 4c 45 20  ), and UTF-16LE 
8f30: 66 6f 72 20 61 6e 20 69 6d 70 6c 65 6d 65 6e 74  for an implement
8f40: 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 70 72  ation that.** pr
8f50: 65 66 65 72 73 20 55 54 46 2d 31 36 42 45 2e 0a  efers UTF-16BE..
8f60: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
8f70: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 73 74 61  E_OMIT_UTF16.sta
8f80: 74 69 63 20 76 6f 69 64 20 74 65 73 74 5f 66 75  tic void test_fu
8f90: 6e 63 74 69 6f 6e 5f 75 74 66 38 28 0a 20 20 73  nction_utf8(.  s
8fa0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
8fb0: 70 43 74 78 2c 20 0a 20 20 69 6e 74 20 6e 41 72  pCtx, .  int nAr
8fc0: 67 2c 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  g,.  sqlite3_val
8fd0: 75 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 54  ue **argv.){.  T
8fe0: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
8ff0: 70 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 58  p;.  Tcl_Obj *pX
9000: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  ;.  sqlite3_valu
9010: 65 20 2a 70 56 61 6c 3b 0a 20 20 69 6e 74 65 72  e *pVal;.  inter
9020: 70 20 3d 20 28 54 63 6c 5f 49 6e 74 65 72 70 20  p = (Tcl_Interp 
9030: 2a 29 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64  *)sqlite3_user_d
9040: 61 74 61 28 70 43 74 78 29 3b 0a 20 20 70 58 20  ata(pCtx);.  pX 
9050: 3d 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  = Tcl_NewStringO
9060: 62 6a 28 22 74 65 73 74 5f 66 75 6e 63 74 69 6f  bj("test_functio
9070: 6e 22 2c 20 2d 31 29 3b 0a 20 20 54 63 6c 5f 49  n", -1);.  Tcl_I
9080: 6e 63 72 52 65 66 43 6f 75 6e 74 28 70 58 29 3b  ncrRefCount(pX);
9090: 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70  .  Tcl_ListObjAp
90a0: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65  pendElement(inte
90b0: 72 70 2c 20 70 58 2c 20 54 63 6c 5f 4e 65 77 53  rp, pX, Tcl_NewS
90c0: 74 72 69 6e 67 4f 62 6a 28 22 55 54 46 2d 38 22  tringObj("UTF-8"
90d0: 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 4c 69  , -1));.  Tcl_Li
90e0: 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65  stObjAppendEleme
90f0: 6e 74 28 69 6e 74 65 72 70 2c 20 70 58 2c 20 0a  nt(interp, pX, .
9100: 20 20 20 20 20 20 54 63 6c 5f 4e 65 77 53 74 72        Tcl_NewStr
9110: 69 6e 67 4f 62 6a 28 73 71 6c 69 74 65 33 5f 76  ingObj(sqlite3_v
9120: 61 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b 30  alue_text(argv[0
9130: 5d 29 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f  ]), -1));.  Tcl_
9140: 45 76 61 6c 4f 62 6a 45 78 28 69 6e 74 65 72 70  EvalObjEx(interp
9150: 2c 20 70 58 2c 20 30 29 3b 0a 20 20 54 63 6c 5f  , pX, 0);.  Tcl_
9160: 44 65 63 72 52 65 66 43 6f 75 6e 74 28 70 58 29  DecrRefCount(pX)
9170: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75  ;.  sqlite3_resu
9180: 6c 74 5f 74 65 78 74 28 70 43 74 78 2c 20 54 63  lt_text(pCtx, Tc
9190: 6c 5f 47 65 74 53 74 72 69 6e 67 52 65 73 75 6c  l_GetStringResul
91a0: 74 28 69 6e 74 65 72 70 29 2c 20 2d 31 2c 20 53  t(interp), -1, S
91b0: 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29  QLITE_TRANSIENT)
91c0: 3b 0a 20 20 70 56 61 6c 20 3d 20 73 71 6c 69 74  ;.  pVal = sqlit
91d0: 65 33 56 61 6c 75 65 4e 65 77 28 29 3b 0a 20 20  e3ValueNew();.  
91e0: 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53  sqlite3ValueSetS
91f0: 74 72 28 70 56 61 6c 2c 20 2d 31 2c 20 54 63 6c  tr(pVal, -1, Tcl
9200: 5f 47 65 74 53 74 72 69 6e 67 52 65 73 75 6c 74  _GetStringResult
9210: 28 69 6e 74 65 72 70 29 2c 20 0a 20 20 20 20 20  (interp), .     
9220: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51   SQLITE_UTF8, SQ
9230: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
9240: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74  sqlite3_result_t
9250: 65 78 74 31 36 62 65 28 70 43 74 78 2c 20 73 71  ext16be(pCtx, sq
9260: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
9270: 31 36 62 65 28 70 56 61 6c 29 2c 0a 20 20 20 20  16be(pVal),.    
9280: 20 20 2d 31 2c 20 53 51 4c 49 54 45 5f 54 52 41    -1, SQLITE_TRA
9290: 4e 53 49 45 4e 54 29 3b 0a 20 20 73 71 6c 69 74  NSIENT);.  sqlit
92a0: 65 33 56 61 6c 75 65 46 72 65 65 28 70 56 61 6c  e3ValueFree(pVal
92b0: 29 3b 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64  );.}.static void
92c0: 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 5f 75   test_function_u
92d0: 74 66 31 36 6c 65 28 0a 20 20 73 71 6c 69 74 65  tf16le(.  sqlite
92e0: 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c  3_context *pCtx,
92f0: 20 0a 20 20 69 6e 74 20 6e 41 72 67 2c 0a 20 20   .  int nArg,.  
9300: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
9310: 61 72 67 76 0a 29 7b 0a 20 20 54 63 6c 5f 49 6e  argv.){.  Tcl_In
9320: 74 65 72 70 20 2a 69 6e 74 65 72 70 3b 0a 20 20  terp *interp;.  
9330: 54 63 6c 5f 4f 62 6a 20 2a 70 58 3b 0a 20 20 73  Tcl_Obj *pX;.  s
9340: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56  qlite3_value *pV
9350: 61 6c 3b 0a 20 20 69 6e 74 65 72 70 20 3d 20 28  al;.  interp = (
9360: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 29 73 71 6c  Tcl_Interp *)sql
9370: 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 70  ite3_user_data(p
9380: 43 74 78 29 3b 0a 20 20 70 58 20 3d 20 54 63 6c  Ctx);.  pX = Tcl
9390: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 74  _NewStringObj("t
93a0: 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 2d  est_function", -
93b0: 31 29 3b 0a 20 20 54 63 6c 5f 49 6e 63 72 52 65  1);.  Tcl_IncrRe
93c0: 66 43 6f 75 6e 74 28 70 58 29 3b 0a 20 20 54 63  fCount(pX);.  Tc
93d0: 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45  l_ListObjAppendE
93e0: 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 70  lement(interp, p
93f0: 58 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  X, Tcl_NewString
9400: 4f 62 6a 28 22 55 54 46 2d 31 36 4c 45 22 2c 20  Obj("UTF-16LE", 
9410: 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74  -1));.  Tcl_List
9420: 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  ObjAppendElement
9430: 28 69 6e 74 65 72 70 2c 20 70 58 2c 20 0a 20 20  (interp, pX, .  
9440: 20 20 20 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e      Tcl_NewStrin
9450: 67 4f 62 6a 28 73 71 6c 69 74 65 33 5f 76 61 6c  gObj(sqlite3_val
9460: 75 65 5f 74 65 78 74 28 61 72 67 76 5b 30 5d 29  ue_text(argv[0])
9470: 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 45 76  , -1));.  Tcl_Ev
9480: 61 6c 4f 62 6a 45 78 28 69 6e 74 65 72 70 2c 20  alObjEx(interp, 
9490: 70 58 2c 20 30 29 3b 0a 20 20 54 63 6c 5f 44 65  pX, 0);.  Tcl_De
94a0: 63 72 52 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a  crRefCount(pX);.
94b0: 20 20 70 56 61 6c 20 3d 20 73 71 6c 69 74 65 33    pVal = sqlite3
94c0: 56 61 6c 75 65 4e 65 77 28 29 3b 0a 20 20 73 71  ValueNew();.  sq
94d0: 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72  lite3ValueSetStr
94e0: 28 70 56 61 6c 2c 20 2d 31 2c 20 54 63 6c 5f 47  (pVal, -1, Tcl_G
94f0: 65 74 53 74 72 69 6e 67 52 65 73 75 6c 74 28 69  etStringResult(i
9500: 6e 74 65 72 70 29 2c 20 0a 20 20 20 20 20 20 53  nterp), .      S
9510: 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49  QLITE_UTF8, SQLI
9520: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 73 71  TE_STATIC);.  sq
9530: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78  lite3_result_tex
9540: 74 28 70 43 74 78 2c 73 71 6c 69 74 65 33 5f 76  t(pCtx,sqlite3_v
9550: 61 6c 75 65 5f 74 65 78 74 28 70 56 61 6c 29 2c  alue_text(pVal),
9560: 2d 31 2c 53 51 4c 49 54 45 5f 54 52 41 4e 53 49  -1,SQLITE_TRANSI
9570: 45 4e 54 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  ENT);.  sqlite3V
9580: 61 6c 75 65 46 72 65 65 28 70 56 61 6c 29 3b 0a  alueFree(pVal);.
9590: 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74 65  }.static void te
95a0: 73 74 5f 66 75 6e 63 74 69 6f 6e 5f 75 74 66 31  st_function_utf1
95b0: 36 62 65 28 0a 20 20 73 71 6c 69 74 65 33 5f 63  6be(.  sqlite3_c
95c0: 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 0a 20  ontext *pCtx, . 
95d0: 20 69 6e 74 20 6e 41 72 67 2c 0a 20 20 73 71 6c   int nArg,.  sql
95e0: 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67  ite3_value **arg
95f0: 76 0a 29 7b 0a 20 20 54 63 6c 5f 49 6e 74 65 72  v.){.  Tcl_Inter
9600: 70 20 2a 69 6e 74 65 72 70 3b 0a 20 20 54 63 6c  p *interp;.  Tcl
9610: 5f 4f 62 6a 20 2a 70 58 3b 0a 20 20 73 71 6c 69  _Obj *pX;.  sqli
9620: 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 3b  te3_value *pVal;
9630: 0a 20 20 69 6e 74 65 72 70 20 3d 20 28 54 63 6c  .  interp = (Tcl
9640: 5f 49 6e 74 65 72 70 20 2a 29 73 71 6c 69 74 65  _Interp *)sqlite
9650: 33 5f 75 73 65 72 5f 64 61 74 61 28 70 43 74 78  3_user_data(pCtx
9660: 29 3b 0a 20 20 70 58 20 3d 20 54 63 6c 5f 4e 65  );.  pX = Tcl_Ne
9670: 77 53 74 72 69 6e 67 4f 62 6a 28 22 74 65 73 74  wStringObj("test
9680: 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 2d 31 29 3b  _function", -1);
9690: 0a 20 20 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f  .  Tcl_IncrRefCo
96a0: 75 6e 74 28 70 58 29 3b 0a 20 20 54 63 6c 5f 4c  unt(pX);.  Tcl_L
96b0: 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d  istObjAppendElem
96c0: 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 58 2c 20  ent(interp, pX, 
96d0: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
96e0: 28 22 55 54 46 2d 31 36 42 45 22 2c 20 2d 31 29  ("UTF-16BE", -1)
96f0: 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a  );.  Tcl_ListObj
9700: 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e  AppendElement(in
9710: 74 65 72 70 2c 20 70 58 2c 20 0a 20 20 20 20 20  terp, pX, .     
9720: 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
9730: 6a 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  j(sqlite3_value_
9740: 74 65 78 74 28 61 72 67 76 5b 30 5d 29 2c 20 2d  text(argv[0]), -
9750: 31 29 29 3b 0a 20 20 54 63 6c 5f 45 76 61 6c 4f  1));.  Tcl_EvalO
9760: 62 6a 45 78 28 69 6e 74 65 72 70 2c 20 70 58 2c  bjEx(interp, pX,
9770: 20 30 29 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52   0);.  Tcl_DecrR
9780: 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a 20 20 70  efCount(pX);.  p
9790: 56 61 6c 20 3d 20 73 71 6c 69 74 65 33 56 61 6c  Val = sqlite3Val
97a0: 75 65 4e 65 77 28 29 3b 0a 20 20 73 71 6c 69 74  ueNew();.  sqlit
97b0: 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 70 56  e3ValueSetStr(pV
97c0: 61 6c 2c 20 2d 31 2c 20 54 63 6c 5f 47 65 74 53  al, -1, Tcl_GetS
97d0: 74 72 69 6e 67 52 65 73 75 6c 74 28 69 6e 74 65  tringResult(inte
97e0: 72 70 29 2c 20 0a 20 20 20 20 20 20 53 51 4c 49  rp), .      SQLI
97f0: 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f  TE_UTF8, SQLITE_
9800: 53 54 41 54 49 43 29 3b 0a 20 20 73 71 6c 69 74  STATIC);.  sqlit
9810: 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 31 36  e3_result_text16
9820: 6c 65 28 70 43 74 78 2c 20 73 71 6c 69 74 65 33  le(pCtx, sqlite3
9830: 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 6c 65 28  _value_text16le(
9840: 70 56 61 6c 29 2c 0a 20 20 20 20 20 20 2d 31 2c  pVal),.      -1,
9850: 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
9860: 54 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c  T);.  sqlite3Val
9870: 75 65 46 72 65 65 28 70 56 61 6c 29 3b 0a 7d 0a  ueFree(pVal);.}.
9880: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
9890: 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 73  _OMIT_UTF16 */.s
98a0: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 66  tatic int test_f
98b0: 75 6e 63 74 69 6f 6e 28 0a 20 20 76 6f 69 64 20  unction(.  void 
98c0: 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
98d0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
98e0: 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
98f0: 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
9900: 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64   objv[].){.#ifnd
9910: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
9920: 54 46 31 36 0a 20 20 73 71 6c 69 74 65 33 20 2a  TF16.  sqlite3 *
9930: 64 62 3b 0a 20 20 69 6e 74 20 76 61 6c 3b 0a 0a  db;.  int val;..
9940: 20 20 69 66 28 20 6f 62 6a 63 21 3d 35 20 29 20    if( objc!=5 ) 
9950: 67 6f 74 6f 20 62 61 64 5f 61 72 67 73 3b 0a 20  goto bad_args;. 
9960: 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
9970: 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
9980: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
9990: 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
99a0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 69 66  TCL_ERROR;..  if
99b0: 28 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65  ( TCL_OK!=Tcl_Ge
99c0: 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28  tBooleanFromObj(
99d0: 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c  interp, objv[2],
99e0: 20 26 76 61 6c 29 20 29 20 72 65 74 75 72 6e 20   &val) ) return 
99f0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  TCL_ERROR;.  if(
9a00: 20 76 61 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69   val ){.    sqli
9a10: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
9a20: 69 6f 6e 28 64 62 2c 20 22 74 65 73 74 5f 66 75  ion(db, "test_fu
9a30: 6e 63 74 69 6f 6e 22 2c 20 31 2c 20 53 51 4c 49  nction", 1, SQLI
9a40: 54 45 5f 55 54 46 38 2c 20 0a 20 20 20 20 20 20  TE_UTF8, .      
9a50: 20 20 69 6e 74 65 72 70 2c 20 74 65 73 74 5f 66    interp, test_f
9a60: 75 6e 63 74 69 6f 6e 5f 75 74 66 38 2c 20 30 2c  unction_utf8, 0,
9a70: 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 54   0);.  }.  if( T
9a80: 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 42 6f  CL_OK!=Tcl_GetBo
9a90: 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74  oleanFromObj(int
9aa0: 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 76  erp, objv[3], &v
9ab0: 61 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  al) ) return TCL
9ac0: 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 76 61  _ERROR;.  if( va
9ad0: 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
9ae0: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
9af0: 28 64 62 2c 20 22 74 65 73 74 5f 66 75 6e 63 74  (db, "test_funct
9b00: 69 6f 6e 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f  ion", 1, SQLITE_
9b10: 55 54 46 31 36 4c 45 2c 20 0a 20 20 20 20 20 20  UTF16LE, .      
9b20: 20 20 69 6e 74 65 72 70 2c 20 74 65 73 74 5f 66    interp, test_f
9b30: 75 6e 63 74 69 6f 6e 5f 75 74 66 31 36 6c 65 2c  unction_utf16le,
9b40: 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66   0, 0);.  }.  if
9b50: 28 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65  ( TCL_OK!=Tcl_Ge
9b60: 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28  tBooleanFromObj(
9b70: 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c  interp, objv[4],
9b80: 20 26 76 61 6c 29 20 29 20 72 65 74 75 72 6e 20   &val) ) return 
9b90: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  TCL_ERROR;.  if(
9ba0: 20 76 61 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69   val ){.    sqli
9bb0: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
9bc0: 69 6f 6e 28 64 62 2c 20 22 74 65 73 74 5f 66 75  ion(db, "test_fu
9bd0: 6e 63 74 69 6f 6e 22 2c 20 31 2c 20 53 51 4c 49  nction", 1, SQLI
9be0: 54 45 5f 55 54 46 31 36 42 45 2c 20 0a 20 20 20  TE_UTF16BE, .   
9bf0: 20 20 20 20 20 69 6e 74 65 72 70 2c 20 74 65 73       interp, tes
9c00: 74 5f 66 75 6e 63 74 69 6f 6e 5f 75 74 66 31 36  t_function_utf16
9c10: 62 65 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 0a  be, 0, 0);.  }..
9c20: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
9c30: 0a 62 61 64 5f 61 72 67 73 3a 0a 20 20 54 63 6c  .bad_args:.  Tcl
9c40: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
9c50: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
9c60: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
9c70: 22 22 2c 0a 20 20 20 20 20 20 54 63 6c 5f 47 65  "",.      Tcl_Ge
9c80: 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f  tStringFromObj(o
9c90: 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 3c 44  bjv[0], 0), " <D
9ca0: 42 3e 20 3c 75 74 66 38 3e 20 3c 75 74 66 31 36  B> <utf8> <utf16
9cb0: 6c 65 3e 20 3c 75 74 66 31 36 62 65 3e 22 2c 20  le> <utf16be>", 
9cc0: 30 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  0);.#endif /* SQ
9cd0: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
9ce0: 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  */.  return TCL_
9cf0: 45 52 52 4f 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  ERROR;.}../*.** 
9d00: 55 73 61 67 65 3a 20 20 20 20 20 20 20 20 20 74  Usage:         t
9d10: 65 73 74 5f 65 72 72 73 74 72 20 3c 65 72 72 20  est_errstr <err 
9d20: 63 6f 64 65 3e 0a 2a 2a 0a 2a 2a 20 54 65 73 74  code>.**.** Test
9d30: 20 74 68 61 74 20 74 68 65 20 65 6e 67 6c 69 73   that the englis
9d40: 68 20 6c 61 6e 67 75 61 67 65 20 73 74 72 69 6e  h language strin
9d50: 67 20 65 71 75 69 76 61 6c 65 6e 74 73 20 66 6f  g equivalents fo
9d60: 72 20 73 71 6c 69 74 65 20 65 72 72 6f 72 20 63  r sqlite error c
9d70: 6f 64 65 73 0a 2a 2a 20 61 72 65 20 73 61 6e 65  odes.** are sane
9d80: 2e 20 54 68 65 20 70 61 72 61 6d 65 74 65 72 20  . The parameter 
9d90: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  is an integer re
9da0: 70 72 65 73 65 6e 74 69 6e 67 20 61 6e 20 73 71  presenting an sq
9db0: 6c 69 74 65 20 65 72 72 6f 72 20 63 6f 64 65 2e  lite error code.
9dc0: 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 20 69  .** The result i
9dd0: 73 20 61 20 6c 69 73 74 20 6f 66 20 74 77 6f 20  s a list of two 
9de0: 65 6c 65 6d 65 6e 74 73 2c 20 74 68 65 20 73 74  elements, the st
9df0: 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74  ring representat
9e00: 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 65 72  ion of the.** er
9e10: 72 6f 72 20 63 6f 64 65 20 61 6e 64 20 74 68 65  ror code and the
9e20: 20 65 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67   english languag
9e30: 65 20 65 78 70 6c 61 6e 61 74 69 6f 6e 2e 0a 2a  e explanation..*
9e40: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
9e50: 74 5f 65 72 72 73 74 72 28 0a 20 20 76 6f 69 64  t_errstr(.  void
9e60: 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
9e70: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
9e80: 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
9e90: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
9ea0: 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 63 68  T objv[].){.  ch
9eb0: 61 72 20 2a 7a 43 6f 64 65 3b 0a 20 20 69 6e 74  ar *zCode;.  int
9ec0: 20 69 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d   i;.  if( objc!=
9ed0: 31 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f  1 ){.    Tcl_Wro
9ee0: 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
9ef0: 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 3c 65 72 72  , 1, objv, "<err
9f00: 6f 72 20 63 6f 64 65 3e 22 29 3b 0a 20 20 7d 0a  or code>");.  }.
9f10: 0a 20 20 7a 43 6f 64 65 20 3d 20 54 63 6c 5f 47  .  zCode = Tcl_G
9f20: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
9f30: 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  );.  for(i=0; i<
9f40: 32 30 30 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  200; i++){.    i
9f50: 66 28 20 30 3d 3d 73 74 72 63 6d 70 28 65 72 72  f( 0==strcmp(err
9f60: 6f 72 4e 61 6d 65 28 69 29 2c 20 7a 43 6f 64 65  orName(i), zCode
9f70: 29 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20  ) ) break;.  }. 
9f80: 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69   Tcl_SetResult(i
9f90: 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 73  nterp, (char *)s
9fa0: 71 6c 69 74 65 33 45 72 72 53 74 72 28 69 29 2c  qlite3ErrStr(i),
9fb0: 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43   0);.  return TC
9fc0: 4c 5f 4f 4b 3b 0a 7d 0a 0a 73 74 61 74 69 63 20  L_OK;.}..static 
9fd0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 72 61 73  int sqlite3_cras
9fe0: 68 70 61 72 61 6d 73 28 0a 20 20 76 6f 69 64 20  hparams(.  void 
9ff0: 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
a000: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
a010: 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
a020: 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
a030: 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 64 65   objv[].){.#ifde
a040: 66 20 4f 53 5f 54 45 53 54 0a 20 20 69 6e 74 20  f OS_TEST.  int 
a050: 64 65 6c 61 79 3b 0a 20 20 69 66 28 20 6f 62 6a  delay;.  if( obj
a060: 63 21 3d 33 20 29 20 67 6f 74 6f 20 62 61 64 5f  c!=3 ) goto bad_
a070: 61 72 67 73 3b 0a 20 20 69 66 28 20 54 63 6c 5f  args;.  if( Tcl_
a080: 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e  GetIntFromObj(in
a090: 74 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20 26  terp, objv[1], &
a0a0: 64 65 6c 61 79 29 20 29 20 72 65 74 75 72 6e 20  delay) ) return 
a0b0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 73 71 6c  TCL_ERROR;.  sql
a0c0: 69 74 65 33 53 65 74 43 72 61 73 68 50 61 72 61  ite3SetCrashPara
a0d0: 6d 73 28 64 65 6c 61 79 2c 20 54 63 6c 5f 47 65  ms(delay, Tcl_Ge
a0e0: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29  tString(objv[2])
a0f0: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75  );.#endif.  retu
a100: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 0a 23 69 66 64  rn TCL_OK;..#ifd
a110: 65 66 20 4f 53 5f 54 45 53 54 0a 62 61 64 5f 61  ef OS_TEST.bad_a
a120: 72 67 73 3a 0a 20 20 54 63 6c 5f 41 70 70 65 6e  rgs:.  Tcl_Appen
a130: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
a140: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
a150: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20  hould be \"",.  
a160: 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
a170: 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d  gFromObj(objv[0]
a180: 2c 20 30 29 2c 20 22 3c 64 65 6c 61 79 3e 20 3c  , 0), "<delay> <
a190: 66 69 6c 65 6e 61 6d 65 3e 22 2c 20 30 29 3b 0a  filename>", 0);.
a1a0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
a1b0: 4f 52 3b 0a 23 65 6e 64 69 66 0a 7d 0a 0a 0a 2f  OR;.#endif.}.../
a1c0: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 20 62  *.** Usage:    b
a1d0: 72 65 61 6b 70 6f 69 6e 74 0a 2a 2a 0a 2a 2a 20  reakpoint.**.** 
a1e0: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 65 78 69  This routine exi
a1f0: 73 74 73 20 66 6f 72 20 6f 6e 65 20 70 75 72 70  sts for one purp
a200: 6f 73 65 20 2d 20 74 6f 20 70 72 6f 76 69 64 65  ose - to provide
a210: 20 61 20 70 6c 61 63 65 20 74 6f 20 70 75 74 20   a place to put 
a220: 61 0a 2a 2a 20 62 72 65 61 6b 70 6f 69 6e 74 20  a.** breakpoint 
a230: 77 69 74 68 20 47 44 42 20 74 68 61 74 20 63 61  with GDB that ca
a240: 6e 20 62 65 20 74 72 69 67 67 65 72 65 64 20 75  n be triggered u
a250: 73 69 6e 67 20 54 43 4c 20 63 6f 64 65 2e 20 20  sing TCL code.  
a260: 54 68 65 20 75 73 65 0a 2a 2a 20 66 6f 72 20 74  The use.** for t
a270: 68 69 73 20 69 73 20 77 68 65 6e 20 61 20 70 61  his is when a pa
a280: 72 74 69 63 75 6c 61 72 20 74 65 73 74 20 66 61  rticular test fa
a290: 69 6c 73 20 6f 6e 20 28 73 61 79 29 20 74 68 65  ils on (say) the
a2a0: 20 31 34 38 35 74 68 20 69 74 65 72 61 74 69 6f   1485th iteratio
a2b0: 6e 2e 0a 2a 2a 20 49 6e 20 74 68 65 20 54 43 4c  n..** In the TCL
a2c0: 20 74 65 73 74 20 73 63 72 69 70 74 2c 20 77 65   test script, we
a2d0: 20 63 61 6e 20 61 64 64 20 63 6f 64 65 20 6c 69   can add code li
a2e0: 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20  ke this:.**.**  
a2f0: 20 20 20 69 66 20 7b 24 69 3d 3d 31 34 38 35 7d     if {$i==1485}
a300: 20 62 72 65 61 6b 70 6f 69 6e 74 0a 2a 2a 0a 2a   breakpoint.**.*
a310: 2a 20 54 68 65 6e 20 72 75 6e 20 74 65 73 74 66  * Then run testf
a320: 69 78 74 75 72 65 20 69 6e 20 74 68 65 20 64 65  ixture in the de
a330: 62 75 67 67 65 72 20 61 6e 64 20 77 61 69 74 20  bugger and wait 
a340: 66 6f 72 20 74 68 65 20 62 72 65 61 6b 70 6f 69  for the breakpoi
a350: 6e 74 20 74 6f 0a 2a 2a 20 66 69 72 65 2e 20 20  nt to.** fire.  
a360: 54 68 65 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20  Then additional 
a370: 62 72 65 61 6b 70 6f 69 6e 74 73 20 63 61 6e 20  breakpoints can 
a380: 62 65 20 73 65 74 20 74 6f 20 74 72 61 63 65 20  be set to trace 
a390: 64 6f 77 6e 20 74 68 65 20 62 75 67 2e 0a 2a 2f  down the bug..*/
a3a0: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
a3b0: 5f 62 72 65 61 6b 70 6f 69 6e 74 28 0a 20 20 76  _breakpoint(.  v
a3c0: 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20  oid *NotUsed,.  
a3d0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
a3e0: 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43  rp,    /* The TC
a3f0: 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68  L interpreter th
a400: 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20  at invoked this 
a410: 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74  command */.  int
a420: 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20   argc,          
a430: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
a440: 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
a450: 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20  char **argv     
a460: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f         /* Text o
a470: 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20  f each argument 
a480: 2a 2f 0a 29 7b 0a 20 20 72 65 74 75 72 6e 20 54  */.){.  return T
a490: 43 4c 5f 4f 4b 3b 20 20 20 20 20 20 20 20 20 2f  CL_OK;         /
a4a0: 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 20 2a 2f 0a  * Do nothing */.
a4b0: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
a4c0: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69    sqlite3_bind_i
a4d0: 6e 74 20 20 53 54 4d 54 20 4e 20 56 41 4c 55 45  nt  STMT N VALUE
a4e0: 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65 20  .**.** Test the 
a4f0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
a500: 20 69 6e 74 65 72 66 61 63 65 2e 20 20 53 54 4d   interface.  STM
a510: 54 20 69 73 20 61 20 70 72 65 70 61 72 65 64 20  T is a prepared 
a520: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20  statement..** N 
a530: 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
a540: 61 20 77 69 6c 64 63 61 72 64 20 69 6e 20 74 68  a wildcard in th
a550: 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
a560: 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d  ment.  This comm
a570: 61 6e 64 0a 2a 2a 20 62 69 6e 64 73 20 61 20 33  and.** binds a 3
a580: 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 56 41  2-bit integer VA
a590: 4c 55 45 20 74 6f 20 74 68 61 74 20 77 69 6c 64  LUE to that wild
a5a0: 63 61 72 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  card..*/.static 
a5b0: 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f 69 6e  int test_bind_in
a5c0: 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  t(.  void * clie
a5d0: 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
a5e0: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
a5f0: 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
a600: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
a610: 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ].){.  sqlite3_s
a620: 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e  tmt *pStmt;.  in
a630: 74 20 69 64 78 3b 0a 20 20 69 6e 74 20 76 61 6c  t idx;.  int val
a640: 75 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20  ue;.  int rc;.. 
a650: 20 69 66 28 20 6f 62 6a 63 21 3d 34 20 29 7b 0a   if( objc!=4 ){.
a660: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
a670: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
a680: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
a690: 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20  ld be \"",.     
a6a0: 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
a6b0: 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c  FromObj(objv[0],
a6c0: 20 30 29 2c 20 22 20 53 54 4d 54 20 4e 20 56 41   0), " STMT N VA
a6d0: 4c 55 45 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  LUE", 0);.    re
a6e0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
a6f0: 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74    }..  if( getSt
a700: 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  mtPointer(interp
a710: 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
a720: 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74  objv[1]), &pStmt
a730: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
a740: 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f  RROR;.  if( Tcl_
a750: 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e  GetIntFromObj(in
a760: 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26  terp, objv[2], &
a770: 69 64 78 29 20 29 20 72 65 74 75 72 6e 20 54 43  idx) ) return TC
a780: 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54  L_ERROR;.  if( T
a790: 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a  cl_GetIntFromObj
a7a0: 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d  (interp, objv[3]
a7b0: 2c 20 26 76 61 6c 75 65 29 20 29 20 72 65 74 75  , &value) ) retu
a7c0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20  rn TCL_ERROR;.. 
a7d0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69   rc = sqlite3_bi
a7e0: 6e 64 5f 69 6e 74 28 70 53 74 6d 74 2c 20 69 64  nd_int(pStmt, id
a7f0: 78 2c 20 76 61 6c 75 65 29 3b 0a 20 20 69 66 28  x, value);.  if(
a800: 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43   sqlite3TestErrC
a810: 6f 64 65 28 69 6e 74 65 72 70 2c 20 53 74 6d 74  ode(interp, Stmt
a820: 54 6f 44 62 28 70 53 74 6d 74 29 2c 20 72 63 29  ToDb(pStmt), rc)
a830: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
a840: 52 4f 52 3b 0a 20 20 69 66 28 20 72 63 21 3d 53  ROR;.  if( rc!=S
a850: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
a860: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
a870: 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20  ;.  }..  return 
a880: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a  TCL_OK;.}.../*.*
a890: 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74  * Usage:   sqlit
a8a0: 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 20 20 53  e3_bind_int64  S
a8b0: 54 4d 54 20 4e 20 56 41 4c 55 45 0a 2a 2a 0a 2a  TMT N VALUE.**.*
a8c0: 2a 20 54 65 73 74 20 74 68 65 20 73 71 6c 69 74  * Test the sqlit
a8d0: 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 20 69 6e  e3_bind_int64 in
a8e0: 74 65 72 66 61 63 65 2e 20 20 53 54 4d 54 20 69  terface.  STMT i
a8f0: 73 20 61 20 70 72 65 70 61 72 65 64 20 73 74 61  s a prepared sta
a900: 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20  tement..** N is 
a910: 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20 77  the index of a w
a920: 69 6c 64 63 61 72 64 20 69 6e 20 74 68 65 20 70  ildcard in the p
a930: 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
a940: 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64  t.  This command
a950: 0a 2a 2a 20 62 69 6e 64 73 20 61 20 36 34 2d 62  .** binds a 64-b
a960: 69 74 20 69 6e 74 65 67 65 72 20 56 41 4c 55 45  it integer VALUE
a970: 20 74 6f 20 74 68 61 74 20 77 69 6c 64 63 61 72   to that wildcar
a980: 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  d..*/.static int
a990: 20 74 65 73 74 5f 62 69 6e 64 5f 69 6e 74 36 34   test_bind_int64
a9a0: 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
a9b0: 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
a9c0: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
a9d0: 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
a9e0: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
a9f0: 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  .){.  sqlite3_st
aa00: 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74  mt *pStmt;.  int
aa10: 20 69 64 78 3b 0a 20 20 69 36 34 20 76 61 6c 75   idx;.  i64 valu
aa20: 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20  e;.  int rc;..  
aa30: 69 66 28 20 6f 62 6a 63 21 3d 34 20 29 7b 0a 20  if( objc!=4 ){. 
aa40: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
aa50: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
aa60: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
aa70: 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20  d be \"",.      
aa80: 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46    Tcl_GetStringF
aa90: 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20  romObj(objv[0], 
aaa0: 30 29 2c 20 22 20 53 54 4d 54 20 4e 20 56 41 4c  0), " STMT N VAL
aab0: 55 45 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  UE", 0);.    ret
aac0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
aad0: 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d   }..  if( getStm
aae0: 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  tPointer(interp,
aaf0: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
ab00: 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29  bjv[1]), &pStmt)
ab10: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
ab20: 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47  ROR;.  if( Tcl_G
ab30: 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
ab40: 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 69  erp, objv[2], &i
ab50: 64 78 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  dx) ) return TCL
ab60: 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63  _ERROR;.  if( Tc
ab70: 6c 5f 47 65 74 57 69 64 65 49 6e 74 46 72 6f 6d  l_GetWideIntFrom
ab80: 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
ab90: 5b 33 5d 2c 20 26 76 61 6c 75 65 29 20 29 20 72  [3], &value) ) r
aba0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
abb0: 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ..  rc = sqlite3
abc0: 5f 62 69 6e 64 5f 69 6e 74 36 34 28 70 53 74 6d  _bind_int64(pStm
abd0: 74 2c 20 69 64 78 2c 20 76 61 6c 75 65 29 3b 0a  t, idx, value);.
abe0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73    if( sqlite3Tes
abf0: 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c  tErrCode(interp,
ac00: 20 53 74 6d 74 54 6f 44 62 28 70 53 74 6d 74 29   StmtToDb(pStmt)
ac10: 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54  , rc) ) return T
ac20: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
ac30: 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
ac40: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
ac50: 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72 65  ERROR;.  }..  re
ac60: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
ac70: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20  ./*.** Usage:   
ac80: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75  sqlite3_bind_dou
ac90: 62 6c 65 20 20 53 54 4d 54 20 4e 20 56 41 4c 55  ble  STMT N VALU
aca0: 45 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65  E.**.** Test the
acb0: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f   sqlite3_bind_do
acc0: 75 62 6c 65 20 69 6e 74 65 72 66 61 63 65 2e 20  uble interface. 
acd0: 20 53 54 4d 54 20 69 73 20 61 20 70 72 65 70 61   STMT is a prepa
ace0: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  red statement..*
acf0: 2a 20 4e 20 69 73 20 74 68 65 20 69 6e 64 65 78  * N is the index
ad00: 20 6f 66 20 61 20 77 69 6c 64 63 61 72 64 20 69   of a wildcard i
ad10: 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  n the prepared s
ad20: 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 69 73 20  tatement.  This 
ad30: 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64 73  command.** binds
ad40: 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65   a 64-bit intege
ad50: 72 20 56 41 4c 55 45 20 74 6f 20 74 68 61 74 20  r VALUE to that 
ad60: 77 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73 74 61  wildcard..*/.sta
ad70: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e  tic int test_bin
ad80: 64 5f 64 6f 75 62 6c 65 28 0a 20 20 76 6f 69 64  d_double(.  void
ad90: 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
ada0: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
adb0: 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
adc0: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
add0: 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
ade0: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
adf0: 74 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20  t;.  int idx;.  
ae00: 64 6f 75 62 6c 65 20 76 61 6c 75 65 3b 0a 20 20  double value;.  
ae10: 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f  int rc;..  if( o
ae20: 62 6a 63 21 3d 34 20 29 7b 0a 20 20 20 20 54 63  bjc!=4 ){.    Tc
ae30: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
ae40: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
ae50: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
ae60: 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c  \"",.        Tcl
ae70: 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62  _GetStringFromOb
ae80: 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22  j(objv[0], 0), "
ae90: 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 22 2c 20   STMT N VALUE", 
aea0: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
aeb0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
aec0: 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
aed0: 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
aee0: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
aef0: 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
af00: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
af10: 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
af20: 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
af30: 6f 62 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20 29  objv[2], &idx) )
af40: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
af50: 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  R;.  if( Tcl_Get
af60: 44 6f 75 62 6c 65 46 72 6f 6d 4f 62 6a 28 69 6e  DoubleFromObj(in
af70: 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26  terp, objv[3], &
af80: 76 61 6c 75 65 29 20 29 20 72 65 74 75 72 6e 20  value) ) return 
af90: 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63  TCL_ERROR;..  rc
afa0: 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f   = sqlite3_bind_
afb0: 64 6f 75 62 6c 65 28 70 53 74 6d 74 2c 20 69 64  double(pStmt, id
afc0: 78 2c 20 76 61 6c 75 65 29 3b 0a 20 20 69 66 28  x, value);.  if(
afd0: 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43   sqlite3TestErrC
afe0: 6f 64 65 28 69 6e 74 65 72 70 2c 20 53 74 6d 74  ode(interp, Stmt
aff0: 54 6f 44 62 28 70 53 74 6d 74 29 2c 20 72 63 29  ToDb(pStmt), rc)
b000: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
b010: 52 4f 52 3b 0a 20 20 69 66 28 20 72 63 21 3d 53  ROR;.  if( rc!=S
b020: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
b030: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
b040: 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20  ;.  }..  return 
b050: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
b060: 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65   Usage:   sqlite
b070: 33 5f 62 69 6e 64 5f 6e 75 6c 6c 20 20 53 54 4d  3_bind_null  STM
b080: 54 20 4e 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74  T N.**.** Test t
b090: 68 65 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  he sqlite3_bind_
b0a0: 6e 75 6c 6c 20 69 6e 74 65 72 66 61 63 65 2e 20  null interface. 
b0b0: 20 53 54 4d 54 20 69 73 20 61 20 70 72 65 70 61   STMT is a prepa
b0c0: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  red statement..*
b0d0: 2a 20 4e 20 69 73 20 74 68 65 20 69 6e 64 65 78  * N is the index
b0e0: 20 6f 66 20 61 20 77 69 6c 64 63 61 72 64 20 69   of a wildcard i
b0f0: 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  n the prepared s
b100: 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 69 73 20  tatement.  This 
b110: 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64 73  command.** binds
b120: 20 61 20 4e 55 4c 4c 20 74 6f 20 74 68 65 20 77   a NULL to the w
b130: 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73 74 61 74  ildcard..*/.stat
b140: 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64  ic int test_bind
b150: 5f 6e 75 6c 6c 28 0a 20 20 76 6f 69 64 20 2a 20  _null(.  void * 
b160: 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
b170: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
b180: 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
b190: 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
b1a0: 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74  bjv[].){.  sqlit
b1b0: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a  e3_stmt *pStmt;.
b1c0: 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 69 6e 74    int idx;.  int
b1d0: 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63   rc;..  if( objc
b1e0: 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=3 ){.    Tcl_A
b1f0: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
b200: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
b210: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
b220: 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65  ,.        Tcl_Ge
b230: 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f  tStringFromObj(o
b240: 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 53 54  bjv[0], 0), " ST
b250: 4d 54 20 4e 22 2c 20 30 29 3b 0a 20 20 20 20 72  MT N", 0);.    r
b260: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
b270: 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53  .  }..  if( getS
b280: 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tmtPointer(inter
b290: 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
b2a0: 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d  (objv[1]), &pStm
b2b0: 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  t) ) return TCL_
b2c0: 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c  ERROR;.  if( Tcl
b2d0: 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
b2e0: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20  nterp, objv[2], 
b2f0: 26 69 64 78 29 20 29 20 72 65 74 75 72 6e 20 54  &idx) ) return T
b300: 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20  CL_ERROR;..  rc 
b310: 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e  = sqlite3_bind_n
b320: 75 6c 6c 28 70 53 74 6d 74 2c 20 69 64 78 29 3b  ull(pStmt, idx);
b330: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65  .  if( sqlite3Te
b340: 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70  stErrCode(interp
b350: 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74 6d 74  , StmtToDb(pStmt
b360: 29 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20  ), rc) ) return 
b370: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  TCL_ERROR;.  if(
b380: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
b390: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  {.    return TCL
b3a0: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72  _ERROR;.  }..  r
b3b0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
b3c0: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20  ./*.** Usage:   
b3d0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
b3e0: 74 20 20 53 54 4d 54 20 4e 20 53 54 52 49 4e 47  t  STMT N STRING
b3f0: 20 42 59 54 45 53 0a 2a 2a 0a 2a 2a 20 54 65 73   BYTES.**.** Tes
b400: 74 20 74 68 65 20 73 71 6c 69 74 65 33 5f 62 69  t the sqlite3_bi
b410: 6e 64 5f 74 65 78 74 20 69 6e 74 65 72 66 61 63  nd_text interfac
b420: 65 2e 20 20 53 54 4d 54 20 69 73 20 61 20 70 72  e.  STMT is a pr
b430: 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
b440: 2e 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20 69 6e  ..** N is the in
b450: 64 65 78 20 6f 66 20 61 20 77 69 6c 64 63 61 72  dex of a wildcar
b460: 64 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65  d in the prepare
b470: 64 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  d statement.  Th
b480: 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69  is command.** bi
b490: 6e 64 73 20 61 20 55 54 46 2d 38 20 73 74 72 69  nds a UTF-8 stri
b4a0: 6e 67 20 53 54 52 49 4e 47 20 74 6f 20 74 68 65  ng STRING to the
b4b0: 20 77 69 6c 64 63 61 72 64 2e 20 20 54 68 65 20   wildcard.  The 
b4c0: 73 74 72 69 6e 67 20 69 73 20 42 59 54 45 53 20  string is BYTES 
b4d0: 62 79 74 65 73 0a 2a 2a 20 6c 6f 6e 67 2e 0a 2a  bytes.** long..*
b4e0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
b4f0: 74 5f 62 69 6e 64 5f 74 65 78 74 28 0a 20 20 76  t_bind_text(.  v
b500: 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
b510: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
b520: 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
b530: 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
b540: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
b550: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
b560: 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78 3b  Stmt;.  int idx;
b570: 0a 20 20 69 6e 74 20 62 79 74 65 73 3b 0a 20 20  .  int bytes;.  
b580: 63 68 61 72 20 2a 76 61 6c 75 65 3b 0a 20 20 69  char *value;.  i
b590: 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62  nt rc;..  if( ob
b5a0: 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=5 ){.    Tcl
b5b0: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
b5c0: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
b5d0: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
b5e0: 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f  "",.        Tcl_
b5f0: 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a  GetStringFromObj
b600: 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20  (objv[0], 0), " 
b610: 53 54 4d 54 20 4e 20 56 41 4c 55 45 20 42 59 54  STMT N VALUE BYT
b620: 45 53 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  ES", 0);.    ret
b630: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
b640: 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d   }..  if( getStm
b650: 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  tPointer(interp,
b660: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
b670: 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29  bjv[1]), &pStmt)
b680: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
b690: 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47  ROR;.  if( Tcl_G
b6a0: 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
b6b0: 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 69  erp, objv[2], &i
b6c0: 64 78 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  dx) ) return TCL
b6d0: 5f 45 52 52 4f 52 3b 0a 20 20 76 61 6c 75 65 20  _ERROR;.  value 
b6e0: 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  = Tcl_GetString(
b6f0: 6f 62 6a 76 5b 33 5d 29 3b 0a 20 20 69 66 28 20  objv[3]);.  if( 
b700: 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62  Tcl_GetIntFromOb
b710: 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 34  j(interp, objv[4
b720: 5d 2c 20 26 62 79 74 65 73 29 20 29 20 72 65 74  ], &bytes) ) ret
b730: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a  urn TCL_ERROR;..
b740: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62    rc = sqlite3_b
b750: 69 6e 64 5f 74 65 78 74 28 70 53 74 6d 74 2c 20  ind_text(pStmt, 
b760: 69 64 78 2c 20 76 61 6c 75 65 2c 20 62 79 74 65  idx, value, byte
b770: 73 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49  s, SQLITE_TRANSI
b780: 45 4e 54 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  ENT);.  if( sqli
b790: 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69  te3TestErrCode(i
b7a0: 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62 28  nterp, StmtToDb(
b7b0: 70 53 74 6d 74 29 2c 20 72 63 29 20 29 20 72 65  pStmt), rc) ) re
b7c0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
b7d0: 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
b7e0: 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74 75 72  _OK ){.    retur
b7f0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
b800: 0a 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ..  return TCL_O
b810: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
b820: 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e  e:   sqlite3_bin
b830: 64 5f 74 65 78 74 31 36 20 20 53 54 4d 54 20 4e  d_text16  STMT N
b840: 20 53 54 52 49 4e 47 20 42 59 54 45 53 0a 2a 2a   STRING BYTES.**
b850: 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 73 71 6c  .** Test the sql
b860: 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 31 36  ite3_bind_text16
b870: 20 69 6e 74 65 72 66 61 63 65 2e 20 20 53 54 4d   interface.  STM
b880: 54 20 69 73 20 61 20 70 72 65 70 61 72 65 64 20  T is a prepared 
b890: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20  statement..** N 
b8a0: 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
b8b0: 61 20 77 69 6c 64 63 61 72 64 20 69 6e 20 74 68  a wildcard in th
b8c0: 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
b8d0: 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d  ment.  This comm
b8e0: 61 6e 64 0a 2a 2a 20 62 69 6e 64 73 20 61 20 55  and.** binds a U
b8f0: 54 46 2d 31 36 20 73 74 72 69 6e 67 20 53 54 52  TF-16 string STR
b900: 49 4e 47 20 74 6f 20 74 68 65 20 77 69 6c 64 63  ING to the wildc
b910: 61 72 64 2e 20 20 54 68 65 20 73 74 72 69 6e 67  ard.  The string
b920: 20 69 73 20 42 59 54 45 53 20 62 79 74 65 73 0a   is BYTES bytes.
b930: 2a 2a 20 6c 6f 6e 67 2e 0a 2a 2f 0a 73 74 61 74  ** long..*/.stat
b940: 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64  ic int test_bind
b950: 5f 74 65 78 74 31 36 28 0a 20 20 76 6f 69 64 20  _text16(.  void 
b960: 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
b970: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
b980: 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
b990: 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
b9a0: 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64   objv[].){.#ifnd
b9b0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
b9c0: 54 46 31 36 0a 20 20 73 71 6c 69 74 65 33 5f 73  TF16.  sqlite3_s
b9d0: 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e  tmt *pStmt;.  in
b9e0: 74 20 69 64 78 3b 0a 20 20 69 6e 74 20 62 79 74  t idx;.  int byt
b9f0: 65 73 3b 0a 20 20 63 68 61 72 20 2a 76 61 6c 75  es;.  char *valu
ba00: 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20  e;.  int rc;..  
ba10: 69 66 28 20 6f 62 6a 63 21 3d 35 20 29 7b 0a 20  if( objc!=5 ){. 
ba20: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
ba30: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
ba40: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
ba50: 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20  d be \"",.      
ba60: 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46    Tcl_GetStringF
ba70: 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20  romObj(objv[0], 
ba80: 30 29 2c 20 22 20 53 54 4d 54 20 4e 20 56 41 4c  0), " STMT N VAL
ba90: 55 45 20 42 59 54 45 53 22 2c 20 30 29 3b 0a 20  UE BYTES", 0);. 
baa0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
bab0: 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  ROR;.  }..  if( 
bac0: 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69  getStmtPointer(i
bad0: 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
bae0: 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
baf0: 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20  pStmt) ) return 
bb00: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  TCL_ERROR;.  if(
bb10: 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f   Tcl_GetIntFromO
bb20: 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
bb30: 32 5d 2c 20 26 69 64 78 29 20 29 20 72 65 74 75  2], &idx) ) retu
bb40: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
bb50: 76 61 6c 75 65 20 3d 20 54 63 6c 5f 47 65 74 42  value = Tcl_GetB
bb60: 79 74 65 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28  yteArrayFromObj(
bb70: 6f 62 6a 76 5b 33 5d 2c 20 30 29 3b 0a 20 20 69  objv[3], 0);.  i
bb80: 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f  f( Tcl_GetIntFro
bb90: 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
bba0: 76 5b 34 5d 2c 20 26 62 79 74 65 73 29 20 29 20  v[4], &bytes) ) 
bbb0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
bbc0: 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  ;..  rc = sqlite
bbd0: 33 5f 62 69 6e 64 5f 74 65 78 74 31 36 28 70 53  3_bind_text16(pS
bbe0: 74 6d 74 2c 20 69 64 78 2c 20 28 76 6f 69 64 20  tmt, idx, (void 
bbf0: 2a 29 76 61 6c 75 65 2c 20 62 79 74 65 73 2c 20  *)value, bytes, 
bc00: 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54  SQLITE_TRANSIENT
bc10: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
bc20: 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65  TestErrCode(inte
bc30: 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74  rp, StmtToDb(pSt
bc40: 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74 75 72  mt), rc) ) retur
bc50: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
bc60: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
bc70: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54   ){.    return T
bc80: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 23  CL_ERROR;.  }..#
bc90: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
bca0: 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 20 20  OMIT_UTF16 */.  
bcb0: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
bcc0: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
bcd0: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c   sqlite3_bind_bl
bce0: 6f 62 20 20 53 54 4d 54 20 4e 20 44 41 54 41 20  ob  STMT N DATA 
bcf0: 42 59 54 45 53 0a 2a 2a 0a 2a 2a 20 54 65 73 74  BYTES.**.** Test
bd00: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 62 69 6e   the sqlite3_bin
bd10: 64 5f 62 6c 6f 62 20 69 6e 74 65 72 66 61 63 65  d_blob interface
bd20: 2e 20 20 53 54 4d 54 20 69 73 20 61 20 70 72 65  .  STMT is a pre
bd30: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e  pared statement.
bd40: 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20 69 6e 64  .** N is the ind
bd50: 65 78 20 6f 66 20 61 20 77 69 6c 64 63 61 72 64  ex of a wildcard
bd60: 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
bd70: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 69   statement.  Thi
bd80: 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e  s command.** bin
bd90: 64 73 20 61 20 42 4c 4f 42 20 74 6f 20 74 68 65  ds a BLOB to the
bda0: 20 77 69 6c 64 63 61 72 64 2e 20 20 54 68 65 20   wildcard.  The 
bdb0: 42 4c 4f 42 20 69 73 20 42 59 54 45 53 20 62 79  BLOB is BYTES by
bdc0: 74 65 73 20 69 6e 20 73 69 7a 65 2e 0a 2a 2f 0a  tes in size..*/.
bdd0: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
bde0: 62 69 6e 64 5f 62 6c 6f 62 28 0a 20 20 76 6f 69  bind_blob(.  voi
bdf0: 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
be00: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
be10: 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
be20: 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
be30: 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73  ST objv[].){.  s
be40: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
be50: 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20  mt;.  int idx;. 
be60: 20 69 6e 74 20 62 79 74 65 73 3b 0a 20 20 63 68   int bytes;.  ch
be70: 61 72 20 2a 76 61 6c 75 65 3b 0a 20 20 69 6e 74  ar *value;.  int
be80: 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63   rc;..  if( objc
be90: 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=5 ){.    Tcl_A
bea0: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
beb0: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
bec0: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
bed0: 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65  ,.        Tcl_Ge
bee0: 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f  tStringFromObj(o
bef0: 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 53 54  bjv[0], 0), " ST
bf00: 4d 54 20 4e 20 44 41 54 41 20 42 59 54 45 53 22  MT N DATA BYTES"
bf10: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
bf20: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
bf30: 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f  .  if( getStmtPo
bf40: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
bf50: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
bf60: 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20  [1]), &pStmt) ) 
bf70: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
bf80: 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49  ;.  if( Tcl_GetI
bf90: 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  ntFromObj(interp
bfa0: 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 69 64 78 29  , objv[2], &idx)
bfb0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
bfc0: 52 4f 52 3b 0a 20 20 76 61 6c 75 65 20 3d 20 54  ROR;.  value = T
bfd0: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
bfe0: 76 5b 33 5d 29 3b 0a 20 20 69 66 28 20 54 63 6c  v[3]);.  if( Tcl
bff0: 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
c000: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20  nterp, objv[4], 
c010: 26 62 79 74 65 73 29 20 29 20 72 65 74 75 72 6e  &bytes) ) return
c020: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72   TCL_ERROR;..  r
c030: 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  c = sqlite3_bind
c040: 5f 62 6c 6f 62 28 70 53 74 6d 74 2c 20 69 64 78  _blob(pStmt, idx
c050: 2c 20 76 61 6c 75 65 2c 20 62 79 74 65 73 2c 20  , value, bytes, 
c060: 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54  SQLITE_TRANSIENT
c070: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
c080: 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65  TestErrCode(inte
c090: 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74  rp, StmtToDb(pSt
c0a0: 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74 75 72  mt), rc) ) retur
c0b0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
c0c0: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
c0d0: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54   ){.    return T
c0e0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
c0f0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
c100: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
c110: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70    sqlite3_bind_p
c120: 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 20 20  arameter_count  
c130: 53 54 4d 54 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72  STMT.**.** Retur
c140: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
c150: 77 69 6c 64 63 61 72 64 73 20 69 6e 20 74 68 65  wildcards in the
c160: 20 67 69 76 65 6e 20 73 74 61 74 65 6d 65 6e 74   given statement
c170: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
c180: 74 65 73 74 5f 62 69 6e 64 5f 70 61 72 61 6d 65  test_bind_parame
c190: 74 65 72 5f 63 6f 75 6e 74 28 0a 20 20 76 6f 69  ter_count(.  voi
c1a0: 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
c1b0: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
c1c0: 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
c1d0: 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
c1e0: 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73  ST objv[].){.  s
c1f0: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
c200: 6d 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  mt;..  if( objc!
c210: 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72  =2 ){.    Tcl_Wr
c220: 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72  ongNumArgs(inter
c230: 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 53 54 4d  p, 1, objv, "STM
c240: 54 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  T");.    return 
c250: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
c260: 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
c270: 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
c280: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
c290: 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
c2a0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
c2b0: 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
c2c0: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
c2d0: 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33  ewIntObj(sqlite3
c2e0: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
c2f0: 63 6f 75 6e 74 28 70 53 74 6d 74 29 29 29 3b 0a  count(pStmt)));.
c300: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
c310: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
c320: 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f     sqlite3_bind_
c330: 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 20 20  parameter_name  
c340: 53 54 4d 54 20 20 4e 0a 2a 2a 0a 2a 2a 20 52 65  STMT  N.**.** Re
c350: 74 75 72 6e 20 74 68 65 20 6e 61 6d 65 20 6f 66  turn the name of
c360: 20 74 68 65 20 4e 74 68 20 77 69 6c 64 63 61 72   the Nth wildcar
c370: 64 2e 20 20 54 68 65 20 66 69 72 73 74 20 77 69  d.  The first wi
c380: 6c 64 63 61 72 64 20 69 73 20 31 2e 0a 2a 2a 20  ldcard is 1..** 
c390: 41 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 20  An empty string 
c3a0: 69 73 20 72 65 74 75 72 6e 65 64 20 69 66 20 4e  is returned if N
c3b0: 20 69 73 20 6f 75 74 20 6f 66 20 72 61 6e 67 65   is out of range
c3c0: 20 6f 72 20 69 66 20 74 68 65 20 77 69 6c 64 63   or if the wildc
c3d0: 61 72 64 0a 2a 2a 20 69 73 20 6e 61 6d 65 6c 65  ard.** is namele
c3e0: 73 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ss..*/.static in
c3f0: 74 20 74 65 73 74 5f 62 69 6e 64 5f 70 61 72 61  t test_bind_para
c400: 6d 65 74 65 72 5f 6e 61 6d 65 28 0a 20 20 76 6f  meter_name(.  vo
c410: 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
c420: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
c430: 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
c440: 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
c450: 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
c460: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
c470: 74 6d 74 3b 0a 20 20 69 6e 74 20 69 3b 0a 0a 20  tmt;.  int i;.. 
c480: 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a   if( objc!=3 ){.
c490: 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d      Tcl_WrongNum
c4a0: 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20  Args(interp, 1, 
c4b0: 6f 62 6a 76 2c 20 22 53 54 4d 54 20 4e 22 29 3b  objv, "STMT N");
c4c0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
c4d0: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
c4e0: 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28   getStmtPointer(
c4f0: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
c500: 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
c510: 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e  &pStmt) ) return
c520: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
c530: 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d  ( Tcl_GetIntFrom
c540: 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
c550: 5b 32 5d 2c 20 26 69 29 20 29 20 72 65 74 75 72  [2], &i) ) retur
c560: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54  n TCL_ERROR;.  T
c570: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
c580: 69 6e 74 65 72 70 2c 20 0a 20 20 20 20 20 54 63  interp, .     Tc
c590: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 73  l_NewStringObj(s
c5a0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
c5b0: 6d 65 74 65 72 5f 6e 61 6d 65 28 70 53 74 6d 74  meter_name(pStmt
c5c0: 2c 69 29 2c 2d 31 29 0a 20 20 29 3b 0a 20 20 72  ,i),-1).  );.  r
c5d0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
c5e0: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20  ./*.** Usage:   
c5f0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
c600: 61 6d 65 74 65 72 5f 69 6e 64 65 78 20 20 53 54  ameter_index  ST
c610: 4d 54 20 20 4e 41 4d 45 0a 2a 2a 0a 2a 2a 20 52  MT  NAME.**.** R
c620: 65 74 75 72 6e 20 74 68 65 20 69 6e 64 65 78 20  eturn the index 
c630: 6f 66 20 74 68 65 20 77 69 6c 64 63 61 72 64 20  of the wildcard 
c640: 63 61 6c 6c 65 64 20 4e 41 4d 45 2e 20 20 52 65  called NAME.  Re
c650: 74 75 72 6e 20 30 20 69 66 20 74 68 65 72 65 20  turn 0 if there 
c660: 69 73 0a 2a 2a 20 6e 6f 20 73 75 63 68 20 77 69  is.** no such wi
c670: 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73 74 61 74 69  ldcard..*/.stati
c680: 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f  c int test_bind_
c690: 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 28  parameter_index(
c6a0: 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
c6b0: 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
c6c0: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
c6d0: 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
c6e0: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
c6f0: 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
c700: 74 20 2a 70 53 74 6d 74 3b 0a 0a 20 20 69 66 28  t *pStmt;..  if(
c710: 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20   objc!=3 ){.    
c720: 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73  Tcl_WrongNumArgs
c730: 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76  (interp, 1, objv
c740: 2c 20 22 53 54 4d 54 20 4e 41 4d 45 22 29 3b 0a  , "STMT NAME");.
c750: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
c760: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
c770: 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69  getStmtPointer(i
c780: 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
c790: 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
c7a0: 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20  pStmt) ) return 
c7b0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c  TCL_ERROR;.  Tcl
c7c0: 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
c7d0: 74 65 72 70 2c 20 0a 20 20 20 20 20 54 63 6c 5f  terp, .     Tcl_
c7e0: 4e 65 77 49 6e 74 4f 62 6a 28 0a 20 20 20 20 20  NewIntObj(.     
c7f0: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70    sqlite3_bind_p
c800: 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 28 70  arameter_index(p
c810: 53 74 6d 74 2c 54 63 6c 5f 47 65 74 53 74 72 69  Stmt,Tcl_GetStri
c820: 6e 67 28 6f 62 6a 76 5b 32 5d 29 29 0a 20 20 20  ng(objv[2])).   
c830: 20 20 29 0a 20 20 29 3b 0a 20 20 72 65 74 75 72    ).  );.  retur
c840: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
c850: 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69  ** Usage:   sqli
c860: 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e  te3_clear_bindin
c870: 67 73 20 53 54 4d 54 0a 2a 2a 0a 2a 2f 0a 23 69  gs STMT.**.*/.#i
c880: 66 20 30 0a 73 74 61 74 69 63 20 69 6e 74 20 74  f 0.static int t
c890: 65 73 74 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e  est_clear_bindin
c8a0: 67 73 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  gs(.  void * cli
c8b0: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
c8c0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
c8d0: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
c8e0: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
c8f0: 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  [].){.  sqlite3_
c900: 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 0a 20 20  stmt *pStmt;..  
c910: 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20  if( objc!=2 ){. 
c920: 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41     Tcl_WrongNumA
c930: 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f  rgs(interp, 1, o
c940: 62 6a 76 2c 20 22 53 54 4d 54 22 29 3b 0a 20 20  bjv, "STMT");.  
c950: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
c960: 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
c970: 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74  tStmtPointer(int
c980: 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
c990: 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53  ng(objv[1]), &pS
c9a0: 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43  tmt) ) return TC
c9b0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53  L_ERROR;.  Tcl_S
c9c0: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
c9d0: 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62  rp, Tcl_NewIntOb
c9e0: 6a 28 73 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f  j(sqlite3_clear_
c9f0: 62 69 6e 64 69 6e 67 73 28 70 53 74 6d 74 29 29  bindings(pStmt))
ca00: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
ca10: 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OK;.}.#endif../*
ca20: 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
ca30: 65 33 5f 65 72 72 63 6f 64 65 20 44 42 0a 2a 2a  e3_errcode DB.**
ca40: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 73  .** Return the s
ca50: 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61  tring representa
ca60: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6d 6f 73 74  tion of the most
ca70: 20 72 65 63 65 6e 74 20 73 71 6c 69 74 65 33 5f   recent sqlite3_
ca80: 2a 20 41 50 49 0a 2a 2a 20 65 72 72 6f 72 20 63  * API.** error c
ca90: 6f 64 65 2e 20 65 2e 67 2e 20 22 53 51 4c 49 54  ode. e.g. "SQLIT
caa0: 45 5f 45 52 52 4f 52 22 2e 0a 2a 2f 0a 73 74 61  E_ERROR"..*/.sta
cab0: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 65 72 72  tic int test_err
cac0: 63 6f 64 65 28 0a 20 20 76 6f 69 64 20 2a 20 63  code(.  void * c
cad0: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
cae0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
caf0: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
cb00: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
cb10: 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
cb20: 33 20 2a 64 62 3b 0a 0a 20 20 69 66 28 20 6f 62  3 *db;..  if( ob
cb30: 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=2 ){.    Tcl
cb40: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
cb50: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
cb60: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
cb70: 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f  "", .       Tcl_
cb80: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30  GetString(objv[0
cb90: 5d 29 2c 20 22 20 44 42 22 2c 20 30 29 3b 0a 20  ]), " DB", 0);. 
cba0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
cbb0: 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67  ROR;.  }.  if( g
cbc0: 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65  etDbPointer(inte
cbd0: 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
cbe0: 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29  g(objv[1]), &db)
cbf0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
cc00: 52 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65  ROR;.  Tcl_SetRe
cc10: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68  sult(interp, (ch
cc20: 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28 73  ar *)errorName(s
cc30: 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28 64  qlite3_errcode(d
cc40: 62 29 29 2c 20 30 29 3b 0a 20 20 72 65 74 75 72  b)), 0);.  retur
cc50: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
cc60: 2a 2a 20 55 73 61 67 65 3a 20 20 20 74 65 73 74  ** Usage:   test
cc70: 5f 65 72 72 6d 73 67 20 44 42 0a 2a 2a 0a 2a 2a  _errmsg DB.**.**
cc80: 20 52 65 74 75 72 6e 73 20 74 68 65 20 55 54 46   Returns the UTF
cc90: 2d 38 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  -8 representatio
cca0: 6e 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20 6d  n of the error m
ccb0: 65 73 73 61 67 65 20 73 74 72 69 6e 67 20 66 6f  essage string fo
ccc0: 72 20 74 68 65 0a 2a 2a 20 6d 6f 73 74 20 72 65  r the.** most re
ccd0: 63 65 6e 74 20 73 71 6c 69 74 65 33 5f 2a 20 41  cent sqlite3_* A
cce0: 50 49 20 63 61 6c 6c 2e 0a 2a 2f 0a 73 74 61 74  PI call..*/.stat
ccf0: 69 63 20 69 6e 74 20 74 65 73 74 5f 65 72 72 6d  ic int test_errm
cd00: 73 67 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  sg(.  void * cli
cd10: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
cd20: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
cd30: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
cd40: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
cd50: 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  [].){.  sqlite3 
cd60: 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  *db;.  const cha
cd70: 72 20 2a 7a 45 72 72 3b 0a 0a 20 20 69 66 28 20  r *zErr;..  if( 
cd80: 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  objc!=2 ){.    T
cd90: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
cda0: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
cdb0: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
cdc0: 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63   \"", .       Tc
cdd0: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
cde0: 5b 30 5d 29 2c 20 22 20 44 42 22 2c 20 30 29 3b  [0]), " DB", 0);
cdf0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
ce00: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
ce10: 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e   getDbPointer(in
ce20: 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
ce30: 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64  ing(objv[1]), &d
ce40: 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
ce50: 45 52 52 4f 52 3b 0a 0a 20 20 7a 45 72 72 20 3d  ERROR;..  zErr =
ce60: 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28   sqlite3_errmsg(
ce70: 64 62 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62  db);.  Tcl_SetOb
ce80: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
ce90: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
cea0: 28 7a 45 72 72 2c 20 2d 31 29 29 3b 0a 20 20 72  (zErr, -1));.  r
ceb0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
cec0: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20  ./*.** Usage:   
ced0: 74 65 73 74 5f 65 72 72 6d 73 67 31 36 20 44 42  test_errmsg16 DB
cee0: 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 73 20 74  .**.** Returns t
cef0: 68 65 20 55 54 46 2d 31 36 20 72 65 70 72 65 73  he UTF-16 repres
cf00: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
cf10: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74  error message st
cf20: 72 69 6e 67 20 66 6f 72 20 74 68 65 0a 2a 2a 20  ring for the.** 
cf30: 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 71 6c 69  most recent sqli
cf40: 74 65 33 5f 2a 20 41 50 49 20 63 61 6c 6c 2e 20  te3_* API call. 
cf50: 54 68 69 73 20 69 73 20 61 20 62 79 74 65 20 61  This is a byte a
cf60: 72 72 61 79 20 6f 62 6a 65 63 74 20 61 74 20 74  rray object at t
cf70: 68 65 20 54 43 4c 20 0a 2a 2a 20 6c 65 76 65 6c  he TCL .** level
cf80: 2c 20 61 6e 64 20 69 74 20 69 6e 63 6c 75 64 65  , and it include
cf90: 73 20 74 68 65 20 30 78 30 30 20 30 78 30 30 20  s the 0x00 0x00 
cfa0: 74 65 72 6d 69 6e 61 74 6f 72 20 62 79 74 65 73  terminator bytes
cfb0: 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
cfc0: 68 65 0a 2a 2a 20 55 54 46 2d 31 36 20 73 74 72  he.** UTF-16 str
cfd0: 69 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ing..*/.static i
cfe0: 6e 74 20 74 65 73 74 5f 65 72 72 6d 73 67 31 36  nt test_errmsg16
cff0: 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
d000: 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
d010: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
d020: 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
d030: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
d040: 0a 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .){.#ifndef SQLI
d050: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20  TE_OMIT_UTF16.  
d060: 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 63  sqlite3 *db;.  c
d070: 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 45 72 72 3b  onst void *zErr;
d080: 0a 20 20 69 6e 74 20 62 79 74 65 73 3b 0a 0a 20  .  int bytes;.. 
d090: 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a   if( objc!=2 ){.
d0a0: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
d0b0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
d0c0: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
d0d0: 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20  ld be \"", .    
d0e0: 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
d0f0: 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44 42 22  (objv[0]), " DB"
d100: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
d110: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
d120: 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74    if( getDbPoint
d130: 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
d140: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
d150: 29 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e  ), &db) ) return
d160: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 7a   TCL_ERROR;..  z
d170: 45 72 72 20 3d 20 73 71 6c 69 74 65 33 5f 65 72  Err = sqlite3_er
d180: 72 6d 73 67 31 36 28 64 62 29 3b 0a 20 20 62 79  rmsg16(db);.  by
d190: 74 65 73 20 3d 20 73 71 6c 69 74 65 33 75 74 66  tes = sqlite3utf
d1a0: 31 36 42 79 74 65 4c 65 6e 28 7a 45 72 72 2c 20  16ByteLen(zErr, 
d1b0: 2d 31 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62  -1);.  Tcl_SetOb
d1c0: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
d1d0: 54 63 6c 5f 4e 65 77 42 79 74 65 41 72 72 61 79  Tcl_NewByteArray
d1e0: 4f 62 6a 28 7a 45 72 72 2c 20 62 79 74 65 73 29  Obj(zErr, bytes)
d1f0: 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  );.#endif /* SQL
d200: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a  ITE_OMIT_UTF16 *
d210: 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  /.  return TCL_O
d220: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
d230: 65 3a 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  e: sqlite3_prepa
d240: 72 65 20 44 42 20 73 71 6c 20 62 79 74 65 73 20  re DB sql bytes 
d250: 74 61 69 6c 76 61 72 0a 2a 2a 0a 2a 2a 20 43 6f  tailvar.**.** Co
d260: 6d 70 69 6c 65 20 75 70 20 74 6f 20 3c 62 79 74  mpile up to <byt
d270: 65 73 3e 20 62 79 74 65 73 20 6f 66 20 74 68 65  es> bytes of the
d280: 20 73 75 70 70 6c 69 65 64 20 53 51 4c 20 73 74   supplied SQL st
d290: 72 69 6e 67 20 3c 73 71 6c 3e 20 75 73 69 6e 67  ring <sql> using
d2a0: 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 68 61 6e  .** database han
d2b0: 64 6c 65 20 3c 44 42 3e 2e 20 54 68 65 20 70 61  dle <DB>. The pa
d2c0: 72 61 6d 65 74 65 72 20 3c 74 61 69 6c 76 61 6c  rameter <tailval
d2d0: 3e 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  > is the name of
d2e0: 20 61 20 67 6c 6f 62 61 6c 0a 2a 2a 20 76 61 72   a global.** var
d2f0: 69 61 62 6c 65 20 74 68 61 74 20 69 73 20 73 65  iable that is se
d300: 74 20 74 6f 20 74 68 65 20 75 6e 75 73 65 64 20  t to the unused 
d310: 70 6f 72 74 69 6f 6e 20 6f 66 20 3c 73 71 6c 3e  portion of <sql>
d320: 20 28 69 66 20 61 6e 79 29 2e 20 41 0a 2a 2a 20   (if any). A.** 
d330: 53 54 4d 54 20 68 61 6e 64 6c 65 20 69 73 20 72  STMT handle is r
d340: 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a 73 74 61 74  eturned..*/.stat
d350: 69 63 20 69 6e 74 20 74 65 73 74 5f 70 72 65 70  ic int test_prep
d360: 61 72 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  are(.  void * cl
d370: 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
d380: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
d390: 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
d3a0: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
d3b0: 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
d3c0: 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68   *db;.  const ch
d3d0: 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 69 6e 74 20  ar *zSql;.  int 
d3e0: 62 79 74 65 73 3b 0a 20 20 63 6f 6e 73 74 20 63  bytes;.  const c
d3f0: 68 61 72 20 2a 7a 54 61 69 6c 20 3d 20 30 3b 0a  har *zTail = 0;.
d400: 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
d410: 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20 63 68 61  pStmt = 0;.  cha
d420: 72 20 7a 42 75 66 5b 35 30 5d 3b 0a 20 20 69 6e  r zBuf[50];.  in
d430: 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  t rc;..  if( obj
d440: 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=5 ){.    Tcl_
d450: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
d460: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
d470: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
d480: 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
d490: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
d4a0: 29 2c 20 22 20 44 42 20 73 71 6c 20 62 79 74 65  ), " DB sql byte
d4b0: 73 20 74 61 69 6c 76 61 72 22 2c 20 30 29 3b 0a  s tailvar", 0);.
d4c0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
d4d0: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
d4e0: 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
d4f0: 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
d500: 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62  ng(objv[1]), &db
d510: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
d520: 52 52 4f 52 3b 0a 20 20 7a 53 71 6c 20 3d 20 54  RROR;.  zSql = T
d530: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
d540: 76 5b 32 5d 29 3b 0a 20 20 69 66 28 20 54 63 6c  v[2]);.  if( Tcl
d550: 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
d560: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20  nterp, objv[3], 
d570: 26 62 79 74 65 73 29 20 29 20 72 65 74 75 72 6e  &bytes) ) return
d580: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72   TCL_ERROR;..  r
d590: 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
d5a0: 61 72 65 28 64 62 2c 20 7a 53 71 6c 2c 20 62 79  are(db, zSql, by
d5b0: 74 65 73 2c 20 26 70 53 74 6d 74 2c 20 26 7a 54  tes, &pStmt, &zT
d5c0: 61 69 6c 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  ail);.  if( sqli
d5d0: 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69  te3TestErrCode(i
d5e0: 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29  nterp, db, rc) )
d5f0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
d600: 52 3b 0a 20 20 69 66 28 20 7a 54 61 69 6c 20 29  R;.  if( zTail )
d610: 7b 0a 20 20 20 20 69 66 28 20 62 79 74 65 73 3e  {.    if( bytes>
d620: 3d 30 20 29 7b 0a 20 20 20 20 20 20 62 79 74 65  =0 ){.      byte
d630: 73 20 3d 20 62 79 74 65 73 20 2d 20 28 7a 54 61  s = bytes - (zTa
d640: 69 6c 2d 7a 53 71 6c 29 3b 0a 20 20 20 20 7d 0a  il-zSql);.    }.
d650: 20 20 20 20 54 63 6c 5f 4f 62 6a 53 65 74 56 61      Tcl_ObjSetVa
d660: 72 32 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  r2(interp, objv[
d670: 34 5d 2c 20 30 2c 20 54 63 6c 5f 4e 65 77 53 74  4], 0, Tcl_NewSt
d680: 72 69 6e 67 4f 62 6a 28 7a 54 61 69 6c 2c 20 62  ringObj(zTail, b
d690: 79 74 65 73 29 2c 20 30 29 3b 0a 20 20 7d 0a 20  ytes), 0);.  }. 
d6a0: 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
d6b0: 4f 4b 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  OK ){.    assert
d6c0: 28 20 70 53 74 6d 74 3d 3d 30 20 29 3b 0a 20 20  ( pStmt==0 );.  
d6d0: 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20    sprintf(zBuf, 
d6e0: 22 28 25 64 29 20 22 2c 20 72 63 29 3b 0a 20 20  "(%d) ", rc);.  
d6f0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
d700: 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c  lt(interp, zBuf,
d710: 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28   sqlite3_errmsg(
d720: 64 62 29 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  db), 0);.    ret
d730: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
d740: 20 7d 0a 0a 20 20 69 66 28 20 70 53 74 6d 74 20   }..  if( pStmt 
d750: 29 7b 0a 20 20 20 20 69 66 28 20 6d 61 6b 65 50  ){.    if( makeP
d760: 6f 69 6e 74 65 72 53 74 72 28 69 6e 74 65 72 70  ointerStr(interp
d770: 2c 20 7a 42 75 66 2c 20 70 53 74 6d 74 29 20 29  , zBuf, pStmt) )
d780: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
d790: 52 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  R;.    Tcl_Appen
d7a0: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
d7b0: 7a 42 75 66 2c 20 30 29 3b 0a 20 20 7d 0a 20 20  zBuf, 0);.  }.  
d7c0: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
d7d0: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
d7e0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 44  qlite3_prepare D
d7f0: 42 20 73 71 6c 20 62 79 74 65 73 20 74 61 69 6c  B sql bytes tail
d800: 76 61 72 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 69 6c  var.**.** Compil
d810: 65 20 75 70 20 74 6f 20 3c 62 79 74 65 73 3e 20  e up to <bytes> 
d820: 62 79 74 65 73 20 6f 66 20 74 68 65 20 73 75 70  bytes of the sup
d830: 70 6c 69 65 64 20 53 51 4c 20 73 74 72 69 6e 67  plied SQL string
d840: 20 3c 73 71 6c 3e 20 75 73 69 6e 67 0a 2a 2a 20   <sql> using.** 
d850: 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20  database handle 
d860: 3c 44 42 3e 2e 20 54 68 65 20 70 61 72 61 6d 65  <DB>. The parame
d870: 74 65 72 20 3c 74 61 69 6c 76 61 6c 3e 20 69 73  ter <tailval> is
d880: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 67   the name of a g
d890: 6c 6f 62 61 6c 0a 2a 2a 20 76 61 72 69 61 62 6c  lobal.** variabl
d8a0: 65 20 74 68 61 74 20 69 73 20 73 65 74 20 74 6f  e that is set to
d8b0: 20 74 68 65 20 75 6e 75 73 65 64 20 70 6f 72 74   the unused port
d8c0: 69 6f 6e 20 6f 66 20 3c 73 71 6c 3e 20 28 69 66  ion of <sql> (if
d8d0: 20 61 6e 79 29 2e 20 41 0a 2a 2a 20 53 54 4d 54   any). A.** STMT
d8e0: 20 68 61 6e 64 6c 65 20 69 73 20 72 65 74 75 72   handle is retur
d8f0: 6e 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ned..*/.static i
d900: 6e 74 20 74 65 73 74 5f 70 72 65 70 61 72 65 31  nt test_prepare1
d910: 36 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  6(.  void * clie
d920: 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
d930: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
d940: 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
d950: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
d960: 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c  ].){.#ifndef SQL
d970: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20  ITE_OMIT_UTF16. 
d980: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
d990: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 53 71 6c  const void *zSql
d9a0: 3b 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  ;.  const void *
d9b0: 7a 54 61 69 6c 20 3d 20 30 3b 0a 20 20 54 63 6c  zTail = 0;.  Tcl
d9c0: 5f 4f 62 6a 20 2a 70 54 61 69 6c 20 3d 20 30 3b  _Obj *pTail = 0;
d9d0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
d9e0: 2a 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20 63 68  *pStmt = 0;.  ch
d9f0: 61 72 20 7a 42 75 66 5b 35 30 5d 3b 20 0a 20 20  ar zBuf[50]; .  
da00: 69 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20 62 79  int rc;.  int by
da10: 74 65 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  tes;            
da20: 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 74 65 67      /* The integ
da30: 65 72 20 73 70 65 63 69 66 69 65 64 20 61 73 20  er specified as 
da40: 61 72 67 20 33 20 2a 2f 0a 20 20 69 6e 74 20 6f  arg 3 */.  int o
da50: 62 6a 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20  bjlen;          
da60: 20 20 20 20 20 2f 2a 20 54 68 65 20 62 79 74 65       /* The byte
da70: 2d 61 72 72 61 79 20 6c 65 6e 67 74 68 20 6f 66  -array length of
da80: 20 61 72 67 20 32 20 2a 2f 0a 0a 20 20 69 66 28   arg 2 */..  if(
da90: 20 6f 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20   objc!=5 ){.    
daa0: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
dab0: 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
dac0: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
dad0: 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54  e \"", .       T
dae0: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
daf0: 76 5b 30 5d 29 2c 20 22 20 44 42 20 73 71 6c 20  v[0]), " DB sql 
db00: 62 79 74 65 73 20 74 61 69 6c 76 61 72 22 2c 20  bytes tailvar", 
db10: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
db20: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
db30: 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72  if( getDbPointer
db40: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
db50: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
db60: 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
db70: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 53 71 6c  CL_ERROR;.  zSql
db80: 20 3d 20 54 63 6c 5f 47 65 74 42 79 74 65 41 72   = Tcl_GetByteAr
db90: 72 61 79 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b  rayFromObj(objv[
dba0: 32 5d 2c 20 26 6f 62 6a 6c 65 6e 29 3b 0a 20 20  2], &objlen);.  
dbb0: 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72  if( Tcl_GetIntFr
dbc0: 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
dbd0: 6a 76 5b 33 5d 2c 20 26 62 79 74 65 73 29 20 29  jv[3], &bytes) )
dbe0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
dbf0: 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  R;..  rc = sqlit
dc00: 65 33 5f 70 72 65 70 61 72 65 31 36 28 64 62 2c  e3_prepare16(db,
dc10: 20 7a 53 71 6c 2c 20 62 79 74 65 73 2c 20 26 70   zSql, bytes, &p
dc20: 53 74 6d 74 2c 20 26 7a 54 61 69 6c 29 3b 0a 20  Stmt, &zTail);. 
dc30: 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74   if( sqlite3Test
dc40: 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20  ErrCode(interp, 
dc50: 64 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e  db, rc) ) return
dc60: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
dc70: 28 20 72 63 20 29 7b 0a 20 20 20 20 72 65 74 75  ( rc ){.    retu
dc80: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
dc90: 7d 0a 0a 20 20 69 66 28 20 7a 54 61 69 6c 20 29  }..  if( zTail )
dca0: 7b 0a 20 20 20 20 6f 62 6a 6c 65 6e 20 3d 20 6f  {.    objlen = o
dcb0: 62 6a 6c 65 6e 20 2d 20 28 28 75 38 20 2a 29 7a  bjlen - ((u8 *)z
dcc0: 54 61 69 6c 2d 28 75 38 20 2a 29 7a 53 71 6c 29  Tail-(u8 *)zSql)
dcd0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6f  ;.  }else{.    o
dce0: 62 6a 6c 65 6e 20 3d 20 30 3b 0a 20 20 7d 0a 20  bjlen = 0;.  }. 
dcf0: 20 70 54 61 69 6c 20 3d 20 54 63 6c 5f 4e 65 77   pTail = Tcl_New
dd00: 42 79 74 65 41 72 72 61 79 4f 62 6a 28 28 75 38  ByteArrayObj((u8
dd10: 20 2a 29 7a 54 61 69 6c 2c 20 6f 62 6a 6c 65 6e   *)zTail, objlen
dd20: 29 3b 0a 20 20 54 63 6c 5f 49 6e 63 72 52 65 66  );.  Tcl_IncrRef
dd30: 43 6f 75 6e 74 28 70 54 61 69 6c 29 3b 0a 20 20  Count(pTail);.  
dd40: 54 63 6c 5f 4f 62 6a 53 65 74 56 61 72 32 28 69  Tcl_ObjSetVar2(i
dd50: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20  nterp, objv[4], 
dd60: 30 2c 20 70 54 61 69 6c 2c 20 30 29 3b 0a 20 20  0, pTail, 0);.  
dd70: 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74  Tcl_DecrRefCount
dd80: 28 70 54 61 69 6c 29 3b 0a 0a 20 20 69 66 28 20  (pTail);..  if( 
dd90: 70 53 74 6d 74 20 29 7b 0a 20 20 20 20 69 66 28  pStmt ){.    if(
dda0: 20 6d 61 6b 65 50 6f 69 6e 74 65 72 53 74 72 28   makePointerStr(
ddb0: 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 70 53  interp, zBuf, pS
ddc0: 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43  tmt) ) return TC
ddd0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 54  L_ERROR;.  }.  T
dde0: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
ddf0: 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29  interp, zBuf, 0)
de00: 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
de10: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f  TE_OMIT_UTF16 */
de20: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
de30: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
de40: 3a 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 20 66  : sqlite3_open f
de50: 69 6c 65 6e 61 6d 65 20 3f 6f 70 74 69 6f 6e 73  ilename ?options
de60: 2d 6c 69 73 74 3f 0a 2a 2f 0a 73 74 61 74 69 63  -list?.*/.static
de70: 20 69 6e 74 20 74 65 73 74 5f 6f 70 65 6e 28 0a   int test_open(.
de80: 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
de90: 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
dea0: 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
deb0: 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
dec0: 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
ded0: 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
dee0: 7a 46 69 6c 65 6e 61 6d 65 3b 0a 20 20 73 71 6c  zFilename;.  sql
def0: 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20  ite3 *db;.  int 
df00: 72 63 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b  rc;.  char zBuf[
df10: 31 30 30 5d 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  100];..  if( obj
df20: 63 21 3d 33 20 26 26 20 6f 62 6a 63 21 3d 32 20  c!=3 && objc!=2 
df30: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
df40: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
df50: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
df60: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20  hould be \"", . 
df70: 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
df80: 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20  ing(objv[0]), " 
df90: 66 69 6c 65 6e 61 6d 65 20 6f 70 74 69 6f 6e 73  filename options
dfa0: 2d 6c 69 73 74 22 2c 20 30 29 3b 0a 20 20 20 20  -list", 0);.    
dfb0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
dfc0: 3b 0a 20 20 7d 0a 0a 20 20 7a 46 69 6c 65 6e 61  ;.  }..  zFilena
dfd0: 6d 65 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69  me = Tcl_GetStri
dfe0: 6e 67 28 6f 62 6a 76 5b 31 5d 29 3b 0a 20 20 72  ng(objv[1]);.  r
dff0: 63 20 3d 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e  c = sqlite3_open
e000: 28 7a 46 69 6c 65 6e 61 6d 65 2c 20 26 64 62 29  (zFilename, &db)
e010: 3b 0a 20 20 0a 20 20 69 66 28 20 6d 61 6b 65 50  ;.  .  if( makeP
e020: 6f 69 6e 74 65 72 53 74 72 28 69 6e 74 65 72 70  ointerStr(interp
e030: 2c 20 7a 42 75 66 2c 20 64 62 29 20 29 20 72 65  , zBuf, db) ) re
e040: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
e050: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
e060: 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c  lt(interp, zBuf,
e070: 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43   0);.  return TC
e080: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
e090: 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 6f 70  sage: sqlite3_op
e0a0: 65 6e 31 36 20 66 69 6c 65 6e 61 6d 65 20 6f 70  en16 filename op
e0b0: 74 69 6f 6e 73 0a 2a 2f 0a 73 74 61 74 69 63 20  tions.*/.static 
e0c0: 69 6e 74 20 74 65 73 74 5f 6f 70 65 6e 31 36 28  int test_open16(
e0d0: 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
e0e0: 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
e0f0: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
e100: 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
e110: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
e120: 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ){.#ifndef SQLIT
e130: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 63  E_OMIT_UTF16.  c
e140: 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 46 69 6c 65  onst void *zFile
e150: 6e 61 6d 65 3b 0a 20 20 73 71 6c 69 74 65 33 20  name;.  sqlite3 
e160: 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  *db;.  int rc;. 
e170: 20 63 68 61 72 20 7a 42 75 66 5b 31 30 30 5d 3b   char zBuf[100];
e180: 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20  ..  if( objc!=3 
e190: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
e1a0: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
e1b0: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
e1c0: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20  hould be \"", . 
e1d0: 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
e1e0: 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20  ing(objv[0]), " 
e1f0: 66 69 6c 65 6e 61 6d 65 20 6f 70 74 69 6f 6e 73  filename options
e200: 2d 6c 69 73 74 22 2c 20 30 29 3b 0a 20 20 20 20  -list", 0);.    
e210: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
e220: 3b 0a 20 20 7d 0a 0a 20 20 7a 46 69 6c 65 6e 61  ;.  }..  zFilena
e230: 6d 65 20 3d 20 54 63 6c 5f 47 65 74 42 79 74 65  me = Tcl_GetByte
e240: 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28 6f 62 6a  ArrayFromObj(obj
e250: 76 5b 31 5d 2c 20 30 29 3b 0a 20 20 72 63 20 3d  v[1], 0);.  rc =
e260: 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 28   sqlite3_open16(
e270: 7a 46 69 6c 65 6e 61 6d 65 2c 20 26 64 62 29 3b  zFilename, &db);
e280: 0a 20 20 0a 20 20 69 66 28 20 6d 61 6b 65 50 6f  .  .  if( makePo
e290: 69 6e 74 65 72 53 74 72 28 69 6e 74 65 72 70 2c  interStr(interp,
e2a0: 20 7a 42 75 66 2c 20 64 62 29 20 29 20 72 65 74   zBuf, db) ) ret
e2b0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
e2c0: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
e2d0: 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20  t(interp, zBuf, 
e2e0: 30 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  0);.#endif /* SQ
e2f0: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
e300: 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  */.  return TCL_
e310: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
e320: 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70  ge: sqlite3_comp
e330: 6c 65 74 65 31 36 20 3c 55 54 46 2d 31 36 20 73  lete16 <UTF-16 s
e340: 74 72 69 6e 67 3e 0a 2a 2a 0a 2a 2a 20 52 65 74  tring>.**.** Ret
e350: 75 72 6e 20 31 20 69 66 20 74 68 65 20 73 75 70  urn 1 if the sup
e360: 70 6c 69 65 64 20 61 72 67 75 6d 65 6e 74 20 69  plied argument i
e370: 73 20 61 20 63 6f 6d 70 6c 65 74 65 20 53 51 4c  s a complete SQL
e380: 20 73 74 61 74 65 6d 65 6e 74 2c 20 6f 72 20 7a   statement, or z
e390: 65 72 6f 0a 2a 2a 20 6f 74 68 65 72 77 69 73 65  ero.** otherwise
e3a0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
e3b0: 74 65 73 74 5f 63 6f 6d 70 6c 65 74 65 31 36 28  test_complete16(
e3c0: 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
e3d0: 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
e3e0: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
e3f0: 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
e400: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
e410: 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ){.#ifndef SQLIT
e420: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 63  E_OMIT_UTF16.  c
e430: 68 61 72 20 2a 7a 42 75 66 3b 0a 0a 20 20 69 66  har *zBuf;..  if
e440: 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
e450: 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67   Tcl_WrongNumArg
e460: 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a  s(interp, 1, obj
e470: 76 2c 20 22 3c 75 74 66 2d 31 36 20 73 71 6c 3e  v, "<utf-16 sql>
e480: 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  ");.    return T
e490: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
e4a0: 20 7a 42 75 66 20 3d 20 54 63 6c 5f 47 65 74 42   zBuf = Tcl_GetB
e4b0: 79 74 65 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28  yteArrayFromObj(
e4c0: 6f 62 6a 76 5b 31 5d 2c 20 30 29 3b 0a 20 20 54  objv[1], 0);.  T
e4d0: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
e4e0: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49  interp, Tcl_NewI
e4f0: 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33 5f 63 6f  ntObj(sqlite3_co
e500: 6d 70 6c 65 74 65 31 36 28 7a 42 75 66 29 29 29  mplete16(zBuf)))
e510: 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
e520: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f  TE_OMIT_UTF16 */
e530: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
e540: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
e550: 3a 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 53  : sqlite3_step S
e560: 54 4d 54 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63  TMT.**.** Advanc
e570: 65 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  e the statement 
e580: 74 6f 20 74 68 65 20 6e 65 78 74 20 72 6f 77 2e  to the next row.
e590: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
e5a0: 65 73 74 5f 73 74 65 70 28 0a 20 20 76 6f 69 64  est_step(.  void
e5b0: 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
e5c0: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
e5d0: 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
e5e0: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
e5f0: 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
e600: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
e610: 74 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20  t;.  int rc;..  
e620: 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20  if( objc!=2 ){. 
e630: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
e640: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
e650: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
e660: 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20  d be \"", .     
e670: 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28    Tcl_GetString(
e680: 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54  objv[0]), " STMT
e690: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
e6a0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
e6b0: 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  ..  if( getStmtP
e6c0: 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
e6d0: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
e6e0: 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29  v[1]), &pStmt) )
e6f0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
e700: 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  R;.  rc = sqlite
e710: 33 5f 73 74 65 70 28 70 53 74 6d 74 29 3b 0a 0a  3_step(pStmt);..
e720: 20 20 2f 2a 20 69 66 28 20 72 63 21 3d 53 51 4c    /* if( rc!=SQL
e730: 49 54 45 5f 44 4f 4e 45 20 26 26 20 72 63 21 3d  ITE_DONE && rc!=
e740: 53 51 4c 49 54 45 5f 52 4f 57 20 29 20 72 65 74  SQLITE_ROW ) ret
e750: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 20 2a  urn TCL_ERROR; *
e760: 2f 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c  /.  Tcl_SetResul
e770: 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20  t(interp, (char 
e780: 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c  *)errorName(rc),
e790: 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43   0);.  return TC
e7a0: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
e7b0: 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f  sage: sqlite3_co
e7c0: 6c 75 6d 6e 5f 63 6f 75 6e 74 20 53 54 4d 54 20  lumn_count STMT 
e7d0: 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  .**.** Return th
e7e0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
e7f0: 6d 6e 73 20 72 65 74 75 72 6e 65 64 20 62 79 20  mns returned by 
e800: 74 68 65 20 73 71 6c 20 73 74 61 74 65 6d 65 6e  the sql statemen
e810: 74 20 53 54 4d 54 2e 0a 2a 2f 0a 73 74 61 74 69  t STMT..*/.stati
e820: 63 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c 75 6d  c int test_colum
e830: 6e 5f 63 6f 75 6e 74 28 0a 20 20 76 6f 69 64 20  n_count(.  void 
e840: 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
e850: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
e860: 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
e870: 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
e880: 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
e890: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
e8a0: 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32  ;..  if( objc!=2
e8b0: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
e8c0: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
e8d0: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
e8e0: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a  should be \"", .
e8f0: 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
e900: 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22  ring(objv[0]), "
e910: 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30   STMT column", 0
e920: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
e930: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
e940: 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  if( getStmtPoint
e950: 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
e960: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
e970: 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74  ), &pStmt) ) ret
e980: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a  urn TCL_ERROR;..
e990: 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
e9a0: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
e9b0: 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33  ewIntObj(sqlite3
e9c0: 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70 53  _column_count(pS
e9d0: 74 6d 74 29 29 29 3b 0a 20 20 72 65 74 75 72 6e  tmt)));.  return
e9e0: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
e9f0: 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33  * Usage: sqlite3
ea00: 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 20 53 54 4d  _column_type STM
ea10: 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 52  T column.**.** R
ea20: 65 74 75 72 6e 20 74 68 65 20 74 79 70 65 20 6f  eturn the type o
ea30: 66 20 74 68 65 20 64 61 74 61 20 69 6e 20 63 6f  f the data in co
ea40: 6c 75 6d 6e 20 27 63 6f 6c 75 6d 6e 27 20 6f 66  lumn 'column' of
ea50: 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
ea60: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
ea70: 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65  test_column_type
ea80: 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
ea90: 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
eaa0: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
eab0: 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
eac0: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
ead0: 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  .){.  sqlite3_st
eae0: 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74  mt *pStmt;.  int
eaf0: 20 63 6f 6c 3b 0a 20 20 69 6e 74 20 74 70 3b 0a   col;.  int tp;.
eb00: 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29  .  if( objc!=3 )
eb10: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
eb20: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
eb30: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
eb40: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20  ould be \"", .  
eb50: 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
eb60: 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53  ng(objv[0]), " S
eb70: 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b  TMT column", 0);
eb80: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
eb90: 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66  ERROR;.  }..  if
eba0: 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
ebb0: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
ebc0: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
ebd0: 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
ebe0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
ebf0: 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f  f( Tcl_GetIntFro
ec00: 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
ec10: 76 5b 32 5d 2c 20 26 63 6f 6c 29 20 29 20 72 65  v[2], &col) ) re
ec20: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
ec30: 0a 20 20 74 70 20 3d 20 73 71 6c 69 74 65 33 5f  .  tp = sqlite3_
ec40: 63 6f 6c 75 6d 6e 5f 74 79 70 65 28 70 53 74 6d  column_type(pStm
ec50: 74 2c 20 63 6f 6c 29 3b 0a 20 20 73 77 69 74 63  t, col);.  switc
ec60: 68 28 20 74 70 20 29 7b 0a 20 20 20 20 63 61 73  h( tp ){.    cas
ec70: 65 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 45 52  e SQLITE_INTEGER
ec80: 3a 20 0a 20 20 20 20 20 20 54 63 6c 5f 53 65 74  : .      Tcl_Set
ec90: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
eca0: 49 4e 54 45 47 45 52 22 2c 20 54 43 4c 5f 53 54  INTEGER", TCL_ST
ecb0: 41 54 49 43 29 3b 20 0a 20 20 20 20 20 20 62 72  ATIC); .      br
ecc0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
ecd0: 4c 49 54 45 5f 4e 55 4c 4c 3a 0a 20 20 20 20 20  LITE_NULL:.     
ece0: 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69   Tcl_SetResult(i
ecf0: 6e 74 65 72 70 2c 20 22 4e 55 4c 4c 22 2c 20 54  nterp, "NULL", T
ed00: 43 4c 5f 53 54 41 54 49 43 29 3b 20 0a 20 20 20  CL_STATIC); .   
ed10: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
ed20: 73 65 20 53 51 4c 49 54 45 5f 46 4c 4f 41 54 3a  se SQLITE_FLOAT:
ed30: 0a 20 20 20 20 20 20 54 63 6c 5f 53 65 74 52 65  .      Tcl_SetRe
ed40: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 46 4c  sult(interp, "FL
ed50: 4f 41 54 22 2c 20 54 43 4c 5f 53 54 41 54 49 43  OAT", TCL_STATIC
ed60: 29 3b 20 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  ); .      break;
ed70: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
ed80: 5f 54 45 58 54 3a 0a 20 20 20 20 20 20 54 63 6c  _TEXT:.      Tcl
ed90: 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
eda0: 70 2c 20 22 54 45 58 54 22 2c 20 54 43 4c 5f 53  p, "TEXT", TCL_S
edb0: 54 41 54 49 43 29 3b 20 0a 20 20 20 20 20 20 62  TATIC); .      b
edc0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
edd0: 51 4c 49 54 45 5f 42 4c 4f 42 3a 0a 20 20 20 20  QLITE_BLOB:.    
ede0: 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28    Tcl_SetResult(
edf0: 69 6e 74 65 72 70 2c 20 22 42 4c 4f 42 22 2c 20  interp, "BLOB", 
ee00: 54 43 4c 5f 53 54 41 54 49 43 29 3b 20 0a 20 20  TCL_STATIC); .  
ee10: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64      break;.    d
ee20: 65 66 61 75 6c 74 3a 0a 20 20 20 20 20 20 61 73  efault:.      as
ee30: 73 65 72 74 28 30 29 3b 0a 20 20 7d 0a 0a 20 20  sert(0);.  }..  
ee40: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
ee50: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
ee60: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
ee70: 74 36 34 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a  t64 STMT column.
ee80: 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  **.** Return the
ee90: 20 64 61 74 61 20 69 6e 20 63 6f 6c 75 6d 6e 20   data in column 
eea0: 27 63 6f 6c 75 6d 6e 27 20 6f 66 20 74 68 65 20  'column' of the 
eeb0: 63 75 72 72 65 6e 74 20 72 6f 77 20 63 61 73 74  current row cast
eec0: 20 61 73 20 61 6e 0a 2a 2a 20 77 69 64 65 20 28   as an.** wide (
eed0: 36 34 2d 62 69 74 29 20 69 6e 74 65 67 65 72 2e  64-bit) integer.
eee0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
eef0: 65 73 74 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34  est_column_int64
ef00: 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
ef10: 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
ef20: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
ef30: 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
ef40: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
ef50: 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  .){.  sqlite3_st
ef60: 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74  mt *pStmt;.  int
ef70: 20 63 6f 6c 3b 0a 20 20 69 36 34 20 69 56 61 6c   col;.  i64 iVal
ef80: 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33  ;..  if( objc!=3
ef90: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
efa0: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
efb0: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
efc0: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a  should be \"", .
efd0: 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
efe0: 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22  ring(objv[0]), "
eff0: 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30   STMT column", 0
f000: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
f010: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
f020: 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  if( getStmtPoint
f030: 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
f040: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
f050: 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74  ), &pStmt) ) ret
f060: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
f070: 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46   if( Tcl_GetIntF
f080: 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
f090: 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20 29 20  bjv[2], &col) ) 
f0a0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
f0b0: 3b 0a 0a 20 20 69 56 61 6c 20 3d 20 73 71 6c 69  ;..  iVal = sqli
f0c0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34  te3_column_int64
f0d0: 28 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20  (pStmt, col);.  
f0e0: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
f0f0: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
f100: 57 69 64 65 49 6e 74 4f 62 6a 28 69 56 61 6c 29  WideIntObj(iVal)
f110: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
f120: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
f130: 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ge: sqlite3_colu
f140: 6d 6e 5f 62 6c 6f 62 20 53 54 4d 54 20 63 6f 6c  mn_blob STMT col
f150: 75 6d 6e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  umn.*/.static in
f160: 74 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 62 6c  t test_column_bl
f170: 6f 62 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  ob(.  void * cli
f180: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
f190: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
f1a0: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
f1b0: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
f1c0: 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  [].){.  sqlite3_
f1d0: 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69  stmt *pStmt;.  i
f1e0: 6e 74 20 63 6f 6c 3b 0a 0a 20 20 69 6e 74 20 6c  nt col;..  int l
f1f0: 65 6e 3b 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64  en;.  const void
f200: 20 2a 70 42 6c 6f 62 3b 0a 0a 20 20 69 66 28 20   *pBlob;..  if( 
f210: 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54  objc!=3 ){.    T
f220: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
f230: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
f240: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
f250: 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63   \"", .       Tc
f260: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
f270: 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c  [0]), " STMT col
f280: 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  umn", 0);.    re
f290: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
f2a0: 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74    }..  if( getSt
f2b0: 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  mtPointer(interp
f2c0: 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
f2d0: 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74  objv[1]), &pStmt
f2e0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
f2f0: 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f  RROR;.  if( Tcl_
f300: 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e  GetIntFromObj(in
f310: 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26  terp, objv[2], &
f320: 63 6f 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43  col) ) return TC
f330: 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 70 42 6c 6f  L_ERROR;..  pBlo
f340: 62 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  b = sqlite3_colu
f350: 6d 6e 5f 62 6c 6f 62 28 70 53 74 6d 74 2c 20 63  mn_blob(pStmt, c
f360: 6f 6c 29 3b 0a 20 20 6c 65 6e 20 3d 20 73 71 6c  ol);.  len = sql
f370: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65  ite3_column_byte
f380: 73 28 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a 20  s(pStmt, col);. 
f390: 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c   Tcl_SetObjResul
f3a0: 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
f3b0: 77 42 79 74 65 41 72 72 61 79 4f 62 6a 28 70 42  wByteArrayObj(pB
f3c0: 6c 6f 62 2c 20 6c 65 6e 29 29 3b 0a 20 20 72 65  lob, len));.  re
f3d0: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
f3e0: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  /*.** Usage: sql
f3f0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62  ite3_column_doub
f400: 6c 65 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a  le STMT column.*
f410: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
f420: 64 61 74 61 20 69 6e 20 63 6f 6c 75 6d 6e 20 27  data in column '
f430: 63 6f 6c 75 6d 6e 27 20 6f 66 20 74 68 65 20 63  column' of the c
f440: 75 72 72 65 6e 74 20 72 6f 77 20 63 61 73 74 20  urrent row cast 
f450: 61 73 20 61 20 64 6f 75 62 6c 65 2e 0a 2a 2f 0a  as a double..*/.
f460: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
f470: 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28 0a 20  column_double(. 
f480: 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
f490: 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
f4a0: 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
f4b0: 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
f4c0: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
f4d0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
f4e0: 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63 6f  *pStmt;.  int co
f4f0: 6c 3b 0a 20 20 64 6f 75 62 6c 65 20 72 56 61 6c  l;.  double rVal
f500: 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33  ;..  if( objc!=3
f510: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
f520: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
f530: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
f540: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a  should be \"", .
f550: 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
f560: 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22  ring(objv[0]), "
f570: 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30   STMT column", 0
f580: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
f590: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
f5a0: 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  if( getStmtPoint
f5b0: 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
f5c0: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
f5d0: 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74  ), &pStmt) ) ret
f5e0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
f5f0: 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46   if( Tcl_GetIntF
f600: 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
f610: 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20 29 20  bjv[2], &col) ) 
f620: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
f630: 3b 0a 0a 20 20 72 56 61 6c 20 3d 20 73 71 6c 69  ;..  rVal = sqli
f640: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c  te3_column_doubl
f650: 65 28 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a 20  e(pStmt, col);. 
f660: 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c   Tcl_SetObjResul
f670: 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
f680: 77 44 6f 75 62 6c 65 4f 62 6a 28 72 56 61 6c 29  wDoubleObj(rVal)
f690: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
f6a0: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
f6b0: 67 65 3a 20 73 71 6c 69 74 65 33 5f 64 61 74 61  ge: sqlite3_data
f6c0: 5f 63 6f 75 6e 74 20 53 54 4d 54 20 0a 2a 2a 0a  _count STMT .**.
f6d0: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75  ** Return the nu
f6e0: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
f6f0: 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
f700: 73 71 6c 20 73 74 61 74 65 6d 65 6e 74 20 53 54  sql statement ST
f710: 4d 54 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  MT..*/.static in
f720: 74 20 74 65 73 74 5f 64 61 74 61 5f 63 6f 75 6e  t test_data_coun
f730: 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  t(.  void * clie
f740: 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
f750: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
f760: 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
f770: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
f780: 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ].){.  sqlite3_s
f790: 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 0a 20 20 69  tmt *pStmt;..  i
f7a0: 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20  f( objc!=2 ){.  
f7b0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
f7c0: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
f7d0: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
f7e0: 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20   be \"", .      
f7f0: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
f800: 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20  bjv[0]), " STMT 
f810: 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20  column", 0);.   
f820: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
f830: 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65  R;.  }..  if( ge
f840: 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74  tStmtPointer(int
f850: 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
f860: 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53  ng(objv[1]), &pS
f870: 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43  tmt) ) return TC
f880: 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 54 63 6c 5f  L_ERROR;..  Tcl_
f890: 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
f8a0: 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f  erp, Tcl_NewIntO
f8b0: 62 6a 28 73 71 6c 69 74 65 33 5f 64 61 74 61 5f  bj(sqlite3_data_
f8c0: 63 6f 75 6e 74 28 70 53 74 6d 74 29 29 29 3b 0a  count(pStmt)));.
f8d0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
f8e0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
f8f0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
f900: 74 65 78 74 20 53 54 4d 54 20 63 6f 6c 75 6d 6e  text STMT column
f910: 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  .**.** Usage: sq
f920: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63  lite3_column_dec
f930: 6c 74 79 70 65 20 53 54 4d 54 20 63 6f 6c 75 6d  ltype STMT colum
f940: 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  n.**.** Usage: s
f950: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
f960: 6d 65 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a  me STMT column.*
f970: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
f980: 74 5f 73 74 6d 74 5f 75 74 66 38 28 0a 20 20 76  t_stmt_utf8(.  v
f990: 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
f9a0: 2c 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e  ,        /* Poin
f9b0: 74 65 72 20 74 6f 20 53 51 4c 69 74 65 20 41 50  ter to SQLite AP
f9c0: 49 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65  I function to be
f9d0: 20 69 6e 76 6f 6b 65 20 2a 2f 0a 20 20 54 63 6c   invoke */.  Tcl
f9e0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
f9f0: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
fa00: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
fa10: 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
fa20: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
fa30: 20 69 6e 74 20 63 6f 6c 3b 0a 20 20 63 6f 6e 73   int col;.  cons
fa40: 74 20 63 68 61 72 20 2a 28 2a 78 46 75 6e 63 29  t char *(*xFunc)
fa50: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 2c 20  (sqlite3_stmt*, 
fa60: 69 6e 74 29 20 3d 20 63 6c 69 65 6e 74 44 61 74  int) = clientDat
fa70: 61 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  a;.  const char 
fa80: 2a 7a 52 65 74 3b 0a 0a 20 20 69 66 28 20 6f 62  *zRet;..  if( ob
fa90: 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=3 ){.    Tcl
faa0: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
fab0: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
fac0: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
fad0: 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f  "", .       Tcl_
fae0: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30  GetString(objv[0
faf0: 5d 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d  ]), " STMT colum
fb00: 6e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  n", 0);.    retu
fb10: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
fb20: 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74  }..  if( getStmt
fb30: 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
fb40: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
fb50: 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20  jv[1]), &pStmt) 
fb60: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
fb70: 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65  OR;.  if( Tcl_Ge
fb80: 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65  tIntFromObj(inte
fb90: 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f  rp, objv[2], &co
fba0: 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  l) ) return TCL_
fbb0: 45 52 52 4f 52 3b 0a 20 20 7a 52 65 74 20 3d 20  ERROR;.  zRet = 
fbc0: 78 46 75 6e 63 28 70 53 74 6d 74 2c 20 63 6f 6c  xFunc(pStmt, col
fbd0: 29 3b 0a 20 20 69 66 28 20 7a 52 65 74 20 29 7b  );.  if( zRet ){
fbe0: 0a 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75  .    Tcl_SetResu
fbf0: 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72  lt(interp, (char
fc00: 20 2a 29 7a 52 65 74 2c 20 30 29 3b 0a 20 20 7d   *)zRet, 0);.  }
fc10: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
fc20: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
fc30: 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  : sqlite3_column
fc40: 5f 74 65 78 74 20 53 54 4d 54 20 63 6f 6c 75 6d  _text STMT colum
fc50: 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  n.**.** Usage: s
fc60: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65  qlite3_column_de
fc70: 63 6c 74 79 70 65 20 53 54 4d 54 20 63 6f 6c 75  cltype STMT colu
fc80: 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  mn.**.** Usage: 
fc90: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e  sqlite3_column_n
fca0: 61 6d 65 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a  ame STMT column.
fcb0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
fcc0: 73 74 5f 73 74 6d 74 5f 75 74 66 31 36 28 0a 20  st_stmt_utf16(. 
fcd0: 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
fce0: 74 61 2c 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ta,     /* Point
fcf0: 65 72 20 74 6f 20 53 51 4c 69 74 65 20 41 50 49  er to SQLite API
fd00: 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20   function to be 
fd10: 69 6e 76 6f 6b 65 64 20 2a 2f 0a 20 20 54 63 6c  invoked */.  Tcl
fd20: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
fd30: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
fd40: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
fd50: 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20  jv[].){.#ifndef 
fd60: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
fd70: 36 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  6.  sqlite3_stmt
fd80: 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63   *pStmt;.  int c
fd90: 6f 6c 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70  ol;.  Tcl_Obj *p
fda0: 52 65 74 3b 0a 20 20 63 6f 6e 73 74 20 76 6f 69  Ret;.  const voi
fdb0: 64 20 2a 7a 4e 61 6d 65 31 36 3b 0a 20 20 63 6f  d *zName16;.  co
fdc0: 6e 73 74 20 76 6f 69 64 20 2a 28 2a 78 46 75 6e  nst void *(*xFun
fdd0: 63 29 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a  c)(sqlite3_stmt*
fde0: 2c 20 69 6e 74 29 20 3d 20 63 6c 69 65 6e 74 44  , int) = clientD
fdf0: 61 74 61 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63  ata;..  if( objc
fe00: 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=3 ){.    Tcl_A
fe10: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
fe20: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
fe30: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
fe40: 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65  , .       Tcl_Ge
fe50: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29  tString(objv[0])
fe60: 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22  , " STMT column"
fe70: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
fe80: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
fe90: 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f  .  if( getStmtPo
fea0: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
feb0: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
fec0: 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20  [1]), &pStmt) ) 
fed0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
fee0: 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49  ;.  if( Tcl_GetI
fef0: 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  ntFromObj(interp
ff00: 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29  , objv[2], &col)
ff10: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
ff20: 52 4f 52 3b 0a 0a 20 20 7a 4e 61 6d 65 31 36 20  ROR;..  zName16 
ff30: 3d 20 78 46 75 6e 63 28 70 53 74 6d 74 2c 20 63  = xFunc(pStmt, c
ff40: 6f 6c 29 3b 0a 20 20 69 66 28 20 7a 4e 61 6d 65  ol);.  if( zName
ff50: 31 36 20 29 7b 0a 20 20 20 20 70 52 65 74 20 3d  16 ){.    pRet =
ff60: 20 54 63 6c 5f 4e 65 77 42 79 74 65 41 72 72 61   Tcl_NewByteArra
ff70: 79 4f 62 6a 28 7a 4e 61 6d 65 31 36 2c 20 73 71  yObj(zName16, sq
ff80: 6c 69 74 65 33 75 74 66 31 36 42 79 74 65 4c 65  lite3utf16ByteLe
ff90: 6e 28 7a 4e 61 6d 65 31 36 2c 20 2d 31 29 2b 32  n(zName16, -1)+2
ffa0: 29 3b 0a 20 20 20 20 54 63 6c 5f 53 65 74 4f 62  );.    Tcl_SetOb
ffb0: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
ffc0: 70 52 65 74 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  pRet);.  }.#endi
ffd0: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
ffe0: 5f 55 54 46 31 36 20 2a 2f 0a 0a 20 20 72 65 74  _UTF16 */..  ret
fff0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
10000 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69  *.** Usage: sqli
10010 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 53  te3_column_int S
10020 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a  TMT column.**.**
10030 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
10040 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 20 53 54 4d  column_bytes STM
10050 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55  T column.**.** U
10060 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f  sage: sqlite3_co
10070 6c 75 6d 6e 5f 62 79 74 65 73 31 36 20 53 54 4d  lumn_bytes16 STM
10080 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2f 0a 73  T column.**.*/.s
10090 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 73  tatic int test_s
100a0 74 6d 74 5f 69 6e 74 28 0a 20 20 76 6f 69 64 20  tmt_int(.  void 
100b0 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 20 20  * clientData,   
100c0 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 53   /* Pointer to S
100d0 51 4c 69 74 65 20 41 50 49 20 66 75 6e 63 74 69  QLite API functi
100e0 6f 6e 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64  on to be invoked
100f0 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70   */.  Tcl_Interp
10100 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
10110 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
10120 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
10130 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
10140 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63 6f  *pStmt;.  int co
10150 6c 3b 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e 63  l;.  int (*xFunc
10160 29 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 2c  )(sqlite3_stmt*,
10170 20 69 6e 74 29 20 3d 20 63 6c 69 65 6e 74 44 61   int) = clientDa
10180 74 61 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  ta;..  if( objc!
10190 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =3 ){.    Tcl_Ap
101a0 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
101b0 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
101c0 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
101d0 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74   .       Tcl_Get
101e0 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c  String(objv[0]),
101f0 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c   " STMT column",
10200 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
10210 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
10220 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
10230 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
10240 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
10250 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72  1]), &pStmt) ) r
10260 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
10270 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e  .  if( Tcl_GetIn
10280 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
10290 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20   objv[2], &col) 
102a0 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
102b0 4f 52 3b 0a 0a 20 20 54 63 6c 5f 53 65 74 4f 62  OR;..  Tcl_SetOb
102c0 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
102d0 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 78 46  Tcl_NewIntObj(xF
102e0 75 6e 63 28 70 53 74 6d 74 2c 20 63 6f 6c 29 29  unc(pStmt, col))
102f0 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
10300 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
10310 67 65 3a 20 20 73 71 6c 69 74 65 33 4f 73 4f 70  ge:  sqlite3OsOp
10320 65 6e 52 65 61 64 57 72 69 74 65 20 3c 66 69 6c  enReadWrite <fil
10330 65 6e 61 6d 65 3e 0a 2a 2f 0a 73 74 61 74 69 63  ename>.*/.static
10340 20 69 6e 74 20 74 65 73 74 5f 73 71 6c 69 74 65   int test_sqlite
10350 33 4f 73 4f 70 65 6e 52 65 61 64 57 72 69 74 65  3OsOpenReadWrite
10360 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
10370 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
10380 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
10390 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
103a0 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
103b0 0a 29 7b 0a 20 20 4f 73 46 69 6c 65 20 2a 20 70  .){.  OsFile * p
103c0 46 69 6c 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a  File;.  int rc;.
103d0 20 20 69 6e 74 20 64 75 6d 6d 79 3b 0a 20 20 63    int dummy;.  c
103e0 68 61 72 20 7a 42 75 66 5b 31 30 30 5d 3b 0a 0a  har zBuf[100];..
103f0 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b    if( objc!=2 ){
10400 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
10410 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
10420 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
10430 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20  uld be \"", .   
10440 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
10450 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 66 69  g(objv[0]), " fi
10460 6c 65 6e 61 6d 65 22 2c 20 30 29 3b 0a 20 20 20  lename", 0);.   
10470 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
10480 52 3b 0a 20 20 7d 0a 0a 20 20 70 46 69 6c 65 20  R;.  }..  pFile 
10490 3d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 73  = sqliteMalloc(s
104a0 69 7a 65 6f 66 28 4f 73 46 69 6c 65 29 29 3b 0a  izeof(OsFile));.
104b0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73    rc = sqlite3Os
104c0 4f 70 65 6e 52 65 61 64 57 72 69 74 65 28 54 63  OpenReadWrite(Tc
104d0 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
104e0 5b 31 5d 29 2c 20 70 46 69 6c 65 2c 20 26 64 75  [1]), pFile, &du
104f0 6d 6d 79 29 3b 0a 20 20 69 66 28 20 72 63 21 3d  mmy);.  if( rc!=
10500 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
10510 20 73 71 6c 69 74 65 46 72 65 65 28 70 46 69 6c   sqliteFree(pFil
10520 65 29 3b 0a 20 20 20 20 54 63 6c 5f 53 65 74 52  e);.    Tcl_SetR
10530 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63  esult(interp, (c
10540 68 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28  har *)errorName(
10550 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43 29  rc), TCL_STATIC)
10560 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
10570 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 6d 61  _ERROR;.  }.  ma
10580 6b 65 50 6f 69 6e 74 65 72 53 74 72 28 69 6e 74  kePointerStr(int
10590 65 72 70 2c 20 7a 42 75 66 2c 20 70 46 69 6c 65  erp, zBuf, pFile
105a0 29 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75  );.  Tcl_SetResu
105b0 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c  lt(interp, zBuf,
105c0 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43   0);.  return TC
105d0 4c 5f 45 52 52 4f 52 3b 0a 7d 0a 0a 2f 2a 0a 2a  L_ERROR;.}../*.*
105e0 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
105f0 33 4f 73 43 6c 6f 73 65 20 3c 66 69 6c 65 20 68  3OsClose <file h
10600 61 6e 64 6c 65 3e 0a 2a 2f 0a 73 74 61 74 69 63  andle>.*/.static
10610 20 69 6e 74 20 74 65 73 74 5f 73 71 6c 69 74 65   int test_sqlite
10620 33 4f 73 43 6c 6f 73 65 28 0a 20 20 76 6f 69 64  3OsClose(.  void
10630 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
10640 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
10650 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
10660 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
10670 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 4f 73  T objv[].){.  Os
10680 46 69 6c 65 20 2a 20 70 46 69 6c 65 3b 0a 20 20  File * pFile;.  
10690 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f  int rc;..  if( o
106a0 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  bjc!=2 ){.    Tc
106b0 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
106c0 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
106d0 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
106e0 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c  \"", .       Tcl
106f0 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
10700 30 5d 29 2c 20 22 20 66 69 6c 65 68 61 6e 64 6c  0]), " filehandl
10710 65 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  e", 0);.    retu
10720 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
10730 7d 0a 0a 20 20 69 66 28 20 67 65 74 46 69 6c 65  }..  if( getFile
10740 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
10750 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
10760 6a 76 5b 31 5d 29 2c 20 26 70 46 69 6c 65 29 20  jv[1]), &pFile) 
10770 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  ){.    return TC
10780 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72  L_ERROR;.  }.  r
10790 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 43 6c 6f  c = sqlite3OsClo
107a0 73 65 28 70 46 69 6c 65 29 3b 0a 20 20 69 66 28  se(pFile);.  if(
107b0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
107c0 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73  {.    Tcl_SetRes
107d0 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61  ult(interp, (cha
107e0 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72 63  r *)errorName(rc
107f0 29 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a  ), TCL_STATIC);.
10800 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
10810 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  RROR;.  }.  sqli
10820 74 65 46 72 65 65 28 70 46 69 6c 65 29 3b 0a 20  teFree(pFile);. 
10830 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
10840 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
10850 20 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b 20 3c   sqlite3OsLock <
10860 66 69 6c 65 20 68 61 6e 64 6c 65 3e 20 3c 6c 6f  file handle> <lo
10870 63 6b 74 79 70 65 3e 0a 2a 2f 0a 73 74 61 74 69  cktype>.*/.stati
10880 63 20 69 6e 74 20 74 65 73 74 5f 73 71 6c 69 74  c int test_sqlit
10890 65 33 4f 73 4c 6f 63 6b 28 0a 20 20 76 6f 69 64  e3OsLock(.  void
108a0 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
108b0 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
108c0 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
108d0 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
108e0 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 4f 73  T objv[].){.  Os
108f0 46 69 6c 65 20 2a 20 70 46 69 6c 65 3b 0a 20 20  File * pFile;.  
10900 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f  int rc;..  if( o
10910 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63  bjc!=3 ){.    Tc
10920 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
10930 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
10940 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
10950 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 20 54 63  \"", .        Tc
10960 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
10970 5b 30 5d 29 2c 20 0a 20 20 20 20 20 20 20 20 22  [0]), .        "
10980 20 66 69 6c 65 68 61 6e 64 6c 65 20 28 53 48 41   filehandle (SHA
10990 52 45 44 7c 52 45 53 45 52 56 45 44 7c 50 45 4e  RED|RESERVED|PEN
109a0 44 49 4e 47 7c 45 58 43 4c 55 53 49 56 45 29 22  DING|EXCLUSIVE)"
109b0 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
109c0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
109d0 0a 20 20 69 66 28 20 67 65 74 46 69 6c 65 50 6f  .  if( getFilePo
109e0 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
109f0 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
10a00 5b 31 5d 29 2c 20 26 70 46 69 6c 65 29 20 29 7b  [1]), &pFile) ){
10a10 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
10a20 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66  ERROR;.  }..  if
10a30 28 20 30 3d 3d 73 74 72 63 6d 70 28 22 53 48 41  ( 0==strcmp("SHA
10a40 52 45 44 22 2c 20 54 63 6c 5f 47 65 74 53 74 72  RED", Tcl_GetStr
10a50 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 29 20 29 7b  ing(objv[2])) ){
10a60 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
10a70 33 4f 73 4c 6f 63 6b 28 70 46 69 6c 65 2c 20 53  3OsLock(pFile, S
10a80 48 41 52 45 44 5f 4c 4f 43 4b 29 3b 0a 20 20 7d  HARED_LOCK);.  }
10a90 0a 20 20 65 6c 73 65 20 69 66 28 20 30 3d 3d 73  .  else if( 0==s
10aa0 74 72 63 6d 70 28 22 52 45 53 45 52 56 45 44 22  trcmp("RESERVED"
10ab0 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
10ac0 6f 62 6a 76 5b 32 5d 29 29 20 29 7b 0a 20 20 20  objv[2])) ){.   
10ad0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 4c   rc = sqlite3OsL
10ae0 6f 63 6b 28 70 46 69 6c 65 2c 20 52 45 53 45 52  ock(pFile, RESER
10af0 56 45 44 5f 4c 4f 43 4b 29 3b 0a 20 20 7d 0a 20  VED_LOCK);.  }. 
10b00 20 65 6c 73 65 20 69 66 28 20 30 3d 3d 73 74 72   else if( 0==str
10b10 63 6d 70 28 22 50 45 4e 44 49 4e 47 22 2c 20 54  cmp("PENDING", T
10b20 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
10b30 76 5b 32 5d 29 29 20 29 7b 0a 20 20 20 20 72 63  v[2])) ){.    rc
10b40 20 3d 20 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b   = sqlite3OsLock
10b50 28 70 46 69 6c 65 2c 20 50 45 4e 44 49 4e 47 5f  (pFile, PENDING_
10b60 4c 4f 43 4b 29 3b 0a 20 20 7d 0a 20 20 65 6c 73  LOCK);.  }.  els
10b70 65 20 69 66 28 20 30 3d 3d 73 74 72 63 6d 70 28  e if( 0==strcmp(
10b80 22 45 58 43 4c 55 53 49 56 45 22 2c 20 54 63 6c  "EXCLUSIVE", Tcl
10b90 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
10ba0 32 5d 29 29 20 29 7b 0a 20 20 20 20 72 63 20 3d  2])) ){.    rc =
10bb0 20 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b 28 70   sqlite3OsLock(p
10bc0 46 69 6c 65 2c 20 45 58 43 4c 55 53 49 56 45 5f  File, EXCLUSIVE_
10bd0 4c 4f 43 4b 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  LOCK);.  }else{.
10be0 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
10bf0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
10c00 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
10c10 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20  ld be \"", .    
10c20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
10c30 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 0a 20 20 20  g(objv[0]), .   
10c40 20 20 20 20 20 22 20 66 69 6c 65 68 61 6e 64 6c       " filehandl
10c50 65 20 28 53 48 41 52 45 44 7c 52 45 53 45 52 56  e (SHARED|RESERV
10c60 45 44 7c 50 45 4e 44 49 4e 47 7c 45 58 43 4c 55  ED|PENDING|EXCLU
10c70 53 49 56 45 29 22 2c 20 30 29 3b 0a 20 20 20 20  SIVE)", 0);.    
10c80 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
10c90 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 72 63 21  ;.  }..  if( rc!
10ca0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
10cb0 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28    Tcl_SetResult(
10cc0 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29  interp, (char *)
10cd0 65 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54  errorName(rc), T
10ce0 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  CL_STATIC);.    
10cf0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
10d00 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54  ;.  }.  return T
10d10 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
10d20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 4f  Usage:  sqlite3O
10d30 73 55 6e 6c 6f 63 6b 20 3c 66 69 6c 65 20 68 61  sUnlock <file ha
10d40 6e 64 6c 65 3e 0a 2a 2f 0a 73 74 61 74 69 63 20  ndle>.*/.static 
10d50 69 6e 74 20 74 65 73 74 5f 73 71 6c 69 74 65 33  int test_sqlite3
10d60 4f 73 55 6e 6c 6f 63 6b 28 0a 20 20 76 6f 69 64  OsUnlock(.  void
10d70 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
10d80 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
10d90 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
10da0 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
10db0 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 4f 73  T objv[].){.  Os
10dc0 46 69 6c 65 20 2a 20 70 46 69 6c 65 3b 0a 20 20  File * pFile;.  
10dd0 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f  int rc;..  if( o
10de0 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  bjc!=2 ){.    Tc
10df0 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
10e00 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
10e10 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
10e20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c  \"", .       Tcl
10e30 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
10e40 30 5d 29 2c 20 22 20 66 69 6c 65 68 61 6e 64 6c  0]), " filehandl
10e50 65 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  e", 0);.    retu
10e60 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
10e70 7d 0a 0a 20 20 69 66 28 20 67 65 74 46 69 6c 65  }..  if( getFile
10e80 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
10e90 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
10ea0 6a 76 5b 31 5d 29 2c 20 26 70 46 69 6c 65 29 20  jv[1]), &pFile) 
10eb0 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  ){.    return TC
10ec0 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72  L_ERROR;.  }.  r
10ed0 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 55 6e 6c  c = sqlite3OsUnl
10ee0 6f 63 6b 28 70 46 69 6c 65 2c 20 4e 4f 5f 4c 4f  ock(pFile, NO_LO
10ef0 43 4b 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53  CK);.  if( rc!=S
10f00 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
10f10 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
10f20 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 65 72  terp, (char *)er
10f30 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c  rorName(rc), TCL
10f40 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 72 65  _STATIC);.    re
10f50 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
10f60 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c    }.  return TCL
10f70 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
10f80 61 67 65 3a 20 20 73 71 6c 69 74 65 33 4f 73 54  age:  sqlite3OsT
10f90 65 6d 70 46 69 6c 65 4e 61 6d 65 0a 2a 2f 0a 73  empFileName.*/.s
10fa0 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 73  tatic int test_s
10fb0 71 6c 69 74 65 33 4f 73 54 65 6d 70 46 69 6c 65  qlite3OsTempFile
10fc0 4e 61 6d 65 28 0a 20 20 76 6f 69 64 20 2a 20 63  Name(.  void * c
10fd0 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
10fe0 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
10ff0 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
11000 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
11010 6a 76 5b 5d 0a 29 7b 0a 20 20 63 68 61 72 20 7a  jv[].){.  char z
11020 46 69 6c 65 5b 53 51 4c 49 54 45 5f 54 45 4d 50  File[SQLITE_TEMP
11030 4e 41 4d 45 5f 53 49 5a 45 5d 3b 0a 20 20 69 6e  NAME_SIZE];.  in
11040 74 20 72 63 3b 0a 0a 20 20 72 63 20 3d 20 73 71  t rc;..  rc = sq
11050 6c 69 74 65 33 4f 73 54 65 6d 70 46 69 6c 65 4e  lite3OsTempFileN
11060 61 6d 65 28 7a 46 69 6c 65 29 3b 0a 20 20 69 66  ame(zFile);.  if
11070 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
11080 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 52 65  ){.    Tcl_SetRe
11090 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68  sult(interp, (ch
110a0 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72  ar *)errorName(r
110b0 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b  c), TCL_STATIC);
110c0 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
110d0 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 54 63 6c  ERROR;.  }.  Tcl
110e0 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
110f0 74 65 72 70 2c 20 7a 46 69 6c 65 2c 20 30 29 3b  terp, zFile, 0);
11100 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
11110 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
11120 3a 20 20 73 71 6c 69 74 65 5f 73 65 74 5f 6d 61  :  sqlite_set_ma
11130 67 69 63 20 20 44 42 20 20 4d 41 47 49 43 2d 4e  gic  DB  MAGIC-N
11140 55 4d 42 45 52 0a 2a 2a 0a 2a 2a 20 53 65 74 20  UMBER.**.** Set 
11150 74 68 65 20 64 62 2d 3e 6d 61 67 69 63 20 76 61  the db->magic va
11160 6c 75 65 2e 20 20 54 68 69 73 20 69 73 20 75 73  lue.  This is us
11170 65 64 20 74 6f 20 74 65 73 74 20 65 72 72 6f 72  ed to test error
11180 20 72 65 63 6f 76 65 72 79 20 6c 6f 67 69 63 2e   recovery logic.
11190 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73  .*/.static int s
111a0 71 6c 69 74 65 5f 73 65 74 5f 6d 61 67 69 63 28  qlite_set_magic(
111b0 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
111c0 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
111d0 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
111e0 74 20 61 72 67 63 2c 0a 20 20 63 68 61 72 20 2a  t argc,.  char *
111f0 2a 61 72 67 76 0a 29 7b 0a 20 20 73 71 6c 69 74  *argv.){.  sqlit
11200 65 33 20 2a 64 62 3b 0a 20 20 69 66 28 20 61 72  e3 *db;.  if( ar
11210 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=3 ){.    Tcl
11220 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
11230 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
11240 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
11250 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20  "", argv[0],.   
11260 20 20 20 20 20 20 22 20 44 42 20 4d 41 47 49 43        " DB MAGIC
11270 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
11280 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
11290 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e  .  if( getDbPoin
112a0 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76  ter(interp, argv
112b0 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75  [1], &db) ) retu
112c0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
112d0 69 66 28 20 73 74 72 63 6d 70 28 61 72 67 76 5b  if( strcmp(argv[
112e0 32 5d 2c 20 22 53 51 4c 49 54 45 5f 4d 41 47 49  2], "SQLITE_MAGI
112f0 43 5f 4f 50 45 4e 22 29 3d 3d 30 20 29 7b 0a 20  C_OPEN")==0 ){. 
11300 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53     db->magic = S
11310 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e  QLITE_MAGIC_OPEN
11320 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74  ;.  }else if( st
11330 72 63 6d 70 28 61 72 67 76 5b 32 5d 2c 20 22 53  rcmp(argv[2], "S
11340 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53  QLITE_MAGIC_CLOS
11350 45 44 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 64  ED")==0 ){.    d
11360 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54  b->magic = SQLIT
11370 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 3b 0a  E_MAGIC_CLOSED;.
11380 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
11390 6d 70 28 61 72 67 76 5b 32 5d 2c 20 22 53 51 4c  mp(argv[2], "SQL
113a0 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 22 29  ITE_MAGIC_BUSY")
113b0 3d 3d 30 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d  ==0 ){.    db->m
113c0 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41  agic = SQLITE_MA
113d0 47 49 43 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73  GIC_BUSY;.  }els
113e0 65 20 69 66 28 20 73 74 72 63 6d 70 28 61 72 67  e if( strcmp(arg
113f0 76 5b 32 5d 2c 20 22 53 51 4c 49 54 45 5f 4d 41  v[2], "SQLITE_MA
11400 47 49 43 5f 45 52 52 4f 52 22 29 3d 3d 30 20 29  GIC_ERROR")==0 )
11410 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20  {.    db->magic 
11420 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45  = SQLITE_MAGIC_E
11430 52 52 4f 52 3b 0a 20 20 7d 65 6c 73 65 20 69 66  RROR;.  }else if
11440 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74  ( Tcl_GetInt(int
11450 65 72 70 2c 20 61 72 67 76 5b 32 5d 2c 20 26 64  erp, argv[2], &d
11460 62 2d 3e 6d 61 67 69 63 29 20 29 7b 0a 20 20 20  b->magic) ){.   
11470 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
11480 52 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  R;.  }.  return 
11490 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
114a0 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33   Usage:  sqlite3
114b0 5f 69 6e 74 65 72 72 75 70 74 20 20 44 42 20 0a  _interrupt  DB .
114c0 2a 2a 0a 2a 2a 20 54 72 69 67 67 65 72 20 61 6e  **.** Trigger an
114d0 20 69 6e 74 65 72 72 75 70 74 20 6f 6e 20 44 42   interrupt on DB
114e0 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
114f0 65 73 74 5f 69 6e 74 65 72 72 75 70 74 28 0a 20  est_interrupt(. 
11500 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
11510 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
11520 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
11530 61 72 67 63 2c 0a 20 20 63 68 61 72 20 2a 2a 61  argc,.  char **a
11540 72 67 76 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  rgv.){.  sqlite3
11550 20 2a 64 62 3b 0a 20 20 69 66 28 20 61 72 67 63   *db;.  if( argc
11560 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=2 ){.    Tcl_A
11570 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
11580 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
11590 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
115a0 2c 20 61 72 67 76 5b 30 5d 2c 20 22 20 44 42 22  , argv[0], " DB"
115b0 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
115c0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
115d0 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74    if( getDbPoint
115e0 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  er(interp, argv[
115f0 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72  1], &db) ) retur
11600 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 73  n TCL_ERROR;.  s
11610 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
11620 28 64 62 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  (db);.  return T
11630 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
11640 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f  Usage:  sqlite3_
11650 73 6c 65 65 70 20 6d 73 20 0a 2a 2a 0a 2a 2a 20  sleep ms .**.** 
11660 53 6c 65 65 70 20 66 6f 72 20 74 68 65 20 73 70  Sleep for the sp
11670 65 63 69 66 69 65 64 20 6e 75 6d 62 65 72 20 6f  ecified number o
11680 66 20 6d 73 2e 0a 2a 2f 0a 23 69 66 20 30 0a 73  f ms..*/.#if 0.s
11690 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 73  tatic int test_s
116a0 6c 65 65 70 28 0a 20 20 76 6f 69 64 20 2a 20 63  leep(.  void * c
116b0 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
116c0 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
116d0 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a 20 20 63  .  int argc,.  c
116e0 68 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20  har **argv.){.  
116f0 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69  sqlite3 *db;.  i
11700 66 28 20 61 72 67 63 21 3d 32 20 29 7b 0a 20 20  f( argc!=2 ){.  
11710 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
11720 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
11730 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
11740 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
11750 2c 20 22 20 6d 73 22 2c 20 30 29 3b 0a 20 20 20  , " ms", 0);.   
11760 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
11770 52 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 53 65 74  R;.  }.  Tcl_Set
11780 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
11790 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28  , Tcl_NewIntObj(
117a0 73 71 6c 69 74 65 33 5f 73 6c 65 65 70 28 61 74  sqlite3_sleep(at
117b0 6f 69 28 61 72 67 76 5b 31 5d 29 29 29 29 3b 0a  oi(argv[1]))));.
117c0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
117d0 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  .}.#endif../*.**
117e0 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 5f 64   Usage: sqlite_d
117f0 65 6c 65 74 65 5f 66 75 6e 63 74 69 6f 6e 20 44  elete_function D
11800 42 20 66 75 6e 63 74 69 6f 6e 2d 6e 61 6d 65 0a  B function-name.
11810 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68 65  **.** Delete the
11820 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 27   user function '
11830 66 75 6e 63 74 69 6f 6e 2d 6e 61 6d 65 27 20 66  function-name' f
11840 72 6f 6d 20 64 61 74 61 62 61 73 65 20 68 61 6e  rom database han
11850 64 6c 65 20 44 42 2e 20 49 74 0a 2a 2a 20 69 73  dle DB. It.** is
11860 20 61 73 73 75 6d 65 64 20 74 68 61 74 20 74 68   assumed that th
11870 65 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  e user function 
11880 77 61 73 20 63 72 65 61 74 65 64 20 61 73 20 55  was created as U
11890 54 46 38 2c 20 61 6e 79 20 6e 75 6d 62 65 72 20  TF8, any number 
118a0 6f 66 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 73 20  of.** arguments 
118b0 28 74 68 65 20 77 61 79 20 74 68 65 20 54 43 4c  (the way the TCL
118c0 20 69 6e 74 65 72 66 61 63 65 20 64 6f 65 73 20   interface does 
118d0 69 74 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  it)..*/.static i
118e0 6e 74 20 64 65 6c 65 74 65 5f 66 75 6e 63 74 69  nt delete_functi
118f0 6f 6e 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  on(.  void * cli
11900 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
11910 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
11920 20 69 6e 74 20 61 72 67 63 2c 0a 20 20 63 68 61   int argc,.  cha
11930 72 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 69 6e  r **argv.){.  in
11940 74 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 20  t rc;.  sqlite3 
11950 2a 64 62 3b 0a 20 20 69 66 28 20 61 72 67 63 21  *db;.  if( argc!
11960 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =3 ){.    Tcl_Ap
11970 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
11980 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
11990 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
119a0 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20   argv[0], .     
119b0 20 20 20 22 20 44 42 20 66 75 6e 63 74 69 6f 6e     " DB function
119c0 2d 6e 61 6d 65 22 2c 20 30 29 3b 0a 20 20 20 20  -name", 0);.    
119d0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
119e0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44  ;.  }.  if( getD
119f0 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  bPointer(interp,
11a00 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29   argv[1], &db) )
11a10 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
11a20 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  R;.  rc = sqlite
11a30 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
11a40 6e 28 64 62 2c 20 61 72 67 76 5b 32 5d 2c 20 2d  n(db, argv[2], -
11a50 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  1, SQLITE_UTF8, 
11a60 30 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 54  0, 0, 0, 0);.  T
11a70 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74  cl_SetResult(int
11a80 65 72 70 2c 20 28 63 68 61 72 20 2a 29 65 72 72  erp, (char *)err
11a90 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f  orName(rc), TCL_
11aa0 53 54 41 54 49 43 29 3b 0a 20 20 72 65 74 75 72  STATIC);.  retur
11ab0 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
11ac0 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65  ** Usage: sqlite
11ad0 5f 64 65 6c 65 74 65 5f 63 6f 6c 6c 61 74 69 6f  _delete_collatio
11ae0 6e 20 44 42 20 63 6f 6c 6c 61 74 69 6f 6e 2d 6e  n DB collation-n
11af0 61 6d 65 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65  ame.**.** Delete
11b00 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73   the collation s
11b10 65 71 75 65 6e 63 65 20 27 63 6f 6c 6c 61 74 69  equence 'collati
11b20 6f 6e 2d 6e 61 6d 65 27 20 66 72 6f 6d 20 64 61  on-name' from da
11b30 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 0a 2a  tabase handle .*
11b40 2a 20 44 42 2e 20 49 74 20 69 73 20 61 73 73 75  * DB. It is assu
11b50 6d 65 64 20 74 68 61 74 20 74 68 65 20 63 6f 6c  med that the col
11b60 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
11b70 77 61 73 20 63 72 65 61 74 65 64 20 61 73 20 55  was created as U
11b80 54 46 38 20 28 74 68 65 20 0a 2a 2a 20 77 61 79  TF8 (the .** way
11b90 20 74 68 65 20 54 43 4c 20 69 6e 74 65 72 66 61   the TCL interfa
11ba0 63 65 20 64 6f 65 73 20 69 74 29 2e 0a 2a 2f 0a  ce does it)..*/.
11bb0 73 74 61 74 69 63 20 69 6e 74 20 64 65 6c 65 74  static int delet
11bc0 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 0a 20 20 76  e_collation(.  v
11bd0 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
11be0 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
11bf0 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 61 72  interp,.  int ar
11c00 67 63 2c 0a 20 20 63 68 61 72 20 2a 2a 61 72 67  gc,.  char **arg
11c10 76 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  v.){.  int rc;. 
11c20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
11c30 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20  if( argc!=3 ){. 
11c40 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
11c50 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
11c60 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
11c70 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30  d be \"", argv[0
11c80 5d 2c 20 0a 20 20 20 20 20 20 20 20 22 20 44 42  ], .        " DB
11c90 20 66 75 6e 63 74 69 6f 6e 2d 6e 61 6d 65 22 2c   function-name",
11ca0 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
11cb0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
11cc0 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
11cd0 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31  r(interp, argv[1
11ce0 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e  ], &db) ) return
11cf0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63   TCL_ERROR;.  rc
11d00 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74   = sqlite3_creat
11d10 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20  e_collation(db, 
11d20 61 72 67 76 5b 32 5d 2c 20 53 51 4c 49 54 45 5f  argv[2], SQLITE_
11d30 55 54 46 38 2c 20 30 2c 20 30 29 3b 0a 20 20 54  UTF8, 0, 0);.  T
11d40 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74  cl_SetResult(int
11d50 65 72 70 2c 20 28 63 68 61 72 20 2a 29 65 72 72  erp, (char *)err
11d60 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f  orName(rc), TCL_
11d70 53 54 41 54 49 43 29 3b 0a 20 20 72 65 74 75 72  STATIC);.  retur
11d80 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
11d90 2a 2a 20 55 73 61 67 65 3a 20 20 74 63 6c 5f 76  ** Usage:  tcl_v
11da0 61 72 69 61 62 6c 65 5f 74 79 70 65 20 56 41 52  ariable_type VAR
11db0 49 41 42 4c 45 4e 41 4d 45 0a 2a 2a 0a 2a 2a 20  IABLENAME.**.** 
11dc0 52 65 74 75 72 6e 20 74 68 65 20 6e 61 6d 65 20  Return the name 
11dd0 6f 66 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  of the internal 
11de0 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 66  representation f
11df0 6f 72 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  or the.** value 
11e00 6f 66 20 74 68 65 20 67 69 76 65 6e 20 76 61 72  of the given var
11e10 69 61 62 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  iable..*/.static
11e20 20 69 6e 74 20 74 63 6c 5f 76 61 72 69 61 62 6c   int tcl_variabl
11e30 65 5f 74 79 70 65 28 0a 20 20 76 6f 69 64 20 2a  e_type(.  void *
11e40 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
11e50 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
11e60 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
11e70 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
11e80 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 54 63 6c 5f  objv[].){.  Tcl_
11e90 4f 62 6a 20 2a 70 56 61 72 3b 0a 20 20 69 66 28  Obj *pVar;.  if(
11ea0 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20   objc!=2 ){.    
11eb0 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73  Tcl_WrongNumArgs
11ec0 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76  (interp, 1, objv
11ed0 2c 20 22 56 41 52 49 41 42 4c 45 22 29 3b 0a 20  , "VARIABLE");. 
11ee0 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
11ef0 52 4f 52 3b 0a 20 20 7d 0a 20 20 70 56 61 72 20  ROR;.  }.  pVar 
11f00 3d 20 54 63 6c 5f 47 65 74 56 61 72 32 45 78 28  = Tcl_GetVar2Ex(
11f10 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
11f20 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
11f30 30 2c 20 54 43 4c 5f 4c 45 41 56 45 5f 45 52 52  0, TCL_LEAVE_ERR
11f40 5f 4d 53 47 29 3b 0a 20 20 69 66 28 20 70 56 61  _MSG);.  if( pVa
11f50 72 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 54 43  r==0 ) return TC
11f60 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 70  L_ERROR;.  if( p
11f70 56 61 72 2d 3e 74 79 70 65 50 74 72 20 29 7b 0a  Var->typePtr ){.
11f80 20 20 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65      Tcl_SetObjRe
11f90 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
11fa0 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 70 56  _NewStringObj(pV
11fb0 61 72 2d 3e 74 79 70 65 50 74 72 2d 3e 6e 61 6d  ar->typePtr->nam
11fc0 65 2c 20 2d 31 29 29 3b 0a 20 20 7d 0a 20 20 72  e, -1));.  }.  r
11fd0 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
11fe0 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  ./*.** This rout
11ff0 69 6e 65 20 73 65 74 73 20 65 6e 74 72 69 65 73  ine sets entries
12000 20 69 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 3a   in the global :
12010 3a 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 28  :sqlite_options(
12020 29 20 61 72 72 61 79 20 76 61 72 69 61 62 6c 65  ) array variable
12030 0a 2a 2a 20 61 63 63 6f 72 64 69 6e 67 20 74 6f  .** according to
12040 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d   the compile-tim
12050 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  e configuration 
12060 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  of the database.
12070 20 20 54 65 73 74 0a 2a 2a 20 70 72 6f 63 65 64    Test.** proced
12080 75 72 65 73 20 75 73 65 20 74 68 69 73 20 74 6f  ures use this to
12090 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 6e 20   determine when 
120a0 74 65 73 74 73 20 73 68 6f 75 6c 64 20 62 65 20  tests should be 
120b0 6f 6d 69 74 74 65 64 2e 0a 2a 2f 0a 73 74 61 74  omitted..*/.stat
120c0 69 63 20 76 6f 69 64 20 73 65 74 5f 6f 70 74 69  ic void set_opti
120d0 6f 6e 73 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ons(Tcl_Interp *
120e0 69 6e 74 65 72 70 29 7b 0a 23 69 66 64 65 66 20  interp){.#ifdef 
120f0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45  SQLITE_OMIT_ALTE
12100 52 54 41 42 4c 45 0a 20 20 54 63 6c 5f 53 65 74  RTABLE.  Tcl_Set
12110 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
12120 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
12130 61 6c 74 65 72 74 61 62 6c 65 22 2c 20 22 30 22  altertable", "0"
12140 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
12150 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
12160 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
12170 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
12180 2c 20 22 61 6c 74 65 72 74 61 62 6c 65 22 2c 20  , "altertable", 
12190 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
121a0 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
121b0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
121c0 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a  T_AUTHORIZATION.
121d0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
121e0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
121f0 74 69 6f 6e 73 22 2c 20 22 61 75 74 68 22 2c 20  tions", "auth", 
12200 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
12210 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
12220 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
12230 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
12240 6e 73 22 2c 20 22 61 75 74 68 22 2c 20 22 31 22  ns", "auth", "1"
12250 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
12260 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  Y);.#endif..#ifd
12270 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
12280 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 54  UTOINCREMENT.  T
12290 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
122a0 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
122b0 6e 73 22 2c 20 22 61 75 74 6f 69 6e 63 22 2c 20  ns", "autoinc", 
122c0 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
122d0 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
122e0 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
122f0 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
12300 6e 73 22 2c 20 22 61 75 74 6f 69 6e 63 22 2c 20  ns", "autoinc", 
12310 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
12320 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
12330 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
12340 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 54  T_AUTOVACUUM.  T
12350 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
12360 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
12370 6e 73 22 2c 20 22 61 75 74 6f 76 61 63 75 75 6d  ns", "autovacuum
12380 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
12390 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
123a0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
123b0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
123c0 74 69 6f 6e 73 22 2c 20 22 61 75 74 6f 76 61 63  tions", "autovac
123d0 75 75 6d 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47  uum", "1", TCL_G
123e0 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
123f0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
12400 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 20 2a 2f  IT_AUTOVACUUM */
12410 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
12420 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 41 55 54  LITE_DEFAULT_AUT
12430 4f 56 41 43 55 55 4d 29 20 7c 7c 20 53 51 4c 49  OVACUUM) || SQLI
12440 54 45 5f 44 45 46 41 55 4c 54 5f 41 55 54 4f 56  TE_DEFAULT_AUTOV
12450 41 43 55 55 4d 3d 3d 30 0a 20 20 54 63 6c 5f 53  ACUUM==0.  Tcl_S
12460 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 22 73  etVar2(interp,"s
12470 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 22  qlite_options","
12480 64 65 66 61 75 6c 74 5f 61 75 74 6f 76 61 63 75  default_autovacu
12490 75 6d 22 2c 22 30 22 2c 54 43 4c 5f 47 4c 4f 42  um","0",TCL_GLOB
124a0 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
124b0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
124c0 74 65 72 70 2c 22 73 71 6c 69 74 65 5f 6f 70 74  terp,"sqlite_opt
124d0 69 6f 6e 73 22 2c 22 64 65 66 61 75 6c 74 5f 61  ions","default_a
124e0 75 74 6f 76 61 63 75 75 6d 22 2c 22 31 22 2c 54  utovacuum","1",T
124f0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
12500 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
12510 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 4c 4f 42  SQLITE_OMIT_BLOB
12520 5f 4c 49 54 45 52 41 4c 0a 20 20 54 63 6c 5f 53  _LITERAL.  Tcl_S
12530 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
12540 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
12550 20 22 62 6c 6f 62 6c 69 74 22 2c 20 22 30 22 2c   "bloblit", "0",
12560 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
12570 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
12580 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
12590 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
125a0 20 22 62 6c 6f 62 6c 69 74 22 2c 20 22 31 22 2c   "bloblit", "1",
125b0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
125c0 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
125d0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f  f SQLITE_OMIT_CO
125e0 4d 50 4f 55 4e 44 5f 53 45 4c 45 43 54 0a 20 20  MPOUND_SELECT.  
125f0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
12600 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
12610 6f 6e 73 22 2c 20 22 63 6f 6d 70 6f 75 6e 64 22  ons", "compound"
12620 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
12630 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
12640 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
12650 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
12660 69 6f 6e 73 22 2c 20 22 63 6f 6d 70 6f 75 6e 64  ions", "compound
12670 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
12680 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
12690 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
126a0 4f 4d 49 54 5f 43 4f 4e 46 4c 49 43 54 5f 43 4c  OMIT_CONFLICT_CL
126b0 41 55 53 45 0a 20 20 54 63 6c 5f 53 65 74 56 61  AUSE.  Tcl_SetVa
126c0 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
126d0 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63 6f  te_options", "co
126e0 6e 66 6c 69 63 74 22 2c 20 22 30 22 2c 20 54 43  nflict", "0", TC
126f0 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
12700 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
12710 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
12720 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63  ite_options", "c
12730 6f 6e 66 6c 69 63 74 22 2c 20 22 31 22 2c 20 54  onflict", "1", T
12740 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
12750 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
12760 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 55 52 53  SQLITE_OMIT_CURS
12770 4f 52 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  OR.  Tcl_SetVar2
12780 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
12790 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63 75 72 73  _options", "curs
127a0 6f 72 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  or", "0", TCL_GL
127b0 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
127c0 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
127d0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
127e0 6f 70 74 69 6f 6e 73 22 2c 20 22 63 75 72 73 6f  options", "curso
127f0 72 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  r", "1", TCL_GLO
12800 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
12810 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
12820 5f 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46  _OMIT_DATETIME_F
12830 55 4e 43 53 0a 20 20 54 63 6c 5f 53 65 74 56 61  UNCS.  Tcl_SetVa
12840 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
12850 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 64 61  te_options", "da
12860 74 65 74 69 6d 65 22 2c 20 22 30 22 2c 20 54 43  tetime", "0", TC
12870 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
12880 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
12890 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
128a0 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 64  ite_options", "d
128b0 61 74 65 74 69 6d 65 22 2c 20 22 31 22 2c 20 54  atetime", "1", T
128c0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
128d0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
128e0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c  SQLITE_OMIT_EXPL
128f0 41 49 4e 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  AIN.  Tcl_SetVar
12900 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
12910 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 65 78 70  e_options", "exp
12920 6c 61 69 6e 22 2c 20 22 30 22 2c 20 54 43 4c 5f  lain", "0", TCL_
12930 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
12940 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
12950 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
12960 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 65 78 70  e_options", "exp
12970 6c 61 69 6e 22 2c 20 22 31 22 2c 20 54 43 4c 5f  lain", "1", TCL_
12980 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
12990 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
129a0 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
129b0 47 5f 50 4f 49 4e 54 0a 20 20 54 63 6c 5f 53 65  G_POINT.  Tcl_Se
129c0 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
129d0 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
129e0 22 66 6c 6f 61 74 69 6e 67 70 6f 69 6e 74 22 2c  "floatingpoint",
129f0 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
12a00 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
12a10 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
12a20 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
12a30 6f 6e 73 22 2c 20 22 66 6c 6f 61 74 69 6e 67 70  ons", "floatingp
12a40 6f 69 6e 74 22 2c 20 22 31 22 2c 20 54 43 4c 5f  oint", "1", TCL_
12a50 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
12a60 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
12a70 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
12a80 5f 4b 45 59 0a 20 20 54 63 6c 5f 53 65 74 56 61  _KEY.  Tcl_SetVa
12a90 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
12aa0 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 66 6f  te_options", "fo
12ab0 72 65 69 67 6e 6b 65 79 22 2c 20 22 30 22 2c 20  reignkey", "0", 
12ac0 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
12ad0 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
12ae0 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
12af0 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
12b00 22 66 6f 72 65 69 67 6e 6b 65 79 22 2c 20 22 31  "foreignkey", "1
12b10 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
12b20 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
12b30 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
12b40 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a  INTEGRITY_CHECK.
12b50 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
12b60 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
12b70 74 69 6f 6e 73 22 2c 20 22 69 6e 74 65 67 72 69  tions", "integri
12b80 74 79 63 6b 22 2c 20 22 30 22 2c 20 54 43 4c 5f  tyck", "0", TCL_
12b90 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
12ba0 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
12bb0 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
12bc0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 69 6e 74  e_options", "int
12bd0 65 67 72 69 74 79 63 6b 22 2c 20 22 31 22 2c 20  egrityck", "1", 
12be0 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
12bf0 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
12c00 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4d 45 4d   SQLITE_OMIT_MEM
12c10 4f 52 59 44 42 0a 20 20 54 63 6c 5f 53 65 74 56  ORYDB.  Tcl_SetV
12c20 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
12c30 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 6d  ite_options", "m
12c40 65 6d 6f 72 79 64 62 22 2c 20 22 30 22 2c 20 54  emorydb", "0", T
12c50 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
12c60 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
12c70 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
12c80 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
12c90 6d 65 6d 6f 72 79 64 62 22 2c 20 22 31 22 2c 20  memorydb", "1", 
12ca0 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
12cb0 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
12cc0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
12cd0 45 52 5f 50 52 41 47 4d 41 53 0a 20 20 54 63 6c  ER_PRAGMAS.  Tcl
12ce0 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
12cf0 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
12d00 22 2c 20 22 70 61 67 65 72 5f 70 72 61 67 6d 61  ", "pager_pragma
12d10 73 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  s", "0", TCL_GLO
12d20 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
12d30 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
12d40 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
12d50 70 74 69 6f 6e 73 22 2c 20 22 70 61 67 65 72 5f  ptions", "pager_
12d60 70 72 61 67 6d 61 73 22 2c 20 22 31 22 2c 20 54  pragmas", "1", T
12d70 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
12d80 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
12d90 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47  SQLITE_OMIT_PRAG
12da0 4d 41 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  MA.  Tcl_SetVar2
12db0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
12dc0 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 70 72 61 67  _options", "prag
12dd0 6d 61 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  ma", "0", TCL_GL
12de0 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 20 20 54 63  OBAL_ONLY);.  Tc
12df0 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
12e00 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
12e10 73 22 2c 20 22 69 6e 74 65 67 72 69 74 79 63 6b  s", "integrityck
12e20 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
12e30 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
12e40 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
12e50 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
12e60 74 69 6f 6e 73 22 2c 20 22 70 72 61 67 6d 61 22  tions", "pragma"
12e70 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
12e80 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
12e90 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
12ea0 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c  MIT_PROGRESS_CAL
12eb0 4c 42 41 43 4b 0a 20 20 54 63 6c 5f 53 65 74 56  LBACK.  Tcl_SetV
12ec0 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
12ed0 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 70  ite_options", "p
12ee0 72 6f 67 72 65 73 73 22 2c 20 22 30 22 2c 20 54  rogress", "0", T
12ef0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
12f00 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
12f10 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
12f20 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
12f30 70 72 6f 67 72 65 73 73 22 2c 20 22 31 22 2c 20  progress", "1", 
12f40 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
12f50 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
12f60 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 52 45 49   SQLITE_OMIT_REI
12f70 4e 44 45 58 0a 20 20 54 63 6c 5f 53 65 74 56 61  NDEX.  Tcl_SetVa
12f80 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
12f90 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 72 65  te_options", "re
12fa0 69 6e 64 65 78 22 2c 20 22 30 22 2c 20 54 43 4c  index", "0", TCL
12fb0 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
12fc0 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
12fd0 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
12fe0 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 72 65  te_options", "re
12ff0 69 6e 64 65 78 22 2c 20 22 31 22 2c 20 54 43 4c  index", "1", TCL
13000 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
13010 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
13020 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41  LITE_OMIT_SCHEMA
13030 5f 50 52 41 47 4d 41 53 0a 20 20 54 63 6c 5f 53  _PRAGMAS.  Tcl_S
13040 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
13050 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
13060 20 22 73 63 68 65 6d 61 5f 70 72 61 67 6d 61 73   "schema_pragmas
13070 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
13080 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
13090 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
130a0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
130b0 74 69 6f 6e 73 22 2c 20 22 73 63 68 65 6d 61 5f  tions", "schema_
130c0 70 72 61 67 6d 61 73 22 2c 20 22 31 22 2c 20 54  pragmas", "1", T
130d0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
130e0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
130f0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45  SQLITE_OMIT_SCHE
13100 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d  MA_VERSION_PRAGM
13110 41 53 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  AS.  Tcl_SetVar2
13120 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
13130 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 73 63 68 65  _options", "sche
13140 6d 61 5f 76 65 72 73 69 6f 6e 22 2c 20 22 30 22  ma_version", "0"
13150 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
13160 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
13170 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
13180 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
13190 2c 20 22 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  , "schema_versio
131a0 6e 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  n", "1", TCL_GLO
131b0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
131c0 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
131d0 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 0a 20  _OMIT_SUBQUERY. 
131e0 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
131f0 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
13200 69 6f 6e 73 22 2c 20 22 73 75 62 71 75 65 72 79  ions", "subquery
13210 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
13220 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
13230 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
13240 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
13250 74 69 6f 6e 73 22 2c 20 22 73 75 62 71 75 65 72  tions", "subquer
13260 79 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  y", "1", TCL_GLO
13270 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
13280 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
13290 5f 4f 4d 49 54 5f 54 43 4c 5f 56 41 52 49 41 42  _OMIT_TCL_VARIAB
132a0 4c 45 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  LE.  Tcl_SetVar2
132b0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
132c0 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 74 63 6c 76  _options", "tclv
132d0 61 72 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  ar", "0", TCL_GL
132e0 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
132f0 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
13300 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
13310 6f 70 74 69 6f 6e 73 22 2c 20 22 74 63 6c 76 61  options", "tclva
13320 72 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  r", "1", TCL_GLO
13330 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
13340 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 54  f..#if defined(T
13350 48 52 45 41 44 53 41 46 45 29 20 26 26 20 54 48  HREADSAFE) && TH
13360 52 45 41 44 53 41 46 45 0a 20 20 54 63 6c 5f 53  READSAFE.  Tcl_S
13370 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
13380 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
13390 20 22 74 68 72 65 61 64 73 61 66 65 22 2c 20 22   "threadsafe", "
133a0 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
133b0 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
133c0 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
133d0 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
133e0 73 22 2c 20 22 74 68 72 65 61 64 73 61 66 65 22  s", "threadsafe"
133f0 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
13400 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
13410 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
13420 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20 54 63  MIT_TRIGGER.  Tc
13430 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
13440 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
13450 73 22 2c 20 22 74 72 69 67 67 65 72 22 2c 20 22  s", "trigger", "
13460 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
13470 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
13480 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
13490 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
134a0 73 22 2c 20 22 74 72 69 67 67 65 72 22 2c 20 22  s", "trigger", "
134b0 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
134c0 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
134d0 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
134e0 5f 55 54 46 31 36 0a 20 20 54 63 6c 5f 53 65 74  _UTF16.  Tcl_Set
134f0 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
13500 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
13510 75 74 66 31 36 22 2c 20 22 30 22 2c 20 54 43 4c  utf16", "0", TCL
13520 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
13530 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
13540 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
13550 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 75 74  te_options", "ut
13560 66 31 36 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47  f16", "1", TCL_G
13570 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
13580 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
13590 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 0a 20  TE_OMIT_VACUUM. 
135a0 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
135b0 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
135c0 69 6f 6e 73 22 2c 20 22 76 61 63 75 75 6d 22 2c  ions", "vacuum",
135d0 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
135e0 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
135f0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
13600 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
13610 6f 6e 73 22 2c 20 22 76 61 63 75 75 6d 22 2c 20  ons", "vacuum", 
13620 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
13630 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
13640 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
13650 54 5f 56 49 45 57 0a 20 20 54 63 6c 5f 53 65 74  T_VIEW.  Tcl_Set
13660 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
13670 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
13680 76 69 65 77 22 2c 20 22 30 22 2c 20 54 43 4c 5f  view", "0", TCL_
13690 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
136a0 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
136b0 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
136c0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 76 69 65  e_options", "vie
136d0 77 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  w", "1", TCL_GLO
136e0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
136f0 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73  f.}../*.** Regis
13700 74 65 72 20 63 6f 6d 6d 61 6e 64 73 20 77 69 74  ter commands wit
13710 68 20 74 68 65 20 54 43 4c 20 69 6e 74 65 72 70  h the TCL interp
13720 72 65 74 65 72 2e 0a 2a 2f 0a 69 6e 74 20 53 71  reter..*/.int Sq
13730 6c 69 74 65 74 65 73 74 31 5f 49 6e 69 74 28 54  litetest1_Init(T
13740 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
13750 70 29 7b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74  p){.  extern int
13760 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
13770 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20  count;.  extern 
13780 69 6e 74 20 73 71 6c 69 74 65 33 5f 69 6e 74 65  int sqlite3_inte
13790 72 72 75 70 74 5f 63 6f 75 6e 74 3b 0a 20 20 65  rrupt_count;.  e
137a0 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
137b0 33 5f 6f 70 65 6e 5f 66 69 6c 65 5f 63 6f 75 6e  3_open_file_coun
137c0 74 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20  t;.  extern int 
137d0 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75  sqlite3_sort_cou
137e0 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74  nt;.  extern int
137f0 20 73 71 6c 69 74 65 33 5f 63 75 72 72 65 6e 74   sqlite3_current
13800 5f 74 69 6d 65 3b 0a 20 20 73 74 61 74 69 63 20  _time;.  static 
13810 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 63 68  struct {.     ch
13820 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20 20  ar *zName;.     
13830 54 63 6c 5f 43 6d 64 50 72 6f 63 20 2a 78 50 72  Tcl_CmdProc *xPr
13840 6f 63 3b 0a 20 20 7d 20 61 43 6d 64 5b 5d 20 3d  oc;.  } aCmd[] =
13850 20 7b 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74   {.     { "sqlit
13860 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 22 2c  e3_mprintf_int",
13870 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f             (Tcl_
13880 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33  CmdProc*)sqlite3
13890 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 20 20 20 20  _mprintf_int    
138a0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
138b0 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 36 34  e3_mprintf_int64
138c0 22 2c 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f  ",         (Tcl_
138d0 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33  CmdProc*)sqlite3
138e0 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 36 34 20 20  _mprintf_int64  
138f0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
13900 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72 22 2c  e3_mprintf_str",
13910 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f             (Tcl_
13920 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33  CmdProc*)sqlite3
13930 5f 6d 70 72 69 6e 74 66 5f 73 74 72 20 20 20 20  _mprintf_str    
13940 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
13950 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72 6f 6e  e3_mprintf_stron
13960 6c 79 22 2c 20 20 20 20 20 20 20 28 54 63 6c 5f  ly",       (Tcl_
13970 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33  CmdProc*)sqlite3
13980 5f 6d 70 72 69 6e 74 66 5f 73 74 72 6f 6e 6c 79  _mprintf_stronly
13990 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
139a0 65 33 5f 6d 70 72 69 6e 74 66 5f 64 6f 75 62 6c  e3_mprintf_doubl
139b0 65 22 2c 20 20 20 20 20 20 20 20 28 54 63 6c 5f  e",        (Tcl_
139c0 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33  CmdProc*)sqlite3
139d0 5f 6d 70 72 69 6e 74 66 5f 64 6f 75 62 6c 65 20  _mprintf_double 
139e0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
139f0 65 33 5f 6d 70 72 69 6e 74 66 5f 73 63 61 6c 65  e3_mprintf_scale
13a00 64 22 2c 20 20 20 20 20 20 20 20 28 54 63 6c 5f  d",        (Tcl_
13a10 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33  CmdProc*)sqlite3
13a20 5f 6d 70 72 69 6e 74 66 5f 73 63 61 6c 65 64 20  _mprintf_scaled 
13a30 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
13a40 65 33 5f 6d 70 72 69 6e 74 66 5f 7a 5f 74 65 73  e3_mprintf_z_tes
13a50 74 22 2c 20 20 20 20 20 20 20 20 28 54 63 6c 5f  t",        (Tcl_
13a60 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 6d 70  CmdProc*)test_mp
13a70 72 69 6e 74 66 5f 7a 20 20 20 20 20 20 20 20 7d  rintf_z        }
13a80 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
13a90 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  3_last_insert_ro
13aa0 77 69 64 22 2c 20 20 20 20 20 28 54 63 6c 5f 43  wid",     (Tcl_C
13ab0 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 6c 61 73  mdProc*)test_las
13ac0 74 5f 72 6f 77 69 64 20 20 20 20 20 20 20 7d 2c  t_rowid       },
13ad0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
13ae0 5f 65 78 65 63 5f 70 72 69 6e 74 66 22 2c 20 20  _exec_printf",  
13af0 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d           (Tcl_Cm
13b00 64 50 72 6f 63 2a 29 74 65 73 74 5f 65 78 65 63  dProc*)test_exec
13b10 5f 70 72 69 6e 74 66 20 20 20 20 20 20 7d 2c 0a  _printf      },.
13b20 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
13b30 67 65 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74 66  get_table_printf
13b40 22 2c 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64  ",      (Tcl_Cmd
13b50 50 72 6f 63 2a 29 74 65 73 74 5f 67 65 74 5f 74  Proc*)test_get_t
13b60 61 62 6c 65 5f 70 72 69 6e 74 66 20 7d 2c 0a 20  able_printf },. 
13b70 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63      { "sqlite3_c
13b80 6c 6f 73 65 22 2c 20 20 20 20 20 20 20 20 20 20  lose",          
13b90 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
13ba0 72 6f 63 2a 29 73 71 6c 69 74 65 5f 74 65 73 74  roc*)sqlite_test
13bb0 5f 63 6c 6f 73 65 20 20 20 20 20 7d 2c 0a 20 20  _close     },.  
13bc0 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 72     { "sqlite3_cr
13bd0 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 22 2c 20  eate_function", 
13be0 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72        (Tcl_CmdPr
13bf0 6f 63 2a 29 74 65 73 74 5f 63 72 65 61 74 65 5f  oc*)test_create_
13c00 66 75 6e 63 74 69 6f 6e 20 20 7d 2c 0a 20 20 20  function  },.   
13c10 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 72 65    { "sqlite3_cre
13c20 61 74 65 5f 61 67 67 72 65 67 61 74 65 22 2c 20  ate_aggregate", 
13c30 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f       (Tcl_CmdPro
13c40 63 2a 29 74 65 73 74 5f 63 72 65 61 74 65 5f 61  c*)test_create_a
13c50 67 67 72 65 67 61 74 65 20 7d 2c 0a 20 20 20 20  ggregate },.    
13c60 20 7b 20 22 73 71 6c 69 74 65 5f 72 65 67 69 73   { "sqlite_regis
13c70 74 65 72 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f  ter_test_functio
13c80 6e 22 2c 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63  n", (Tcl_CmdProc
13c90 2a 29 74 65 73 74 5f 72 65 67 69 73 74 65 72 5f  *)test_register_
13ca0 66 75 6e 63 20 20 20 20 7d 2c 0a 20 20 20 20 20  func    },.     
13cb0 7b 20 22 73 71 6c 69 74 65 5f 61 62 6f 72 74 22  { "sqlite_abort"
13cc0 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
13cd0 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
13ce0 29 73 71 6c 69 74 65 5f 61 62 6f 72 74 20 20 20  )sqlite_abort   
13cf0 20 20 20 20 20 20 20 7d 2c 0a 23 69 66 64 65 66         },.#ifdef
13d00 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
13d10 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 5f  .     { "sqlite_
13d20 6d 61 6c 6c 6f 63 5f 66 61 69 6c 22 2c 20 20 20  malloc_fail",   
13d30 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d           (Tcl_Cm
13d40 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 5f 6d 61  dProc*)sqlite_ma
13d50 6c 6c 6f 63 5f 66 61 69 6c 20 20 20 20 7d 2c 0a  lloc_fail    },.
13d60 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 5f 6d       { "sqlite_m
13d70 61 6c 6c 6f 63 5f 73 74 61 74 22 2c 20 20 20 20  alloc_stat",    
13d80 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64          (Tcl_Cmd
13d90 50 72 6f 63 2a 29 73 71 6c 69 74 65 5f 6d 61 6c  Proc*)sqlite_mal
13da0 6c 6f 63 5f 73 74 61 74 20 20 20 20 7d 2c 0a 23  loc_stat    },.#
13db0 65 6e 64 69 66 0a 20 20 20 20 20 7b 20 22 73 71  endif.     { "sq
13dc0 6c 69 74 65 5f 62 69 6e 64 22 2c 20 20 20 20 20  lite_bind",     
13dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54                (T
13de0 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74  cl_CmdProc*)test
13df0 5f 62 69 6e 64 20 20 20 20 20 20 20 20 20 20 20  _bind           
13e00 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 62 72 65    },.     { "bre
13e10 61 6b 70 6f 69 6e 74 22 2c 20 20 20 20 20 20 20  akpoint",       
13e20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63               (Tc
13e30 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f  l_CmdProc*)test_
13e40 62 72 65 61 6b 70 6f 69 6e 74 20 20 20 20 20 20  breakpoint      
13e50 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
13e60 74 65 33 5f 6b 65 79 22 2c 20 20 20 20 20 20 20  te3_key",       
13e70 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c              (Tcl
13e80 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 6b  _CmdProc*)test_k
13e90 65 79 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ey              
13ea0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
13eb0 65 33 5f 72 65 6b 65 79 22 2c 20 20 20 20 20 20  e3_rekey",      
13ec0 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f             (Tcl_
13ed0 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 72 65  CmdProc*)test_re
13ee0 6b 65 79 20 20 20 20 20 20 20 20 20 20 20 20 7d  key            }
13ef0 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
13f00 5f 73 65 74 5f 6d 61 67 69 63 22 2c 20 20 20 20  _set_magic",    
13f10 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43            (Tcl_C
13f20 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 5f 73  mdProc*)sqlite_s
13f30 65 74 5f 6d 61 67 69 63 20 20 20 20 20 20 7d 2c  et_magic      },
13f40 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
13f50 5f 69 6e 74 65 72 72 75 70 74 22 2c 20 20 20 20  _interrupt",    
13f60 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d           (Tcl_Cm
13f70 64 50 72 6f 63 2a 29 74 65 73 74 5f 69 6e 74 65  dProc*)test_inte
13f80 72 72 75 70 74 20 20 20 20 20 20 20 20 7d 2c 0a  rrupt        },.
13f90 23 69 66 20 30 0a 20 20 20 20 20 7b 20 22 73 71  #if 0.     { "sq
13fa0 6c 69 74 65 33 5f 73 6c 65 65 70 22 2c 20 20 20  lite3_sleep",   
13fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54                (T
13fc0 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74  cl_CmdProc*)test
13fd0 5f 73 6c 65 65 70 20 20 20 20 20 20 20 20 20 20  _sleep          
13fe0 20 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 20 20    },.#endif.    
13ff0 20 7b 20 22 73 71 6c 69 74 65 5f 64 65 6c 65 74   { "sqlite_delet
14000 65 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 20 20 20  e_function",    
14010 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
14020 29 64 65 6c 65 74 65 5f 66 75 6e 63 74 69 6f 6e  )delete_function
14030 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20          },.     
14040 7b 20 22 73 71 6c 69 74 65 5f 64 65 6c 65 74 65  { "sqlite_delete
14050 5f 63 6f 6c 6c 61 74 69 6f 6e 22 2c 20 20 20 20  _collation",    
14060 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29    (Tcl_CmdProc*)
14070 64 65 6c 65 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e  delete_collation
14080 20 20 20 20 20 20 20 7d 0a 20 20 7d 3b 0a 20 20         }.  };.  
14090 73 74 61 74 69 63 20 73 74 72 75 63 74 20 7b 0a  static struct {.
140a0 20 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65       char *zName
140b0 3b 0a 20 20 20 20 20 54 63 6c 5f 4f 62 6a 43 6d  ;.     Tcl_ObjCm
140c0 64 50 72 6f 63 20 2a 78 50 72 6f 63 3b 0a 20 20  dProc *xProc;.  
140d0 20 20 20 76 6f 69 64 20 2a 63 6c 69 65 6e 74 44     void *clientD
140e0 61 74 61 3b 0a 20 20 7d 20 61 4f 62 6a 43 6d 64  ata;.  } aObjCmd
140f0 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 7b 20 22 73  [] = {.     { "s
14100 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 22  qlite3_bind_int"
14110 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  ,              t
14120 65 73 74 5f 62 69 6e 64 5f 69 6e 74 2c 20 20 20  est_bind_int,   
14130 20 20 20 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22     0 },.     { "
14140 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
14150 36 34 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  64",            
14160 74 65 73 74 5f 62 69 6e 64 5f 69 6e 74 36 34 2c  test_bind_int64,
14170 20 20 20 20 30 20 7d 2c 0a 20 20 20 20 20 7b 20      0 },.     { 
14180 22 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f  "sqlite3_bind_do
14190 75 62 6c 65 22 2c 20 20 20 20 20 20 20 20 20 20  uble",          
141a0 20 74 65 73 74 5f 62 69 6e 64 5f 64 6f 75 62 6c   test_bind_doubl
141b0 65 2c 20 20 20 30 20 7d 2c 0a 20 20 20 20 20 7b  e,   0 },.     {
141c0 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e   "sqlite3_bind_n
141d0 75 6c 6c 22 2c 20 20 20 20 20 20 20 20 20 20 20  ull",           
141e0 20 20 74 65 73 74 5f 62 69 6e 64 5f 6e 75 6c 6c    test_bind_null
141f0 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20       ,0 },.     
14200 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  { "sqlite3_bind_
14210 74 65 78 74 22 2c 20 20 20 20 20 20 20 20 20 20  text",          
14220 20 20 20 74 65 73 74 5f 62 69 6e 64 5f 74 65 78     test_bind_tex
14230 74 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20  t     ,0 },.    
14240 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64   { "sqlite3_bind
14250 5f 74 65 78 74 31 36 22 2c 20 20 20 20 20 20 20  _text16",       
14260 20 20 20 20 74 65 73 74 5f 62 69 6e 64 5f 74 65      test_bind_te
14270 78 74 31 36 20 20 20 2c 30 20 7d 2c 0a 20 20 20  xt16   ,0 },.   
14280 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e    { "sqlite3_bin
14290 64 5f 62 6c 6f 62 22 2c 20 20 20 20 20 20 20 20  d_blob",        
142a0 20 20 20 20 20 74 65 73 74 5f 62 69 6e 64 5f 62       test_bind_b
142b0 6c 6f 62 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20  lob     ,0 },.  
142c0 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69     { "sqlite3_bi
142d0 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f 75  nd_parameter_cou
142e0 6e 74 22 2c 20 20 74 65 73 74 5f 62 69 6e 64 5f  nt",  test_bind_
142f0 70 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 2c  parameter_count,
14300 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c   0},.     { "sql
14310 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
14320 74 65 72 5f 6e 61 6d 65 22 2c 20 20 20 74 65 73  ter_name",   tes
14330 74 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  t_bind_parameter
14340 5f 6e 61 6d 65 2c 20 20 30 7d 2c 0a 20 20 20 20  _name,  0},.    
14350 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64   { "sqlite3_bind
14360 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78  _parameter_index
14370 22 2c 20 20 74 65 73 74 5f 62 69 6e 64 5f 70 61  ",  test_bind_pa
14380 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 2c 20 30  rameter_index, 0
14390 7d 2c 0a 23 69 66 20 30 0a 20 20 20 20 20 7b 20  },.#if 0.     { 
143a0 22 73 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f 62  "sqlite3_clear_b
143b0 69 6e 64 69 6e 67 73 22 2c 20 20 20 20 20 20 20  indings",       
143c0 20 74 65 73 74 5f 63 6c 65 61 72 5f 62 69 6e 64   test_clear_bind
143d0 69 6e 67 73 2c 20 30 7d 2c 0a 23 65 6e 64 69 66  ings, 0},.#endif
143e0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
143f0 5f 65 72 72 63 6f 64 65 22 2c 20 20 20 20 20 20  _errcode",      
14400 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 65 72           test_er
14410 72 63 6f 64 65 20 20 20 20 20 20 20 2c 30 20 7d  rcode       ,0 }
14420 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
14430 33 5f 65 72 72 6d 73 67 22 2c 20 20 20 20 20 20  3_errmsg",      
14440 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 65            test_e
14450 72 72 6d 73 67 20 20 20 20 20 20 20 20 2c 30 20  rrmsg        ,0 
14460 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
14470 65 33 5f 65 72 72 6d 73 67 31 36 22 2c 20 20 20  e3_errmsg16",   
14480 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f             test_
14490 65 72 72 6d 73 67 31 36 20 20 20 20 20 20 2c 30  errmsg16      ,0
144a0 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
144b0 74 65 33 5f 6f 70 65 6e 22 2c 20 20 20 20 20 20  te3_open",      
144c0 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
144d0 5f 6f 70 65 6e 20 20 20 20 20 20 20 20 20 20 2c  _open          ,
144e0 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
144f0 69 74 65 33 5f 6f 70 65 6e 31 36 22 2c 20 20 20  ite3_open16",   
14500 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73               tes
14510 74 5f 6f 70 65 6e 31 36 20 20 20 20 20 20 20 20  t_open16        
14520 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  ,0 },.     { "sq
14530 6c 69 74 65 33 5f 63 6f 6d 70 6c 65 74 65 31 36  lite3_complete16
14540 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 74 65  ",            te
14550 73 74 5f 63 6f 6d 70 6c 65 74 65 31 36 20 20 20  st_complete16   
14560 20 2c 30 20 7d 2c 0a 0a 20 20 20 20 20 7b 20 22   ,0 },..     { "
14570 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 22  sqlite3_prepare"
14580 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
14590 74 65 73 74 5f 70 72 65 70 61 72 65 20 20 20 20  test_prepare    
145a0 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20     ,0 },.     { 
145b0 22 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  "sqlite3_prepare
145c0 31 36 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  16",            
145d0 20 74 65 73 74 5f 70 72 65 70 61 72 65 31 36 20   test_prepare16 
145e0 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b      ,0 },.     {
145f0 20 22 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69   "sqlite3_finali
14600 7a 65 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  ze",            
14610 20 20 74 65 73 74 5f 66 69 6e 61 6c 69 7a 65 20    test_finalize 
14620 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20       ,0 },.     
14630 7b 20 22 73 71 6c 69 74 65 33 5f 72 65 73 65 74  { "sqlite3_reset
14640 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ",              
14650 20 20 20 74 65 73 74 5f 72 65 73 65 74 20 20 20     test_reset   
14660 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20        ,0 },.    
14670 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 78 70 69   { "sqlite3_expi
14680 72 65 64 22 2c 20 20 20 20 20 20 20 20 20 20 20  red",           
14690 20 20 20 20 74 65 73 74 5f 65 78 70 69 72 65 64      test_expired
146a0 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20         ,0 },.   
146b0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 68 61    { "sqlite3_cha
146c0 6e 67 65 73 22 2c 20 20 20 20 20 20 20 20 20 20  nges",          
146d0 20 20 20 20 20 74 65 73 74 5f 63 68 61 6e 67 65       test_change
146e0 73 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20  s       ,0 },.  
146f0 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 73 74     { "sqlite3_st
14700 65 70 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  ep",            
14710 20 20 20 20 20 20 74 65 73 74 5f 73 74 65 70 20        test_step 
14720 20 20 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 0a           ,0 },..
14730 20 20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f       /* sqlite3_
14740 63 6f 6c 75 6d 6e 5f 2a 28 29 20 41 50 49 20 2a  column_*() API *
14750 2f 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  /.     { "sqlite
14760 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 22 2c  3_column_count",
14770 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 63            test_c
14780 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 20 2c 30 20  olumn_count  ,0 
14790 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
147a0 65 33 5f 64 61 74 61 5f 63 6f 75 6e 74 22 2c 20  e3_data_count", 
147b0 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f             test_
147c0 64 61 74 61 5f 63 6f 75 6e 74 20 20 20 20 2c 30  data_count    ,0
147d0 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
147e0 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 22  te3_column_type"
147f0 2c 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74  ,           test
14800 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 20 20 20 2c  _column_type   ,
14810 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
14820 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62  ite3_column_blob
14830 22 2c 20 20 20 20 20 20 20 20 20 20 20 74 65 73  ",           tes
14840 74 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 20 20 20  t_column_blob   
14850 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  ,0 },.     { "sq
14860 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75  lite3_column_dou
14870 62 6c 65 22 2c 20 20 20 20 20 20 20 20 20 74 65  ble",         te
14880 73 74 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65  st_column_double
14890 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73   ,0 },.     { "s
148a0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
148b0 74 36 34 22 2c 20 20 20 20 20 20 20 20 20 20 74  t64",          t
148c0 65 73 74 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34  est_column_int64
148d0 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22    ,0 },.     { "
148e0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
148f0 65 78 74 22 2c 20 20 20 20 20 20 20 74 65 73 74  ext",       test
14900 5f 73 74 6d 74 5f 75 74 66 38 2c 20 20 73 71 6c  _stmt_utf8,  sql
14910 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
14920 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20        },.     { 
14930 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  "sqlite3_column_
14940 64 65 63 6c 74 79 70 65 22 2c 20 20 20 74 65 73  decltype",   tes
14950 74 5f 73 74 6d 74 5f 75 74 66 38 2c 20 20 73 71  t_stmt_utf8,  sq
14960 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63  lite3_column_dec
14970 6c 74 79 70 65 20 20 7d 2c 0a 20 20 20 20 20 7b  ltype  },.     {
14980 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   "sqlite3_column
14990 5f 6e 61 6d 65 22 2c 20 20 20 20 20 20 20 74 65  _name",       te
149a0 73 74 5f 73 74 6d 74 5f 75 74 66 38 2c 20 20 73  st_stmt_utf8,  s
149b0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
149c0 6d 65 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20  me      },.     
149d0 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  { "sqlite3_colum
149e0 6e 5f 69 6e 74 22 2c 20 20 20 20 20 20 20 20 74  n_int",        t
149f0 65 73 74 5f 73 74 6d 74 5f 69 6e 74 2c 20 20 20  est_stmt_int,   
14a00 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
14a10 6e 74 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20  nt       },.    
14a20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75   { "sqlite3_colu
14a30 6d 6e 5f 62 79 74 65 73 22 2c 20 20 20 20 20 20  mn_bytes",      
14a40 74 65 73 74 5f 73 74 6d 74 5f 69 6e 74 2c 20 20  test_stmt_int,  
14a50 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
14a60 62 79 74 65 73 20 20 20 20 20 7d 2c 0a 23 69 66  bytes     },.#if
14a70 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
14a80 5f 55 54 46 31 36 0a 20 20 20 20 20 7b 20 22 73  _UTF16.     { "s
14a90 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79  qlite3_column_by
14aa0 74 65 73 31 36 22 2c 20 20 20 20 74 65 73 74 5f  tes16",    test_
14ab0 73 74 6d 74 5f 69 6e 74 2c 20 20 20 73 71 6c 69  stmt_int,   sqli
14ac0 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73  te3_column_bytes
14ad0 31 36 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22  16   },.     { "
14ae0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
14af0 65 78 74 31 36 22 2c 20 20 20 20 20 74 65 73 74  ext16",     test
14b00 5f 73 74 6d 74 5f 75 74 66 31 36 2c 20 73 71 6c  _stmt_utf16, sql
14b10 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
14b20 31 36 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20  16    },.     { 
14b30 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  "sqlite3_column_
14b40 64 65 63 6c 74 79 70 65 31 36 22 2c 20 74 65 73  decltype16", tes
14b50 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c 20 73 71  t_stmt_utf16, sq
14b60 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63  lite3_column_dec
14b70 6c 74 79 70 65 31 36 7d 2c 0a 20 20 20 20 20 7b  ltype16},.     {
14b80 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   "sqlite3_column
14b90 5f 6e 61 6d 65 31 36 22 2c 20 20 20 20 20 74 65  _name16",     te
14ba0 73 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c 20 73  st_stmt_utf16, s
14bb0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
14bc0 6d 65 31 36 20 20 20 20 7d 2c 0a 23 65 6e 64 69  me16    },.#endi
14bd0 66 0a 0a 20 20 20 20 20 2f 2a 20 46 75 6e 63 74  f..     /* Funct
14be0 69 6f 6e 73 20 66 72 6f 6d 20 6f 73 2e 68 20 2a  ions from os.h *
14bf0 2f 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  /.     { "sqlite
14c00 33 4f 73 4f 70 65 6e 52 65 61 64 57 72 69 74 65  3OsOpenReadWrite
14c10 22 2c 74 65 73 74 5f 73 71 6c 69 74 65 33 4f 73  ",test_sqlite3Os
14c20 4f 70 65 6e 52 65 61 64 57 72 69 74 65 2c 20 30  OpenReadWrite, 0
14c30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
14c40 74 65 33 4f 73 43 6c 6f 73 65 22 2c 20 20 20 20  te3OsClose",    
14c50 20 20 20 20 74 65 73 74 5f 73 71 6c 69 74 65 33      test_sqlite3
14c60 4f 73 43 6c 6f 73 65 2c 20 30 20 7d 2c 0a 20 20  OsClose, 0 },.  
14c70 20 20 20 7b 20 22 73 71 6c 69 74 65 33 4f 73 4c     { "sqlite3OsL
14c80 6f 63 6b 22 2c 20 20 20 20 20 20 20 20 20 74 65  ock",         te
14c90 73 74 5f 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b  st_sqlite3OsLock
14ca0 2c 20 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73  , 0 },.     { "s
14cb0 71 6c 69 74 65 33 4f 73 54 65 6d 70 46 69 6c 65  qlite3OsTempFile
14cc0 4e 61 6d 65 22 2c 20 74 65 73 74 5f 73 71 6c 69  Name", test_sqli
14cd0 74 65 33 4f 73 54 65 6d 70 46 69 6c 65 4e 61 6d  te3OsTempFileNam
14ce0 65 2c 20 30 20 7d 2c 0a 20 20 20 0a 20 20 20 20  e, 0 },.   .    
14cf0 20 2f 2a 20 43 75 73 74 6f 6d 20 74 65 73 74 20   /* Custom test 
14d00 69 6e 74 65 72 66 61 63 65 73 20 2a 2f 0a 20 20  interfaces */.  
14d10 20 20 20 7b 20 22 73 71 6c 69 74 65 33 4f 73 55     { "sqlite3OsU
14d20 6e 6c 6f 63 6b 22 2c 20 20 20 20 20 20 20 20 20  nlock",         
14d30 74 65 73 74 5f 73 71 6c 69 74 65 33 4f 73 55 6e  test_sqlite3OsUn
14d40 6c 6f 63 6b 2c 20 30 20 20 20 20 7d 2c 0a 23 69  lock, 0    },.#i
14d50 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
14d60 54 5f 55 54 46 31 36 0a 20 20 20 20 20 7b 20 22  T_UTF16.     { "
14d70 61 64 64 5f 74 65 73 74 5f 63 6f 6c 6c 61 74 65  add_test_collate
14d80 22 2c 20 20 20 20 20 20 20 20 74 65 73 74 5f 63  ",        test_c
14d90 6f 6c 6c 61 74 65 2c 20 30 20 20 20 20 20 20 20  ollate, 0       
14da0 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22       },.     { "
14db0 61 64 64 5f 74 65 73 74 5f 63 6f 6c 6c 61 74 65  add_test_collate
14dc0 5f 6e 65 65 64 65 64 22 2c 20 74 65 73 74 5f 63  _needed", test_c
14dd0 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64 2c 20 30  ollate_needed, 0
14de0 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22       },.     { "
14df0 61 64 64 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f  add_test_functio
14e00 6e 22 2c 20 20 20 20 20 20 20 74 65 73 74 5f 66  n",       test_f
14e10 75 6e 63 74 69 6f 6e 2c 20 30 20 20 20 20 20 20  unction, 0      
14e20 20 20 20 20 20 7d 2c 0a 23 65 6e 64 69 66 0a 20       },.#endif. 
14e30 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63      { "sqlite3_c
14e40 72 61 73 68 70 61 72 61 6d 73 22 2c 20 20 20 20  rashparams",    
14e50 20 73 71 6c 69 74 65 33 5f 63 72 61 73 68 70 61   sqlite3_crashpa
14e60 72 61 6d 73 2c 20 30 20 20 20 20 20 7d 2c 0a 20  rams, 0     },. 
14e70 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 74      { "sqlite3_t
14e80 65 73 74 5f 65 72 72 73 74 72 22 2c 20 20 20 20  est_errstr",    
14e90 20 74 65 73 74 5f 65 72 72 73 74 72 2c 20 30 20   test_errstr, 0 
14ea0 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
14eb0 20 20 20 20 7b 20 22 74 63 6c 5f 76 61 72 69 61      { "tcl_varia
14ec0 62 6c 65 5f 74 79 70 65 22 2c 20 20 20 20 20 20  ble_type",      
14ed0 20 74 63 6c 5f 76 61 72 69 61 62 6c 65 5f 74 79   tcl_variable_ty
14ee0 70 65 2c 20 30 20 20 20 20 20 20 20 7d 2c 0a 20  pe, 0       },. 
14ef0 20 7d 3b 0a 20 20 73 74 61 74 69 63 20 69 6e 74   };.  static int
14f00 20 62 69 74 6d 61 73 6b 5f 73 69 7a 65 20 3d 20   bitmask_size = 
14f10 73 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a  sizeof(Bitmask)*
14f20 38 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 65 78  8;.  int i;.  ex
14f30 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
14f40 5f 6f 73 5f 74 72 61 63 65 3b 0a 20 0a 0a 20 20  _os_trace;. ..  
14f50 66 6f 72 28 69 3d 30 3b 20 69 3c 73 69 7a 65 6f  for(i=0; i<sizeo
14f60 66 28 61 43 6d 64 29 2f 73 69 7a 65 6f 66 28 61  f(aCmd)/sizeof(a
14f70 43 6d 64 5b 30 5d 29 3b 20 69 2b 2b 29 7b 0a 20  Cmd[0]); i++){. 
14f80 20 20 20 54 63 6c 5f 43 72 65 61 74 65 43 6f 6d     Tcl_CreateCom
14f90 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 61 43 6d  mand(interp, aCm
14fa0 64 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 61 43 6d 64  d[i].zName, aCmd
14fb0 5b 69 5d 2e 78 50 72 6f 63 2c 20 30 2c 20 30 29  [i].xProc, 0, 0)
14fc0 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 3b  ;.  }.  for(i=0;
14fd0 20 69 3c 73 69 7a 65 6f 66 28 61 4f 62 6a 43 6d   i<sizeof(aObjCm
14fe0 64 29 2f 73 69 7a 65 6f 66 28 61 4f 62 6a 43 6d  d)/sizeof(aObjCm
14ff0 64 5b 30 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20 20  d[0]); i++){.   
15000 20 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f   Tcl_CreateObjCo
15010 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 61 4f  mmand(interp, aO
15020 62 6a 43 6d 64 5b 69 5d 2e 7a 4e 61 6d 65 2c 20  bjCmd[i].zName, 
15030 0a 20 20 20 20 20 20 20 20 61 4f 62 6a 43 6d 64  .        aObjCmd
15040 5b 69 5d 2e 78 50 72 6f 63 2c 20 61 4f 62 6a 43  [i].xProc, aObjC
15050 6d 64 5b 69 5d 2e 63 6c 69 65 6e 74 44 61 74 61  md[i].clientData
15060 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f  , 0);.  }.  Tcl_
15070 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20  LinkVar(interp, 
15080 22 73 71 6c 69 74 65 5f 73 65 61 72 63 68 5f 63  "sqlite_search_c
15090 6f 75 6e 74 22 2c 20 0a 20 20 20 20 20 20 28 63  ount", .      (c
150a0 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 73 65  har*)&sqlite3_se
150b0 61 72 63 68 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f  arch_count, TCL_
150c0 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c  LINK_INT);.  Tcl
150d0 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c  _LinkVar(interp,
150e0 20 22 73 71 6c 69 74 65 5f 73 6f 72 74 5f 63 6f   "sqlite_sort_co
150f0 75 6e 74 22 2c 20 0a 20 20 20 20 20 20 28 63 68  unt", .      (ch
15100 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 73 6f 72  ar*)&sqlite3_sor
15110 74 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e  t_count, TCL_LIN
15120 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69  K_INT);.  Tcl_Li
15130 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73  nkVar(interp, "s
15140 71 6c 69 74 65 5f 69 6e 74 65 72 72 75 70 74 5f  qlite_interrupt_
15150 63 6f 75 6e 74 22 2c 20 0a 20 20 20 20 20 20 28  count", .      (
15160 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 69  char*)&sqlite3_i
15170 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 2c 20  nterrupt_count, 
15180 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20  TCL_LINK_INT);. 
15190 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
151a0 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 65  erp, "sqlite_ope
151b0 6e 5f 66 69 6c 65 5f 63 6f 75 6e 74 22 2c 20 0a  n_file_count", .
151c0 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71        (char*)&sq
151d0 6c 69 74 65 33 5f 6f 70 65 6e 5f 66 69 6c 65 5f  lite3_open_file_
151e0 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f  count, TCL_LINK_
151f0 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b  INT);.  Tcl_Link
15200 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  Var(interp, "sql
15210 69 74 65 5f 63 75 72 72 65 6e 74 5f 74 69 6d 65  ite_current_time
15220 22 2c 20 0a 20 20 20 20 20 20 28 63 68 61 72 2a  ", .      (char*
15230 29 26 73 71 6c 69 74 65 33 5f 63 75 72 72 65 6e  )&sqlite3_curren
15240 74 5f 74 69 6d 65 2c 20 54 43 4c 5f 4c 49 4e 4b  t_time, TCL_LINK
15250 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e  _INT);.  Tcl_Lin
15260 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71  kVar(interp, "sq
15270 6c 69 74 65 5f 6f 73 5f 74 72 61 63 65 22 2c 0a  lite_os_trace",.
15280 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71        (char*)&sq
15290 6c 69 74 65 33 5f 6f 73 5f 74 72 61 63 65 2c 20  lite3_os_trace, 
152a0 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20  TCL_LINK_INT);. 
152b0 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
152c0 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 73 74 61  erp, "sqlite_sta
152d0 74 69 63 5f 62 69 6e 64 5f 76 61 6c 75 65 22 2c  tic_bind_value",
152e0 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73  .      (char*)&s
152f0 71 6c 69 74 65 5f 73 74 61 74 69 63 5f 62 69 6e  qlite_static_bin
15300 64 5f 76 61 6c 75 65 2c 20 54 43 4c 5f 4c 49 4e  d_value, TCL_LIN
15310 4b 5f 53 54 52 49 4e 47 29 3b 0a 20 20 54 63 6c  K_STRING);.  Tcl
15320 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c  _LinkVar(interp,
15330 20 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 64 69   "sqlite_temp_di
15340 72 65 63 74 6f 72 79 22 2c 0a 20 20 20 20 20 20  rectory",.      
15350 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f  (char*)&sqlite3_
15360 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 2c 20  temp_directory, 
15370 54 43 4c 5f 4c 49 4e 4b 5f 53 54 52 49 4e 47 29  TCL_LINK_STRING)
15380 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  ;.  Tcl_LinkVar(
15390 69 6e 74 65 72 70 2c 20 22 62 69 74 6d 61 73 6b  interp, "bitmask
153a0 5f 73 69 7a 65 22 2c 0a 20 20 20 20 20 20 28 63  _size",.      (c
153b0 68 61 72 2a 29 26 62 69 74 6d 61 73 6b 5f 73 69  har*)&bitmask_si
153c0 7a 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54  ze, TCL_LINK_INT
153d0 7c 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41 44 5f 4f  |TCL_LINK_READ_O
153e0 4e 4c 59 29 3b 0a 20 20 73 65 74 5f 6f 70 74 69  NLY);.  set_opti
153f0 6f 6e 73 28 69 6e 74 65 72 70 29 3b 0a 20 20 72  ons(interp);.  r
15400 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.