/ Hex Artifact Content
Login

Artifact da573d5b157dbb376349efcb4ff2cbe830f80c80:


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 4d 61 69 6e 20 66  ******.** Main f
0180: 69 6c 65 20 66 6f 72 20 74 68 65 20 53 51 4c 69  ile for the SQLi
0190: 74 65 20 6c 69 62 72 61 72 79 2e 20 20 54 68 65  te library.  The
01a0: 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 69   routines in thi
01b0: 73 20 66 69 6c 65 0a 2a 2a 20 69 6d 70 6c 65 6d  s file.** implem
01c0: 65 6e 74 20 74 68 65 20 70 72 6f 67 72 61 6d 6d  ent the programm
01d0: 65 72 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20  er interface to 
01e0: 74 68 65 20 6c 69 62 72 61 72 79 2e 20 20 52 6f  the library.  Ro
01f0: 75 74 69 6e 65 73 20 69 6e 0a 2a 2a 20 6f 74 68  utines in.** oth
0200: 65 72 20 66 69 6c 65 73 20 61 72 65 20 66 6f 72  er files are for
0210: 20 69 6e 74 65 72 6e 61 6c 20 75 73 65 20 62 79   internal use by
0220: 20 53 51 4c 69 74 65 20 61 6e 64 20 73 68 6f 75   SQLite and shou
0230: 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20 61 63 63  ld not be.** acc
0240: 65 73 73 65 64 20 62 79 20 75 73 65 72 73 20 6f  essed by users o
0250: 66 20 74 68 65 20 6c 69 62 72 61 72 79 2e 0a 2a  f the library..*
0260: 2a 0a 2a 2a 20 24 49 64 3a 20 6d 61 69 6e 2e 63  *.** $Id: main.c
0270: 2c 76 20 31 2e 32 32 32 20 32 30 30 34 2f 30 36  ,v 1.222 2004/06
0280: 2f 31 35 20 31 36 3a 35 31 3a 30 31 20 64 61 6e  /15 16:51:01 dan
0290: 69 65 6c 6b 31 39 37 37 20 45 78 70 20 24 0a 2a  ielk1977 Exp $.*
02a0: 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69  /.#include "sqli
02b0: 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63 6c 75 64  teInt.h".#includ
02c0: 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64  e "os.h".#includ
02d0: 65 20 3c 63 74 79 70 65 2e 68 3e 0a 0a 2f 2a 0a  e <ctype.h>../*.
02e0: 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  ** A pointer to 
02f0: 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
0300: 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e  s used to commun
0310: 69 63 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f  icate informatio
0320: 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65  n.** from sqlite
0330: 33 49 6e 69 74 20 69 6e 74 6f 20 74 68 65 20 73  3Init into the s
0340: 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
0350: 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  ck..*/.typedef s
0360: 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65  truct {.  sqlite
0370: 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a   *db;         /*
0380: 20 54 68 65 20 64 61 74 61 62 61 73 65 20 62 65   The database be
0390: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ing initialized 
03a0: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72  */.  char **pzEr
03b0: 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f  rMsg;    /* Erro
03c0: 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64  r message stored
03d0: 20 68 65 72 65 20 2a 2f 0a 7d 20 49 6e 69 74 44   here */.} InitD
03e0: 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ata;../*.** The 
03f0: 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61  following consta
0400: 6e 74 20 76 61 6c 75 65 20 69 73 20 75 73 65 64  nt value is used
0410: 20 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f 42   by the SQLITE_B
0420: 49 47 45 4e 44 49 41 4e 20 61 6e 64 0a 2a 2a 20  IGENDIAN and.** 
0430: 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44  SQLITE_LITTLEEND
0440: 49 41 4e 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 63  IAN macros..*/.c
0450: 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65 33  onst int sqlite3
0460: 6f 6e 65 20 3d 20 31 3b 0a 0a 2f 2a 0a 2a 2a 20  one = 1;../*.** 
0470: 46 69 6c 6c 20 74 68 65 20 49 6e 69 74 44 61 74  Fill the InitDat
0480: 61 20 73 74 72 75 63 74 75 72 65 20 77 69 74 68  a structure with
0490: 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
04a0: 65 20 74 68 61 74 20 69 6e 64 69 63 61 74 65 73  e that indicates
04b0: 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61 74  .** that the dat
04c0: 61 62 61 73 65 20 69 73 20 63 6f 72 72 75 70 74  abase is corrupt
04d0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
04e0: 20 63 6f 72 72 75 70 74 53 63 68 65 6d 61 28 49   corruptSchema(I
04f0: 6e 69 74 44 61 74 61 20 2a 70 44 61 74 61 2c 20  nitData *pData, 
0500: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 78 74  const char *zExt
0510: 72 61 29 7b 0a 20 20 73 71 6c 69 74 65 33 53 65  ra){.  sqlite3Se
0520: 74 53 74 72 69 6e 67 28 70 44 61 74 61 2d 3e 70  tString(pData->p
0530: 7a 45 72 72 4d 73 67 2c 20 22 6d 61 6c 66 6f 72  zErrMsg, "malfor
0540: 6d 65 64 20 64 61 74 61 62 61 73 65 20 73 63 68  med database sch
0550: 65 6d 61 22 2c 0a 20 20 20 20 20 7a 45 78 74 72  ema",.     zExtr
0560: 61 21 3d 30 20 26 26 20 7a 45 78 74 72 61 5b 30  a!=0 && zExtra[0
0570: 5d 21 3d 30 20 3f 20 22 20 2d 20 22 20 3a 20 28  ]!=0 ? " - " : (
0580: 63 68 61 72 2a 29 30 2c 20 7a 45 78 74 72 61 2c  char*)0, zExtra,
0590: 20 28 63 68 61 72 2a 29 30 29 3b 0a 7d 0a 0a 2f   (char*)0);.}../
05a0: 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68 65  *.** This is the
05b0: 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69 6e   callback routin
05c0: 65 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20 74  e for the code t
05d0: 68 61 74 20 69 6e 69 74 69 61 6c 69 7a 65 73 20  hat initializes 
05e0: 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e  the.** database.
05f0: 20 20 53 65 65 20 73 71 6c 69 74 65 33 49 6e 69    See sqlite3Ini
0600: 74 28 29 20 62 65 6c 6f 77 20 66 6f 72 20 61 64  t() below for ad
0610: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
0620: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68  tion..**.** Each
0630: 20 63 61 6c 6c 62 61 63 6b 20 63 6f 6e 74 61 69   callback contai
0640: 6e 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ns the following
0650: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 3a 0a 2a 2a   information:.**
0660: 0a 2a 2a 20 20 20 20 20 61 72 67 76 5b 30 5d 20  .**     argv[0] 
0670: 3d 20 22 66 69 6c 65 2d 66 6f 72 6d 61 74 22 20  = "file-format" 
0680: 6f 72 20 22 73 63 68 65 6d 61 2d 63 6f 6f 6b 69  or "schema-cooki
0690: 65 22 20 6f 72 20 22 74 61 62 6c 65 22 20 6f 72  e" or "table" or
06a0: 20 22 69 6e 64 65 78 22 0a 2a 2a 20 20 20 20 20   "index".**     
06b0: 61 72 67 76 5b 31 5d 20 3d 20 74 61 62 6c 65 20  argv[1] = table 
06c0: 6f 72 20 69 6e 64 65 78 20 6e 61 6d 65 20 6f 72  or index name or
06d0: 20 6d 65 74 61 20 73 74 61 74 65 6d 65 6e 74 20   meta statement 
06e0: 74 79 70 65 2e 0a 2a 2a 20 20 20 20 20 61 72 67  type..**     arg
06f0: 76 5b 32 5d 20 3d 20 72 6f 6f 74 20 70 61 67 65  v[2] = root page
0700: 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 61 62 6c   number for tabl
0710: 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 4e 55 4c  e or index.  NUL
0720: 4c 20 66 6f 72 20 6d 65 74 61 2e 0a 2a 2a 20 20  L for meta..**  
0730: 20 20 20 61 72 67 76 5b 33 5d 20 3d 20 53 51 4c     argv[3] = SQL
0740: 20 74 65 78 74 20 66 6f 72 20 61 20 43 52 45 41   text for a CREA
0750: 54 45 20 54 41 42 4c 45 20 6f 72 20 43 52 45 41  TE TABLE or CREA
0760: 54 45 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65  TE INDEX stateme
0770: 6e 74 2e 0a 2a 2a 20 20 20 20 20 61 72 67 76 5b  nt..**     argv[
0780: 34 5d 20 3d 20 22 31 22 20 66 6f 72 20 74 65 6d  4] = "1" for tem
0790: 70 6f 72 61 72 79 20 66 69 6c 65 73 2c 20 22 30  porary files, "0
07a0: 22 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61 62  " for main datab
07b0: 61 73 65 2c 20 22 32 22 20 6f 72 20 6d 6f 72 65  ase, "2" or more
07c0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
07d0: 20 20 66 6f 72 20 61 75 78 69 6c 69 61 72 79 20    for auxiliary 
07e0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 2e 0a  database files..
07f0: 2a 2a 0a 2a 2f 0a 73 74 61 74 69 63 0a 69 6e 74  **.*/.static.int
0800: 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
0810: 62 61 63 6b 28 76 6f 69 64 20 2a 70 49 6e 69 74  back(void *pInit
0820: 2c 20 69 6e 74 20 61 72 67 63 2c 20 63 68 61 72  , int argc, char
0830: 20 2a 2a 61 72 67 76 2c 20 63 68 61 72 20 2a 2a   **argv, char **
0840: 61 7a 43 6f 6c 4e 61 6d 65 29 7b 0a 20 20 49 6e  azColName){.  In
0850: 69 74 44 61 74 61 20 2a 70 44 61 74 61 20 3d 20  itData *pData = 
0860: 28 49 6e 69 74 44 61 74 61 2a 29 70 49 6e 69 74  (InitData*)pInit
0870: 3b 0a 20 20 69 6e 74 20 6e 45 72 72 20 3d 20 30  ;.  int nErr = 0
0880: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 61 72 67  ;..  assert( arg
0890: 63 3d 3d 35 20 29 3b 0a 20 20 69 66 28 20 61 72  c==5 );.  if( ar
08a0: 67 76 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30  gv==0 ) return 0
08b0: 3b 20 20 20 2f 2a 20 4d 69 67 68 74 20 68 61 70  ;   /* Might hap
08c0: 70 65 6e 20 69 66 20 45 4d 50 54 59 5f 52 45 53  pen if EMPTY_RES
08d0: 55 4c 54 5f 43 41 4c 4c 42 41 43 4b 53 20 61 72  ULT_CALLBACKS ar
08e0: 65 20 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 61 72  e on */.  if( ar
08f0: 67 76 5b 30 5d 3d 3d 30 20 29 7b 0a 20 20 20 20  gv[0]==0 ){.    
0900: 63 6f 72 72 75 70 74 53 63 68 65 6d 61 28 70 44  corruptSchema(pD
0910: 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  ata, 0);.    ret
0920: 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 73 77 69  urn 1;.  }.  swi
0930: 74 63 68 28 20 61 72 67 76 5b 30 5d 5b 30 5d 20  tch( argv[0][0] 
0940: 29 7b 0a 20 20 20 20 63 61 73 65 20 27 76 27 3a  ){.    case 'v':
0950: 0a 20 20 20 20 63 61 73 65 20 27 69 27 3a 0a 20  .    case 'i':. 
0960: 20 20 20 63 61 73 65 20 27 74 27 3a 20 7b 20 20     case 't': {  
0970: 2f 2a 20 43 52 45 41 54 45 20 54 41 42 4c 45 2c  /* CREATE TABLE,
0980: 20 43 52 45 41 54 45 20 49 4e 44 45 58 2c 20 6f   CREATE INDEX, o
0990: 72 20 43 52 45 41 54 45 20 56 49 45 57 20 73 74  r CREATE VIEW st
09a0: 61 74 65 6d 65 6e 74 73 20 2a 2f 0a 20 20 20 20  atements */.    
09b0: 20 20 73 71 6c 69 74 65 20 2a 64 62 20 3d 20 70    sqlite *db = p
09c0: 44 61 74 61 2d 3e 64 62 3b 0a 20 20 20 20 20 20  Data->db;.      
09d0: 69 66 28 20 61 72 67 76 5b 32 5d 3d 3d 30 20 7c  if( argv[2]==0 |
09e0: 7c 20 61 72 67 76 5b 34 5d 3d 3d 30 20 29 7b 0a  | argv[4]==0 ){.
09f0: 20 20 20 20 20 20 20 20 63 6f 72 72 75 70 74 53          corruptS
0a00: 63 68 65 6d 61 28 70 44 61 74 61 2c 20 30 29 3b  chema(pData, 0);
0a10: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
0a20: 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  1;.      }.     
0a30: 20 69 66 28 20 61 72 67 76 5b 33 5d 20 26 26 20   if( argv[3] && 
0a40: 61 72 67 76 5b 33 5d 5b 30 5d 20 29 7b 0a 20 20  argv[3][0] ){.  
0a50: 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 20 74 68        /* Call th
0a60: 65 20 70 61 72 73 65 72 20 74 6f 20 70 72 6f 63  e parser to proc
0a70: 65 73 73 20 61 20 43 52 45 41 54 45 20 54 41 42  ess a CREATE TAB
0a80: 4c 45 2c 20 49 4e 44 45 58 20 6f 72 20 56 49 45  LE, INDEX or VIE
0a90: 57 2e 0a 20 20 20 20 20 20 20 20 2a 2a 20 42 75  W..        ** Bu
0aa0: 74 20 62 65 63 61 75 73 65 20 64 62 2d 3e 69 6e  t because db->in
0ab0: 69 74 2e 62 75 73 79 20 69 73 20 73 65 74 20 74  it.busy is set t
0ac0: 6f 20 31 2c 20 6e 6f 20 56 44 42 45 20 63 6f 64  o 1, no VDBE cod
0ad0: 65 20 69 73 20 67 65 6e 65 72 61 74 65 64 0a 20  e is generated. 
0ae0: 20 20 20 20 20 20 20 2a 2a 20 6f 72 20 65 78 65         ** or exe
0af0: 63 75 74 65 64 2e 20 20 41 6c 6c 20 74 68 65 20  cuted.  All the 
0b00: 70 61 72 73 65 72 20 64 6f 65 73 20 69 73 20 62  parser does is b
0b10: 75 69 6c 64 20 74 68 65 20 69 6e 74 65 72 6e 61  uild the interna
0b20: 6c 20 64 61 74 61 0a 20 20 20 20 20 20 20 20 2a  l data.        *
0b30: 2a 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61  * structures tha
0b40: 74 20 64 65 73 63 72 69 62 65 20 74 68 65 20 74  t describe the t
0b50: 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20 6f 72 20  able, index, or 
0b60: 76 69 65 77 2e 0a 20 20 20 20 20 20 20 20 2a 2f  view..        */
0b70: 0a 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a  .        char *z
0b80: 45 72 72 3b 0a 20 20 20 20 20 20 20 20 61 73 73  Err;.        ass
0b90: 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75  ert( db->init.bu
0ba0: 73 79 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62  sy );.        db
0bb0: 2d 3e 69 6e 69 74 2e 69 44 62 20 3d 20 61 74 6f  ->init.iDb = ato
0bc0: 69 28 61 72 67 76 5b 34 5d 29 3b 0a 20 20 20 20  i(argv[4]);.    
0bd0: 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
0be0: 69 6e 69 74 2e 69 44 62 3e 3d 30 20 26 26 20 64  init.iDb>=0 && d
0bf0: 62 2d 3e 69 6e 69 74 2e 69 44 62 3c 64 62 2d 3e  b->init.iDb<db->
0c00: 6e 44 62 20 29 3b 0a 20 20 20 20 20 20 20 20 64  nDb );.        d
0c10: 62 2d 3e 69 6e 69 74 2e 6e 65 77 54 6e 75 6d 20  b->init.newTnum 
0c20: 3d 20 61 74 6f 69 28 61 72 67 76 5b 32 5d 29 3b  = atoi(argv[2]);
0c30: 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c  .        if( sql
0c40: 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20 61 72  ite3_exec(db, ar
0c50: 67 76 5b 33 5d 2c 20 30 2c 20 30 2c 20 26 7a 45  gv[3], 0, 0, &zE
0c60: 72 72 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  rr) ){.         
0c70: 20 63 6f 72 72 75 70 74 53 63 68 65 6d 61 28 70   corruptSchema(p
0c80: 44 61 74 61 2c 20 7a 45 72 72 29 3b 0a 20 20 20  Data, zErr);.   
0c90: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66         sqlite3_f
0ca0: 72 65 65 28 7a 45 72 72 29 3b 0a 20 20 20 20 20  ree(zErr);.     
0cb0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d     }.        db-
0cc0: 3e 69 6e 69 74 2e 69 44 62 20 3d 20 30 3b 0a 20  >init.iDb = 0;. 
0cd0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
0ce0: 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 53 51      /* If the SQ
0cf0: 4c 20 63 6f 6c 75 6d 6e 20 69 73 20 62 6c 61 6e  L column is blan
0d00: 6b 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73 20  k it means this 
0d10: 69 73 20 61 6e 20 69 6e 64 65 78 20 74 68 61 74  is an index that
0d20: 0a 20 20 20 20 20 20 20 20 2a 2a 20 77 61 73 20  .        ** was 
0d30: 63 72 65 61 74 65 64 20 74 6f 20 62 65 20 74 68  created to be th
0d40: 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72  e PRIMARY KEY or
0d50: 20 74 6f 20 66 75 6c 66 69 6c 6c 20 61 20 55 4e   to fulfill a UN
0d60: 49 51 55 45 0a 20 20 20 20 20 20 20 20 2a 2a 20  IQUE.        ** 
0d70: 63 6f 6e 73 74 72 61 69 6e 74 20 66 6f 72 20 61  constraint for a
0d80: 20 43 52 45 41 54 45 20 54 41 42 4c 45 2e 20 20   CREATE TABLE.  
0d90: 54 68 65 20 69 6e 64 65 78 20 73 68 6f 75 6c 64  The index should
0da0: 20 68 61 76 65 20 61 6c 72 65 61 64 79 0a 20 20   have already.  
0db0: 20 20 20 20 20 20 2a 2a 20 62 65 65 6e 20 63 72        ** been cr
0dc0: 65 61 74 65 64 20 77 68 65 6e 20 77 65 20 70 72  eated when we pr
0dd0: 6f 63 65 73 73 65 64 20 74 68 65 20 43 52 45 41  ocessed the CREA
0de0: 54 45 20 54 41 42 4c 45 2e 20 20 41 6c 6c 20 77  TE TABLE.  All w
0df0: 65 20 68 61 76 65 0a 20 20 20 20 20 20 20 20 2a  e have.        *
0e00: 2a 20 74 6f 20 64 6f 20 68 65 72 65 20 69 73 20  * to do here is 
0e10: 72 65 63 6f 72 64 20 74 68 65 20 72 6f 6f 74 20  record the root 
0e20: 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  page number for 
0e30: 74 68 61 74 20 69 6e 64 65 78 2e 0a 20 20 20 20  that index..    
0e40: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 69      */.        i
0e50: 6e 74 20 69 44 62 3b 0a 20 20 20 20 20 20 20 20  nt iDb;.        
0e60: 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 0a 0a  Index *pIndex;..
0e70: 20 20 20 20 20 20 20 20 69 44 62 20 3d 20 61 74          iDb = at
0e80: 6f 69 28 61 72 67 76 5b 34 5d 29 3b 0a 20 20 20  oi(argv[4]);.   
0e90: 20 20 20 20 20 61 73 73 65 72 74 28 20 69 44 62       assert( iDb
0ea0: 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e  >=0 && iDb<db->n
0eb0: 44 62 20 29 3b 0a 20 20 20 20 20 20 20 20 70 49  Db );.        pI
0ec0: 6e 64 65 78 20 3d 20 73 71 6c 69 74 65 33 46 69  ndex = sqlite3Fi
0ed0: 6e 64 49 6e 64 65 78 28 64 62 2c 20 61 72 67 76  ndIndex(db, argv
0ee0: 5b 31 5d 2c 20 64 62 2d 3e 61 44 62 5b 69 44 62  [1], db->aDb[iDb
0ef0: 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  ].zName);.      
0f00: 20 20 69 66 28 20 70 49 6e 64 65 78 3d 3d 30 20    if( pIndex==0 
0f10: 7c 7c 20 70 49 6e 64 65 78 2d 3e 74 6e 75 6d 21  || pIndex->tnum!
0f20: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
0f30: 2f 2a 20 54 68 69 73 20 63 61 6e 20 6f 63 63 75  /* This can occu
0f40: 72 20 69 66 20 74 68 65 72 65 20 65 78 69 73 74  r if there exist
0f50: 73 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20 61 20  s an index on a 
0f60: 54 45 4d 50 20 74 61 62 6c 65 20 77 68 69 63 68  TEMP table which
0f70: 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20 68 61  .          ** ha
0f80: 73 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20  s the same name 
0f90: 61 73 20 61 6e 6f 74 68 65 72 20 69 6e 64 65 78  as another index
0fa0: 20 6f 6e 20 61 20 70 65 72 6d 61 6e 65 6e 74 20   on a permanent 
0fb0: 69 6e 64 65 78 2e 20 20 53 69 6e 63 65 0a 20 20  index.  Since.  
0fc0: 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20 70          ** the p
0fd0: 65 72 6d 61 6e 65 6e 74 20 74 61 62 6c 65 20 69  ermanent table i
0fe0: 73 20 68 69 64 64 65 6e 20 62 79 20 74 68 65 20  s hidden by the 
0ff0: 54 45 4d 50 20 74 61 62 6c 65 2c 20 77 65 20 63  TEMP table, we c
1000: 61 6e 20 61 6c 73 6f 0a 20 20 20 20 20 20 20 20  an also.        
1010: 20 20 2a 2a 20 73 61 66 65 6c 79 20 69 67 6e 6f    ** safely igno
1020: 72 65 20 74 68 65 20 69 6e 64 65 78 20 6f 6e 20  re the index on 
1030: 74 68 65 20 70 65 72 6d 61 6e 65 6e 74 20 74 61  the permanent ta
1040: 62 6c 65 2e 0a 20 20 20 20 20 20 20 20 20 20 2a  ble..          *
1050: 2f 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  /.          /* D
1060: 6f 20 4e 6f 74 68 69 6e 67 20 2a 2f 3b 0a 20 20  o Nothing */;.  
1070: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
1080: 20 20 20 20 20 20 20 70 49 6e 64 65 78 2d 3e 74         pIndex->t
1090: 6e 75 6d 20 3d 20 61 74 6f 69 28 61 72 67 76 5b  num = atoi(argv[
10a0: 32 5d 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  2]);.        }. 
10b0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65       }.      bre
10c0: 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 65  ak;.    }.    de
10d0: 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 2f  fault: {.      /
10e0: 2a 20 54 68 69 73 20 63 61 6e 20 6e 6f 74 20 68  * This can not h
10f0: 61 70 70 65 6e 21 20 2a 2f 0a 20 20 20 20 20 20  appen! */.      
1100: 6e 45 72 72 20 3d 20 31 3b 0a 20 20 20 20 20 20  nErr = 1;.      
1110: 61 73 73 65 72 74 28 20 6e 45 72 72 3d 3d 30 20  assert( nErr==0 
1120: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72  );.    }.  }.  r
1130: 65 74 75 72 6e 20 6e 45 72 72 3b 0a 7d 0a 0a 2f  eturn nErr;.}../
1140: 2a 0a 2a 2a 20 41 74 74 65 6d 70 74 20 74 6f 20  *.** Attempt to 
1150: 72 65 61 64 20 74 68 65 20 64 61 74 61 62 61 73  read the databas
1160: 65 20 73 63 68 65 6d 61 20 61 6e 64 20 69 6e 69  e schema and ini
1170: 74 69 61 6c 69 7a 65 20 69 6e 74 65 72 6e 61 6c  tialize internal
1180: 0a 2a 2a 20 64 61 74 61 20 73 74 72 75 63 74 75  .** data structu
1190: 72 65 73 20 66 6f 72 20 61 20 73 69 6e 67 6c 65  res for a single
11a0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20   database file. 
11b0: 20 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   The index of th
11c0: 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69  e.** database fi
11d0: 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 69  le is given by i
11e0: 44 62 2e 20 20 69 44 62 3d 3d 30 20 69 73 20 75  Db.  iDb==0 is u
11f0: 73 65 64 20 66 6f 72 20 74 68 65 20 6d 61 69 6e  sed for the main
1200: 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20 69  .** database.  i
1210: 44 62 3d 3d 31 20 73 68 6f 75 6c 64 20 6e 65 76  Db==1 should nev
1220: 65 72 20 62 65 20 75 73 65 64 2e 20 20 69 44 62  er be used.  iDb
1230: 3e 3d 32 20 69 73 20 75 73 65 64 20 66 6f 72 0a  >=2 is used for.
1240: 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  ** auxiliary dat
1250: 61 62 61 73 65 73 2e 20 20 52 65 74 75 72 6e 20  abases.  Return 
1260: 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54  one of the SQLIT
1270: 45 5f 20 65 72 72 6f 72 20 63 6f 64 65 73 20 74  E_ error codes t
1280: 6f 0a 2a 2a 20 69 6e 64 69 63 61 74 65 20 73 75  o.** indicate su
1290: 63 63 65 73 73 20 6f 72 20 66 61 69 6c 75 72 65  ccess or failure
12a0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
12b0: 73 71 6c 69 74 65 33 49 6e 69 74 4f 6e 65 28 73  sqlite3InitOne(s
12c0: 71 6c 69 74 65 20 2a 64 62 2c 20 69 6e 74 20 69  qlite *db, int i
12d0: 44 62 2c 20 63 68 61 72 20 2a 2a 70 7a 45 72 72  Db, char **pzErr
12e0: 4d 73 67 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a  Msg){.  int rc;.
12f0: 20 20 42 74 43 75 72 73 6f 72 20 2a 63 75 72 4d    BtCursor *curM
1300: 61 69 6e 3b 0a 20 20 69 6e 74 20 73 69 7a 65 3b  ain;.  int size;
1310: 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a  .  Table *pTab;.
1320: 20 20 63 68 61 72 20 2a 61 7a 41 72 67 5b 36 5d    char *azArg[6]
1330: 3b 0a 20 20 63 68 61 72 20 7a 44 62 4e 75 6d 5b  ;.  char zDbNum[
1340: 33 30 5d 3b 0a 20 20 69 6e 74 20 6d 65 74 61 5b  30];.  int meta[
1350: 31 30 5d 3b 0a 20 20 49 6e 69 74 44 61 74 61 20  10];.  InitData 
1360: 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20 2f 2a 0a  initData;..  /*.
1370: 20 20 2a 2a 20 54 68 65 20 6d 61 73 74 65 72 20    ** The master 
1380: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 68  database table h
1390: 61 73 20 61 20 73 74 72 75 63 74 75 72 65 20 6c  as a structure l
13a0: 69 6b 65 20 74 68 69 73 0a 20 20 2a 2f 0a 20 20  ike this.  */.  
13b0: 73 74 61 74 69 63 20 63 68 61 72 20 6d 61 73 74  static char mast
13c0: 65 72 5f 73 63 68 65 6d 61 5b 5d 20 3d 20 0a 20  er_schema[] = . 
13d0: 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c      "CREATE TABL
13e0: 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 28  E sqlite_master(
13f0: 5c 6e 22 0a 20 20 20 20 20 22 20 20 74 79 70 65  \n".     "  type
1400: 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22   text,\n".     "
1410: 20 20 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a    name text,\n".
1420: 20 20 20 20 20 22 20 20 74 62 6c 5f 6e 61 6d 65       "  tbl_name
1430: 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22   text,\n".     "
1440: 20 20 72 6f 6f 74 70 61 67 65 20 69 6e 74 65 67    rootpage integ
1450: 65 72 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20 73  er,\n".     "  s
1460: 71 6c 20 74 65 78 74 5c 6e 22 0a 20 20 20 20 20  ql text\n".     
1470: 22 29 22 0a 20 20 3b 0a 20 20 73 74 61 74 69 63  ")".  ;.  static
1480: 20 63 68 61 72 20 74 65 6d 70 5f 6d 61 73 74 65   char temp_maste
1490: 72 5f 73 63 68 65 6d 61 5b 5d 20 3d 20 0a 20 20  r_schema[] = .  
14a0: 20 20 20 22 43 52 45 41 54 45 20 54 45 4d 50 20     "CREATE TEMP 
14b0: 54 41 42 4c 45 20 73 71 6c 69 74 65 5f 74 65 6d  TABLE sqlite_tem
14c0: 70 5f 6d 61 73 74 65 72 28 5c 6e 22 0a 20 20 20  p_master(\n".   
14d0: 20 20 22 20 20 74 79 70 65 20 74 65 78 74 2c 5c    "  type text,\
14e0: 6e 22 0a 20 20 20 20 20 22 20 20 6e 61 6d 65 20  n".     "  name 
14f0: 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22 20  text,\n".     " 
1500: 20 74 62 6c 5f 6e 61 6d 65 20 74 65 78 74 2c 5c   tbl_name text,\
1510: 6e 22 0a 20 20 20 20 20 22 20 20 72 6f 6f 74 70  n".     "  rootp
1520: 61 67 65 20 69 6e 74 65 67 65 72 2c 5c 6e 22 0a  age integer,\n".
1530: 20 20 20 20 20 22 20 20 73 71 6c 20 74 65 78 74       "  sql text
1540: 5c 6e 22 0a 20 20 20 20 20 22 29 22 0a 20 20 3b  \n".     ")".  ;
1550: 0a 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f  ..  /* The follo
1560: 77 69 6e 67 20 53 51 4c 20 77 69 6c 6c 20 72 65  wing SQL will re
1570: 61 64 20 74 68 65 20 73 63 68 65 6d 61 20 66 72  ad the schema fr
1580: 6f 6d 20 74 68 65 20 6d 61 73 74 65 72 20 74 61  om the master ta
1590: 62 6c 65 73 2e 0a 20 20 2a 2f 0a 20 20 73 74 61  bles..  */.  sta
15a0: 74 69 63 20 63 68 61 72 20 69 6e 69 74 5f 73 63  tic char init_sc
15b0: 72 69 70 74 31 5b 5d 20 3d 20 0a 20 20 20 20 20  ript1[] = .     
15c0: 22 53 45 4c 45 43 54 20 74 79 70 65 2c 20 6e 61  "SELECT type, na
15d0: 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73 71  me, rootpage, sq
15e0: 6c 2c 20 31 20 46 52 4f 4d 20 73 71 6c 69 74 65  l, 1 FROM sqlite
15f0: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 3b 0a 20  _temp_master";. 
1600: 20 73 74 61 74 69 63 20 63 68 61 72 20 69 6e 69   static char ini
1610: 74 5f 73 63 72 69 70 74 32 5b 5d 20 3d 20 0a 20  t_script2[] = . 
1620: 20 20 20 20 22 53 45 4c 45 43 54 20 74 79 70 65      "SELECT type
1630: 2c 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65  , name, rootpage
1640: 2c 20 73 71 6c 2c 20 30 20 46 52 4f 4d 20 73 71  , sql, 0 FROM sq
1650: 6c 69 74 65 5f 6d 61 73 74 65 72 22 3b 0a 0a 20  lite_master";.. 
1660: 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
1670: 26 26 20 69 44 62 21 3d 31 20 26 26 20 69 44 62  && iDb!=1 && iDb
1680: 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 0a 20 20 2f  <db->nDb );..  /
1690: 2a 20 43 6f 6e 73 74 72 75 63 74 20 74 68 65 20  * Construct the 
16a0: 73 63 68 65 6d 61 20 74 61 62 6c 65 73 3a 20 73  schema tables: s
16b0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 61 6e 64  qlite_master and
16c0: 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
16d0: 74 65 72 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74  ter.  */.  sqlit
16e0: 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 3b  e3SafetyOff(db);
16f0: 0a 20 20 61 7a 41 72 67 5b 30 5d 20 3d 20 22 74  .  azArg[0] = "t
1700: 61 62 6c 65 22 3b 0a 20 20 61 7a 41 72 67 5b 31  able";.  azArg[1
1710: 5d 20 3d 20 4d 41 53 54 45 52 5f 4e 41 4d 45 3b  ] = MASTER_NAME;
1720: 0a 20 20 61 7a 41 72 67 5b 32 5d 20 3d 20 22 31  .  azArg[2] = "1
1730: 22 3b 0a 20 20 61 7a 41 72 67 5b 33 5d 20 3d 20  ";.  azArg[3] = 
1740: 6d 61 73 74 65 72 5f 73 63 68 65 6d 61 3b 0a 20  master_schema;. 
1750: 20 73 70 72 69 6e 74 66 28 7a 44 62 4e 75 6d 2c   sprintf(zDbNum,
1760: 20 22 25 64 22 2c 20 69 44 62 29 3b 0a 20 20 61   "%d", iDb);.  a
1770: 7a 41 72 67 5b 34 5d 20 3d 20 7a 44 62 4e 75 6d  zArg[4] = zDbNum
1780: 3b 0a 20 20 61 7a 41 72 67 5b 35 5d 20 3d 20 30  ;.  azArg[5] = 0
1790: 3b 0a 20 20 69 6e 69 74 44 61 74 61 2e 64 62 20  ;.  initData.db 
17a0: 3d 20 64 62 3b 0a 20 20 69 6e 69 74 44 61 74 61  = db;.  initData
17b0: 2e 70 7a 45 72 72 4d 73 67 20 3d 20 70 7a 45 72  .pzErrMsg = pzEr
17c0: 72 4d 73 67 3b 0a 20 20 73 71 6c 69 74 65 33 49  rMsg;.  sqlite3I
17d0: 6e 69 74 43 61 6c 6c 62 61 63 6b 28 26 69 6e 69  nitCallback(&ini
17e0: 74 44 61 74 61 2c 20 35 2c 20 61 7a 41 72 67 2c  tData, 5, azArg,
17f0: 20 30 29 3b 0a 20 20 70 54 61 62 20 3d 20 73 71   0);.  pTab = sq
1800: 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64  lite3FindTable(d
1810: 62 2c 20 4d 41 53 54 45 52 5f 4e 41 4d 45 2c 20  b, MASTER_NAME, 
1820: 22 6d 61 69 6e 22 29 3b 0a 20 20 69 66 28 20 70  "main");.  if( p
1830: 54 61 62 20 29 7b 0a 20 20 20 20 70 54 61 62 2d  Tab ){.    pTab-
1840: 3e 72 65 61 64 4f 6e 6c 79 20 3d 20 31 3b 0a 20  >readOnly = 1;. 
1850: 20 7d 0a 20 20 69 66 28 20 69 44 62 3d 3d 30 20   }.  if( iDb==0 
1860: 29 7b 0a 20 20 20 20 61 7a 41 72 67 5b 31 5d 20  ){.    azArg[1] 
1870: 3d 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41  = TEMP_MASTER_NA
1880: 4d 45 3b 0a 20 20 20 20 61 7a 41 72 67 5b 33 5d  ME;.    azArg[3]
1890: 20 3d 20 74 65 6d 70 5f 6d 61 73 74 65 72 5f 73   = temp_master_s
18a0: 63 68 65 6d 61 3b 0a 20 20 20 20 61 7a 41 72 67  chema;.    azArg
18b0: 5b 34 5d 20 3d 20 22 31 22 3b 0a 20 20 20 20 73  [4] = "1";.    s
18c0: 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
18d0: 63 6b 28 26 69 6e 69 74 44 61 74 61 2c 20 35 2c  ck(&initData, 5,
18e0: 20 61 7a 41 72 67 2c 20 30 29 3b 0a 20 20 20 20   azArg, 0);.    
18f0: 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33 46 69  pTab = sqlite3Fi
1900: 6e 64 54 61 62 6c 65 28 64 62 2c 20 54 45 4d 50  ndTable(db, TEMP
1910: 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 2c 20 22 74  _MASTER_NAME, "t
1920: 65 6d 70 22 29 3b 0a 20 20 20 20 69 66 28 20 70  emp");.    if( p
1930: 54 61 62 20 29 7b 0a 20 20 20 20 20 20 70 54 61  Tab ){.      pTa
1940: 62 2d 3e 72 65 61 64 4f 6e 6c 79 20 3d 20 31 3b  b->readOnly = 1;
1950: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c  .    }.  }.  sql
1960: 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29  ite3SafetyOn(db)
1970: 3b 0a 0a 20 20 2f 2a 20 43 72 65 61 74 65 20 61  ;..  /* Create a
1980: 20 63 75 72 73 6f 72 20 74 6f 20 68 6f 6c 64 20   cursor to hold 
1990: 74 68 65 20 64 61 74 61 62 61 73 65 20 6f 70 65  the database ope
19a0: 6e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d  n.  */.  if( db-
19b0: 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 3d 3d 30  >aDb[iDb].pBt==0
19c0: 20 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45   ) return SQLITE
19d0: 5f 4f 4b 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  _OK;.  rc = sqli
19e0: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 64  te3BtreeCursor(d
19f0: 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c  b->aDb[iDb].pBt,
1a00: 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 30 2c   MASTER_ROOT, 0,
1a10: 20 30 2c 20 30 2c 20 26 63 75 72 4d 61 69 6e 29   0, 0, &curMain)
1a20: 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ;.  if( rc!=SQLI
1a30: 54 45 5f 4f 4b 20 26 26 20 72 63 21 3d 53 51 4c  TE_OK && rc!=SQL
1a40: 49 54 45 5f 45 4d 50 54 59 20 29 7b 0a 20 20 20  ITE_EMPTY ){.   
1a50: 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
1a60: 67 28 70 7a 45 72 72 4d 73 67 2c 20 73 71 6c 69  g(pzErrMsg, sqli
1a70: 74 65 33 45 72 72 53 74 72 28 72 63 29 2c 20 28  te3ErrStr(rc), (
1a80: 63 68 61 72 2a 29 30 29 3b 0a 20 20 20 20 72 65  char*)0);.    re
1a90: 74 75 72 6e 20 72 63 3b 0a 20 20 7d 0a 0a 20 20  turn rc;.  }..  
1aa0: 2f 2a 20 47 65 74 20 74 68 65 20 64 61 74 61 62  /* Get the datab
1ab0: 61 73 65 20 6d 65 74 61 20 69 6e 66 6f 72 6d 61  ase meta informa
1ac0: 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  tion..  **.  ** 
1ad0: 4d 65 74 61 20 76 61 6c 75 65 73 20 61 72 65 20  Meta values are 
1ae0: 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 20 2a 2a  as follows:.  **
1af0: 20 20 20 20 6d 65 74 61 5b 30 5d 20 20 20 53 63      meta[0]   Sc
1b00: 68 65 6d 61 20 63 6f 6f 6b 69 65 2e 20 20 43 68  hema cookie.  Ch
1b10: 61 6e 67 65 73 20 77 69 74 68 20 65 61 63 68 20  anges with each 
1b20: 73 63 68 65 6d 61 20 63 68 61 6e 67 65 2e 0a 20  schema change.. 
1b30: 20 2a 2a 20 20 20 20 6d 65 74 61 5b 31 5d 20 20   **    meta[1]  
1b40: 20 46 69 6c 65 20 66 6f 72 6d 61 74 20 6f 66 20   File format of 
1b50: 73 63 68 65 6d 61 20 6c 61 79 65 72 2e 0a 20 20  schema layer..  
1b60: 2a 2a 20 20 20 20 6d 65 74 61 5b 32 5d 20 20 20  **    meta[2]   
1b70: 53 69 7a 65 20 6f 66 20 74 68 65 20 70 61 67 65  Size of the page
1b80: 20 63 61 63 68 65 2e 0a 20 20 2a 2a 20 20 20 20   cache..  **    
1b90: 6d 65 74 61 5b 33 5d 20 20 20 53 79 6e 63 68 72  meta[3]   Synchr
1ba0: 6f 6e 6f 75 73 20 73 65 74 74 69 6e 67 2e 20 20  onous setting.  
1bb0: 31 3a 6f 66 66 2c 20 32 3a 6e 6f 72 6d 61 6c 2c  1:off, 2:normal,
1bc0: 20 33 3a 66 75 6c 6c 0a 20 20 2a 2a 20 20 20 20   3:full.  **    
1bd0: 6d 65 74 61 5b 34 5d 20 20 20 44 62 20 74 65 78  meta[4]   Db tex
1be0: 74 20 65 6e 63 6f 64 69 6e 67 2e 20 31 3a 55 54  t encoding. 1:UT
1bf0: 46 2d 38 20 33 3a 55 54 46 2d 31 36 20 4c 45 20  F-8 3:UTF-16 LE 
1c00: 34 3a 55 54 46 2d 31 36 20 42 45 0a 20 20 2a 2a  4:UTF-16 BE.  **
1c10: 20 20 20 20 6d 65 74 61 5b 35 5d 20 20 20 50 72      meta[5]   Pr
1c20: 61 67 6d 61 20 74 65 6d 70 5f 73 74 6f 72 65 20  agma temp_store 
1c30: 76 61 6c 75 65 2e 20 20 53 65 65 20 63 6f 6d 6d  value.  See comm
1c40: 65 6e 74 73 20 6f 6e 20 42 74 72 65 65 46 61 63  ents on BtreeFac
1c50: 74 6f 72 79 0a 20 20 2a 2a 20 20 20 20 6d 65 74  tory.  **    met
1c60: 61 5b 36 5d 20 20 20 0a 20 20 2a 2a 20 20 20 20  a[6]   .  **    
1c70: 6d 65 74 61 5b 37 5d 0a 20 20 2a 2a 20 20 20 20  meta[7].  **    
1c80: 6d 65 74 61 5b 38 5d 0a 20 20 2a 2a 20 20 20 20  meta[8].  **    
1c90: 6d 65 74 61 5b 39 5d 0a 20 20 2a 2a 0a 20 20 2a  meta[9].  **.  *
1ca0: 2a 20 4e 6f 74 65 3a 20 54 68 65 20 68 61 73 68  * Note: The hash
1cb0: 20 64 65 66 69 6e 65 64 20 53 51 4c 49 54 45 5f   defined SQLITE_
1cc0: 55 54 46 2a 20 73 79 6d 62 6f 6c 73 20 69 6e 20  UTF* symbols in 
1cd0: 73 71 6c 69 74 65 49 6e 74 2e 68 20 63 6f 72 72  sqliteInt.h corr
1ce0: 65 73 70 6f 6e 64 20 74 6f 0a 20 20 2a 2a 20 74  espond to.  ** t
1cf0: 68 65 20 70 6f 73 73 69 62 6c 65 20 76 61 6c 75  he possible valu
1d00: 65 73 20 6f 66 20 6d 65 74 61 5b 34 5d 2e 0a 20  es of meta[4].. 
1d10: 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   */.  if( rc==SQ
1d20: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 69  LITE_OK ){.    i
1d30: 6e 74 20 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d  nt i;.    for(i=
1d40: 30 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  0; rc==SQLITE_OK
1d50: 20 26 26 20 69 3c 73 69 7a 65 6f 66 28 6d 65 74   && i<sizeof(met
1d60: 61 29 2f 73 69 7a 65 6f 66 28 6d 65 74 61 5b 30  a)/sizeof(meta[0
1d70: 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  ]); i++){.      
1d80: 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1d90: 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62  eGetMeta(db->aDb
1da0: 5b 69 44 62 5d 2e 70 42 74 2c 20 69 2b 31 2c 20  [iDb].pBt, i+1, 
1db0: 26 6d 65 74 61 5b 69 5d 29 3b 0a 20 20 20 20 7d  &meta[i]);.    }
1dc0: 0a 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20  .    if( rc ){. 
1dd0: 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
1de0: 74 72 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20  tring(pzErrMsg, 
1df0: 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63  sqlite3ErrStr(rc
1e00: 29 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a 20 20  ), (char*)0);.  
1e10: 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
1e20: 43 6c 6f 73 65 43 75 72 73 6f 72 28 63 75 72 4d  CloseCursor(curM
1e30: 61 69 6e 29 3b 0a 20 20 20 20 20 20 72 65 74 75  ain);.      retu
1e40: 72 6e 20 72 63 3b 0a 20 20 20 20 7d 0a 20 20 7d  rn rc;.    }.  }
1e50: 65 6c 73 65 7b 0a 20 20 20 20 6d 65 6d 73 65 74  else{.    memset
1e60: 28 6d 65 74 61 2c 20 30 2c 20 73 69 7a 65 6f 66  (meta, 0, sizeof
1e70: 28 6d 65 74 61 29 29 3b 0a 20 20 7d 0a 20 20 64  (meta));.  }.  d
1e80: 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 73 63 68 65  b->aDb[iDb].sche
1e90: 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20 6d 65 74 61  ma_cookie = meta
1ea0: 5b 30 5d 3b 0a 0a 20 20 2f 2a 20 49 66 20 6f 70  [0];..  /* If op
1eb0: 65 6e 69 6e 67 20 61 20 6e 6f 6e 2d 65 6d 70 74  ening a non-empt
1ec0: 79 20 64 61 74 61 62 61 73 65 2c 20 63 68 65 63  y database, chec
1ed0: 6b 20 74 68 65 20 74 65 78 74 20 65 6e 63 6f 64  k the text encod
1ee0: 69 6e 67 2e 20 46 6f 72 20 74 68 65 0a 20 20 2a  ing. For the.  *
1ef0: 2a 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c  * main database,
1f00: 20 73 65 74 20 73 71 6c 69 74 65 33 2e 65 6e 63   set sqlite3.enc
1f10: 20 74 6f 20 74 68 65 20 65 6e 63 6f 64 69 6e 67   to the encoding
1f20: 20 6f 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74   of the main dat
1f30: 61 62 61 73 65 2e 0a 20 20 2a 2a 20 46 6f 72 20  abase..  ** For 
1f40: 61 6e 20 61 74 74 61 63 68 65 64 20 64 62 2c 20  an attached db, 
1f50: 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 69  it is an error i
1f60: 66 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 69  f the encoding i
1f70: 73 20 6e 6f 74 20 74 68 65 20 73 61 6d 65 0a 20  s not the same. 
1f80: 20 2a 2a 20 61 73 20 73 71 6c 69 74 65 33 2e 65   ** as sqlite3.e
1f90: 6e 63 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 6d  nc..  */.  if( m
1fa0: 65 74 61 5b 34 5d 20 29 7b 20 20 2f 2a 20 74 65  eta[4] ){  /* te
1fb0: 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20  xt encoding */. 
1fc0: 20 20 20 69 66 28 20 69 44 62 3d 3d 30 20 29 7b     if( iDb==0 ){
1fd0: 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 6f 70 65  .      /* If ope
1fe0: 6e 69 6e 67 20 74 68 65 20 6d 61 69 6e 20 64 61  ning the main da
1ff0: 74 61 62 61 73 65 2c 20 73 65 74 20 64 62 2d 3e  tabase, set db->
2000: 65 6e 63 2e 20 2a 2f 0a 20 20 20 20 20 20 64 62  enc. */.      db
2010: 2d 3e 65 6e 63 20 3d 20 28 75 38 29 6d 65 74 61  ->enc = (u8)meta
2020: 5b 34 5d 3b 0a 20 20 20 20 20 20 64 62 2d 3e 70  [4];.      db->p
2030: 44 66 6c 74 43 6f 6c 6c 20 3d 20 73 71 6c 69 74  DfltColl = sqlit
2040: 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 64 62  e3FindCollSeq(db
2050: 2c 20 64 62 2d 3e 65 6e 63 2c 20 22 42 49 4e 41  , db->enc, "BINA
2060: 52 59 22 2c 20 36 2c 20 30 29 3b 0a 20 20 20 20  RY", 6, 0);.    
2070: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20  }else{.      /* 
2080: 49 66 20 6f 70 65 6e 69 6e 67 20 61 6e 20 61 74  If opening an at
2090: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 2c  tached database,
20a0: 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6d 75   the encoding mu
20b0: 63 68 20 6d 61 74 63 68 20 64 62 2d 3e 65 6e 63  ch match db->enc
20c0: 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 6d 65   */.      if( me
20d0: 74 61 5b 34 5d 21 3d 64 62 2d 3e 65 6e 63 20 29  ta[4]!=db->enc )
20e0: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
20f0: 33 42 74 72 65 65 43 6c 6f 73 65 43 75 72 73 6f  3BtreeCloseCurso
2100: 72 28 63 75 72 4d 61 69 6e 29 3b 0a 20 20 20 20  r(curMain);.    
2110: 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
2120: 72 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20 22  ring(pzErrMsg, "
2130: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
2140: 65 73 20 6d 75 73 74 20 75 73 65 20 74 68 65 20  es must use the 
2150: 73 61 6d 65 22 0a 20 20 20 20 20 20 20 20 20 20  same".          
2160: 20 20 22 20 74 65 78 74 20 65 6e 63 6f 64 69 6e    " text encodin
2170: 67 20 61 73 20 6d 61 69 6e 20 64 61 74 61 62 61  g as main databa
2180: 73 65 22 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a  se", (char*)0);.
2190: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
21a0: 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
21b0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a     }.    }.  }..
21c0: 20 20 69 66 28 20 69 44 62 3d 3d 30 20 29 7b 0a    if( iDb==0 ){.
21d0: 20 20 20 20 73 69 7a 65 20 3d 20 6d 65 74 61 5b      size = meta[
21e0: 32 5d 3b 0a 20 20 20 20 69 66 28 20 73 69 7a 65  2];.    if( size
21f0: 3d 3d 30 20 29 7b 20 73 69 7a 65 20 3d 20 4d 41  ==0 ){ size = MA
2200: 58 5f 50 41 47 45 53 3b 20 7d 0a 20 20 20 20 64  X_PAGES; }.    d
2210: 62 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20  b->cache_size = 
2220: 73 69 7a 65 3b 0a 20 20 20 20 64 62 2d 3e 73 61  size;.    db->sa
2230: 66 65 74 79 5f 6c 65 76 65 6c 20 3d 20 6d 65 74  fety_level = met
2240: 61 5b 33 5d 3b 0a 20 20 20 20 69 66 28 20 6d 65  a[3];.    if( me
2250: 74 61 5b 35 5d 3e 30 20 26 26 20 6d 65 74 61 5b  ta[5]>0 && meta[
2260: 35 5d 3c 3d 32 20 26 26 20 64 62 2d 3e 74 65 6d  5]<=2 && db->tem
2270: 70 5f 73 74 6f 72 65 3d 3d 30 20 29 7b 0a 20 20  p_store==0 ){.  
2280: 20 20 20 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f      db->temp_sto
2290: 72 65 20 3d 20 6d 65 74 61 5b 35 5d 3b 0a 20 20  re = meta[5];.  
22a0: 20 20 7d 0a 20 20 20 20 69 66 28 20 64 62 2d 3e    }.    if( db->
22b0: 73 61 66 65 74 79 5f 6c 65 76 65 6c 3d 3d 30 20  safety_level==0 
22c0: 29 20 64 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76  ) db->safety_lev
22d0: 65 6c 20 3d 20 32 3b 0a 0a 20 20 20 20 2f 2a 20  el = 2;..    /* 
22e0: 46 49 58 20 4d 45 3a 20 45 76 65 72 79 20 73 74  FIX ME: Every st
22f0: 72 75 63 74 20 44 62 20 77 69 6c 6c 20 6e 65 65  ruct Db will nee
2300: 64 20 61 20 6e 65 78 74 5f 63 6f 6f 6b 69 65 20  d a next_cookie 
2310: 2a 2f 0a 20 20 20 20 64 62 2d 3e 6e 65 78 74 5f  */.    db->next_
2320: 63 6f 6f 6b 69 65 20 3d 20 6d 65 74 61 5b 30 5d  cookie = meta[0]
2330: 3b 0a 20 20 20 20 64 62 2d 3e 66 69 6c 65 5f 66  ;.    db->file_f
2340: 6f 72 6d 61 74 20 3d 20 6d 65 74 61 5b 31 5d 3b  ormat = meta[1];
2350: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 66 69 6c  .    if( db->fil
2360: 65 5f 66 6f 72 6d 61 74 3d 3d 30 20 29 7b 0a 20  e_format==0 ){. 
2370: 20 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70       /* This hap
2380: 70 65 6e 73 20 69 66 20 74 68 65 20 64 61 74 61  pens if the data
2390: 62 61 73 65 20 77 61 73 20 69 6e 69 74 69 61 6c  base was initial
23a0: 6c 79 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20  ly empty */.    
23b0: 20 20 64 62 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61    db->file_forma
23c0: 74 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  t = 1;.    }.  }
23d0: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 66 69 6c  ..  /*.  **  fil
23e0: 65 5f 66 6f 72 6d 61 74 3d 3d 31 20 20 20 20 56  e_format==1    V
23f0: 65 72 73 69 6f 6e 20 33 2e 30 2e 30 2e 0a 20 20  ersion 3.0.0..  
2400: 2a 2f 0a 20 20 69 66 28 20 6d 65 74 61 5b 31 5d  */.  if( meta[1]
2410: 3e 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  >1 ){.    sqlite
2420: 33 42 74 72 65 65 43 6c 6f 73 65 43 75 72 73 6f  3BtreeCloseCurso
2430: 72 28 63 75 72 4d 61 69 6e 29 3b 0a 20 20 20 20  r(curMain);.    
2440: 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
2450: 28 70 7a 45 72 72 4d 73 67 2c 20 22 75 6e 73 75  (pzErrMsg, "unsu
2460: 70 70 6f 72 74 65 64 20 66 69 6c 65 20 66 6f 72  pported file for
2470: 6d 61 74 22 2c 20 28 63 68 61 72 2a 29 30 29 3b  mat", (char*)0);
2480: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
2490: 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  TE_ERROR;.  }.. 
24a0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
24b0: 43 61 63 68 65 53 69 7a 65 28 64 62 2d 3e 61 44  CacheSize(db->aD
24c0: 62 5b 69 44 62 5d 2e 70 42 74 2c 20 64 62 2d 3e  b[iDb].pBt, db->
24d0: 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 73  cache_size);.  s
24e0: 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 53 61  qlite3BtreeSetSa
24f0: 66 65 74 79 4c 65 76 65 6c 28 64 62 2d 3e 61 44  fetyLevel(db->aD
2500: 62 5b 69 44 62 5d 2e 70 42 74 2c 20 6d 65 74 61  b[iDb].pBt, meta
2510: 5b 33 5d 3d 3d 30 20 3f 20 32 20 3a 20 6d 65 74  [3]==0 ? 2 : met
2520: 61 5b 33 5d 29 3b 0a 0a 20 20 2f 2a 20 52 65 61  a[3]);..  /* Rea
2530: 64 20 74 68 65 20 73 63 68 65 6d 61 20 69 6e 66  d the schema inf
2540: 6f 72 6d 61 74 69 6f 6e 20 6f 75 74 20 6f 66 20  ormation out of 
2550: 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65  the schema table
2560: 73 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  s.  */.  assert(
2570: 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 29   db->init.busy )
2580: 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
2590: 54 45 5f 45 4d 50 54 59 20 29 7b 0a 20 20 20 20  TE_EMPTY ){.    
25a0: 2f 2a 20 46 6f 72 20 61 6e 20 65 6d 70 74 79 20  /* For an empty 
25b0: 64 61 74 61 62 61 73 65 2c 20 74 68 65 72 65 20  database, there 
25c0: 69 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20 72 65  is nothing to re
25d0: 61 64 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 53  ad */.    rc = S
25e0: 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 65 6c 73  QLITE_OK;.  }els
25f0: 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 61  e{.    sqlite3Sa
2600: 66 65 74 79 4f 66 66 28 64 62 29 3b 0a 20 20 20  fetyOff(db);.   
2610: 20 69 66 28 20 69 44 62 3d 3d 30 20 29 7b 0a 20   if( iDb==0 ){. 
2620: 20 20 20 20 20 2f 2a 20 54 68 69 73 20 53 51 4c       /* This SQL
2630: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 69 65 73   statement tries
2640: 20 74 6f 20 72 65 61 64 20 74 68 65 20 74 65 6d   to read the tem
2650: 70 2e 2a 20 73 63 68 65 6d 61 20 66 72 6f 6d 20  p.* schema from 
2660: 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 73 71 6c  the.      ** sql
2670: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 20  ite_temp_master 
2680: 74 61 62 6c 65 2e 20 49 74 20 6d 69 67 68 74 20  table. It might 
2690: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 4d  return SQLITE_EM
26a0: 50 54 59 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20  PTY. .      */. 
26b0: 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
26c0: 33 5f 65 78 65 63 28 64 62 2c 20 69 6e 69 74 5f  3_exec(db, init_
26d0: 73 63 72 69 70 74 31 2c 20 73 71 6c 69 74 65 33  script1, sqlite3
26e0: 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69  InitCallback, &i
26f0: 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 20  nitData, 0);.   
2700: 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
2710: 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49  E_OK || rc==SQLI
2720: 54 45 5f 45 4d 50 54 59 20 29 7b 0a 20 20 20 20  TE_EMPTY ){.    
2730: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2740: 5f 65 78 65 63 28 64 62 2c 20 69 6e 69 74 5f 73  _exec(db, init_s
2750: 63 72 69 70 74 32 2c 20 73 71 6c 69 74 65 33 49  cript2, sqlite3I
2760: 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e  nitCallback, &in
2770: 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 20 20  itData, 0);.    
2780: 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
2790: 20 20 20 20 20 63 68 61 72 20 2a 7a 53 71 6c 20       char *zSql 
27a0: 3d 20 30 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  = 0;.      sqlit
27b0: 65 33 53 65 74 53 74 72 69 6e 67 28 26 7a 53 71  e3SetString(&zSq
27c0: 6c 2c 20 0a 20 20 20 20 20 20 20 20 20 22 53 45  l, .         "SE
27d0: 4c 45 43 54 20 74 79 70 65 2c 20 6e 61 6d 65 2c  LECT type, name,
27e0: 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c 2c 20   rootpage, sql, 
27f0: 22 2c 20 7a 44 62 4e 75 6d 2c 20 22 20 46 52 4f  ", zDbNum, " FRO
2800: 4d 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 20  M \"",.         
2810: 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61  db->aDb[iDb].zNa
2820: 6d 65 2c 20 22 5c 22 2e 73 71 6c 69 74 65 5f 6d  me, "\".sqlite_m
2830: 61 73 74 65 72 22 2c 20 28 63 68 61 72 2a 29 30  aster", (char*)0
2840: 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  );.      rc = sq
2850: 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a  lite3_exec(db, z
2860: 53 71 6c 2c 20 73 71 6c 69 74 65 33 49 6e 69 74  Sql, sqlite3Init
2870: 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44  Callback, &initD
2880: 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 20 20 73  ata, 0);.      s
2890: 71 6c 69 74 65 46 72 65 65 28 7a 53 71 6c 29 3b  qliteFree(zSql);
28a0: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
28b0: 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 3b 0a  e3SafetyOn(db);.
28c0: 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
28d0: 43 6c 6f 73 65 43 75 72 73 6f 72 28 63 75 72 4d  CloseCursor(curM
28e0: 61 69 6e 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  ain);.  }.  if( 
28f0: 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66  sqlite3_malloc_f
2900: 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 73 71 6c  ailed ){.    sql
2910: 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 70 7a  ite3SetString(pz
2920: 45 72 72 4d 73 67 2c 20 22 6f 75 74 20 6f 66 20  ErrMsg, "out of 
2930: 6d 65 6d 6f 72 79 22 2c 20 28 63 68 61 72 2a 29  memory", (char*)
2940: 30 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c  0);.    rc = SQL
2950: 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 73  ITE_NOMEM;.    s
2960: 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65 72  qlite3ResetInter
2970: 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 30 29  nalSchema(db, 0)
2980: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d  ;.  }.  if( rc==
2990: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
29a0: 20 44 62 53 65 74 50 72 6f 70 65 72 74 79 28 64   DbSetProperty(d
29b0: 62 2c 20 69 44 62 2c 20 44 42 5f 53 63 68 65 6d  b, iDb, DB_Schem
29c0: 61 4c 6f 61 64 65 64 29 3b 0a 20 20 20 20 69 66  aLoaded);.    if
29d0: 28 20 69 44 62 3d 3d 30 20 29 7b 0a 20 20 20 20  ( iDb==0 ){.    
29e0: 20 20 44 62 53 65 74 50 72 6f 70 65 72 74 79 28    DbSetProperty(
29f0: 64 62 2c 20 31 2c 20 44 42 5f 53 63 68 65 6d 61  db, 1, DB_Schema
2a00: 4c 6f 61 64 65 64 29 3b 0a 20 20 20 20 7d 0a 20  Loaded);.    }. 
2a10: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
2a20: 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c  te3ResetInternal
2a30: 53 63 68 65 6d 61 28 64 62 2c 20 69 44 62 29 3b  Schema(db, iDb);
2a40: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63  .  }.  return rc
2a50: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 69 74 69  ;.}../*.** Initi
2a60: 61 6c 69 7a 65 20 61 6c 6c 20 64 61 74 61 62 61  alize all databa
2a70: 73 65 20 66 69 6c 65 73 20 2d 20 74 68 65 20 6d  se files - the m
2a80: 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
2a90: 65 2c 20 74 68 65 20 66 69 6c 65 0a 2a 2a 20 75  e, the file.** u
2aa0: 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 65 6d  sed to store tem
2ab0: 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c 20 61  porary tables, a
2ac0: 6e 64 20 61 6e 79 20 61 64 64 69 74 69 6f 6e 61  nd any additiona
2ad0: 6c 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  l database files
2ae0: 0a 2a 2a 20 63 72 65 61 74 65 64 20 75 73 69 6e  .** created usin
2af0: 67 20 41 54 54 41 43 48 20 73 74 61 74 65 6d 65  g ATTACH stateme
2b00: 6e 74 73 2e 20 20 52 65 74 75 72 6e 20 61 20 73  nts.  Return a s
2b10: 75 63 63 65 73 73 20 63 6f 64 65 2e 20 20 49 66  uccess code.  If
2b20: 20 61 6e 0a 2a 2a 20 65 72 72 6f 72 20 6f 63 63   an.** error occ
2b30: 75 72 73 2c 20 77 72 69 74 65 20 61 6e 20 65 72  urs, write an er
2b40: 72 6f 72 20 6d 65 73 73 61 67 65 20 69 6e 74 6f  ror message into
2b50: 20 2a 70 7a 45 72 72 4d 73 67 2e 0a 2a 2a 0a 2a   *pzErrMsg..**.*
2b60: 2a 20 41 66 74 65 72 20 74 68 65 20 64 61 74 61  * After the data
2b70: 62 61 73 65 20 69 73 20 69 6e 69 74 69 61 6c 69  base is initiali
2b80: 7a 65 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f  zed, the SQLITE_
2b90: 49 6e 69 74 69 61 6c 69 7a 65 64 0a 2a 2a 20 62  Initialized.** b
2ba0: 69 74 20 69 73 20 73 65 74 20 69 6e 20 74 68 65  it is set in the
2bb0: 20 66 6c 61 67 73 20 66 69 65 6c 64 20 6f 66 20   flags field of 
2bc0: 74 68 65 20 73 71 6c 69 74 65 20 73 74 72 75 63  the sqlite struc
2bd0: 74 75 72 65 2e 20 0a 2a 2f 0a 69 6e 74 20 73 71  ture. .*/.int sq
2be0: 6c 69 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65  lite3Init(sqlite
2bf0: 20 2a 64 62 2c 20 63 68 61 72 20 2a 2a 70 7a 45   *db, char **pzE
2c00: 72 72 4d 73 67 29 7b 0a 20 20 69 6e 74 20 69 2c  rrMsg){.  int i,
2c10: 20 72 63 3b 0a 20 20 0a 20 20 69 66 28 20 64 62   rc;.  .  if( db
2c20: 2d 3e 69 6e 69 74 2e 62 75 73 79 20 29 20 72 65  ->init.busy ) re
2c30: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  turn SQLITE_OK;.
2c40: 20 20 61 73 73 65 72 74 28 20 28 64 62 2d 3e 66    assert( (db->f
2c50: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 49 6e  lags & SQLITE_In
2c60: 69 74 69 61 6c 69 7a 65 64 29 3d 3d 30 20 29 3b  itialized)==0 );
2c70: 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  .  rc = SQLITE_O
2c80: 4b 3b 0a 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75  K;.  db->init.bu
2c90: 73 79 20 3d 20 31 3b 0a 20 20 66 6f 72 28 69 3d  sy = 1;.  for(i=
2ca0: 30 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  0; rc==SQLITE_OK
2cb0: 20 26 26 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69   && i<db->nDb; i
2cc0: 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 44 62 48  ++){.    if( DbH
2cd0: 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20 69  asProperty(db, i
2ce0: 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65  , DB_SchemaLoade
2cf0: 64 29 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  d) ) continue;. 
2d00: 20 20 20 61 73 73 65 72 74 28 20 69 21 3d 31 20     assert( i!=1 
2d10: 29 3b 20 20 2f 2a 20 53 68 6f 75 6c 64 20 68 61  );  /* Should ha
2d20: 76 65 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69  ve been initiali
2d30: 7a 65 64 20 74 6f 67 65 74 68 65 72 20 77 69 74  zed together wit
2d40: 68 20 30 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20  h 0 */.    rc = 
2d50: 73 71 6c 69 74 65 33 49 6e 69 74 4f 6e 65 28 64  sqlite3InitOne(d
2d60: 62 2c 20 69 2c 20 70 7a 45 72 72 4d 73 67 29 3b  b, i, pzErrMsg);
2d70: 0a 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20  .    if( rc ){. 
2d80: 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65       sqlite3Rese
2d90: 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28  tInternalSchema(
2da0: 64 62 2c 20 69 29 3b 0a 20 20 20 20 7d 0a 20 20  db, i);.    }.  
2db0: 7d 0a 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73  }.  db->init.bus
2dc0: 79 20 3d 20 30 3b 0a 20 20 69 66 28 20 72 63 3d  y = 0;.  if( rc=
2dd0: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
2de0: 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53    db->flags |= S
2df0: 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c 69 7a 65  QLITE_Initialize
2e00: 64 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6f  d;.    sqlite3Co
2e10: 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e  mmitInternalChan
2e20: 67 65 73 28 64 62 29 3b 0a 20 20 7d 0a 0a 20 20  ges(db);.  }..  
2e30: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
2e40: 4b 20 29 7b 0a 20 20 20 20 64 62 2d 3e 66 6c 61  K ){.    db->fla
2e50: 67 73 20 26 3d 20 7e 53 51 4c 49 54 45 5f 49 6e  gs &= ~SQLITE_In
2e60: 69 74 69 61 6c 69 7a 65 64 3b 0a 20 20 7d 0a 20  itialized;.  }. 
2e70: 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f   return rc;.}../
2e80: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
2e90: 65 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20  e is a no-op if 
2ea0: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
2eb0: 65 6d 61 20 69 73 20 61 6c 72 65 61 64 79 20 69  ema is already i
2ec0: 6e 69 74 69 61 6c 69 73 65 64 2e 0a 2a 2a 20 4f  nitialised..** O
2ed0: 74 68 65 72 77 69 73 65 2c 20 74 68 65 20 73 63  therwise, the sc
2ee0: 68 65 6d 61 20 69 73 20 6c 6f 61 64 65 64 2e 20  hema is loaded. 
2ef0: 41 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 69 73  An error code is
2f00: 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a 69 6e   returned..*/.in
2f10: 74 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68  t sqlite3ReadSch
2f20: 65 6d 61 28 73 71 6c 69 74 65 20 2a 64 62 2c 20  ema(sqlite *db, 
2f30: 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 29  char **pzErrMsg)
2f40: 7b 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c  {.  int rc = SQL
2f50: 49 54 45 5f 4f 4b 3b 0a 0a 20 20 69 66 28 20 21  ITE_OK;..  if( !
2f60: 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 29 7b  db->init.busy ){
2f70: 0a 20 20 20 20 69 66 28 20 28 64 62 2d 3e 66 6c  .    if( (db->fl
2f80: 61 67 73 20 26 20 53 51 4c 49 54 45 5f 49 6e 69  ags & SQLITE_Ini
2f90: 74 69 61 6c 69 7a 65 64 29 3d 3d 30 20 29 7b 0a  tialized)==0 ){.
2fa0: 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
2fb0: 65 33 49 6e 69 74 28 64 62 2c 20 70 7a 45 72 72  e3Init(db, pzErr
2fc0: 4d 73 67 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  Msg);.    }.  }.
2fd0: 20 20 61 73 73 65 72 74 28 20 72 63 21 3d 53 51    assert( rc!=SQ
2fe0: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 64 62 2d 3e  LITE_OK || (db->
2ff0: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 49  flags & SQLITE_I
3000: 6e 69 74 69 61 6c 69 7a 65 64 29 7c 7c 64 62 2d  nitialized)||db-
3010: 3e 69 6e 69 74 2e 62 75 73 79 20 29 3b 0a 20 20  >init.busy );.  
3020: 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a  return rc;.}../*
3030: 0a 2a 2a 20 54 68 65 20 76 65 72 73 69 6f 6e 20  .** The version 
3040: 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79 0a 2a  of the library.*
3050: 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 72 63 73  /.const char rcs
3060: 69 64 5b 5d 20 3d 20 22 40 28 23 29 20 5c 30 34  id[] = "@(#) \04
3070: 34 49 64 3a 20 53 51 4c 69 74 65 20 76 65 72 73  4Id: SQLite vers
3080: 69 6f 6e 20 22 20 53 51 4c 49 54 45 5f 56 45 52  ion " SQLITE_VER
3090: 53 49 4f 4e 20 22 20 24 22 3b 0a 63 6f 6e 73 74  SION " $";.const
30a0: 20 63 68 61 72 20 73 71 6c 69 74 65 33 5f 76 65   char sqlite3_ve
30b0: 72 73 69 6f 6e 5b 5d 20 3d 20 53 51 4c 49 54 45  rsion[] = SQLITE
30c0: 5f 56 45 52 53 49 4f 4e 3b 0a 0a 2f 2a 0a 2a 2a  _VERSION;../*.**
30d0: 20 54 68 69 73 20 69 73 20 74 68 65 20 64 65 66   This is the def
30e0: 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 66  ault collating f
30f0: 75 6e 63 74 69 6f 6e 20 6e 61 6d 65 64 20 22 42  unction named "B
3100: 49 4e 41 52 59 22 20 77 68 69 63 68 20 69 73 20  INARY" which is 
3110: 61 6c 77 61 79 73 0a 2a 2a 20 61 76 61 69 6c 61  always.** availa
3120: 62 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ble..*/.static i
3130: 6e 74 20 62 69 6e 61 72 79 43 6f 6c 6c 61 74 69  nt binaryCollati
3140: 6e 67 46 75 6e 63 28 0a 20 20 76 6f 69 64 20 2a  ngFunc(.  void *
3150: 4e 6f 74 55 73 65 64 2c 0a 20 20 69 6e 74 20 6e  NotUsed,.  int n
3160: 4b 65 79 31 2c 20 63 6f 6e 73 74 20 76 6f 69 64  Key1, const void
3170: 20 2a 70 4b 65 79 31 2c 0a 20 20 69 6e 74 20 6e   *pKey1,.  int n
3180: 4b 65 79 32 2c 20 63 6f 6e 73 74 20 76 6f 69 64  Key2, const void
3190: 20 2a 70 4b 65 79 32 0a 29 7b 0a 20 20 69 6e 74   *pKey2.){.  int
31a0: 20 72 63 2c 20 6e 3b 0a 20 20 6e 20 3d 20 6e 4b   rc, n;.  n = nK
31b0: 65 79 31 3c 6e 4b 65 79 32 20 3f 20 6e 4b 65 79  ey1<nKey2 ? nKey
31c0: 31 20 3a 20 6e 4b 65 79 32 3b 0a 20 20 72 63 20  1 : nKey2;.  rc 
31d0: 3d 20 6d 65 6d 63 6d 70 28 70 4b 65 79 31 2c 20  = memcmp(pKey1, 
31e0: 70 4b 65 79 32 2c 20 6e 29 3b 0a 20 20 69 66 28  pKey2, n);.  if(
31f0: 20 72 63 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63   rc==0 ){.    rc
3200: 20 3d 20 6e 4b 65 79 31 20 2d 20 6e 4b 65 79 32   = nKey1 - nKey2
3210: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72  ;.  }.  return r
3220: 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 6f 74  c;.}../*.** Anot
3230: 68 65 72 20 62 75 69 6c 74 2d 69 6e 20 63 6f 6c  her built-in col
3240: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 3a  lating sequence:
3250: 20 4e 4f 43 41 53 45 2e 20 0a 2a 2a 0a 2a 2a 20   NOCASE. .**.** 
3260: 54 68 69 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73  This collating s
3270: 65 71 75 65 6e 63 65 20 69 73 20 69 6e 74 65 6e  equence is inten
3280: 64 65 64 20 74 6f 20 62 65 20 75 73 65 64 20 66  ded to be used f
3290: 6f 72 20 22 63 61 73 65 20 69 6e 64 65 70 65 6e  or "case indepen
32a0: 64 61 6e 74 0a 2a 2a 20 63 6f 6d 70 61 72 69 73  dant.** comparis
32b0: 6f 6e 22 2e 20 53 51 4c 69 74 65 27 73 20 6b 6e  on". SQLite's kn
32c0: 6f 77 6c 65 64 67 65 20 6f 66 20 75 70 70 65 72  owledge of upper
32d0: 20 61 6e 64 20 6c 6f 77 65 72 20 63 61 73 65 20   and lower case 
32e0: 65 71 75 69 76 61 6c 65 6e 74 73 0a 2a 2a 20 65  equivalents.** e
32f0: 78 74 65 6e 64 73 20 6f 6e 6c 79 20 74 6f 20 74  xtends only to t
3300: 68 65 20 32 36 20 63 68 61 72 61 63 74 65 72 73  he 26 characters
3310: 20 75 73 65 64 20 69 6e 20 74 68 65 20 45 6e 67   used in the Eng
3320: 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 2e 0a 2a  lish language..*
3330: 2a 0a 2a 2a 20 41 74 20 74 68 65 20 6d 6f 6d 65  *.** At the mome
3340: 6e 74 20 74 68 65 72 65 20 69 73 20 6f 6e 6c 79  nt there is only
3350: 20 61 20 55 54 46 2d 38 20 69 6d 70 6c 65 6d 65   a UTF-8 impleme
3360: 6e 74 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61 74  ntation..*/.stat
3370: 69 63 20 69 6e 74 20 6e 6f 63 61 73 65 43 6f 6c  ic int nocaseCol
3380: 6c 61 74 69 6e 67 46 75 6e 63 28 0a 20 20 76 6f  latingFunc(.  vo
3390: 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 69  id *NotUsed,.  i
33a0: 6e 74 20 6e 4b 65 79 31 2c 20 63 6f 6e 73 74 20  nt nKey1, const 
33b0: 76 6f 69 64 20 2a 70 4b 65 79 31 2c 0a 20 20 69  void *pKey1,.  i
33c0: 6e 74 20 6e 4b 65 79 32 2c 20 63 6f 6e 73 74 20  nt nKey2, const 
33d0: 76 6f 69 64 20 2a 70 4b 65 79 32 0a 29 7b 0a 20  void *pKey2.){. 
33e0: 20 69 6e 74 20 72 20 3d 20 73 71 6c 69 74 65 33   int r = sqlite3
33f0: 53 74 72 4e 49 43 6d 70 28 0a 20 20 20 20 20 20  StrNICmp(.      
3400: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 70 4b  (const char *)pK
3410: 65 79 31 2c 20 28 63 6f 6e 73 74 20 63 68 61 72  ey1, (const char
3420: 20 2a 29 70 4b 65 79 32 2c 20 28 6e 4b 65 79 31   *)pKey2, (nKey1
3430: 3e 6e 4b 65 79 32 29 3f 6e 4b 65 79 31 3a 6e 4b  >nKey2)?nKey1:nK
3440: 65 79 32 29 3b 0a 20 20 69 66 28 20 30 3d 3d 72  ey2);.  if( 0==r
3450: 20 29 7b 0a 20 20 20 20 72 20 3d 20 6e 4b 65 79   ){.    r = nKey
3460: 31 2d 6e 4b 65 79 32 3b 0a 20 20 7d 0a 20 20 72  1-nKey2;.  }.  r
3470: 65 74 75 72 6e 20 72 3b 0a 7d 0a 0a 2f 2a 0a 2a  eturn r;.}../*.*
3480: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 52 4f 57  * Return the ROW
3490: 49 44 20 6f 66 20 74 68 65 20 6d 6f 73 74 20 72  ID of the most r
34a0: 65 63 65 6e 74 20 69 6e 73 65 72 74 0a 2a 2f 0a  ecent insert.*/.
34b0: 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 20 73 71  long long int sq
34c0: 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72  lite3_last_inser
34d0: 74 5f 72 6f 77 69 64 28 73 71 6c 69 74 65 20 2a  t_rowid(sqlite *
34e0: 64 62 29 7b 0a 20 20 72 65 74 75 72 6e 20 64 62  db){.  return db
34f0: 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 7d 0a 0a  ->lastRowid;.}..
3500: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  /*.** Return the
3510: 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 6e 67   number of chang
3520: 65 73 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 72  es in the most r
3530: 65 63 65 6e 74 20 63 61 6c 6c 20 74 6f 20 73 71  ecent call to sq
3540: 6c 69 74 65 33 5f 65 78 65 63 28 29 2e 0a 2a 2f  lite3_exec()..*/
3550: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 68 61  .int sqlite3_cha
3560: 6e 67 65 73 28 73 71 6c 69 74 65 20 2a 64 62 29  nges(sqlite *db)
3570: 7b 0a 20 20 72 65 74 75 72 6e 20 64 62 2d 3e 6e  {.  return db->n
3580: 43 68 61 6e 67 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  Change;.}../*.**
3590: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   Return the numb
35a0: 65 72 20 6f 66 20 63 68 61 6e 67 65 73 20 70 72  er of changes pr
35b0: 6f 64 75 63 65 64 20 62 79 20 74 68 65 20 6c 61  oduced by the la
35c0: 73 74 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54  st INSERT, UPDAT
35d0: 45 2c 20 6f 72 0a 2a 2a 20 44 45 4c 45 54 45 20  E, or.** DELETE 
35e0: 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 63 6f 6d  statement to com
35f0: 70 6c 65 74 65 20 65 78 65 63 75 74 69 6f 6e 2e  plete execution.
3600: 20 54 68 65 20 63 6f 75 6e 74 20 64 6f 65 73 20   The count does 
3610: 6e 6f 74 20 69 6e 63 6c 75 64 65 0a 2a 2a 20 63  not include.** c
3620: 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20 53 51  hanges due to SQ
3630: 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 65 78 65  L statements exe
3640: 63 75 74 65 64 20 69 6e 20 74 72 69 67 67 65 72  cuted in trigger
3650: 20 70 72 6f 67 72 61 6d 73 20 74 68 61 74 20 77   programs that w
3660: 65 72 65 0a 2a 2a 20 74 72 69 67 67 65 72 65 64  ere.** triggered
3670: 20 62 79 20 74 68 61 74 20 73 74 61 74 65 6d 65   by that stateme
3680: 6e 74 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  nt.*/.int sqlite
3690: 33 5f 6c 61 73 74 5f 73 74 61 74 65 6d 65 6e 74  3_last_statement
36a0: 5f 63 68 61 6e 67 65 73 28 73 71 6c 69 74 65 20  _changes(sqlite 
36b0: 2a 64 62 29 7b 0a 20 20 72 65 74 75 72 6e 20 64  *db){.  return d
36c0: 62 2d 3e 6c 73 43 68 61 6e 67 65 3b 0a 7d 0a 0a  b->lsChange;.}..
36d0: 2f 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 6e 20 65  /*.** Close an e
36e0: 78 69 73 74 69 6e 67 20 53 51 4c 69 74 65 20 64  xisting SQLite d
36f0: 61 74 61 62 61 73 65 0a 2a 2f 0a 76 6f 69 64 20  atabase.*/.void 
3700: 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 73 71  sqlite3_close(sq
3710: 6c 69 74 65 20 2a 64 62 29 7b 0a 20 20 48 61 73  lite *db){.  Has
3720: 68 45 6c 65 6d 20 2a 69 3b 0a 20 20 69 6e 74 20  hElem *i;.  int 
3730: 6a 3b 0a 20 20 64 62 2d 3e 77 61 6e 74 5f 74 6f  j;.  db->want_to
3740: 5f 63 6c 6f 73 65 20 3d 20 31 3b 0a 0a 20 20 2f  _close = 1;..  /
3750: 2a 20 46 49 58 20 4d 45 3a 20 64 62 2d 3e 6d 61  * FIX ME: db->ma
3760: 67 69 63 20 6d 61 79 20 62 65 20 73 65 74 20 74  gic may be set t
3770: 6f 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43  o SQLITE_MAGIC_C
3780: 4c 4f 53 45 44 20 69 66 20 74 68 65 20 64 61 74  LOSED if the dat
3790: 61 62 61 73 65 0a 20 20 2a 2a 20 63 61 6e 6e 6f  abase.  ** canno
37a0: 74 20 62 65 20 6f 70 65 6e 65 64 20 66 6f 72 20  t be opened for 
37b0: 73 6f 6d 65 20 72 65 61 73 6f 6e 2e 20 53 6f 20  some reason. So 
37c0: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 6e 65 65  this routine nee
37d0: 64 73 20 74 6f 20 72 75 6e 20 69 6e 0a 20 20 2a  ds to run in.  *
37e0: 2a 20 74 68 61 74 20 63 61 73 65 2e 20 42 75 74  * that case. But
37f0: 20 6d 61 79 62 65 20 74 68 65 72 65 20 73 68 6f   maybe there sho
3800: 75 6c 64 20 62 65 20 61 6e 20 65 78 74 72 61 20  uld be an extra 
3810: 6d 61 67 69 63 20 76 61 6c 75 65 20 66 6f 72 20  magic value for 
3820: 74 68 65 0a 20 20 2a 2a 20 22 66 61 69 6c 65 64  the.  ** "failed
3830: 20 74 6f 20 6f 70 65 6e 22 20 73 74 61 74 65 2e   to open" state.
3840: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e  .  */.  if( db->
3850: 6d 61 67 69 63 21 3d 53 51 4c 49 54 45 5f 4d 41  magic!=SQLITE_MA
3860: 47 49 43 5f 43 4c 4f 53 45 44 20 26 26 20 0a 20  GIC_CLOSED && . 
3870: 20 20 20 20 20 28 73 71 6c 69 74 65 33 53 61 66       (sqlite3Saf
3880: 65 74 79 43 68 65 63 6b 28 64 62 29 20 7c 7c 20  etyCheck(db) || 
3890: 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28  sqlite3SafetyOn(
38a0: 64 62 29 29 20 29 7b 0a 20 20 20 20 2f 2a 20 70  db)) ){.    /* p
38b0: 72 69 6e 74 66 28 22 44 49 44 20 4e 4f 54 20 43  rintf("DID NOT C
38c0: 4c 4f 53 45 5c 6e 22 29 3b 20 66 66 6c 75 73 68  LOSE\n"); fflush
38d0: 28 73 74 64 6f 75 74 29 3b 20 2a 2f 0a 20 20 20  (stdout); */.   
38e0: 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 0a 20 20   return;.  }..  
38f0: 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49  db->magic = SQLI
3900: 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 3b  TE_MAGIC_CLOSED;
3910: 0a 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 64 62  .  for(j=0; j<db
3920: 2d 3e 6e 44 62 3b 20 6a 2b 2b 29 7b 0a 20 20 20  ->nDb; j++){.   
3930: 20 73 74 72 75 63 74 20 44 62 20 2a 70 44 62 20   struct Db *pDb 
3940: 3d 20 26 64 62 2d 3e 61 44 62 5b 6a 5d 3b 0a 20  = &db->aDb[j];. 
3950: 20 20 20 69 66 28 20 70 44 62 2d 3e 70 42 74 20     if( pDb->pBt 
3960: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
3970: 42 74 72 65 65 43 6c 6f 73 65 28 70 44 62 2d 3e  BtreeClose(pDb->
3980: 70 42 74 29 3b 0a 20 20 20 20 20 20 70 44 62 2d  pBt);.      pDb-
3990: 3e 70 42 74 20 3d 20 30 3b 0a 20 20 20 20 7d 0a  >pBt = 0;.    }.
39a0: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52 65 73    }.  sqlite3Res
39b0: 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61  etInternalSchema
39c0: 28 64 62 2c 20 30 29 3b 0a 20 20 61 73 73 65 72  (db, 0);.  asser
39d0: 74 28 20 64 62 2d 3e 6e 44 62 3c 3d 32 20 29 3b  t( db->nDb<=2 );
39e0: 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61  .  assert( db->a
39f0: 44 62 3d 3d 64 62 2d 3e 61 44 62 53 74 61 74 69  Db==db->aDbStati
3a00: 63 20 29 3b 0a 20 20 66 6f 72 28 69 3d 73 71 6c  c );.  for(i=sql
3a10: 69 74 65 48 61 73 68 46 69 72 73 74 28 26 64 62  iteHashFirst(&db
3a20: 2d 3e 61 46 75 6e 63 29 3b 20 69 3b 20 69 3d 73  ->aFunc); i; i=s
3a30: 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 69 29  qliteHashNext(i)
3a40: 29 7b 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a  ){.    FuncDef *
3a50: 70 46 75 6e 63 2c 20 2a 70 4e 65 78 74 3b 0a 20  pFunc, *pNext;. 
3a60: 20 20 20 66 6f 72 28 70 46 75 6e 63 20 3d 20 28     for(pFunc = (
3a70: 46 75 6e 63 44 65 66 2a 29 73 71 6c 69 74 65 48  FuncDef*)sqliteH
3a80: 61 73 68 44 61 74 61 28 69 29 3b 20 70 46 75 6e  ashData(i); pFun
3a90: 63 3b 20 70 46 75 6e 63 3d 70 4e 65 78 74 29 7b  c; pFunc=pNext){
3aa0: 0a 20 20 20 20 20 20 70 4e 65 78 74 20 3d 20 70  .      pNext = p
3ab0: 46 75 6e 63 2d 3e 70 4e 65 78 74 3b 0a 20 20 20  Func->pNext;.   
3ac0: 20 20 20 73 71 6c 69 74 65 46 72 65 65 28 70 46     sqliteFree(pF
3ad0: 75 6e 63 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  unc);.    }.  }.
3ae0: 0a 20 20 66 6f 72 28 69 3d 73 71 6c 69 74 65 48  .  for(i=sqliteH
3af0: 61 73 68 46 69 72 73 74 28 26 64 62 2d 3e 61 43  ashFirst(&db->aC
3b00: 6f 6c 6c 53 65 71 29 3b 20 69 3b 20 69 3d 73 71  ollSeq); i; i=sq
3b10: 6c 69 74 65 48 61 73 68 4e 65 78 74 28 69 29 29  liteHashNext(i))
3b20: 7b 0a 20 20 20 20 43 6f 6c 6c 53 65 71 20 2a 70  {.    CollSeq *p
3b30: 43 6f 6c 6c 20 3d 20 28 43 6f 6c 6c 53 65 71 20  Coll = (CollSeq 
3b40: 2a 29 73 71 6c 69 74 65 48 61 73 68 44 61 74 61  *)sqliteHashData
3b50: 28 69 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 46  (i);.    sqliteF
3b60: 72 65 65 28 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a  ree(pColl);.  }.
3b70: 20 20 73 71 6c 69 74 65 33 48 61 73 68 43 6c 65    sqlite3HashCle
3b80: 61 72 28 26 64 62 2d 3e 61 43 6f 6c 6c 53 65 71  ar(&db->aCollSeq
3b90: 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33 48 61 73  );..  sqlite3Has
3ba0: 68 43 6c 65 61 72 28 26 64 62 2d 3e 61 46 75 6e  hClear(&db->aFun
3bb0: 63 29 3b 0a 20 20 73 71 6c 69 74 65 33 45 72 72  c);.  sqlite3Err
3bc0: 6f 72 28 64 62 2c 20 53 51 4c 49 54 45 5f 4f 4b  or(db, SQLITE_OK
3bd0: 2c 20 30 29 3b 20 2f 2a 20 44 65 61 6c 6c 6f 63  , 0); /* Dealloc
3be0: 61 74 65 73 20 61 6e 79 20 63 61 63 68 65 64 20  ates any cached 
3bf0: 65 72 72 6f 72 20 73 74 72 69 6e 67 73 2e 20 2a  error strings. *
3c00: 2f 0a 20 20 73 71 6c 69 74 65 46 72 65 65 28 64  /.  sqliteFree(d
3c10: 62 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 6f 6c  b);.}../*.** Rol
3c20: 6c 62 61 63 6b 20 61 6c 6c 20 64 61 74 61 62 61  lback all databa
3c30: 73 65 20 66 69 6c 65 73 2e 0a 2a 2f 0a 76 6f 69  se files..*/.voi
3c40: 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63  d sqlite3Rollbac
3c50: 6b 41 6c 6c 28 73 71 6c 69 74 65 20 2a 64 62 29  kAll(sqlite *db)
3c60: 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 66 6f 72  {.  int i;.  for
3c70: 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b  (i=0; i<db->nDb;
3c80: 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 64   i++){.    if( d
3c90: 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 20 29 7b  b->aDb[i].pBt ){
3ca0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74  .      sqlite3Bt
3cb0: 72 65 65 52 6f 6c 6c 62 61 63 6b 28 64 62 2d 3e  reeRollback(db->
3cc0: 61 44 62 5b 69 5d 2e 70 42 74 29 3b 0a 20 20 20  aDb[i].pBt);.   
3cd0: 20 20 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 69 6e     db->aDb[i].in
3ce0: 54 72 61 6e 73 20 3d 20 30 3b 0a 20 20 20 20 7d  Trans = 0;.    }
3cf0: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52 65  .  }.  sqlite3Re
3d00: 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d  setInternalSchem
3d10: 61 28 64 62 2c 20 30 29 3b 0a 20 20 2f 2a 20 73  a(db, 0);.  /* s
3d20: 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 49 6e  qlite3RollbackIn
3d30: 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 64 62  ternalChanges(db
3d40: 29 3b 20 2a 2f 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  ); */.}../*.** R
3d50: 65 74 75 72 6e 20 61 20 73 74 61 74 69 63 20 73  eturn a static s
3d60: 74 72 69 6e 67 20 74 68 61 74 20 64 65 73 63 72  tring that descr
3d70: 69 62 65 73 20 74 68 65 20 6b 69 6e 64 20 6f 66  ibes the kind of
3d80: 20 65 72 72 6f 72 20 73 70 65 63 69 66 69 65 64   error specified
3d90: 20 69 6e 20 74 68 65 0a 2a 2a 20 61 72 67 75 6d   in the.** argum
3da0: 65 6e 74 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68  ent..*/.const ch
3db0: 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 53 74  ar *sqlite3ErrSt
3dc0: 72 28 69 6e 74 20 72 63 29 7b 0a 20 20 63 6f 6e  r(int rc){.  con
3dd0: 73 74 20 63 68 61 72 20 2a 7a 3b 0a 20 20 73 77  st char *z;.  sw
3de0: 69 74 63 68 28 20 72 63 20 29 7b 0a 20 20 20 20  itch( rc ){.    
3df0: 63 61 73 65 20 53 51 4c 49 54 45 5f 4f 4b 3a 20  case SQLITE_OK: 
3e00: 20 20 20 20 20 20 20 20 7a 20 3d 20 22 6e 6f 74          z = "not
3e10: 20 61 6e 20 65 72 72 6f 72 22 3b 20 20 20 20 20   an error";     
3e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e30: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
3e40: 63 61 73 65 20 53 51 4c 49 54 45 5f 45 52 52 4f  case SQLITE_ERRO
3e50: 52 3a 20 20 20 20 20 20 7a 20 3d 20 22 53 51 4c  R:      z = "SQL
3e60: 20 6c 6f 67 69 63 20 65 72 72 6f 72 20 6f 72 20   logic error or 
3e70: 6d 69 73 73 69 6e 67 20 64 61 74 61 62 61 73 65  missing database
3e80: 22 3b 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  ";   break;.    
3e90: 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4e 54 45  case SQLITE_INTE
3ea0: 52 4e 41 4c 3a 20 20 20 7a 20 3d 20 22 69 6e 74  RNAL:   z = "int
3eb0: 65 72 6e 61 6c 20 53 51 4c 69 74 65 20 69 6d 70  ernal SQLite imp
3ec0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 66 6c 61 77  lementation flaw
3ed0: 22 3b 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  ";   break;.    
3ee0: 63 61 73 65 20 53 51 4c 49 54 45 5f 50 45 52 4d  case SQLITE_PERM
3ef0: 3a 20 20 20 20 20 20 20 7a 20 3d 20 22 61 63 63  :       z = "acc
3f00: 65 73 73 20 70 65 72 6d 69 73 73 69 6f 6e 20 64  ess permission d
3f10: 65 6e 69 65 64 22 3b 20 20 20 20 20 20 20 20 20  enied";         
3f20: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
3f30: 63 61 73 65 20 53 51 4c 49 54 45 5f 41 42 4f 52  case SQLITE_ABOR
3f40: 54 3a 20 20 20 20 20 20 7a 20 3d 20 22 63 61 6c  T:      z = "cal
3f50: 6c 62 61 63 6b 20 72 65 71 75 65 73 74 65 64 20  lback requested 
3f60: 71 75 65 72 79 20 61 62 6f 72 74 22 3b 20 20 20  query abort";   
3f70: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
3f80: 63 61 73 65 20 53 51 4c 49 54 45 5f 42 55 53 59  case SQLITE_BUSY
3f90: 3a 20 20 20 20 20 20 20 7a 20 3d 20 22 64 61 74  :       z = "dat
3fa0: 61 62 61 73 65 20 69 73 20 6c 6f 63 6b 65 64 22  abase is locked"
3fb0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
3fc0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
3fd0: 63 61 73 65 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  case SQLITE_LOCK
3fe0: 45 44 3a 20 20 20 20 20 7a 20 3d 20 22 64 61 74  ED:     z = "dat
3ff0: 61 62 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c  abase table is l
4000: 6f 63 6b 65 64 22 3b 20 20 20 20 20 20 20 20 20  ocked";         
4010: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
4020: 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  case SQLITE_NOME
4030: 4d 3a 20 20 20 20 20 20 7a 20 3d 20 22 6f 75 74  M:      z = "out
4040: 20 6f 66 20 6d 65 6d 6f 72 79 22 3b 20 20 20 20   of memory";    
4050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4060: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
4070: 63 61 73 65 20 53 51 4c 49 54 45 5f 52 45 41 44  case SQLITE_READ
4080: 4f 4e 4c 59 3a 20 20 20 7a 20 3d 20 22 61 74 74  ONLY:   z = "att
4090: 65 6d 70 74 20 74 6f 20 77 72 69 74 65 20 61 20  empt to write a 
40a0: 72 65 61 64 6f 6e 6c 79 20 64 61 74 61 62 61 73  readonly databas
40b0: 65 22 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  e";  break;.    
40c0: 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4e 54 45  case SQLITE_INTE
40d0: 52 52 55 50 54 3a 20 20 7a 20 3d 20 22 69 6e 74  RRUPT:  z = "int
40e0: 65 72 72 75 70 74 65 64 22 3b 20 20 20 20 20 20  errupted";      
40f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4100: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
4110: 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4f 45 52  case SQLITE_IOER
4120: 52 3a 20 20 20 20 20 20 7a 20 3d 20 22 64 69 73  R:      z = "dis
4130: 6b 20 49 2f 4f 20 65 72 72 6f 72 22 3b 20 20 20  k I/O error";   
4140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4150: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
4160: 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 52 52  case SQLITE_CORR
4170: 55 50 54 3a 20 20 20 20 7a 20 3d 20 22 64 61 74  UPT:    z = "dat
4180: 61 62 61 73 65 20 64 69 73 6b 20 69 6d 61 67 65  abase disk image
4190: 20 69 73 20 6d 61 6c 66 6f 72 6d 65 64 22 3b 20   is malformed"; 
41a0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
41b0: 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 54 46  case SQLITE_NOTF
41c0: 4f 55 4e 44 3a 20 20 20 7a 20 3d 20 22 74 61 62  OUND:   z = "tab
41d0: 6c 65 20 6f 72 20 72 65 63 6f 72 64 20 6e 6f 74  le or record not
41e0: 20 66 6f 75 6e 64 22 3b 20 20 20 20 20 20 20 20   found";        
41f0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
4200: 63 61 73 65 20 53 51 4c 49 54 45 5f 46 55 4c 4c  case SQLITE_FULL
4210: 3a 20 20 20 20 20 20 20 7a 20 3d 20 22 64 61 74  :       z = "dat
4220: 61 62 61 73 65 20 69 73 20 66 75 6c 6c 22 3b 20  abase is full"; 
4230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4240: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
4250: 63 61 73 65 20 53 51 4c 49 54 45 5f 43 41 4e 54  case SQLITE_CANT
4260: 4f 50 45 4e 3a 20 20 20 7a 20 3d 20 22 75 6e 61  OPEN:   z = "una
4270: 62 6c 65 20 74 6f 20 6f 70 65 6e 20 64 61 74 61  ble to open data
4280: 62 61 73 65 20 66 69 6c 65 22 3b 20 20 20 20 20  base file";     
4290: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
42a0: 63 61 73 65 20 53 51 4c 49 54 45 5f 50 52 4f 54  case SQLITE_PROT
42b0: 4f 43 4f 4c 3a 20 20 20 7a 20 3d 20 22 64 61 74  OCOL:   z = "dat
42c0: 61 62 61 73 65 20 6c 6f 63 6b 69 6e 67 20 70 72  abase locking pr
42d0: 6f 74 6f 63 6f 6c 20 66 61 69 6c 75 72 65 22 3b  otocol failure";
42e0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
42f0: 63 61 73 65 20 53 51 4c 49 54 45 5f 45 4d 50 54  case SQLITE_EMPT
4300: 59 3a 20 20 20 20 20 20 7a 20 3d 20 22 74 61 62  Y:      z = "tab
4310: 6c 65 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64  le contains no d
4320: 61 74 61 22 3b 20 20 20 20 20 20 20 20 20 20 20  ata";           
4330: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
4340: 63 61 73 65 20 53 51 4c 49 54 45 5f 53 43 48 45  case SQLITE_SCHE
4350: 4d 41 3a 20 20 20 20 20 7a 20 3d 20 22 64 61 74  MA:     z = "dat
4360: 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73  abase schema has
4370: 20 63 68 61 6e 67 65 64 22 3b 20 20 20 20 20 20   changed";      
4380: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
4390: 63 61 73 65 20 53 51 4c 49 54 45 5f 54 4f 4f 42  case SQLITE_TOOB
43a0: 49 47 3a 20 20 20 20 20 7a 20 3d 20 22 74 6f 6f  IG:     z = "too
43b0: 20 6d 75 63 68 20 64 61 74 61 20 66 6f 72 20 6f   much data for o
43c0: 6e 65 20 74 61 62 6c 65 20 72 6f 77 22 3b 20 20  ne table row";  
43d0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
43e0: 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 4e 53  case SQLITE_CONS
43f0: 54 52 41 49 4e 54 3a 20 7a 20 3d 20 22 63 6f 6e  TRAINT: z = "con
4400: 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 22 3b  straint failed";
4410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4420: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
4430: 63 61 73 65 20 53 51 4c 49 54 45 5f 4d 49 53 4d  case SQLITE_MISM
4440: 41 54 43 48 3a 20 20 20 7a 20 3d 20 22 64 61 74  ATCH:   z = "dat
4450: 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68 22 3b  atype mismatch";
4460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4470: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
4480: 63 61 73 65 20 53 51 4c 49 54 45 5f 4d 49 53 55  case SQLITE_MISU
4490: 53 45 3a 20 20 20 20 20 7a 20 3d 20 22 6c 69 62  SE:     z = "lib
44a0: 72 61 72 79 20 72 6f 75 74 69 6e 65 20 63 61 6c  rary routine cal
44b0: 6c 65 64 20 6f 75 74 20 6f 66 20 73 65 71 75 65  led out of seque
44c0: 6e 63 65 22 3b 62 72 65 61 6b 3b 0a 20 20 20 20  nce";break;.    
44d0: 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 4c 46  case SQLITE_NOLF
44e0: 53 3a 20 20 20 20 20 20 7a 20 3d 20 22 6b 65 72  S:      z = "ker
44f0: 6e 65 6c 20 6c 61 63 6b 73 20 6c 61 72 67 65 20  nel lacks large 
4500: 66 69 6c 65 20 73 75 70 70 6f 72 74 22 3b 20 20  file support";  
4510: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
4520: 63 61 73 65 20 53 51 4c 49 54 45 5f 41 55 54 48  case SQLITE_AUTH
4530: 3a 20 20 20 20 20 20 20 7a 20 3d 20 22 61 75 74  :       z = "aut
4540: 68 6f 72 69 7a 61 74 69 6f 6e 20 64 65 6e 69 65  horization denie
4550: 64 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  d";             
4560: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
4570: 63 61 73 65 20 53 51 4c 49 54 45 5f 46 4f 52 4d  case SQLITE_FORM
4580: 41 54 3a 20 20 20 20 20 7a 20 3d 20 22 61 75 78  AT:     z = "aux
4590: 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
45a0: 66 6f 72 6d 61 74 20 65 72 72 6f 72 22 3b 20 20  format error";  
45b0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
45c0: 63 61 73 65 20 53 51 4c 49 54 45 5f 52 41 4e 47  case SQLITE_RANG
45d0: 45 3a 20 20 20 20 20 20 7a 20 3d 20 22 62 69 6e  E:      z = "bin
45e0: 64 20 69 6e 64 65 78 20 6f 75 74 20 6f 66 20 72  d index out of r
45f0: 61 6e 67 65 22 3b 20 20 20 20 20 20 20 20 20 20  ange";          
4600: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
4610: 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 54 41  case SQLITE_NOTA
4620: 44 42 3a 20 20 20 20 20 7a 20 3d 20 22 66 69 6c  DB:     z = "fil
4630: 65 20 69 73 20 65 6e 63 72 79 70 74 65 64 20 6f  e is encrypted o
4640: 72 20 69 73 20 6e 6f 74 20 61 20 64 61 74 61 62  r is not a datab
4650: 61 73 65 22 3b 62 72 65 61 6b 3b 0a 20 20 20 20  ase";break;.    
4660: 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20 20  default:        
4670: 20 20 20 20 20 20 20 20 7a 20 3d 20 22 75 6e 6b          z = "unk
4680: 6e 6f 77 6e 20 65 72 72 6f 72 22 3b 20 20 20 20  nown error";    
4690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46a0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a       break;.  }.
46b0: 20 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f    return z;.}../
46c0: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
46d0: 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 62  e implements a b
46e0: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 74 68 61  usy callback tha
46f0: 74 20 73 6c 65 65 70 73 20 61 6e 64 20 74 72 69  t sleeps and tri
4700: 65 73 0a 2a 2a 20 61 67 61 69 6e 20 75 6e 74 69  es.** again unti
4710: 6c 20 61 20 74 69 6d 65 6f 75 74 20 76 61 6c 75  l a timeout valu
4720: 65 20 69 73 20 72 65 61 63 68 65 64 2e 20 20 54  e is reached.  T
4730: 68 65 20 74 69 6d 65 6f 75 74 20 76 61 6c 75 65  he timeout value
4740: 20 69 73 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65   is.** an intege
4750: 72 20 6e 75 6d 62 65 72 20 6f 66 20 6d 69 6c 6c  r number of mill
4760: 69 73 65 63 6f 6e 64 73 20 70 61 73 73 65 64 20  iseconds passed 
4770: 69 6e 20 61 73 20 74 68 65 20 66 69 72 73 74 0a  in as the first.
4780: 2a 2a 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  ** argument..*/.
4790: 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74  static int sqlit
47a0: 65 44 65 66 61 75 6c 74 42 75 73 79 43 61 6c 6c  eDefaultBusyCall
47b0: 62 61 63 6b 28 0a 20 76 6f 69 64 20 2a 54 69 6d  back(. void *Tim
47c0: 65 6f 75 74 2c 20 20 20 20 20 20 20 20 20 20 20  eout,           
47d0: 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6d 6f 75 6e  /* Maximum amoun
47e0: 74 20 6f 66 20 74 69 6d 65 20 74 6f 20 77 61 69  t of time to wai
47f0: 74 20 2a 2f 0a 20 69 6e 74 20 63 6f 75 6e 74 20  t */. int count 
4800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4810: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65  * Number of time
4820: 73 20 74 61 62 6c 65 20 68 61 73 20 62 65 65 6e  s table has been
4830: 20 62 75 73 79 20 2a 2f 0a 29 7b 0a 23 69 66 20   busy */.){.#if 
4840: 53 51 4c 49 54 45 5f 4d 49 4e 5f 53 4c 45 45 50  SQLITE_MIN_SLEEP
4850: 5f 4d 53 3d 3d 31 0a 20 20 73 74 61 74 69 63 20  _MS==1.  static 
4860: 63 6f 6e 73 74 20 63 68 61 72 20 64 65 6c 61 79  const char delay
4870: 73 5b 5d 20 3d 0a 20 20 20 20 20 7b 20 31 2c 20  s[] =.     { 1, 
4880: 32 2c 20 35 2c 20 31 30 2c 20 31 35 2c 20 32 30  2, 5, 10, 15, 20
4890: 2c 20 32 35 2c 20 32 35 2c 20 20 32 35 2c 20 20  , 25, 25,  25,  
48a0: 35 30 2c 20 20 35 30 2c 20 20 35 30 2c 20 31 30  50,  50,  50, 10
48b0: 30 7d 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e  0};.  static con
48c0: 73 74 20 73 68 6f 72 74 20 69 6e 74 20 74 6f 74  st short int tot
48d0: 61 6c 73 5b 5d 20 3d 0a 20 20 20 20 20 7b 20 30  als[] =.     { 0
48e0: 2c 20 31 2c 20 33 2c 20 20 38 2c 20 31 38 2c 20  , 1, 3,  8, 18, 
48f0: 33 33 2c 20 35 33 2c 20 37 38 2c 20 31 30 33 2c  33, 53, 78, 103,
4900: 20 31 32 38 2c 20 31 37 38 2c 20 32 32 38 2c 20   128, 178, 228, 
4910: 32 38 37 7d 3b 0a 23 20 64 65 66 69 6e 65 20 4e  287};.# define N
4920: 44 45 4c 41 59 20 28 73 69 7a 65 6f 66 28 64 65  DELAY (sizeof(de
4930: 6c 61 79 73 29 2f 73 69 7a 65 6f 66 28 64 65 6c  lays)/sizeof(del
4940: 61 79 73 5b 30 5d 29 29 0a 20 20 69 6e 74 20 74  ays[0])).  int t
4950: 69 6d 65 6f 75 74 20 3d 20 28 69 6e 74 29 54 69  imeout = (int)Ti
4960: 6d 65 6f 75 74 3b 0a 20 20 69 6e 74 20 64 65 6c  meout;.  int del
4970: 61 79 2c 20 70 72 69 6f 72 3b 0a 0a 20 20 69 66  ay, prior;..  if
4980: 28 20 63 6f 75 6e 74 20 3c 3d 20 4e 44 45 4c 41  ( count <= NDELA
4990: 59 20 29 7b 0a 20 20 20 20 64 65 6c 61 79 20 3d  Y ){.    delay =
49a0: 20 64 65 6c 61 79 73 5b 63 6f 75 6e 74 2d 31 5d   delays[count-1]
49b0: 3b 0a 20 20 20 20 70 72 69 6f 72 20 3d 20 74 6f  ;.    prior = to
49c0: 74 61 6c 73 5b 63 6f 75 6e 74 2d 31 5d 3b 0a 20  tals[count-1];. 
49d0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 64 65 6c 61   }else{.    dela
49e0: 79 20 3d 20 64 65 6c 61 79 73 5b 4e 44 45 4c 41  y = delays[NDELA
49f0: 59 2d 31 5d 3b 0a 20 20 20 20 70 72 69 6f 72 20  Y-1];.    prior 
4a00: 3d 20 74 6f 74 61 6c 73 5b 4e 44 45 4c 41 59 2d  = totals[NDELAY-
4a10: 31 5d 20 2b 20 64 65 6c 61 79 2a 28 63 6f 75 6e  1] + delay*(coun
4a20: 74 2d 4e 44 45 4c 41 59 2d 31 29 3b 0a 20 20 7d  t-NDELAY-1);.  }
4a30: 0a 20 20 69 66 28 20 70 72 69 6f 72 20 2b 20 64  .  if( prior + d
4a40: 65 6c 61 79 20 3e 20 74 69 6d 65 6f 75 74 20 29  elay > timeout )
4a50: 7b 0a 20 20 20 20 64 65 6c 61 79 20 3d 20 74 69  {.    delay = ti
4a60: 6d 65 6f 75 74 20 2d 20 70 72 69 6f 72 3b 0a 20  meout - prior;. 
4a70: 20 20 20 69 66 28 20 64 65 6c 61 79 3c 3d 30 20     if( delay<=0 
4a80: 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a  ) return 0;.  }.
4a90: 20 20 73 71 6c 69 74 65 33 4f 73 53 6c 65 65 70    sqlite3OsSleep
4aa0: 28 64 65 6c 61 79 29 3b 0a 20 20 72 65 74 75 72  (delay);.  retur
4ab0: 6e 20 31 3b 0a 23 65 6c 73 65 0a 20 20 69 6e 74  n 1;.#else.  int
4ac0: 20 74 69 6d 65 6f 75 74 20 3d 20 28 69 6e 74 29   timeout = (int)
4ad0: 54 69 6d 65 6f 75 74 3b 0a 20 20 69 66 28 20 28  Timeout;.  if( (
4ae0: 63 6f 75 6e 74 2b 31 29 2a 31 30 30 30 20 3e 20  count+1)*1000 > 
4af0: 74 69 6d 65 6f 75 74 20 29 7b 0a 20 20 20 20 72  timeout ){.    r
4b00: 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 73  eturn 0;.  }.  s
4b10: 71 6c 69 74 65 33 4f 73 53 6c 65 65 70 28 31 30  qlite3OsSleep(10
4b20: 30 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b  00);.  return 1;
4b30: 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a  .#endif.}../*.**
4b40: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65   This routine se
4b50: 74 73 20 74 68 65 20 62 75 73 79 20 63 61 6c 6c  ts the busy call
4b60: 62 61 63 6b 20 66 6f 72 20 61 6e 20 53 71 6c 69  back for an Sqli
4b70: 74 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 74  te database to t
4b80: 68 65 0a 2a 2a 20 67 69 76 65 6e 20 63 61 6c 6c  he.** given call
4b90: 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 77 69  back function wi
4ba0: 74 68 20 74 68 65 20 67 69 76 65 6e 20 61 72 67  th the given arg
4bb0: 75 6d 65 6e 74 2e 0a 2a 2f 0a 76 6f 69 64 20 73  ument..*/.void s
4bc0: 71 6c 69 74 65 33 5f 62 75 73 79 5f 68 61 6e 64  qlite3_busy_hand
4bd0: 6c 65 72 28 0a 20 20 73 71 6c 69 74 65 20 2a 64  ler(.  sqlite *d
4be0: 62 2c 0a 20 20 69 6e 74 20 28 2a 78 42 75 73 79  b,.  int (*xBusy
4bf0: 29 28 76 6f 69 64 2a 2c 69 6e 74 29 2c 0a 20 20  )(void*,int),.  
4c00: 76 6f 69 64 20 2a 70 41 72 67 0a 29 7b 0a 20 20  void *pArg.){.  
4c10: 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e  db->busyHandler.
4c20: 78 46 75 6e 63 20 3d 20 78 42 75 73 79 3b 0a 20  xFunc = xBusy;. 
4c30: 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72   db->busyHandler
4c40: 2e 70 41 72 67 20 3d 20 70 41 72 67 3b 0a 7d 0a  .pArg = pArg;.}.
4c50: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
4c60: 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41  OMIT_PROGRESS_CA
4c70: 4c 4c 42 41 43 4b 0a 2f 2a 0a 2a 2a 20 54 68 69  LLBACK./*.** Thi
4c80: 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74  s routine sets t
4c90: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
4ca0: 62 61 63 6b 20 66 6f 72 20 61 6e 20 53 71 6c 69  back for an Sqli
4cb0: 74 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 74  te database to t
4cc0: 68 65 0a 2a 2a 20 67 69 76 65 6e 20 63 61 6c 6c  he.** given call
4cd0: 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 77 69  back function wi
4ce0: 74 68 20 74 68 65 20 67 69 76 65 6e 20 61 72 67  th the given arg
4cf0: 75 6d 65 6e 74 2e 20 54 68 65 20 70 72 6f 67 72  ument. The progr
4d00: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 77 69 6c  ess callback wil
4d10: 6c 0a 2a 2a 20 62 65 20 69 6e 76 6f 6b 65 64 20  l.** be invoked 
4d20: 65 76 65 72 79 20 6e 4f 70 73 20 6f 70 63 6f 64  every nOps opcod
4d30: 65 73 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  es..*/.void sqli
4d40: 74 65 33 5f 70 72 6f 67 72 65 73 73 5f 68 61 6e  te3_progress_han
4d50: 64 6c 65 72 28 0a 20 20 73 71 6c 69 74 65 20 2a  dler(.  sqlite *
4d60: 64 62 2c 20 0a 20 20 69 6e 74 20 6e 4f 70 73 2c  db, .  int nOps,
4d70: 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65  .  int (*xProgre
4d80: 73 73 29 28 76 6f 69 64 2a 29 2c 20 0a 20 20 76  ss)(void*), .  v
4d90: 6f 69 64 20 2a 70 41 72 67 0a 29 7b 0a 20 20 69  oid *pArg.){.  i
4da0: 66 28 20 6e 4f 70 73 3e 30 20 29 7b 0a 20 20 20  f( nOps>0 ){.   
4db0: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 3d   db->xProgress =
4dc0: 20 78 50 72 6f 67 72 65 73 73 3b 0a 20 20 20 20   xProgress;.    
4dd0: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
4de0: 20 3d 20 6e 4f 70 73 3b 0a 20 20 20 20 64 62 2d   = nOps;.    db-
4df0: 3e 70 50 72 6f 67 72 65 73 73 41 72 67 20 3d 20  >pProgressArg = 
4e00: 70 41 72 67 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  pArg;.  }else{. 
4e10: 20 20 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73     db->xProgress
4e20: 20 3d 20 30 3b 0a 20 20 20 20 64 62 2d 3e 6e 50   = 0;.    db->nP
4e30: 72 6f 67 72 65 73 73 4f 70 73 20 3d 20 30 3b 0a  rogressOps = 0;.
4e40: 20 20 20 20 64 62 2d 3e 70 50 72 6f 67 72 65 73      db->pProgres
4e50: 73 41 72 67 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a  sArg = 0;.  }.}.
4e60: 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 54  #endif.../*.** T
4e70: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 6e 73 74  his routine inst
4e80: 61 6c 6c 73 20 61 20 64 65 66 61 75 6c 74 20 62  alls a default b
4e90: 75 73 79 20 68 61 6e 64 6c 65 72 20 74 68 61 74  usy handler that
4ea0: 20 77 61 69 74 73 20 66 6f 72 20 74 68 65 0a 2a   waits for the.*
4eb0: 2a 20 73 70 65 63 69 66 69 65 64 20 6e 75 6d 62  * specified numb
4ec0: 65 72 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e  er of millisecon
4ed0: 64 73 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e  ds before return
4ee0: 69 6e 67 20 30 2e 0a 2a 2f 0a 76 6f 69 64 20 73  ing 0..*/.void s
4ef0: 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65  qlite3_busy_time
4f00: 6f 75 74 28 73 71 6c 69 74 65 20 2a 64 62 2c 20  out(sqlite *db, 
4f10: 69 6e 74 20 6d 73 29 7b 0a 20 20 69 66 28 20 6d  int ms){.  if( m
4f20: 73 3e 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  s>0 ){.    sqlit
4f30: 65 33 5f 62 75 73 79 5f 68 61 6e 64 6c 65 72 28  e3_busy_handler(
4f40: 64 62 2c 20 73 71 6c 69 74 65 44 65 66 61 75 6c  db, sqliteDefaul
4f50: 74 42 75 73 79 43 61 6c 6c 62 61 63 6b 2c 20 28  tBusyCallback, (
4f60: 76 6f 69 64 2a 29 6d 73 29 3b 0a 20 20 7d 65 6c  void*)ms);.  }el
4f70: 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  se{.    sqlite3_
4f80: 62 75 73 79 5f 68 61 6e 64 6c 65 72 28 64 62 2c  busy_handler(db,
4f90: 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f   0, 0);.  }.}../
4fa0: 2a 0a 2a 2a 20 43 61 75 73 65 20 61 6e 79 20 70  *.** Cause any p
4fb0: 65 6e 64 69 6e 67 20 6f 70 65 72 61 74 69 6f 6e  ending operation
4fc0: 20 74 6f 20 73 74 6f 70 20 61 74 20 69 74 73 20   to stop at its 
4fd0: 65 61 72 6c 69 65 73 74 20 6f 70 70 6f 72 74 75  earliest opportu
4fe0: 6e 69 74 79 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  nity..*/.void sq
4ff0: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28  lite3_interrupt(
5000: 73 71 6c 69 74 65 20 2a 64 62 29 7b 0a 20 20 64  sqlite *db){.  d
5010: 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49  b->flags |= SQLI
5020: 54 45 5f 49 6e 74 65 72 72 75 70 74 3b 0a 7d 0a  TE_Interrupt;.}.
5030: 0a 2f 2a 0a 2a 2a 20 57 69 6e 64 6f 77 73 20 73  ./*.** Windows s
5040: 79 73 74 65 6d 73 20 73 68 6f 75 6c 64 20 63 61  ystems should ca
5050: 6c 6c 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  ll this routine 
5060: 74 6f 20 66 72 65 65 20 6d 65 6d 6f 72 79 20 74  to free memory t
5070: 68 61 74 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e  hat.** is return
5080: 65 64 20 69 6e 20 74 68 65 20 69 6e 20 74 68 65  ed in the in the
5090: 20 65 72 72 6d 73 67 20 70 61 72 61 6d 65 74 65   errmsg paramete
50a0: 72 20 6f 66 20 73 71 6c 69 74 65 33 5f 6f 70 65  r of sqlite3_ope
50b0: 6e 28 29 20 77 68 65 6e 0a 2a 2a 20 53 51 4c 69  n() when.** SQLi
50c0: 74 65 20 69 73 20 61 20 44 4c 4c 2e 20 20 46 6f  te is a DLL.  Fo
50d0: 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e 2c 20 69  r some reason, i
50e0: 74 20 64 6f 65 73 20 6e 6f 74 20 77 6f 72 6b 20  t does not work 
50f0: 74 6f 20 63 61 6c 6c 20 66 72 65 65 28 29 0a 2a  to call free().*
5100: 2a 20 64 69 72 65 63 74 6c 79 2e 0a 2a 2a 0a 2a  * directly..**.*
5110: 2a 20 4e 6f 74 65 20 74 68 61 74 20 77 65 20 6e  * Note that we n
5120: 65 65 64 20 74 6f 20 63 61 6c 6c 20 66 72 65 65  eed to call free
5130: 28 29 20 6e 6f 74 20 73 71 6c 69 74 65 46 72 65  () not sqliteFre
5140: 65 28 29 20 68 65 72 65 2c 20 73 69 6e 63 65 20  e() here, since 
5150: 65 76 65 72 79 0a 2a 2a 20 73 74 72 69 6e 67 20  every.** string 
5160: 74 68 61 74 20 69 73 20 65 78 70 6f 72 74 65 64  that is exported
5170: 20 66 72 6f 6d 20 53 51 4c 69 74 65 20 73 68 6f   from SQLite sho
5180: 75 6c 64 20 68 61 76 65 20 61 6c 72 65 61 64 79  uld have already
5190: 20 70 61 73 73 65 64 20 74 68 72 6f 75 67 68 0a   passed through.
51a0: 2a 2a 20 73 71 6c 69 74 65 33 53 74 72 52 65 61  ** sqlite3StrRea
51b0: 6c 6c 6f 63 28 29 2e 0a 2a 2f 0a 76 6f 69 64 20  lloc()..*/.void 
51c0: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 63 68 61  sqlite3_free(cha
51d0: 72 20 2a 70 29 7b 20 66 72 65 65 28 70 29 3b 20  r *p){ free(p); 
51e0: 7d 0a 0a 2f 2a 0a 2a 2a 20 43 72 65 61 74 65 20  }../*.** Create 
51f0: 6e 65 77 20 75 73 65 72 20 66 75 6e 63 74 69 6f  new user functio
5200: 6e 73 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ns..*/.int sqlit
5210: 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
5220: 6f 6e 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  on(.  sqlite3 *d
5230: 62 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  b,.  const char 
5240: 2a 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 0a  *zFunctionName,.
5250: 20 20 69 6e 74 20 6e 41 72 67 2c 0a 20 20 69 6e    int nArg,.  in
5260: 74 20 65 6e 63 2c 0a 20 20 69 6e 74 20 69 43 6f  t enc,.  int iCo
5270: 6c 6c 61 74 65 41 72 67 2c 0a 20 20 76 6f 69 64  llateArg,.  void
5280: 20 2a 70 55 73 65 72 44 61 74 61 2c 0a 20 20 76   *pUserData,.  v
5290: 6f 69 64 20 28 2a 78 46 75 6e 63 29 28 73 71 6c  oid (*xFunc)(sql
52a0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
52b0: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  t,sqlite3_value 
52c0: 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 78 53  **),.  void (*xS
52d0: 74 65 70 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  tep)(sqlite3_con
52e0: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
52f0: 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76  3_value **),.  v
5300: 6f 69 64 20 28 2a 78 46 69 6e 61 6c 29 28 73 71  oid (*xFinal)(sq
5310: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 0a  lite3_context*).
5320: 29 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 3b  ){.  FuncDef *p;
5330: 0a 20 20 69 6e 74 20 6e 4e 61 6d 65 3b 0a 0a 20  .  int nName;.. 
5340: 20 69 66 28 20 28 64 62 3d 3d 30 20 7c 7c 20 7a   if( (db==0 || z
5350: 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 3d 3d 30 20  FunctionName==0 
5360: 7c 7c 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  || sqlite3Safety
5370: 43 68 65 63 6b 28 64 62 29 29 20 7c 7c 0a 20 20  Check(db)) ||.  
5380: 20 20 20 20 28 78 46 75 6e 63 20 26 26 20 28 78      (xFunc && (x
5390: 46 69 6e 61 6c 20 7c 7c 20 78 53 74 65 70 29 29  Final || xStep))
53a0: 20 7c 7c 20 0a 20 20 20 20 20 20 28 21 78 46 75   || .      (!xFu
53b0: 6e 63 20 26 26 20 28 78 46 69 6e 61 6c 20 26 26  nc && (xFinal &&
53c0: 20 21 78 53 74 65 70 29 29 20 7c 7c 0a 20 20 20   !xStep)) ||.   
53d0: 20 20 20 28 21 78 46 75 6e 63 20 26 26 20 28 21     (!xFunc && (!
53e0: 78 46 69 6e 61 6c 20 26 26 20 78 53 74 65 70 29  xFinal && xStep)
53f0: 29 20 7c 7c 0a 20 20 20 20 20 20 28 6e 41 72 67  ) ||.      (nArg
5400: 3c 2d 31 20 7c 7c 20 6e 41 72 67 3e 31 32 37 29  <-1 || nArg>127)
5410: 20 7c 7c 0a 20 20 20 20 20 20 28 32 35 35 3c 28   ||.      (255<(
5420: 6e 4e 61 6d 65 20 3d 20 73 74 72 6c 65 6e 28 7a  nName = strlen(z
5430: 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 29 29 29 20  FunctionName))) 
5440: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51  ){.    return SQ
5450: 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a  LITE_ERROR;.  }.
5460: 20 20 0a 20 20 2f 2a 20 49 66 20 53 51 4c 49 54    .  /* If SQLIT
5470: 45 5f 55 54 46 31 36 20 69 73 20 73 70 65 63 69  E_UTF16 is speci
5480: 66 69 65 64 20 61 73 20 74 68 65 20 65 6e 63 6f  fied as the enco
5490: 64 69 6e 67 20 74 79 70 65 2c 20 74 72 61 6e 73  ding type, trans
54a0: 66 6f 72 6d 20 74 68 69 73 0a 20 20 2a 2a 20 74  form this.  ** t
54b0: 6f 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f  o one of SQLITE_
54c0: 55 54 46 31 36 4c 45 20 6f 72 20 53 51 4c 49 54  UTF16LE or SQLIT
54d0: 45 5f 55 54 46 31 36 42 45 20 75 73 69 6e 67 20  E_UTF16BE using 
54e0: 74 68 65 0a 20 20 2a 2a 20 53 51 4c 49 54 45 5f  the.  ** SQLITE_
54f0: 55 54 46 31 36 4e 41 54 49 56 45 20 6d 61 63 72  UTF16NATIVE macr
5500: 6f 2e 20 53 51 4c 49 54 45 5f 55 54 46 31 36 20  o. SQLITE_UTF16 
5510: 69 73 20 6e 6f 74 20 75 73 65 64 20 69 6e 74 65  is not used inte
5520: 72 6e 61 6c 6c 79 2e 0a 20 20 2a 2a 0a 20 20 2a  rnally..  **.  *
5530: 2a 20 49 66 20 53 51 4c 49 54 45 5f 41 4e 59 20  * If SQLITE_ANY 
5540: 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 61 64  is specified, ad
5550: 64 20 74 68 72 65 65 20 76 65 72 73 69 6f 6e 73  d three versions
5560: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
5570: 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 68 61 73  .  ** to the has
5580: 68 20 74 61 62 6c 65 2e 0a 20 20 2a 2f 0a 20 20  h table..  */.  
5590: 69 66 28 20 65 6e 63 3d 3d 53 51 4c 49 54 45 5f  if( enc==SQLITE_
55a0: 55 54 46 31 36 20 29 7b 0a 20 20 20 20 65 6e 63  UTF16 ){.    enc
55b0: 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e   = SQLITE_UTF16N
55c0: 41 54 49 56 45 3b 0a 20 20 7d 65 6c 73 65 20 69  ATIVE;.  }else i
55d0: 66 28 20 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 41  f( enc==SQLITE_A
55e0: 4e 59 20 29 7b 0a 20 20 20 20 69 6e 74 20 72 63  NY ){.    int rc
55f0: 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
5600: 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
5610: 6f 6e 28 64 62 2c 20 7a 46 75 6e 63 74 69 6f 6e  on(db, zFunction
5620: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 53 51 4c 49  Name, nArg, SQLI
5630: 54 45 5f 55 54 46 38 2c 0a 20 20 20 20 20 20 20  TE_UTF8,.       
5640: 20 69 43 6f 6c 6c 61 74 65 41 72 67 2c 20 70 55   iCollateArg, pU
5650: 73 65 72 44 61 74 61 2c 20 78 46 75 6e 63 2c 20  serData, xFunc, 
5660: 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 3b 0a  xStep, xFinal);.
5670: 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
5680: 54 45 5f 4f 4b 20 29 20 72 65 74 75 72 6e 20 72  TE_OK ) return r
5690: 63 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  c;.    rc = sqli
56a0: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
56b0: 69 6f 6e 28 64 62 2c 20 7a 46 75 6e 63 74 69 6f  ion(db, zFunctio
56c0: 6e 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 53 51 4c  nName, nArg, SQL
56d0: 49 54 45 5f 55 54 46 31 36 4c 45 2c 0a 20 20 20  ITE_UTF16LE,.   
56e0: 20 20 20 20 20 69 43 6f 6c 6c 61 74 65 41 72 67       iCollateArg
56f0: 2c 20 70 55 73 65 72 44 61 74 61 2c 20 78 46 75  , pUserData, xFu
5700: 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  nc, xStep, xFina
5710: 6c 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d  l);.    if( rc!=
5720: 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72 65 74 75  SQLITE_OK ) retu
5730: 72 6e 20 72 63 3b 0a 20 20 20 20 65 6e 63 20 3d  rn rc;.    enc =
5740: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3b   SQLITE_UTF16BE;
5750: 0a 20 20 7d 0a 0a 20 20 70 20 3d 20 73 71 6c 69  .  }..  p = sqli
5760: 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28  te3FindFunction(
5770: 64 62 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d  db, zFunctionNam
5780: 65 2c 20 6e 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  e, nName, nArg, 
5790: 65 6e 63 2c 20 31 29 3b 0a 20 20 69 66 28 20 70  enc, 1);.  if( p
57a0: 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 31 3b 0a  ==0 ) return 1;.
57b0: 20 20 70 2d 3e 78 46 75 6e 63 20 3d 20 78 46 75    p->xFunc = xFu
57c0: 6e 63 3b 0a 20 20 70 2d 3e 78 53 74 65 70 20 3d  nc;.  p->xStep =
57d0: 20 78 53 74 65 70 3b 0a 20 20 70 2d 3e 78 46 69   xStep;.  p->xFi
57e0: 6e 61 6c 69 7a 65 20 3d 20 78 46 69 6e 61 6c 3b  nalize = xFinal;
57f0: 0a 20 20 70 2d 3e 70 55 73 65 72 44 61 74 61 20  .  p->pUserData 
5800: 3d 20 70 55 73 65 72 44 61 74 61 3b 0a 20 20 72  = pUserData;.  r
5810: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b  eturn SQLITE_OK;
5820: 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63  .}.int sqlite3_c
5830: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 31 36  reate_function16
5840: 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c  (.  sqlite3 *db,
5850: 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a  .  const void *z
5860: 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 0a 20 20  FunctionName,.  
5870: 69 6e 74 20 6e 41 72 67 2c 0a 20 20 69 6e 74 20  int nArg,.  int 
5880: 65 54 65 78 74 52 65 70 2c 0a 20 20 69 6e 74 20  eTextRep,.  int 
5890: 69 43 6f 6c 6c 61 74 65 41 72 67 2c 0a 20 20 76  iCollateArg,.  v
58a0: 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 2c 0a  oid *pUserData,.
58b0: 20 20 76 6f 69 64 20 28 2a 78 46 75 6e 63 29 28    void (*xFunc)(
58c0: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
58d0: 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
58e0: 75 65 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a  ue**),.  void (*
58f0: 78 53 74 65 70 29 28 73 71 6c 69 74 65 33 5f 63  xStep)(sqlite3_c
5900: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
5910: 74 65 33 5f 76 61 6c 75 65 2a 2a 29 2c 0a 20 20  te3_value**),.  
5920: 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 29 28 73  void (*xFinal)(s
5930: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29  qlite3_context*)
5940: 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  .){.  int rc;.  
5950: 63 68 61 72 20 2a 7a 46 75 6e 63 74 69 6f 6e 4e  char *zFunctionN
5960: 61 6d 65 38 3b 0a 20 20 7a 46 75 6e 63 74 69 6f  ame8;.  zFunctio
5970: 6e 4e 61 6d 65 38 20 3d 20 73 71 6c 69 74 65 33  nName8 = sqlite3
5980: 75 74 66 31 36 74 6f 38 28 7a 46 75 6e 63 74 69  utf16to8(zFuncti
5990: 6f 6e 4e 61 6d 65 2c 20 2d 31 2c 20 53 51 4c 49  onName, -1, SQLI
59a0: 54 45 5f 42 49 47 45 4e 44 49 41 4e 29 3b 0a 20  TE_BIGENDIAN);. 
59b0: 20 69 66 28 20 21 7a 46 75 6e 63 74 69 6f 6e 4e   if( !zFunctionN
59c0: 61 6d 65 38 20 29 7b 0a 20 20 20 20 72 65 74 75  ame8 ){.    retu
59d0: 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b  rn SQLITE_NOMEM;
59e0: 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
59f0: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
5a00: 69 6f 6e 28 64 62 2c 20 7a 46 75 6e 63 74 69 6f  ion(db, zFunctio
5a10: 6e 4e 61 6d 65 38 2c 20 6e 41 72 67 2c 20 65 54  nName8, nArg, eT
5a20: 65 78 74 52 65 70 2c 20 0a 20 20 20 20 20 20 69  extRep, .      i
5a30: 43 6f 6c 6c 61 74 65 41 72 67 2c 20 70 55 73 65  CollateArg, pUse
5a40: 72 44 61 74 61 2c 20 78 46 75 6e 63 2c 20 78 53  rData, xFunc, xS
5a50: 74 65 70 2c 20 78 46 69 6e 61 6c 29 3b 0a 20 20  tep, xFinal);.  
5a60: 73 71 6c 69 74 65 46 72 65 65 28 7a 46 75 6e 63  sqliteFree(zFunc
5a70: 74 69 6f 6e 4e 61 6d 65 38 29 3b 0a 20 20 72 65  tionName8);.  re
5a80: 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a  turn rc;.}../*.*
5a90: 2a 20 52 65 67 69 73 74 65 72 20 61 20 74 72 61  * Register a tra
5aa0: 63 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68  ce function.  Th
5ab0: 65 20 70 41 72 67 20 66 72 6f 6d 20 74 68 65 20  e pArg from the 
5ac0: 70 72 65 76 69 6f 75 73 6c 79 20 72 65 67 69 73  previously regis
5ad0: 74 65 72 65 64 20 74 72 61 63 65 0a 2a 2a 20 69  tered trace.** i
5ae0: 73 20 72 65 74 75 72 6e 65 64 2e 20 20 0a 2a 2a  s returned.  .**
5af0: 0a 2a 2a 20 41 20 4e 55 4c 4c 20 74 72 61 63 65  .** A NULL trace
5b00: 20 66 75 6e 63 74 69 6f 6e 20 6d 65 61 6e 73 20   function means 
5b10: 74 68 61 74 20 6e 6f 20 74 72 61 63 69 6e 67 20  that no tracing 
5b20: 69 73 20 65 78 65 63 75 74 65 73 2e 20 20 41 20  is executes.  A 
5b30: 6e 6f 6e 2d 4e 55 4c 4c 0a 2a 2a 20 74 72 61 63  non-NULL.** trac
5b40: 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  e is a pointer t
5b50: 6f 20 61 20 66 75 6e 63 74 69 6f 6e 20 74 68 61  o a function tha
5b60: 74 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 74 20  t is invoked at 
5b70: 74 68 65 20 73 74 61 72 74 20 6f 66 20 65 61 63  the start of eac
5b80: 68 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 65 78 65  h.** sqlite3_exe
5b90: 63 28 29 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71  c()..*/.void *sq
5ba0: 6c 69 74 65 33 5f 74 72 61 63 65 28 73 71 6c 69  lite3_trace(sqli
5bb0: 74 65 20 2a 64 62 2c 20 76 6f 69 64 20 28 2a 78  te *db, void (*x
5bc0: 54 72 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f 6e  Trace)(void*,con
5bd0: 73 74 20 63 68 61 72 2a 29 2c 20 76 6f 69 64 20  st char*), void 
5be0: 2a 70 41 72 67 29 7b 0a 20 20 76 6f 69 64 20 2a  *pArg){.  void *
5bf0: 70 4f 6c 64 20 3d 20 64 62 2d 3e 70 54 72 61 63  pOld = db->pTrac
5c00: 65 41 72 67 3b 0a 20 20 64 62 2d 3e 78 54 72 61  eArg;.  db->xTra
5c10: 63 65 20 3d 20 78 54 72 61 63 65 3b 0a 20 20 64  ce = xTrace;.  d
5c20: 62 2d 3e 70 54 72 61 63 65 41 72 67 20 3d 20 70  b->pTraceArg = p
5c30: 41 72 67 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f  Arg;.  return pO
5c40: 6c 64 3b 0a 7d 0a 0a 2f 2a 2a 2a 20 45 58 50 45  ld;.}../*** EXPE
5c50: 52 49 4d 45 4e 54 41 4c 20 2a 2a 2a 0a 2a 2a 0a  RIMENTAL ***.**.
5c60: 2a 2a 20 52 65 67 69 73 74 65 72 20 61 20 66 75  ** Register a fu
5c70: 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 69 6e 76  nction to be inv
5c80: 6f 6b 65 64 20 77 68 65 6e 20 61 20 74 72 61 6e  oked when a tran
5c90: 73 61 63 74 69 6f 6e 20 63 6f 6d 6d 65 6e 74 73  saction comments
5ca0: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 66  ..** If either f
5cb0: 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
5cc0: 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74  non-zero, then t
5cd0: 68 65 20 63 6f 6d 6d 69 74 20 62 65 63 6f 6d 65  he commit become
5ce0: 73 20 61 0a 2a 2a 20 72 6f 6c 6c 62 61 63 6b 2e  s a.** rollback.
5cf0: 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  .*/.void *sqlite
5d00: 33 5f 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 0a 20  3_commit_hook(. 
5d10: 20 73 71 6c 69 74 65 20 2a 64 62 2c 20 20 20 20   sqlite *db,    
5d20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 74             /* At
5d30: 74 61 63 68 20 74 68 65 20 68 6f 6f 6b 20 74 6f  tach the hook to
5d40: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a   this database *
5d50: 2f 0a 20 20 69 6e 74 20 28 2a 78 43 61 6c 6c 62  /.  int (*xCallb
5d60: 61 63 6b 29 28 76 6f 69 64 2a 29 2c 20 20 2f 2a  ack)(void*),  /*
5d70: 20 46 75 6e 63 74 69 6f 6e 20 74 6f 20 69 6e 76   Function to inv
5d80: 6f 6b 65 20 6f 6e 20 65 61 63 68 20 63 6f 6d 6d  oke on each comm
5d90: 69 74 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41  it */.  void *pA
5da0: 72 67 20 20 20 20 20 20 20 20 20 20 20 20 20 20  rg              
5db0: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
5dc0: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f   the function */
5dd0: 0a 29 7b 0a 20 20 76 6f 69 64 20 2a 70 4f 6c 64  .){.  void *pOld
5de0: 20 3d 20 64 62 2d 3e 70 43 6f 6d 6d 69 74 41 72   = db->pCommitAr
5df0: 67 3b 0a 20 20 64 62 2d 3e 78 43 6f 6d 6d 69 74  g;.  db->xCommit
5e00: 43 61 6c 6c 62 61 63 6b 20 3d 20 78 43 61 6c 6c  Callback = xCall
5e10: 62 61 63 6b 3b 0a 20 20 64 62 2d 3e 70 43 6f 6d  back;.  db->pCom
5e20: 6d 69 74 41 72 67 20 3d 20 70 41 72 67 3b 0a 20  mitArg = pArg;. 
5e30: 20 72 65 74 75 72 6e 20 70 4f 6c 64 3b 0a 7d 0a   return pOld;.}.
5e40: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ../*.** This rou
5e50: 74 69 6e 65 20 69 73 20 63 61 6c 6c 65 64 20 74  tine is called t
5e60: 6f 20 63 72 65 61 74 65 20 61 20 63 6f 6e 6e 65  o create a conne
5e70: 63 74 69 6f 6e 20 74 6f 20 61 20 64 61 74 61 62  ction to a datab
5e80: 61 73 65 20 42 54 72 65 65 0a 2a 2a 20 64 72 69  ase BTree.** dri
5e90: 76 65 72 2e 20 20 49 66 20 7a 46 69 6c 65 6e 61  ver.  If zFilena
5ea0: 6d 65 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  me is the name o
5eb0: 66 20 61 20 66 69 6c 65 2c 20 74 68 65 6e 20 74  f a file, then t
5ec0: 68 61 74 20 66 69 6c 65 20 69 73 0a 2a 2a 20 6f  hat file is.** o
5ed0: 70 65 6e 65 64 20 61 6e 64 20 75 73 65 64 2e 20  pened and used. 
5ee0: 20 49 66 20 7a 46 69 6c 65 6e 61 6d 65 20 69 73   If zFilename is
5ef0: 20 74 68 65 20 6d 61 67 69 63 20 6e 61 6d 65 20   the magic name 
5f00: 22 3a 6d 65 6d 6f 72 79 3a 22 20 74 68 65 6e 0a  ":memory:" then.
5f10: 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ** the database 
5f20: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 6d 65 6d  is stored in mem
5f30: 6f 72 79 20 28 61 6e 64 20 69 73 20 74 68 75 73  ory (and is thus
5f40: 20 66 6f 72 67 6f 74 74 65 6e 20 61 73 20 73 6f   forgotten as so
5f50: 6f 6e 20 61 73 0a 2a 2a 20 74 68 65 20 63 6f 6e  on as.** the con
5f60: 6e 65 63 74 69 6f 6e 20 69 73 20 63 6c 6f 73 65  nection is close
5f70: 64 2e 29 20 20 49 66 20 7a 46 69 6c 65 6e 61 6d  d.)  If zFilenam
5f80: 65 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  e is NULL then t
5f90: 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 69  he database.** i
5fa0: 73 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20  s for temporary 
5fb0: 75 73 65 20 6f 6e 6c 79 20 61 6e 64 20 69 73 20  use only and is 
5fc0: 64 65 6c 65 74 65 64 20 61 73 20 73 6f 6f 6e 20  deleted as soon 
5fd0: 61 73 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  as the connectio
5fe0: 6e 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64 2e 0a  n.** is closed..
5ff0: 2a 2a 0a 2a 2a 20 41 20 74 65 6d 70 6f 72 61 72  **.** A temporar
6000: 79 20 64 61 74 61 62 61 73 65 20 63 61 6e 20 62  y database can b
6010: 65 20 65 69 74 68 65 72 20 61 20 64 69 73 6b 20  e either a disk 
6020: 66 69 6c 65 20 28 74 68 61 74 20 69 73 20 61 75  file (that is au
6030: 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20 64  tomatically.** d
6040: 65 6c 65 74 65 64 20 77 68 65 6e 20 74 68 65 20  eleted when the 
6050: 66 69 6c 65 20 69 73 20 63 6c 6f 73 65 64 29 20  file is closed) 
6060: 6f 72 20 61 20 73 65 74 20 6f 66 20 72 65 64 2d  or a set of red-
6070: 62 6c 61 63 6b 20 74 72 65 65 73 20 68 65 6c 64  black trees held
6080: 20 69 6e 20 6d 65 6d 6f 72 79 2c 0a 2a 2a 20 64   in memory,.** d
6090: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20  epending on the 
60a0: 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 54 45  values of the TE
60b0: 4d 50 5f 53 54 4f 52 45 20 63 6f 6d 70 69 6c 65  MP_STORE compile
60c0: 2d 74 69 6d 65 20 6d 61 63 72 6f 20 61 6e 64 20  -time macro and 
60d0: 74 68 65 0a 2a 2a 20 64 62 2d 3e 74 65 6d 70 5f  the.** db->temp_
60e0: 73 74 6f 72 65 20 76 61 72 69 61 62 6c 65 2c 20  store variable, 
60f0: 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65  according to the
6100: 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 68 61 72 74   following chart
6110: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 54 45  :.**.**       TE
6120: 4d 50 5f 53 54 4f 52 45 20 20 20 20 20 64 62 2d  MP_STORE     db-
6130: 3e 74 65 6d 70 5f 73 74 6f 72 65 20 20 20 20 20  >temp_store     
6140: 4c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 65 6d 70  Location of temp
6150: 6f 72 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a  orary database.*
6160: 2a 20 20 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d  *       --------
6170: 2d 2d 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d  --     ---------
6180: 2d 2d 2d 2d 2d 20 20 20 20 20 2d 2d 2d 2d 2d 2d  -----     ------
6190: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
61a0: 2d 2d 2d 2d 2d 2d 2d 2d 0a 2a 2a 20 20 20 20 20  --------.**     
61b0: 20 20 20 20 20 20 30 20 20 20 20 20 20 20 20 20        0         
61c0: 20 20 20 20 20 20 61 6e 79 20 20 20 20 20 20 20        any       
61d0: 20 20 20 20 20 20 66 69 6c 65 0a 2a 2a 20 20 20        file.**   
61e0: 20 20 20 20 20 20 20 20 31 20 20 20 20 20 20 20          1       
61f0: 20 20 20 20 20 20 20 20 20 31 20 20 20 20 20 20           1      
6200: 20 20 20 20 20 20 20 20 66 69 6c 65 0a 2a 2a 20          file.** 
6210: 20 20 20 20 20 20 20 20 20 20 31 20 20 20 20 20            1     
6220: 20 20 20 20 20 20 20 20 20 20 20 32 20 20 20 20             2    
6230: 20 20 20 20 20 20 20 20 20 20 6d 65 6d 6f 72 79            memory
6240: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 31 20  .**           1 
6250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30                 0
6260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
6270: 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  le.**           
6280: 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2               
6290: 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20   1              
62a0: 66 69 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  file.**         
62b0: 20 20 32 20 20 20 20 20 20 20 20 20 20 20 20 20    2             
62c0: 20 20 20 32 20 20 20 20 20 20 20 20 20 20 20 20     2            
62d0: 20 20 6d 65 6d 6f 72 79 0a 2a 2a 20 20 20 20 20    memory.**     
62e0: 20 20 20 20 20 20 32 20 20 20 20 20 20 20 20 20        2         
62f0: 20 20 20 20 20 20 20 30 20 20 20 20 20 20 20 20         0        
6300: 20 20 20 20 20 20 6d 65 6d 6f 72 79 0a 2a 2a 20        memory.** 
6310: 20 20 20 20 20 20 20 20 20 20 33 20 20 20 20 20            3     
6320: 20 20 20 20 20 20 20 20 20 20 61 6e 79 20 20 20            any   
6330: 20 20 20 20 20 20 20 20 20 20 6d 65 6d 6f 72 79            memory
6340: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  .*/.int sqlite3B
6350: 74 72 65 65 46 61 63 74 6f 72 79 28 0a 20 20 63  treeFactory(.  c
6360: 6f 6e 73 74 20 73 71 6c 69 74 65 20 2a 64 62 2c  onst sqlite *db,
6370: 09 20 20 20 20 2f 2a 20 4d 61 69 6e 20 64 61 74  .    /* Main dat
6380: 61 62 61 73 65 20 77 68 65 6e 20 6f 70 65 6e 69  abase when openi
6390: 6e 67 20 61 75 78 20 6f 74 68 65 72 77 69 73 65  ng aux otherwise
63a0: 20 30 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68   0 */.  const ch
63b0: 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20 20  ar *zFilename,  
63c0: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
63d0: 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67   file containing
63e0: 20 74 68 65 20 42 54 72 65 65 20 64 61 74 61 62   the BTree datab
63f0: 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6f 6d 69  ase */.  int omi
6400: 74 4a 6f 75 72 6e 61 6c 2c 20 20 20 20 20 20 20  tJournal,       
6410: 20 20 20 2f 2a 20 69 66 20 54 52 55 45 20 74 68     /* if TRUE th
6420: 65 6e 20 64 6f 20 6e 6f 74 20 6a 6f 75 72 6e 61  en do not journa
6430: 6c 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20  l this file */. 
6440: 20 69 6e 74 20 6e 43 61 63 68 65 2c 20 20 20 20   int nCache,    
6450: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f             /* Ho
6460: 77 20 6d 61 6e 79 20 70 61 67 65 73 20 69 6e 20  w many pages in 
6470: 74 68 65 20 70 61 67 65 20 63 61 63 68 65 20 2a  the page cache *
6480: 2f 0a 20 20 42 74 72 65 65 20 2a 2a 70 70 42 74  /.  Btree **ppBt
6490: 72 65 65 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ree           /*
64a0: 20 50 6f 69 6e 74 65 72 20 74 6f 20 6e 65 77 20   Pointer to new 
64b0: 42 74 72 65 65 20 6f 62 6a 65 63 74 20 77 72 69  Btree object wri
64c0: 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 29 7b 0a  tten here */.){.
64d0: 20 20 69 6e 74 20 62 74 72 65 65 5f 66 6c 61 67    int btree_flag
64e0: 73 20 3d 20 30 3b 0a 20 20 0a 20 20 61 73 73 65  s = 0;.  .  asse
64f0: 72 74 28 20 70 70 42 74 72 65 65 20 21 3d 20 30  rt( ppBtree != 0
6500: 29 3b 0a 20 20 69 66 28 20 6f 6d 69 74 4a 6f 75  );.  if( omitJou
6510: 72 6e 61 6c 20 29 7b 0a 20 20 20 20 62 74 72 65  rnal ){.    btre
6520: 65 5f 66 6c 61 67 73 20 7c 3d 20 42 54 52 45 45  e_flags |= BTREE
6530: 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 3b 0a 20  _OMIT_JOURNAL;. 
6540: 20 7d 0a 20 20 69 66 28 20 21 7a 46 69 6c 65 6e   }.  if( !zFilen
6550: 61 6d 65 20 29 7b 0a 20 20 20 20 62 74 72 65 65  ame ){.    btree
6560: 5f 66 6c 61 67 73 20 7c 3d 20 42 54 52 45 45 5f  _flags |= BTREE_
6570: 4d 45 4d 4f 52 59 3b 0a 20 20 7d 0a 0a 20 20 72  MEMORY;.  }..  r
6580: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 42 74 72  eturn sqlite3Btr
6590: 65 65 4f 70 65 6e 28 7a 46 69 6c 65 6e 61 6d 65  eeOpen(zFilename
65a0: 2c 20 70 70 42 74 72 65 65 2c 20 6e 43 61 63 68  , ppBtree, nCach
65b0: 65 2c 20 62 74 72 65 65 5f 66 6c 61 67 73 2c 0a  e, btree_flags,.
65c0: 20 20 20 20 20 20 28 76 6f 69 64 20 2a 29 26 64        (void *)&d
65d0: 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 29 3b  b->busyHandler);
65e0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  .}../*.** Return
65f0: 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 45   UTF-8 encoded E
6600: 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20  nglish language 
6610: 65 78 70 6c 61 6e 61 74 69 6f 6e 20 6f 66 20 74  explanation of t
6620: 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 0a 2a  he most recent.*
6630: 2a 20 65 72 72 6f 72 2e 0a 2a 2f 0a 63 6f 6e 73  * error..*/.cons
6640: 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f  t char *sqlite3_
6650: 65 72 72 6d 73 67 28 73 71 6c 69 74 65 33 20 2a  errmsg(sqlite3 *
6660: 64 62 29 7b 0a 20 20 69 66 28 20 21 64 62 20 29  db){.  if( !db )
6670: 7b 0a 20 20 20 20 2f 2a 20 49 66 20 64 62 20 69  {.    /* If db i
6680: 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 73 73  s NULL, then ass
6690: 75 6d 65 20 74 68 61 74 20 61 20 6d 61 6c 6c 6f  ume that a mallo
66a0: 63 28 29 20 66 61 69 6c 65 64 20 64 75 72 69 6e  c() failed durin
66b0: 67 20 61 6e 0a 20 20 20 20 2a 2a 20 73 71 6c 69  g an.    ** sqli
66c0: 74 65 33 5f 6f 70 65 6e 28 29 20 63 61 6c 6c 2e  te3_open() call.
66d0: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 72 65 74 75  .    */.    retu
66e0: 72 6e 20 73 71 6c 69 74 65 33 45 72 72 53 74 72  rn sqlite3ErrStr
66f0: 28 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 29 3b 0a  (SQLITE_NOMEM);.
6700: 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 7a 45    }.  if( db->zE
6710: 72 72 4d 73 67 20 29 7b 0a 20 20 20 20 72 65 74  rrMsg ){.    ret
6720: 75 72 6e 20 64 62 2d 3e 7a 45 72 72 4d 73 67 3b  urn db->zErrMsg;
6730: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 73 71  .  }.  return sq
6740: 6c 69 74 65 33 45 72 72 53 74 72 28 64 62 2d 3e  lite3ErrStr(db->
6750: 65 72 72 43 6f 64 65 29 3b 0a 7d 0a 0a 2f 2a 0a  errCode);.}../*.
6760: 2a 2a 20 52 65 74 75 72 6e 20 55 54 46 2d 31 36  ** Return UTF-16
6770: 20 65 6e 63 6f 64 65 64 20 45 6e 67 6c 69 73 68   encoded English
6780: 20 6c 61 6e 67 75 61 67 65 20 65 78 70 6c 61 6e   language explan
6790: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6d 6f 73  ation of the mos
67a0: 74 20 72 65 63 65 6e 74 0a 2a 2a 20 65 72 72 6f  t recent.** erro
67b0: 72 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 76 6f 69 64  r..*/.const void
67c0: 20 2a 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67   *sqlite3_errmsg
67d0: 31 36 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b  16(sqlite3 *db){
67e0: 0a 20 20 69 66 28 20 21 64 62 20 29 7b 0a 20 20  .  if( !db ){.  
67f0: 20 20 2f 2a 20 49 66 20 64 62 20 69 73 20 4e 55    /* If db is NU
6800: 4c 4c 2c 20 74 68 65 6e 20 61 73 73 75 6d 65 20  LL, then assume 
6810: 74 68 61 74 20 61 20 6d 61 6c 6c 6f 63 28 29 20  that a malloc() 
6820: 66 61 69 6c 65 64 20 64 75 72 69 6e 67 20 61 6e  failed during an
6830: 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f  .    ** sqlite3_
6840: 6f 70 65 6e 28 29 20 63 61 6c 6c 2e 20 57 65 20  open() call. We 
6850: 68 61 76 65 20 61 20 73 74 61 74 69 63 20 76 65  have a static ve
6860: 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 73 74 72  rsion of the str
6870: 69 6e 67 20 0a 20 20 20 20 2a 2a 20 22 6f 75 74  ing .    ** "out
6880: 20 6f 66 20 6d 65 6d 6f 72 79 22 20 65 6e 63 6f   of memory" enco
6890: 64 65 64 20 75 73 69 6e 67 20 55 54 46 2d 31 36  ded using UTF-16
68a0: 20 6a 75 73 74 20 66 6f 72 20 74 68 69 73 20 70   just for this p
68b0: 75 72 70 6f 73 65 2e 0a 20 20 20 20 2a 2a 0a 20  urpose..    **. 
68c0: 20 20 20 2a 2a 20 42 65 63 61 75 73 65 20 61 6c     ** Because al
68d0: 6c 20 74 68 65 20 63 68 61 72 61 63 74 65 72 73  l the characters
68e0: 20 69 6e 20 74 68 65 20 73 74 72 69 6e 67 20 61   in the string a
68f0: 72 65 20 69 6e 20 74 68 65 20 75 6e 69 63 6f 64  re in the unicod
6900: 65 0a 20 20 20 20 2a 2a 20 72 61 6e 67 65 20 30  e.    ** range 0
6910: 78 30 30 2d 30 78 46 46 2c 20 69 66 20 77 65 20  x00-0xFF, if we 
6920: 70 61 64 20 74 68 65 20 62 69 67 2d 65 6e 64 69  pad the big-endi
6930: 61 6e 20 73 74 72 69 6e 67 20 77 69 74 68 20 61  an string with a
6940: 20 0a 20 20 20 20 2a 2a 20 7a 65 72 6f 20 62 79   .    ** zero by
6950: 74 65 2c 20 77 65 20 63 61 6e 20 6f 62 74 61 69  te, we can obtai
6960: 6e 20 74 68 65 20 6c 69 74 74 6c 65 2d 65 6e 64  n the little-end
6970: 69 61 6e 20 73 74 72 69 6e 67 20 77 69 74 68 0a  ian string with.
6980: 20 20 20 20 2a 2a 20 26 62 69 67 5f 65 6e 64 69      ** &big_endi
6990: 61 6e 5b 31 5d 2e 0a 20 20 20 20 2a 2f 0a 20 20  an[1]..    */.  
69a0: 20 20 73 74 61 74 69 63 20 63 68 61 72 20 6f 75    static char ou
69b0: 74 4f 66 4d 65 6d 42 65 5b 5d 20 3d 20 7b 0a 20  tOfMemBe[] = {. 
69c0: 20 20 20 20 20 30 2c 20 27 6f 27 2c 20 30 2c 20       0, 'o', 0, 
69d0: 27 75 27 2c 20 30 2c 20 27 74 27 2c 20 30 2c 20  'u', 0, 't', 0, 
69e0: 27 20 27 2c 20 0a 20 20 20 20 20 20 30 2c 20 27  ' ', .      0, '
69f0: 6f 27 2c 20 30 2c 20 27 66 27 2c 20 30 2c 20 27  o', 0, 'f', 0, '
6a00: 20 27 2c 20 0a 20 20 20 20 20 20 30 2c 20 27 6d   ', .      0, 'm
6a10: 27 2c 20 30 2c 20 27 65 27 2c 20 30 2c 20 27 6d  ', 0, 'e', 0, 'm
6a20: 27 2c 20 30 2c 20 27 6f 27 2c 20 30 2c 20 27 72  ', 0, 'o', 0, 'r
6a30: 27 2c 20 30 2c 20 27 79 27 2c 20 30 2c 20 30 2c  ', 0, 'y', 0, 0,
6a40: 20 30 0a 20 20 20 20 7d 3b 0a 20 20 20 20 73 74   0.    };.    st
6a50: 61 74 69 63 20 63 68 61 72 20 2a 6f 75 74 4f 66  atic char *outOf
6a60: 4d 65 6d 4c 65 20 3d 20 26 6f 75 74 4f 66 4d 65  MemLe = &outOfMe
6a70: 6d 42 65 5b 31 5d 3b 0a 0a 20 20 20 20 69 66 28  mBe[1];..    if(
6a80: 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41   SQLITE_BIGENDIA
6a90: 4e 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72  N ){.      retur
6aa0: 6e 20 28 76 6f 69 64 20 2a 29 6f 75 74 4f 66 4d  n (void *)outOfM
6ab0: 65 6d 42 65 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  emBe;.    }else{
6ac0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 76  .      return (v
6ad0: 6f 69 64 20 2a 29 6f 75 74 4f 66 4d 65 6d 4c 65  oid *)outOfMemLe
6ae0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
6af0: 28 20 21 64 62 2d 3e 7a 45 72 72 4d 73 67 31 36  ( !db->zErrMsg16
6b00: 20 29 7b 0a 20 20 20 20 63 68 61 72 20 63 6f 6e   ){.    char con
6b10: 73 74 20 2a 7a 45 72 72 38 20 3d 20 73 71 6c 69  st *zErr8 = sqli
6b20: 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29 3b 0a  te3_errmsg(db);.
6b30: 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 42      if( SQLITE_B
6b40: 49 47 45 4e 44 49 41 4e 20 29 7b 0a 20 20 20 20  IGENDIAN ){.    
6b50: 20 20 64 62 2d 3e 7a 45 72 72 4d 73 67 31 36 20    db->zErrMsg16 
6b60: 3d 20 73 71 6c 69 74 65 33 75 74 66 38 74 6f 31  = sqlite3utf8to1
6b70: 36 62 65 28 7a 45 72 72 38 2c 20 2d 31 29 3b 0a  6be(zErr8, -1);.
6b80: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
6b90: 20 64 62 2d 3e 7a 45 72 72 4d 73 67 31 36 20 3d   db->zErrMsg16 =
6ba0: 20 73 71 6c 69 74 65 33 75 74 66 38 74 6f 31 36   sqlite3utf8to16
6bb0: 6c 65 28 7a 45 72 72 38 2c 20 2d 31 29 3b 0a 20  le(zErr8, -1);. 
6bc0: 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72     }.  }.  retur
6bd0: 6e 20 64 62 2d 3e 7a 45 72 72 4d 73 67 31 36 3b  n db->zErrMsg16;
6be0: 0a 7d 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .}..int sqlite3_
6bf0: 65 72 72 63 6f 64 65 28 73 71 6c 69 74 65 33 20  errcode(sqlite3 
6c00: 2a 64 62 29 7b 0a 20 20 72 65 74 75 72 6e 20 64  *db){.  return d
6c10: 62 2d 3e 65 72 72 43 6f 64 65 3b 0a 7d 0a 0a 2f  b->errCode;.}../
6c20: 2a 0a 2a 2a 20 43 68 65 63 6b 20 73 63 68 65 6d  *.** Check schem
6c30: 61 20 63 6f 6f 6b 69 65 73 20 69 6e 20 61 6c 6c  a cookies in all
6c40: 20 64 61 74 61 62 61 73 65 73 20 65 78 63 65 70   databases excep
6c50: 74 20 54 45 4d 50 2e 20 20 49 66 20 61 6e 79 20  t TEMP.  If any 
6c60: 63 6f 6f 6b 69 65 20 69 73 20 6f 75 74 0a 2a 2a  cookie is out.**
6c70: 20 6f 66 20 64 61 74 65 2c 20 72 65 74 75 72 6e   of date, return
6c80: 20 30 2e 20 20 49 66 20 61 6c 6c 20 73 63 68 65   0.  If all sche
6c90: 6d 61 20 63 6f 6f 6b 69 65 73 20 61 72 65 20 63  ma cookies are c
6ca0: 75 72 72 65 6e 74 2c 20 72 65 74 75 72 6e 20 31  urrent, return 1
6cb0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
6cc0: 73 63 68 65 6d 61 49 73 56 61 6c 69 64 28 73 71  schemaIsValid(sq
6cd0: 6c 69 74 65 20 2a 64 62 29 7b 0a 20 20 69 6e 74  lite *db){.  int
6ce0: 20 69 44 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a   iDb;.  int rc;.
6cf0: 20 20 42 74 43 75 72 73 6f 72 20 2a 63 75 72 54    BtCursor *curT
6d00: 65 6d 70 3b 0a 20 20 69 6e 74 20 63 6f 6f 6b 69  emp;.  int cooki
6d10: 65 3b 0a 20 20 69 6e 74 20 61 6c 6c 4f 6b 20 3d  e;.  int allOk =
6d20: 20 31 3b 0a 0a 20 20 66 6f 72 28 69 44 62 3d 30   1;..  for(iDb=0
6d30: 3b 20 61 6c 6c 4f 6b 20 26 26 20 69 44 62 3c 64  ; allOk && iDb<d
6d40: 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b 29 7b 0a  b->nDb; iDb++){.
6d50: 20 20 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a      Btree *pBt;.
6d60: 20 20 20 20 69 66 28 20 69 44 62 3d 3d 31 20 29      if( iDb==1 )
6d70: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 70   continue;.    p
6d80: 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 69 44 62  Bt = db->aDb[iDb
6d90: 5d 2e 70 42 74 3b 0a 20 20 20 20 69 66 28 20 70  ].pBt;.    if( p
6da0: 42 74 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65  Bt==0 ) continue
6db0: 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
6dc0: 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 42  e3BtreeCursor(pB
6dd0: 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20  t, MASTER_ROOT, 
6de0: 30 2c 20 30 2c 20 30 2c 20 26 63 75 72 54 65 6d  0, 0, 0, &curTem
6df0: 70 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  p);.    if( rc==
6e00: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
6e10: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
6e20: 74 72 65 65 47 65 74 4d 65 74 61 28 70 42 74 2c  treeGetMeta(pBt,
6e30: 20 31 2c 20 26 63 6f 6f 6b 69 65 29 3b 0a 20 20   1, &cookie);.  
6e40: 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
6e50: 54 45 5f 4f 4b 20 26 26 20 63 6f 6f 6b 69 65 21  TE_OK && cookie!
6e60: 3d 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 73 63  =db->aDb[iDb].sc
6e70: 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 29 7b 0a 20  hema_cookie ){. 
6e80: 20 20 20 20 20 20 20 61 6c 6c 4f 6b 20 3d 20 30         allOk = 0
6e90: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
6ea0: 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 6f 73  sqlite3BtreeClos
6eb0: 65 43 75 72 73 6f 72 28 63 75 72 54 65 6d 70 29  eCursor(curTemp)
6ec0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65  ;.    }.  }.  re
6ed0: 74 75 72 6e 20 61 6c 6c 4f 6b 3b 0a 7d 0a 0a 2f  turn allOk;.}../
6ee0: 2a 0a 2a 2a 20 43 6f 6d 70 69 6c 65 20 74 68 65  *.** Compile the
6ef0: 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 53   UTF-8 encoded S
6f00: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 7a 53 71  QL statement zSq
6f10: 6c 20 69 6e 74 6f 20 61 20 73 74 61 74 65 6d 65  l into a stateme
6f20: 6e 74 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 69 6e  nt handle..*/.in
6f30: 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  t sqlite3_prepar
6f40: 65 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  e(.  sqlite3 *db
6f50: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
6f60: 2a 20 44 61 74 61 62 61 73 65 20 68 61 6e 64 6c  * Database handl
6f70: 65 2e 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  e. */.  const ch
6f80: 61 72 20 2a 7a 53 71 6c 2c 20 20 20 20 20 20 20  ar *zSql,       
6f90: 20 20 2f 2a 20 55 54 46 2d 38 20 65 6e 63 6f 64    /* UTF-8 encod
6fa0: 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  ed SQL statement
6fb0: 2e 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65  . */.  int nByte
6fc0: 73 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s,              
6fd0: 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 7a 53   /* Length of zS
6fe0: 71 6c 20 69 6e 20 62 79 74 65 73 2e 20 2a 2f 0a  ql in bytes. */.
6ff0: 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
7000: 2a 70 70 53 74 6d 74 2c 20 20 20 20 2f 2a 20 4f  *ppStmt,    /* O
7010: 55 54 3a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f  UT: A pointer to
7020: 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74   the prepared st
7030: 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e  atement */.  con
7040: 73 74 20 63 68 61 72 2a 2a 20 70 7a 54 61 69 6c  st char** pzTail
7050: 20 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20 45         /* OUT: E
7060: 6e 64 20 6f 66 20 70 61 72 73 65 64 20 73 74 72  nd of parsed str
7070: 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 50 61 72 73  ing */.){.  Pars
7080: 65 20 73 50 61 72 73 65 3b 0a 20 20 63 68 61 72  e sParse;.  char
7090: 20 2a 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20   *zErrMsg = 0;. 
70a0: 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45   int rc = SQLITE
70b0: 5f 4f 4b 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69  _OK;..  if( sqli
70c0: 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20  te3SafetyOn(db) 
70d0: 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
70e0: 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 20 20 67  TE_MISUSE;.    g
70f0: 6f 74 6f 20 70 72 65 70 61 72 65 5f 6f 75 74 3b  oto prepare_out;
7100: 0a 20 20 7d 0a 0a 20 20 69 66 28 20 64 62 2d 3e  .  }..  if( db->
7110: 70 56 64 62 65 3d 3d 30 20 29 7b 20 64 62 2d 3e  pVdbe==0 ){ db->
7120: 6e 43 68 61 6e 67 65 20 3d 20 30 3b 20 7d 0a 20  nChange = 0; }. 
7130: 20 6d 65 6d 73 65 74 28 26 73 50 61 72 73 65 2c   memset(&sParse,
7140: 20 30 2c 20 73 69 7a 65 6f 66 28 73 50 61 72 73   0, sizeof(sPars
7150: 65 29 29 3b 0a 20 20 73 50 61 72 73 65 2e 64 62  e));.  sParse.db
7160: 20 3d 20 64 62 3b 0a 20 20 73 71 6c 69 74 65 33   = db;.  sqlite3
7170: 52 75 6e 50 61 72 73 65 72 28 26 73 50 61 72 73  RunParser(&sPars
7180: 65 2c 20 7a 53 71 6c 2c 20 26 7a 45 72 72 4d 73  e, zSql, &zErrMs
7190: 67 29 3b 0a 0a 20 20 69 66 28 20 64 62 2d 3e 78  g);..  if( db->x
71a0: 54 72 61 63 65 20 26 26 20 21 64 62 2d 3e 69 6e  Trace && !db->in
71b0: 69 74 2e 62 75 73 79 20 29 7b 0a 20 20 20 20 2f  it.busy ){.    /
71c0: 2a 20 54 72 61 63 65 20 6f 6e 6c 79 20 74 68 65  * Trace only the
71d0: 20 73 74 61 74 6d 65 6e 74 20 74 68 61 74 20 77   statment that w
71e0: 61 73 20 63 6f 6d 70 69 6c 65 64 2e 0a 20 20 20  as compiled..   
71f0: 20 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20   ** Make a copy 
7200: 6f 66 20 74 68 61 74 20 70 61 72 74 20 6f 66 20  of that part of 
7210: 74 68 65 20 53 51 4c 20 73 74 72 69 6e 67 20 73  the SQL string s
7220: 69 6e 63 65 20 7a 53 51 4c 20 69 73 20 63 6f 6e  ince zSQL is con
7230: 73 74 0a 20 20 20 20 2a 2a 20 61 6e 64 20 77 65  st.    ** and we
7240: 20 6d 75 73 74 20 70 61 73 73 20 61 20 7a 65 72   must pass a zer
7250: 6f 20 74 65 72 6d 69 6e 61 74 65 64 20 73 74 72  o terminated str
7260: 69 6e 67 20 74 6f 20 74 68 65 20 74 72 61 63 65  ing to the trace
7270: 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20 20 2a 2a   function.    **
7280: 20 54 68 65 20 63 6f 70 79 20 69 73 20 75 6e 6e   The copy is unn
7290: 65 63 65 73 73 61 72 79 20 69 66 20 74 68 65 20  ecessary if the 
72a0: 74 61 69 6c 20 70 6f 69 6e 74 65 72 20 69 73 20  tail pointer is 
72b0: 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 0a  pointing at the.
72c0: 20 20 20 20 2a 2a 20 62 65 67 69 6e 6e 69 67 20      ** beginnig 
72d0: 6f 72 20 65 6e 64 20 6f 66 20 74 68 65 20 53 51  or end of the SQ
72e0: 4c 20 73 74 72 69 6e 67 2e 0a 20 20 20 20 2a 2f  L string..    */
72f0: 0a 20 20 20 20 69 66 28 20 73 50 61 72 73 65 2e  .    if( sParse.
7300: 7a 54 61 69 6c 20 26 26 20 73 50 61 72 73 65 2e  zTail && sParse.
7310: 7a 54 61 69 6c 21 3d 7a 53 71 6c 20 26 26 20 2a  zTail!=zSql && *
7320: 73 50 61 72 73 65 2e 7a 54 61 69 6c 20 29 7b 0a  sParse.zTail ){.
7330: 20 20 20 20 20 20 63 68 61 72 20 2a 74 6d 70 53        char *tmpS
7340: 71 6c 20 3d 20 73 71 6c 69 74 65 53 74 72 4e 44  ql = sqliteStrND
7350: 75 70 28 7a 53 71 6c 2c 20 73 50 61 72 73 65 2e  up(zSql, sParse.
7360: 7a 54 61 69 6c 20 2d 20 7a 53 71 6c 29 3b 0a 20  zTail - zSql);. 
7370: 20 20 20 20 20 69 66 28 20 74 6d 70 53 71 6c 20       if( tmpSql 
7380: 29 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 78  ){.        db->x
7390: 54 72 61 63 65 28 64 62 2d 3e 70 54 72 61 63 65  Trace(db->pTrace
73a0: 41 72 67 2c 20 74 6d 70 53 71 6c 29 3b 0a 20 20  Arg, tmpSql);.  
73b0: 20 20 20 20 20 20 66 72 65 65 28 74 6d 70 53 71        free(tmpSq
73c0: 6c 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  l);.      }else{
73d0: 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 61  .        /* If a
73e0: 20 6d 65 6d 6f 72 79 20 65 72 72 6f 72 20 6f 63   memory error oc
73f0: 63 75 72 72 65 64 20 64 75 72 69 6e 67 20 74 68  curred during th
7400: 65 20 63 6f 70 79 2c 0a 20 20 20 20 20 20 20 20  e copy,.        
7410: 2a 2a 20 74 72 61 63 65 20 65 6e 74 69 72 65 20  ** trace entire 
7420: 53 51 4c 20 73 74 72 69 6e 67 20 61 6e 64 20 66  SQL string and f
7430: 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
7440: 68 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 71  he.        ** sq
7450: 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69  lite3_malloc_fai
7460: 6c 65 64 20 74 65 73 74 20 74 6f 20 72 65 70 6f  led test to repo
7470: 72 74 20 74 68 65 20 65 72 72 6f 72 2e 0a 20 20  rt the error..  
7480: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
7490: 20 64 62 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e   db->xTrace(db->
74a0: 70 54 72 61 63 65 41 72 67 2c 20 7a 53 71 6c 29  pTraceArg, zSql)
74b0: 3b 20 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  ; .      }.    }
74c0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e  else{.      db->
74d0: 78 54 72 61 63 65 28 64 62 2d 3e 70 54 72 61 63  xTrace(db->pTrac
74e0: 65 41 72 67 2c 20 7a 53 71 6c 29 3b 20 0a 20 20  eArg, zSql); .  
74f0: 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 50 72    }.  }..  /* Pr
7500: 69 6e 74 20 61 20 63 6f 70 79 20 6f 66 20 53 51  int a copy of SQ
7510: 4c 20 61 73 20 69 74 20 69 73 20 65 78 65 63 75  L as it is execu
7520: 74 65 64 20 69 66 20 74 68 65 20 53 51 4c 5f 54  ted if the SQL_T
7530: 52 41 43 45 20 70 72 61 67 6d 61 20 69 73 20 74  RACE pragma is t
7540: 75 72 6e 65 64 0a 20 20 2a 2a 20 6f 6e 20 69 6e  urned.  ** on in
7550: 20 64 65 62 75 67 67 69 6e 67 20 6d 6f 64 65 2e   debugging mode.
7560: 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  .  */.#ifdef SQL
7570: 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20  ITE_DEBUG.  if( 
7580: 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  (db->flags & SQL
7590: 49 54 45 5f 53 71 6c 54 72 61 63 65 29 21 3d 30  ITE_SqlTrace)!=0
75a0: 20 26 26 20 73 50 61 72 73 65 2e 7a 54 61 69 6c   && sParse.zTail
75b0: 20 26 26 20 73 50 61 72 73 65 2e 7a 54 61 69 6c   && sParse.zTail
75c0: 21 3d 7a 53 71 6c 20 29 7b 0a 20 20 20 20 73 71  !=zSql ){.    sq
75d0: 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66  lite3DebugPrintf
75e0: 28 22 53 51 4c 2d 74 72 61 63 65 3a 20 25 2e 2a  ("SQL-trace: %.*
75f0: 73 5c 6e 22 2c 20 73 50 61 72 73 65 2e 7a 54 61  s\n", sParse.zTa
7600: 69 6c 20 2d 20 7a 53 71 6c 2c 20 7a 53 71 6c 29  il - zSql, zSql)
7610: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ;.  }.#endif /* 
7620: 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a  SQLITE_DEBUG */.
7630: 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f  ..  if( sqlite3_
7640: 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 20 29 7b  malloc_failed ){
7650: 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
7660: 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 73 71 6c 69  _NOMEM;.    sqli
7670: 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64  te3RollbackAll(d
7680: 62 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 52  b);.    sqlite3R
7690: 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65  esetInternalSche
76a0: 6d 61 28 64 62 2c 20 30 29 3b 0a 20 20 20 20 64  ma(db, 0);.    d
76b0: 62 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 53 51 4c  b->flags &= ~SQL
76c0: 49 54 45 5f 49 6e 54 72 61 6e 73 3b 0a 20 20 20  ITE_InTrans;.   
76d0: 20 67 6f 74 6f 20 70 72 65 70 61 72 65 5f 6f 75   goto prepare_ou
76e0: 74 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 50 61  t;.  }.  if( sPa
76f0: 72 73 65 2e 72 63 3d 3d 53 51 4c 49 54 45 5f 44  rse.rc==SQLITE_D
7700: 4f 4e 45 20 29 20 73 50 61 72 73 65 2e 72 63 20  ONE ) sParse.rc 
7710: 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 69  = SQLITE_OK;.  i
7720: 66 28 20 73 50 61 72 73 65 2e 63 68 65 63 6b 53  f( sParse.checkS
7730: 63 68 65 6d 61 20 26 26 20 21 73 63 68 65 6d 61  chema && !schema
7740: 49 73 56 61 6c 69 64 28 64 62 29 20 29 7b 0a 20  IsValid(db) ){. 
7750: 20 20 20 73 50 61 72 73 65 2e 72 63 20 3d 20 53     sParse.rc = S
7760: 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20  QLITE_SCHEMA;.  
7770: 7d 0a 20 20 69 66 28 20 73 50 61 72 73 65 2e 72  }.  if( sParse.r
7780: 63 3d 3d 53 51 4c 49 54 45 5f 53 43 48 45 4d 41  c==SQLITE_SCHEMA
7790: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52   ){.    sqlite3R
77a0: 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65  esetInternalSche
77b0: 6d 61 28 64 62 2c 20 30 29 3b 0a 20 20 7d 0a 20  ma(db, 0);.  }. 
77c0: 20 61 73 73 65 72 74 28 20 70 70 53 74 6d 74 20   assert( ppStmt 
77d0: 29 3b 0a 20 20 2a 70 70 53 74 6d 74 20 3d 20 28  );.  *ppStmt = (
77e0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 29 73 50  sqlite3_stmt*)sP
77f0: 61 72 73 65 2e 70 56 64 62 65 3b 0a 20 20 69 66  arse.pVdbe;.  if
7800: 28 20 70 7a 54 61 69 6c 20 29 20 2a 70 7a 54 61  ( pzTail ) *pzTa
7810: 69 6c 20 3d 20 73 50 61 72 73 65 2e 7a 54 61 69  il = sParse.zTai
7820: 6c 3b 0a 20 20 72 63 20 3d 20 73 50 61 72 73 65  l;.  rc = sParse
7830: 2e 72 63 3b 0a 0a 20 20 69 66 28 20 72 63 3d 3d  .rc;..  if( rc==
7840: 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 73 50 61  SQLITE_OK && sPa
7850: 72 73 65 2e 70 56 64 62 65 20 26 26 20 73 50 61  rse.pVdbe && sPa
7860: 72 73 65 2e 65 78 70 6c 61 69 6e 20 29 7b 0a 20  rse.explain ){. 
7870: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
7880: 74 4e 75 6d 43 6f 6c 73 28 73 50 61 72 73 65 2e  tNumCols(sParse.
7890: 70 56 64 62 65 2c 20 35 29 3b 0a 20 20 20 20 73  pVdbe, 5);.    s
78a0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
78b0: 4e 61 6d 65 28 73 50 61 72 73 65 2e 70 56 64 62  Name(sParse.pVdb
78c0: 65 2c 20 30 2c 20 22 61 64 64 72 22 2c 20 50 33  e, 0, "addr", P3
78d0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71  _STATIC);.    sq
78e0: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
78f0: 61 6d 65 28 73 50 61 72 73 65 2e 70 56 64 62 65  ame(sParse.pVdbe
7900: 2c 20 31 2c 20 22 6f 70 63 6f 64 65 22 2c 20 50  , 1, "opcode", P
7910: 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73  3_STATIC);.    s
7920: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
7930: 4e 61 6d 65 28 73 50 61 72 73 65 2e 70 56 64 62  Name(sParse.pVdb
7940: 65 2c 20 32 2c 20 22 70 31 22 2c 20 50 33 5f 53  e, 2, "p1", P3_S
7950: 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69  TATIC);.    sqli
7960: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
7970: 65 28 73 50 61 72 73 65 2e 70 56 64 62 65 2c 20  e(sParse.pVdbe, 
7980: 33 2c 20 22 70 32 22 2c 20 50 33 5f 53 54 41 54  3, "p2", P3_STAT
7990: 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  IC);.    sqlite3
79a0: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 73  VdbeSetColName(s
79b0: 50 61 72 73 65 2e 70 56 64 62 65 2c 20 34 2c 20  Parse.pVdbe, 4, 
79c0: 22 70 33 22 2c 20 50 33 5f 53 54 41 54 49 43 29  "p3", P3_STATIC)
79d0: 3b 0a 20 20 7d 20 0a 0a 70 72 65 70 61 72 65 5f  ;.  } ..prepare_
79e0: 6f 75 74 3a 0a 20 20 69 66 28 20 73 71 6c 69 74  out:.  if( sqlit
79f0: 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 20  e3SafetyOff(db) 
7a00: 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
7a10: 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 20  TE_MISUSE;.  }. 
7a20: 20 69 66 28 20 7a 45 72 72 4d 73 67 20 29 7b 0a   if( zErrMsg ){.
7a30: 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72      sqlite3Error
7a40: 28 64 62 2c 20 72 63 2c 20 22 25 73 22 2c 20 7a  (db, rc, "%s", z
7a50: 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 73 71 6c  ErrMsg);.    sql
7a60: 69 74 65 46 72 65 65 28 7a 45 72 72 4d 73 67 29  iteFree(zErrMsg)
7a70: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
7a80: 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20  qlite3Error(db, 
7a90: 72 63 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 72 65  rc, 0);.  }.  re
7aa0: 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a  turn rc;.}../*.*
7ab0: 2a 20 43 6f 6d 70 69 6c 65 20 74 68 65 20 55 54  * Compile the UT
7ac0: 46 2d 31 36 20 65 6e 63 6f 64 65 64 20 53 51 4c  F-16 encoded SQL
7ad0: 20 73 74 61 74 65 6d 65 6e 74 20 7a 53 71 6c 20   statement zSql 
7ae0: 69 6e 74 6f 20 61 20 73 74 61 74 65 6d 65 6e 74  into a statement
7af0: 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 69 6e 74 20   handle..*/.int 
7b00: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31  sqlite3_prepare1
7b10: 36 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  6(.  sqlite3 *db
7b20: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
7b30: 2a 20 44 61 74 61 62 61 73 65 20 68 61 6e 64 6c  * Database handl
7b40: 65 2e 20 2a 2f 20 0a 20 20 63 6f 6e 73 74 20 76  e. */ .  const v
7b50: 6f 69 64 20 2a 7a 53 71 6c 2c 20 20 20 20 20 20  oid *zSql,      
7b60: 20 20 20 2f 2a 20 55 54 46 2d 38 20 65 6e 63 6f     /* UTF-8 enco
7b70: 64 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  ded SQL statemen
7b80: 74 2e 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74  t. */.  int nByt
7b90: 65 73 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  es,             
7ba0: 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 7a    /* Length of z
7bb0: 53 71 6c 20 69 6e 20 62 79 74 65 73 2e 20 2a 2f  Sql in bytes. */
7bc0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
7bd0: 2a 2a 70 70 53 74 6d 74 2c 20 20 20 20 2f 2a 20  **ppStmt,    /* 
7be0: 4f 55 54 3a 20 41 20 70 6f 69 6e 74 65 72 20 74  OUT: A pointer t
7bf0: 6f 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  o the prepared s
7c00: 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 63 6f  tatement */.  co
7c10: 6e 73 74 20 76 6f 69 64 20 2a 2a 70 7a 54 61 69  nst void **pzTai
7c20: 6c 20 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20  l       /* OUT: 
7c30: 45 6e 64 20 6f 66 20 70 61 72 73 65 64 20 73 74  End of parsed st
7c40: 72 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 2f 2a 20  ring */.){.  /* 
7c50: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 63 75  This function cu
7c60: 72 72 65 6e 74 6c 79 20 77 6f 72 6b 73 20 62 79  rrently works by
7c70: 20 66 69 72 73 74 20 74 72 61 6e 73 66 6f 72 6d   first transform
7c80: 69 6e 67 20 74 68 65 20 55 54 46 2d 31 36 0a 20  ing the UTF-16. 
7c90: 20 2a 2a 20 65 6e 63 6f 64 65 64 20 73 74 72 69   ** encoded stri
7ca0: 6e 67 20 74 6f 20 55 54 46 2d 38 2c 20 74 68 65  ng to UTF-8, the
7cb0: 6e 20 69 6e 76 6f 6b 69 6e 67 20 73 71 6c 69 74  n invoking sqlit
7cc0: 65 33 5f 70 72 65 70 61 72 65 28 29 2e 20 54 68  e3_prepare(). Th
7cd0: 65 0a 20 20 2a 2a 20 74 72 69 63 6b 79 20 62 69  e.  ** tricky bi
7ce0: 74 20 69 73 20 66 69 67 75 72 69 6e 67 20 6f 75  t is figuring ou
7cf0: 74 20 74 68 65 20 70 6f 69 6e 74 65 72 20 74 6f  t the pointer to
7d00: 20 72 65 74 75 72 6e 20 69 6e 20 2a 70 7a 54 61   return in *pzTa
7d10: 69 6c 2e 0a 20 20 2a 2f 0a 20 20 63 68 61 72 20  il..  */.  char 
7d20: 2a 7a 53 71 6c 38 20 3d 20 30 3b 0a 20 20 63 68  *zSql8 = 0;.  ch
7d30: 61 72 20 63 6f 6e 73 74 20 2a 7a 54 61 69 6c 38  ar const *zTail8
7d40: 20 3d 20 30 3b 0a 20 20 69 6e 74 20 72 63 3b 0a   = 0;.  int rc;.
7d50: 0a 20 20 7a 53 71 6c 38 20 3d 20 73 71 6c 69 74  .  zSql8 = sqlit
7d60: 65 33 75 74 66 31 36 74 6f 38 28 7a 53 71 6c 2c  e3utf16to8(zSql,
7d70: 20 6e 42 79 74 65 73 2c 20 53 51 4c 49 54 45 5f   nBytes, SQLITE_
7d80: 42 49 47 45 4e 44 49 41 4e 29 3b 0a 20 20 69 66  BIGENDIAN);.  if
7d90: 28 20 21 7a 53 71 6c 38 20 29 7b 0a 20 20 20 20  ( !zSql8 ){.    
7da0: 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c  sqlite3Error(db,
7db0: 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 2c 20 30   SQLITE_NOMEM, 0
7dc0: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51  );.    return SQ
7dd0: 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d 0a  LITE_NOMEM;.  }.
7de0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70    rc = sqlite3_p
7df0: 72 65 70 61 72 65 28 64 62 2c 20 7a 53 71 6c 38  repare(db, zSql8
7e00: 2c 20 2d 31 2c 20 70 70 53 74 6d 74 2c 20 26 7a  , -1, ppStmt, &z
7e10: 54 61 69 6c 38 29 3b 0a 0a 20 20 69 66 28 20 7a  Tail8);..  if( z
7e20: 54 61 69 6c 38 20 26 26 20 70 7a 54 61 69 6c 20  Tail8 && pzTail 
7e30: 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 73 71 6c  ){.    /* If sql
7e40: 69 74 65 33 5f 70 72 65 70 61 72 65 20 72 65 74  ite3_prepare ret
7e50: 75 72 6e 73 20 61 20 74 61 69 6c 20 70 6f 69 6e  urns a tail poin
7e60: 74 65 72 2c 20 77 65 20 63 61 6c 63 75 6c 61 74  ter, we calculat
7e70: 65 20 74 68 65 0a 20 20 20 20 2a 2a 20 65 71 75  e the.    ** equ
7e80: 69 76 61 6c 65 6e 74 20 70 6f 69 6e 74 65 72 20  ivalent pointer 
7e90: 69 6e 74 6f 20 74 68 65 20 55 54 46 2d 31 36 20  into the UTF-16 
7ea0: 73 74 72 69 6e 67 20 62 79 20 63 6f 75 6e 74 69  string by counti
7eb0: 6e 67 20 74 68 65 20 75 6e 69 63 6f 64 65 0a 20  ng the unicode. 
7ec0: 20 20 20 2a 2a 20 63 68 61 72 61 63 74 65 72 73     ** characters
7ed0: 20 62 65 74 77 65 65 6e 20 7a 53 71 6c 38 20 61   between zSql8 a
7ee0: 6e 64 20 7a 54 61 69 6c 38 2c 20 61 6e 64 20 74  nd zTail8, and t
7ef0: 68 65 6e 20 72 65 74 75 72 6e 69 6e 67 20 61 20  hen returning a 
7f00: 70 6f 69 6e 74 65 72 0a 20 20 20 20 2a 2a 20 74  pointer.    ** t
7f10: 68 65 20 73 61 6d 65 20 6e 75 6d 62 65 72 20 6f  he same number o
7f20: 66 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 74  f characters int
7f30: 6f 20 74 68 65 20 55 54 46 2d 31 36 20 73 74 72  o the UTF-16 str
7f40: 69 6e 67 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ing..    */.    
7f50: 69 6e 74 20 63 68 61 72 73 5f 70 61 72 73 65 64  int chars_parsed
7f60: 20 3d 20 73 71 6c 69 74 65 33 75 74 66 38 43 68   = sqlite3utf8Ch
7f70: 61 72 4c 65 6e 28 7a 53 71 6c 38 2c 20 7a 54 61  arLen(zSql8, zTa
7f80: 69 6c 38 2d 7a 53 71 6c 38 29 3b 0a 20 20 20 20  il8-zSql8);.    
7f90: 2a 70 7a 54 61 69 6c 20 3d 20 28 75 38 20 2a 29  *pzTail = (u8 *)
7fa0: 7a 53 71 6c 20 2b 20 73 71 6c 69 74 65 33 75 74  zSql + sqlite3ut
7fb0: 66 31 36 42 79 74 65 4c 65 6e 28 7a 53 71 6c 2c  f16ByteLen(zSql,
7fc0: 20 63 68 61 72 73 5f 70 61 72 73 65 64 29 3b 0a   chars_parsed);.
7fd0: 20 20 7d 0a 20 20 73 71 6c 69 74 65 46 72 65 65    }.  sqliteFree
7fe0: 28 7a 53 71 6c 38 29 3b 0a 20 0a 20 20 72 65 74  (zSql8);. .  ret
7ff0: 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  urn rc;.}../*.**
8000: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 64 6f   This routine do
8010: 65 73 20 74 68 65 20 77 6f 72 6b 20 6f 66 20 6f  es the work of o
8020: 70 65 6e 69 6e 67 20 61 20 64 61 74 61 62 61 73  pening a databas
8030: 65 20 6f 6e 20 62 65 68 61 6c 66 20 6f 66 0a 2a  e on behalf of.*
8040: 2a 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28 29  * sqlite3_open()
8050: 20 61 6e 64 20 73 71 6c 69 74 65 33 5f 6f 70 65   and sqlite3_ope
8060: 6e 31 36 28 29 2e 20 54 68 65 20 64 61 74 61 62  n16(). The datab
8070: 61 73 65 20 66 69 6c 65 6e 61 6d 65 20 22 7a 46  ase filename "zF
8080: 69 6c 65 6e 61 6d 65 22 20 20 0a 2a 2a 20 69 73  ilename"  .** is
8090: 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 2e 20   UTF-8 encoded. 
80a0: 54 68 65 20 66 6f 75 72 74 68 20 61 72 67 75 6d  The fourth argum
80b0: 65 6e 74 2c 20 22 64 65 66 5f 65 6e 63 22 20 69  ent, "def_enc" i
80c0: 73 20 6f 6e 65 20 6f 66 20 74 68 65 20 54 45 58  s one of the TEX
80d0: 54 5f 2a 0a 2a 2a 20 6d 61 63 72 6f 73 20 66 72  T_*.** macros fr
80e0: 6f 6d 20 73 71 6c 69 74 65 49 6e 74 2e 68 2e 20  om sqliteInt.h. 
80f0: 49 66 20 77 65 20 65 6e 64 20 75 70 20 63 72 65  If we end up cre
8100: 61 74 69 6e 67 20 61 20 6e 65 77 20 64 61 74 61  ating a new data
8110: 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 28 6e 6f  base file.** (no
8120: 74 20 6f 70 65 6e 69 6e 67 20 61 6e 20 65 78 69  t opening an exi
8130: 73 74 69 6e 67 20 6f 6e 65 29 2c 20 74 68 65 20  sting one), the 
8140: 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 6f 66  text encoding of
8150: 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
8160: 20 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20   will be set to 
8170: 74 68 69 73 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73  this value..*/.s
8180: 74 61 74 69 63 20 69 6e 74 20 6f 70 65 6e 44 61  tatic int openDa
8190: 74 61 62 61 73 65 28 0a 20 20 63 6f 6e 73 74 20  tabase(.  const 
81a0: 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c  char *zFilename,
81b0: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 66 69 6c   /* Database fil
81c0: 65 6e 61 6d 65 20 55 54 46 2d 38 20 65 6e 63 6f  ename UTF-8 enco
81d0: 64 65 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ded */.  sqlite3
81e0: 20 2a 2a 70 70 44 62 20 20 20 20 20 20 20 20 20   **ppDb         
81f0: 2f 2a 20 4f 55 54 3a 20 52 65 74 75 72 6e 65 64  /* OUT: Returned
8200: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
8210: 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33   */.){.  sqlite3
8220: 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 2c 20   *db;.  int rc, 
8230: 69 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  i;.  char *zErrM
8240: 73 67 20 3d 20 30 3b 0a 0a 20 20 2f 2a 20 41 6c  sg = 0;..  /* Al
8250: 6c 6f 63 61 74 65 20 74 68 65 20 73 71 6c 69 74  locate the sqlit
8260: 65 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  e data structure
8270: 20 2a 2f 0a 20 20 64 62 20 3d 20 73 71 6c 69 74   */.  db = sqlit
8280: 65 4d 61 6c 6c 6f 63 28 20 73 69 7a 65 6f 66 28  eMalloc( sizeof(
8290: 73 71 6c 69 74 65 29 20 29 3b 0a 20 20 69 66 28  sqlite) );.  if(
82a0: 20 64 62 3d 3d 30 20 29 20 67 6f 74 6f 20 6f 70   db==0 ) goto op
82b0: 65 6e 64 62 5f 6f 75 74 3b 0a 20 20 64 62 2d 3e  endb_out;.  db->
82c0: 70 72 69 6f 72 4e 65 77 52 6f 77 69 64 20 3d 20  priorNewRowid = 
82d0: 30 3b 0a 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d  0;.  db->magic =
82e0: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55   SQLITE_MAGIC_BU
82f0: 53 59 3b 0a 20 20 64 62 2d 3e 6e 44 62 20 3d 20  SY;.  db->nDb = 
8300: 32 3b 0a 20 20 64 62 2d 3e 61 44 62 20 3d 20 64  2;.  db->aDb = d
8310: 62 2d 3e 61 44 62 53 74 61 74 69 63 3b 0a 20 20  b->aDbStatic;.  
8320: 64 62 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45  db->enc = SQLITE
8330: 5f 55 54 46 38 3b 0a 20 20 64 62 2d 3e 61 75 74  _UTF8;.  db->aut
8340: 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 2f  oCommit = 1;.  /
8350: 2a 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53  * db->flags |= S
8360: 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61  QLITE_ShortColNa
8370: 6d 65 73 3b 20 2a 2f 0a 20 20 73 71 6c 69 74 65  mes; */.  sqlite
8380: 33 48 61 73 68 49 6e 69 74 28 26 64 62 2d 3e 61  3HashInit(&db->a
8390: 46 75 6e 63 2c 20 53 51 4c 49 54 45 5f 48 41 53  Func, SQLITE_HAS
83a0: 48 5f 53 54 52 49 4e 47 2c 20 30 29 3b 0a 20 20  H_STRING, 0);.  
83b0: 73 71 6c 69 74 65 33 48 61 73 68 49 6e 69 74 28  sqlite3HashInit(
83c0: 26 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 2c 20 53  &db->aCollSeq, S
83d0: 51 4c 49 54 45 5f 48 41 53 48 5f 53 54 52 49 4e  QLITE_HASH_STRIN
83e0: 47 2c 20 30 29 3b 0a 20 20 66 6f 72 28 69 3d 30  G, 0);.  for(i=0
83f0: 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b  ; i<db->nDb; i++
8400: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 48 61  ){.    sqlite3Ha
8410: 73 68 49 6e 69 74 28 26 64 62 2d 3e 61 44 62 5b  shInit(&db->aDb[
8420: 69 5d 2e 74 62 6c 48 61 73 68 2c 20 53 51 4c 49  i].tblHash, SQLI
8430: 54 45 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c 20  TE_HASH_STRING, 
8440: 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 48  0);.    sqlite3H
8450: 61 73 68 49 6e 69 74 28 26 64 62 2d 3e 61 44 62  ashInit(&db->aDb
8460: 5b 69 5d 2e 69 64 78 48 61 73 68 2c 20 53 51 4c  [i].idxHash, SQL
8470: 49 54 45 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c  ITE_HASH_STRING,
8480: 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   0);.    sqlite3
8490: 48 61 73 68 49 6e 69 74 28 26 64 62 2d 3e 61 44  HashInit(&db->aD
84a0: 62 5b 69 5d 2e 74 72 69 67 48 61 73 68 2c 20 53  b[i].trigHash, S
84b0: 51 4c 49 54 45 5f 48 41 53 48 5f 53 54 52 49 4e  QLITE_HASH_STRIN
84c0: 47 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74  G, 0);.    sqlit
84d0: 65 33 48 61 73 68 49 6e 69 74 28 26 64 62 2d 3e  e3HashInit(&db->
84e0: 61 44 62 5b 69 5d 2e 61 46 4b 65 79 2c 20 53 51  aDb[i].aFKey, SQ
84f0: 4c 49 54 45 5f 48 41 53 48 5f 53 54 52 49 4e 47  LITE_HASH_STRING
8500: 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 0a 20 20 2f  , 1);.  }.  .  /
8510: 2a 20 41 64 64 20 74 68 65 20 64 65 66 61 75 6c  * Add the defaul
8520: 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  t collation sequ
8530: 65 6e 63 65 20 42 49 4e 41 52 59 2e 20 42 49 4e  ence BINARY. BIN
8540: 41 52 59 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f  ARY works for bo
8550: 74 68 20 55 54 46 2d 38 0a 20 20 2a 2a 20 61 6e  th UTF-8.  ** an
8560: 64 20 55 54 46 2d 31 36 2c 20 73 6f 20 61 64 64  d UTF-16, so add
8570: 20 61 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 65   a version for e
8580: 61 63 68 20 74 6f 20 61 76 6f 69 64 20 61 6e 79  ach to avoid any
8590: 20 75 6e 6e 65 63 65 73 73 61 72 79 0a 20 20 2a   unnecessary.  *
85a0: 2a 20 63 6f 6e 76 65 72 73 69 6f 6e 73 2e 20 54  * conversions. T
85b0: 68 65 20 6f 6e 6c 79 20 65 72 72 6f 72 20 74 68  he only error th
85c0: 61 74 20 63 61 6e 20 6f 63 63 75 72 20 68 65 72  at can occur her
85d0: 65 20 69 73 20 61 20 6d 61 6c 6c 6f 63 28 29 20  e is a malloc() 
85e0: 66 61 69 6c 75 72 65 2e 0a 20 20 2a 2f 0a 20 20  failure..  */.  
85f0: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63  sqlite3_create_c
8600: 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 22 42 49  ollation(db, "BI
8610: 4e 41 52 59 22 2c 20 53 51 4c 49 54 45 5f 55 54  NARY", SQLITE_UT
8620: 46 38 2c 20 30 2c 62 69 6e 61 72 79 43 6f 6c 6c  F8, 0,binaryColl
8630: 61 74 69 6e 67 46 75 6e 63 29 3b 0a 20 20 73 71  atingFunc);.  sq
8640: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c  lite3_create_col
8650: 6c 61 74 69 6f 6e 28 64 62 2c 20 22 42 49 4e 41  lation(db, "BINA
8660: 52 59 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  RY", SQLITE_UTF1
8670: 36 4c 45 2c 20 30 2c 62 69 6e 61 72 79 43 6f 6c  6LE, 0,binaryCol
8680: 6c 61 74 69 6e 67 46 75 6e 63 29 3b 0a 20 20 73  latingFunc);.  s
8690: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f  qlite3_create_co
86a0: 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 22 42 49 4e  llation(db, "BIN
86b0: 41 52 59 22 2c 20 53 51 4c 49 54 45 5f 55 54 46  ARY", SQLITE_UTF
86c0: 31 36 42 45 2c 20 30 2c 62 69 6e 61 72 79 43 6f  16BE, 0,binaryCo
86d0: 6c 6c 61 74 69 6e 67 46 75 6e 63 29 3b 0a 20 20  llatingFunc);.  
86e0: 64 62 2d 3e 70 44 66 6c 74 43 6f 6c 6c 20 3d 20  db->pDfltColl = 
86f0: 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53  sqlite3FindCollS
8700: 65 71 28 64 62 2c 20 64 62 2d 3e 65 6e 63 2c 20  eq(db, db->enc, 
8710: 22 42 49 4e 41 52 59 22 2c 20 36 2c 20 30 29 3b  "BINARY", 6, 0);
8720: 0a 20 20 69 66 28 20 21 64 62 2d 3e 70 44 66 6c  .  if( !db->pDfl
8730: 74 43 6f 6c 6c 20 29 7b 0a 20 20 20 20 72 63 20  tColl ){.    rc 
8740: 3d 20 64 62 2d 3e 65 72 72 43 6f 64 65 3b 0a 20  = db->errCode;. 
8750: 20 20 20 61 73 73 65 72 74 28 20 72 63 21 3d 53     assert( rc!=S
8760: 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20 20  QLITE_OK );.    
8770: 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49  db->magic = SQLI
8780: 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 3b  TE_MAGIC_CLOSED;
8790: 0a 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e 64 62  .    goto opendb
87a0: 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  _out;.  }..  /* 
87b0: 41 6c 73 6f 20 61 64 64 20 61 20 55 54 46 2d 38  Also add a UTF-8
87c0: 20 63 61 73 65 2d 69 6e 73 65 6e 73 69 74 69 76   case-insensitiv
87d0: 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  e collation sequ
87e0: 65 6e 63 65 2e 20 2a 2f 0a 20 20 73 71 6c 69 74  ence. */.  sqlit
87f0: 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74  e3_create_collat
8800: 69 6f 6e 28 64 62 2c 20 22 4e 4f 43 41 53 45 22  ion(db, "NOCASE"
8810: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30  , SQLITE_UTF8, 0
8820: 2c 20 6e 6f 63 61 73 65 43 6f 6c 6c 61 74 69 6e  , nocaseCollatin
8830: 67 46 75 6e 63 29 3b 0a 0a 20 20 2f 2a 20 4f 70  gFunc);..  /* Op
8840: 65 6e 20 74 68 65 20 62 61 63 6b 65 6e 64 20 64  en the backend d
8850: 61 74 61 62 61 73 65 20 64 72 69 76 65 72 20 2a  atabase driver *
8860: 2f 0a 20 20 69 66 28 20 7a 46 69 6c 65 6e 61 6d  /.  if( zFilenam
8870: 65 5b 30 5d 3d 3d 27 3a 27 20 26 26 20 73 74 72  e[0]==':' && str
8880: 63 6d 70 28 7a 46 69 6c 65 6e 61 6d 65 2c 22 3a  cmp(zFilename,":
8890: 6d 65 6d 6f 72 79 3a 22 29 3d 3d 30 20 29 7b 0a  memory:")==0 ){.
88a0: 20 20 20 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f      db->temp_sto
88b0: 72 65 20 3d 20 32 3b 0a 20 20 20 20 64 62 2d 3e  re = 2;.    db->
88c0: 6e 4d 61 73 74 65 72 20 3d 20 30 3b 20 20 20 20  nMaster = 0;    
88d0: 2f 2a 20 44 69 73 61 62 6c 65 20 61 74 6f 6d 69  /* Disable atomi
88e0: 63 20 6d 75 6c 74 69 2d 66 69 6c 65 20 63 6f 6d  c multi-file com
88f0: 6d 69 74 20 66 6f 72 20 3a 6d 65 6d 6f 72 79 3a  mit for :memory:
8900: 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   */.  }else{.   
8910: 20 64 62 2d 3e 6e 4d 61 73 74 65 72 20 3d 20 2d   db->nMaster = -
8920: 31 3b 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20  1;   /* Size of 
8930: 6d 61 73 74 65 72 20 6a 6f 75 72 6e 61 6c 20 66  master journal f
8940: 69 6c 65 6e 61 6d 65 20 69 6e 69 74 69 61 6c 6c  ilename initiall
8950: 79 20 75 6e 6b 6e 6f 77 6e 20 2a 2f 0a 20 20 7d  y unknown */.  }
8960: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
8970: 74 72 65 65 46 61 63 74 6f 72 79 28 64 62 2c 20  treeFactory(db, 
8980: 7a 46 69 6c 65 6e 61 6d 65 2c 20 30 2c 20 4d 41  zFilename, 0, MA
8990: 58 5f 50 41 47 45 53 2c 20 26 64 62 2d 3e 61 44  X_PAGES, &db->aD
89a0: 62 5b 30 5d 2e 70 42 74 29 3b 0a 20 20 69 66 28  b[0].pBt);.  if(
89b0: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
89c0: 7b 0a 20 20 20 20 2f 2a 20 46 49 58 20 4d 45 3a  {.    /* FIX ME:
89d0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 61 63   sqlite3BtreeFac
89e0: 74 6f 72 79 28 29 20 73 68 6f 75 6c 64 20 63 61  tory() should ca
89f0: 6c 6c 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28  ll sqlite3Error(
8a00: 29 2e 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65  ). */.    sqlite
8a10: 33 45 72 72 6f 72 28 64 62 2c 20 72 63 2c 20 30  3Error(db, rc, 0
8a20: 29 3b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63  );.    db->magic
8a30: 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f   = SQLITE_MAGIC_
8a40: 43 4c 4f 53 45 44 3b 0a 20 20 20 20 67 6f 74 6f  CLOSED;.    goto
8a50: 20 6f 70 65 6e 64 62 5f 6f 75 74 3b 0a 20 20 7d   opendb_out;.  }
8a60: 0a 20 20 64 62 2d 3e 61 44 62 5b 30 5d 2e 7a 4e  .  db->aDb[0].zN
8a70: 61 6d 65 20 3d 20 22 6d 61 69 6e 22 3b 0a 20 20  ame = "main";.  
8a80: 64 62 2d 3e 61 44 62 5b 31 5d 2e 7a 4e 61 6d 65  db->aDb[1].zName
8a90: 20 3d 20 22 74 65 6d 70 22 3b 0a 0a 20 20 2f 2a   = "temp";..  /*
8aa0: 20 52 65 67 69 73 74 65 72 20 61 6c 6c 20 62 75   Register all bu
8ab0: 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73  ilt-in functions
8ac0: 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 61 74 74  , but do not att
8ad0: 65 6d 70 74 20 74 6f 20 72 65 61 64 20 74 68 65  empt to read the
8ae0: 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 73  .  ** database s
8af0: 63 68 65 6d 61 20 79 65 74 2e 20 54 68 69 73 20  chema yet. This 
8b00: 69 73 20 64 65 6c 61 79 65 64 20 75 6e 74 69 6c  is delayed until
8b10: 20 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 20   the first time 
8b20: 74 68 65 20 64 61 74 61 62 61 73 65 0a 20 20 2a  the database.  *
8b30: 2a 20 69 73 20 61 63 63 65 73 73 65 64 2e 0a 20  * is accessed.. 
8b40: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 52 65 67   */.  sqlite3Reg
8b50: 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63  isterBuiltinFunc
8b60: 74 69 6f 6e 73 28 64 62 29 3b 0a 20 20 69 66 28  tions(db);.  if(
8b70: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
8b80: 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20  {.    db->magic 
8b90: 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f  = SQLITE_MAGIC_O
8ba0: 50 45 4e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  PEN;.  }else{.  
8bb0: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64    sqlite3Error(d
8bc0: 62 2c 20 72 63 2c 20 22 25 73 22 2c 20 7a 45 72  b, rc, "%s", zEr
8bd0: 72 4d 73 67 2c 20 30 29 3b 0a 20 20 20 20 69 66  rMsg, 0);.    if
8be0: 28 20 7a 45 72 72 4d 73 67 20 29 20 73 71 6c 69  ( zErrMsg ) sqli
8bf0: 74 65 46 72 65 65 28 7a 45 72 72 4d 73 67 29 3b  teFree(zErrMsg);
8c00: 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d  .    db->magic =
8c10: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c   SQLITE_MAGIC_CL
8c20: 4f 53 45 44 3b 0a 20 20 7d 0a 0a 6f 70 65 6e 64  OSED;.  }..opend
8c30: 62 5f 6f 75 74 3a 0a 20 20 2a 70 70 44 62 20 3d  b_out:.  *ppDb =
8c40: 20 64 62 3b 0a 20 20 72 65 74 75 72 6e 20 73 71   db;.  return sq
8c50: 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28 64 62  lite3_errcode(db
8c60: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 70 65 6e  );.}../*.** Open
8c70: 20 61 20 6e 65 77 20 64 61 74 61 62 61 73 65 20   a new database 
8c80: 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73  handle..*/.int s
8c90: 71 6c 69 74 65 33 5f 6f 70 65 6e 28 0a 20 20 63  qlite3_open(.  c
8ca0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65  onst char *zFile
8cb0: 6e 61 6d 65 2c 20 0a 20 20 73 71 6c 69 74 65 33  name, .  sqlite3
8cc0: 20 2a 2a 70 70 44 62 20 0a 29 7b 0a 20 20 72 65   **ppDb .){.  re
8cd0: 74 75 72 6e 20 6f 70 65 6e 44 61 74 61 62 61 73  turn openDatabas
8ce0: 65 28 7a 46 69 6c 65 6e 61 6d 65 2c 20 70 70 44  e(zFilename, ppD
8cf0: 62 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 70 65  b);.}../*.** Ope
8d00: 6e 20 61 20 6e 65 77 20 64 61 74 61 62 61 73 65  n a new database
8d10: 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 69 6e 74 20   handle..*/.int 
8d20: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 28 0a  sqlite3_open16(.
8d30: 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 46    const void *zF
8d40: 69 6c 65 6e 61 6d 65 2c 20 0a 20 20 73 71 6c 69  ilename, .  sqli
8d50: 74 65 33 20 2a 2a 70 70 44 62 0a 29 7b 0a 20 20  te3 **ppDb.){.  
8d60: 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 38  char *zFilename8
8d70: 3b 20 20 20 2f 2a 20 7a 46 69 6c 65 6e 61 6d 65  ;   /* zFilename
8d80: 20 65 6e 63 6f 64 65 64 20 69 6e 20 55 54 46 2d   encoded in UTF-
8d90: 38 20 69 6e 73 74 65 61 64 20 6f 66 20 55 54 46  8 instead of UTF
8da0: 2d 31 36 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b  -16 */.  int rc;
8db0: 0a 0a 20 20 61 73 73 65 72 74 28 20 70 70 44 62  ..  assert( ppDb
8dc0: 20 29 3b 0a 0a 20 20 7a 46 69 6c 65 6e 61 6d 65   );..  zFilename
8dd0: 38 20 3d 20 73 71 6c 69 74 65 33 75 74 66 31 36  8 = sqlite3utf16
8de0: 74 6f 38 28 7a 46 69 6c 65 6e 61 6d 65 2c 20 2d  to8(zFilename, -
8df0: 31 2c 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44  1, SQLITE_BIGEND
8e00: 49 41 4e 29 3b 0a 20 20 69 66 28 20 21 7a 46 69  IAN);.  if( !zFi
8e10: 6c 65 6e 61 6d 65 38 20 29 7b 0a 20 20 20 20 2a  lename8 ){.    *
8e20: 70 70 44 62 20 3d 20 30 3b 0a 20 20 20 20 72 65  ppDb = 0;.    re
8e30: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  turn SQLITE_NOME
8e40: 4d 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 6f 70  M;.  }.  rc = op
8e50: 65 6e 44 61 74 61 62 61 73 65 28 7a 46 69 6c 65  enDatabase(zFile
8e60: 6e 61 6d 65 38 2c 20 70 70 44 62 29 3b 0a 20 20  name8, ppDb);.  
8e70: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
8e80: 4b 20 26 26 20 2a 70 70 44 62 20 29 7b 0a 20 20  K && *ppDb ){.  
8e90: 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 2a    sqlite3_exec(*
8ea0: 70 70 44 62 2c 20 22 50 52 41 47 4d 41 20 65 6e  ppDb, "PRAGMA en
8eb0: 63 6f 64 69 6e 67 20 3d 20 27 55 54 46 2d 31 36  coding = 'UTF-16
8ec0: 27 22 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20  '", 0, 0, 0);.  
8ed0: 7d 0a 20 20 73 71 6c 69 74 65 46 72 65 65 28 7a  }.  sqliteFree(z
8ee0: 46 69 6c 65 6e 61 6d 65 38 29 3b 0a 0a 20 20 72  Filename8);..  r
8ef0: 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a  eturn rc;.}../*.
8f00: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
8f10: 20 72 6f 75 74 69 6e 65 20 64 65 73 74 72 6f 79   routine destroy
8f20: 73 20 61 20 76 69 72 74 75 61 6c 20 6d 61 63 68  s a virtual mach
8f30: 69 6e 65 20 74 68 61 74 20 69 73 20 63 72 65 61  ine that is crea
8f40: 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 73 71  ted by.** the sq
8f50: 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 28 29 20  lite3_compile() 
8f60: 72 6f 75 74 69 6e 65 2e 20 54 68 65 20 69 6e 74  routine. The int
8f70: 65 67 65 72 20 72 65 74 75 72 6e 65 64 20 69 73  eger returned is
8f80: 20 61 6e 20 53 51 4c 49 54 45 5f 0a 2a 2a 20 73   an SQLITE_.** s
8f90: 75 63 63 65 73 73 2f 66 61 69 6c 75 72 65 20 63  uccess/failure c
8fa0: 6f 64 65 20 74 68 61 74 20 64 65 73 63 72 69 62  ode that describ
8fb0: 65 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  es the result of
8fc0: 20 65 78 65 63 75 74 69 6e 67 20 74 68 65 20 76   executing the v
8fd0: 69 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e  irtual.** machin
8fe0: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  e..**.** This ro
8ff0: 75 74 69 6e 65 20 73 65 74 73 20 74 68 65 20 65  utine sets the e
9000: 72 72 6f 72 20 63 6f 64 65 20 61 6e 64 20 73 74  rror code and st
9010: 72 69 6e 67 20 72 65 74 75 72 6e 65 64 20 62 79  ring returned by
9020: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 65 72 72 63  .** sqlite3_errc
9030: 6f 64 65 28 29 2c 20 73 71 6c 69 74 65 33 5f 65  ode(), sqlite3_e
9040: 72 72 6d 73 67 28 29 20 61 6e 64 20 73 71 6c 69  rrmsg() and sqli
9050: 74 65 33 5f 65 72 72 6d 73 67 31 36 28 29 2e 0a  te3_errmsg16()..
9060: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 66  */.int sqlite3_f
9070: 69 6e 61 6c 69 7a 65 28 73 71 6c 69 74 65 33 5f  inalize(sqlite3_
9080: 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20  stmt *pStmt){.  
9090: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 56 64  return sqlite3Vd
90a0: 62 65 46 69 6e 61 6c 69 7a 65 28 28 56 64 62 65  beFinalize((Vdbe
90b0: 2a 29 70 53 74 6d 74 2c 20 30 29 3b 0a 7d 0a 0a  *)pStmt, 0);.}..
90c0: 2f 2a 0a 2a 2a 20 54 65 72 6d 69 6e 61 74 65 20  /*.** Terminate 
90d0: 74 68 65 20 63 75 72 72 65 6e 74 20 65 78 65 63  the current exec
90e0: 75 74 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20  ution of an SQL 
90f0: 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 72 65  statement and re
9100: 73 65 74 20 69 74 0a 2a 2a 20 62 61 63 6b 20 74  set it.** back t
9110: 6f 20 69 74 73 20 73 74 61 72 74 69 6e 67 20 73  o its starting s
9120: 74 61 74 65 20 73 6f 20 74 68 61 74 20 69 74 20  tate so that it 
9130: 63 61 6e 20 62 65 20 72 65 75 73 65 64 2e 20 41  can be reused. A
9140: 20 73 75 63 63 65 73 73 20 63 6f 64 65 20 66 72   success code fr
9150: 6f 6d 0a 2a 2a 20 74 68 65 20 70 72 69 6f 72 20  om.** the prior 
9160: 65 78 65 63 75 74 69 6f 6e 20 69 73 20 72 65 74  execution is ret
9170: 75 72 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  urned..**.** Thi
9180: 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74  s routine sets t
9190: 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 61 6e  he error code an
91a0: 64 20 73 74 72 69 6e 67 20 72 65 74 75 72 6e 65  d string returne
91b0: 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  d by.** sqlite3_
91c0: 65 72 72 63 6f 64 65 28 29 2c 20 73 71 6c 69 74  errcode(), sqlit
91d0: 65 33 5f 65 72 72 6d 73 67 28 29 20 61 6e 64 20  e3_errmsg() and 
91e0: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36  sqlite3_errmsg16
91f0: 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ()..*/.int sqlit
9200: 65 33 5f 72 65 73 65 74 28 73 71 6c 69 74 65 33  e3_reset(sqlite3
9210: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20  _stmt *pStmt){. 
9220: 20 69 6e 74 20 72 63 20 3d 20 73 71 6c 69 74 65   int rc = sqlite
9230: 33 56 64 62 65 52 65 73 65 74 28 28 56 64 62 65  3VdbeReset((Vdbe
9240: 2a 29 70 53 74 6d 74 2c 20 30 29 3b 0a 20 20 73  *)pStmt, 0);.  s
9250: 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 52 65  qlite3VdbeMakeRe
9260: 61 64 79 28 28 56 64 62 65 2a 29 70 53 74 6d 74  ady((Vdbe*)pStmt
9270: 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 72 65 74 75  , -1, 0);.  retu
9280: 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  rn rc;.}../*.** 
9290: 52 65 67 69 73 74 65 72 20 61 20 6e 65 77 20 63  Register a new c
92a0: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
92b0: 65 20 77 69 74 68 20 74 68 65 20 64 61 74 61 62  e with the datab
92c0: 61 73 65 20 68 61 6e 64 6c 65 20 64 62 2e 0a 2a  ase handle db..*
92d0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 72  /.int sqlite3_cr
92e0: 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 0a  eate_collation(.
92f0: 20 20 73 71 6c 69 74 65 33 2a 20 64 62 2c 20 0a    sqlite3* db, .
9300: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e    const char *zN
9310: 61 6d 65 2c 20 0a 20 20 69 6e 74 20 65 6e 63 2c  ame, .  int enc,
9320: 20 0a 20 20 76 6f 69 64 2a 20 70 43 74 78 2c 0a   .  void* pCtx,.
9330: 20 20 69 6e 74 28 2a 78 43 6f 6d 70 61 72 65 29    int(*xCompare)
9340: 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74  (void*,int,const
9350: 20 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74   void*,int,const
9360: 20 76 6f 69 64 2a 29 0a 29 7b 0a 20 20 43 6f 6c   void*).){.  Col
9370: 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 0a 20 20 69  lSeq *pColl;.  i
9380: 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  nt rc = SQLITE_O
9390: 4b 3b 0a 20 20 0a 20 20 2f 2a 20 49 66 20 53 51  K;.  .  /* If SQ
93a0: 4c 49 54 45 5f 55 54 46 31 36 20 69 73 20 73 70  LITE_UTF16 is sp
93b0: 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20 65  ecified as the e
93c0: 6e 63 6f 64 69 6e 67 20 74 79 70 65 2c 20 74 72  ncoding type, tr
93d0: 61 6e 73 66 6f 72 6d 20 74 68 69 73 0a 20 20 2a  ansform this.  *
93e0: 2a 20 74 6f 20 6f 6e 65 20 6f 66 20 53 51 4c 49  * to one of SQLI
93f0: 54 45 5f 55 54 46 31 36 4c 45 20 6f 72 20 53 51  TE_UTF16LE or SQ
9400: 4c 49 54 45 5f 55 54 46 31 36 42 45 20 75 73 69  LITE_UTF16BE usi
9410: 6e 67 20 74 68 65 0a 20 20 2a 2a 20 53 51 4c 49  ng the.  ** SQLI
9420: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 6d  TE_UTF16NATIVE m
9430: 61 63 72 6f 2e 20 53 51 4c 49 54 45 5f 55 54 46  acro. SQLITE_UTF
9440: 31 36 20 69 73 20 6e 6f 74 20 75 73 65 64 20 69  16 is not used i
9450: 6e 74 65 72 6e 61 6c 6c 79 2e 0a 20 20 2a 2f 0a  nternally..  */.
9460: 20 20 69 66 28 20 65 6e 63 3d 3d 53 51 4c 49 54    if( enc==SQLIT
9470: 45 5f 55 54 46 31 36 20 29 7b 0a 20 20 20 20 65  E_UTF16 ){.    e
9480: 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 31  nc = SQLITE_UTF1
9490: 36 4e 41 54 49 56 45 3b 0a 20 20 7d 0a 0a 20 20  6NATIVE;.  }..  
94a0: 69 66 28 20 65 6e 63 21 3d 53 51 4c 49 54 45 5f  if( enc!=SQLITE_
94b0: 55 54 46 38 20 26 26 20 65 6e 63 21 3d 53 51 4c  UTF8 && enc!=SQL
94c0: 49 54 45 5f 55 54 46 31 36 4c 45 20 26 26 20 65  ITE_UTF16LE && e
94d0: 6e 63 21 3d 53 51 4c 49 54 45 5f 55 54 46 31 36  nc!=SQLITE_UTF16
94e0: 42 45 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  BE ){.    sqlite
94f0: 33 45 72 72 6f 72 28 64 62 2c 20 53 51 4c 49 54  3Error(db, SQLIT
9500: 45 5f 45 52 52 4f 52 2c 20 0a 20 20 20 20 20 20  E_ERROR, .      
9510: 20 20 22 50 61 72 61 6d 20 33 20 74 6f 20 73 71    "Param 3 to sq
9520: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c  lite3_create_col
9530: 6c 61 74 69 6f 6e 28 29 20 6d 75 73 74 20 62 65  lation() must be
9540: 20 6f 6e 65 20 6f 66 20 22 0a 20 20 20 20 20 20   one of ".      
9550: 20 20 22 53 51 4c 49 54 45 5f 55 54 46 38 2c 20    "SQLITE_UTF8, 
9560: 53 51 4c 49 54 45 5f 55 54 46 31 36 2c 20 53 51  SQLITE_UTF16, SQ
9570: 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 6f 72 20  LITE_UTF16LE or 
9580: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 22 0a  SQLITE_UTF16BE".
9590: 20 20 20 20 29 3b 0a 20 20 20 20 72 65 74 75 72      );.    retur
95a0: 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  n SQLITE_ERROR;.
95b0: 20 20 7d 0a 20 20 70 43 6f 6c 6c 20 3d 20 73 71    }.  pColl = sq
95c0: 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71  lite3FindCollSeq
95d0: 28 64 62 2c 20 28 75 38 29 65 6e 63 2c 20 7a 4e  (db, (u8)enc, zN
95e0: 61 6d 65 2c 20 73 74 72 6c 65 6e 28 7a 4e 61 6d  ame, strlen(zNam
95f0: 65 29 2c 20 31 29 3b 0a 20 20 69 66 28 20 30 3d  e), 1);.  if( 0=
9600: 3d 70 43 6f 6c 6c 20 29 7b 0a 20 20 20 72 63 20  =pColl ){.   rc 
9610: 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  = SQLITE_NOMEM;.
9620: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43 6f    }else{.    pCo
9630: 6c 6c 2d 3e 78 43 6d 70 20 3d 20 78 43 6f 6d 70  ll->xCmp = xComp
9640: 61 72 65 3b 0a 20 20 20 20 70 43 6f 6c 6c 2d 3e  are;.    pColl->
9650: 70 55 73 65 72 20 3d 20 70 43 74 78 3b 0a 20 20  pUser = pCtx;.  
9660: 7d 0a 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72  }.  sqlite3Error
9670: 28 64 62 2c 20 72 63 2c 20 30 29 3b 0a 20 20 72  (db, rc, 0);.  r
9680: 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a  eturn rc;.}../*.
9690: 2a 2a 20 52 65 67 69 73 74 65 72 20 61 20 6e 65  ** Register a ne
96a0: 77 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  w collation sequ
96b0: 65 6e 63 65 20 77 69 74 68 20 74 68 65 20 64 61  ence with the da
96c0: 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 64 62  tabase handle db
96d0: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
96e0: 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f  _create_collatio
96f0: 6e 31 36 28 0a 20 20 73 71 6c 69 74 65 33 2a 20  n16(.  sqlite3* 
9700: 64 62 2c 20 0a 20 20 63 6f 6e 73 74 20 63 68 61  db, .  const cha
9710: 72 20 2a 7a 4e 61 6d 65 2c 20 0a 20 20 69 6e 74  r *zName, .  int
9720: 20 65 6e 63 2c 20 0a 20 20 76 6f 69 64 2a 20 70   enc, .  void* p
9730: 43 74 78 2c 0a 20 20 69 6e 74 28 2a 78 43 6f 6d  Ctx,.  int(*xCom
9740: 70 61 72 65 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  pare)(void*,int,
9750: 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 69 6e 74 2c  const void*,int,
9760: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 0a 29 7b 0a  const void*).){.
9770: 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 68 61 72    int rc;.  char
9780: 20 2a 7a 4e 61 6d 65 38 20 3d 20 73 71 6c 69 74   *zName8 = sqlit
9790: 65 33 75 74 66 31 36 74 6f 38 28 7a 4e 61 6d 65  e3utf16to8(zName
97a0: 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 42 49 47  , -1, SQLITE_BIG
97b0: 45 4e 44 49 41 4e 29 3b 0a 20 20 72 63 20 3d 20  ENDIAN);.  rc = 
97c0: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63  sqlite3_create_c
97d0: 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 7a 4e 61  ollation(db, zNa
97e0: 6d 65 38 2c 20 65 6e 63 2c 20 70 43 74 78 2c 20  me8, enc, pCtx, 
97f0: 78 43 6f 6d 70 61 72 65 29 3b 0a 20 20 73 71 6c  xCompare);.  sql
9800: 69 74 65 46 72 65 65 28 7a 4e 61 6d 65 38 29 3b  iteFree(zName8);
9810: 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a  .  return rc;.}.
9820: 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  ./*.** Register 
9830: 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  a collation sequ
9840: 65 6e 63 65 20 66 61 63 74 6f 72 79 20 63 61 6c  ence factory cal
9850: 6c 62 61 63 6b 20 77 69 74 68 20 74 68 65 20 64  lback with the d
9860: 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a  atabase handle.*
9870: 2a 20 64 62 2e 20 52 65 70 6c 61 63 65 20 61 6e  * db. Replace an
9880: 79 20 70 72 65 76 69 6f 75 73 6c 79 20 69 6e 73  y previously ins
9890: 74 61 6c 6c 65 64 20 63 6f 6c 6c 61 74 69 6f 6e  talled collation
98a0: 20 73 65 71 75 65 6e 63 65 20 66 61 63 74 6f 72   sequence factor
98b0: 79 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  y..*/.int sqlite
98c0: 33 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 6e 65 65 64  3_collation_need
98d0: 65 64 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  ed(.  sqlite3 *d
98e0: 62 2c 20 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c  b, .  void *pCol
98f0: 6c 4e 65 65 64 65 64 41 72 67 2c 20 0a 20 20 76  lNeededArg, .  v
9900: 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64  oid(*xCollNeeded
9910: 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
9920: 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f  ,int eTextRep,co
9930: 6e 73 74 20 63 68 61 72 2a 29 0a 29 7b 0a 20 20  nst char*).){.  
9940: 64 62 2d 3e 78 43 6f 6c 6c 4e 65 65 64 65 64 20  db->xCollNeeded 
9950: 3d 20 78 43 6f 6c 6c 4e 65 65 64 65 64 3b 0a 20  = xCollNeeded;. 
9960: 20 64 62 2d 3e 78 43 6f 6c 6c 4e 65 65 64 65 64   db->xCollNeeded
9970: 31 36 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 70 43  16 = 0;.  db->pC
9980: 6f 6c 6c 4e 65 65 64 65 64 41 72 67 20 3d 20 70  ollNeededArg = p
9990: 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20  CollNeededArg;. 
99a0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
99b0: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69  K;.}../*.** Regi
99c0: 73 74 65 72 20 61 20 63 6f 6c 6c 61 74 69 6f 6e  ster a collation
99d0: 20 73 65 71 75 65 6e 63 65 20 66 61 63 74 6f 72   sequence factor
99e0: 79 20 63 61 6c 6c 62 61 63 6b 20 77 69 74 68 20  y callback with 
99f0: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
9a00: 64 6c 65 0a 2a 2a 20 64 62 2e 20 52 65 70 6c 61  dle.** db. Repla
9a10: 63 65 20 61 6e 79 20 70 72 65 76 69 6f 75 73 6c  ce any previousl
9a20: 79 20 69 6e 73 74 61 6c 6c 65 64 20 63 6f 6c 6c  y installed coll
9a30: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66  ation sequence f
9a40: 61 63 74 6f 72 79 2e 0a 2a 2f 0a 69 6e 74 20 73  actory..*/.int s
9a50: 71 6c 69 74 65 33 5f 63 6f 6c 6c 61 74 69 6f 6e  qlite3_collation
9a60: 5f 6e 65 65 64 65 64 31 36 28 0a 20 20 73 71 6c  _needed16(.  sql
9a70: 69 74 65 33 20 2a 64 62 2c 20 0a 20 20 76 6f 69  ite3 *db, .  voi
9a80: 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72  d *pCollNeededAr
9a90: 67 2c 20 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c  g, .  void(*xCol
9aa0: 6c 4e 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a  lNeeded16)(void*
9ab0: 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54  ,sqlite3*,int eT
9ac0: 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69  extRep,const voi
9ad0: 64 2a 29 0a 29 7b 0a 20 20 64 62 2d 3e 78 43 6f  d*).){.  db->xCo
9ae0: 6c 6c 4e 65 65 64 65 64 20 3d 20 30 3b 0a 20 20  llNeeded = 0;.  
9af0: 64 62 2d 3e 78 43 6f 6c 6c 4e 65 65 64 65 64 31  db->xCollNeeded1
9b00: 36 20 3d 20 78 43 6f 6c 6c 4e 65 65 64 65 64 31  6 = xCollNeeded1
9b10: 36 3b 0a 20 20 64 62 2d 3e 70 43 6f 6c 6c 4e 65  6;.  db->pCollNe
9b20: 65 64 65 64 41 72 67 20 3d 20 70 43 6f 6c 6c 4e  ededArg = pCollN
9b30: 65 65 64 65 64 41 72 67 3b 0a 20 20 72 65 74 75  eededArg;.  retu
9b40: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a  rn SQLITE_OK;.}.