/ Hex Artifact Content
Login

Artifact b4cd665e7e0af8f47b523e116e3356d0ebf6cef0:


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 33 31 20 32 30 30 34 2f 30 36  ,v 1.231 2004/06
0280: 2f 32 31 20 30 36 3a 35 30 3a 32 38 20 64 61 6e  /21 06:50:28 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 63 6f 6e 73 74 20 2a 61 7a    char const *az
1330: 41 72 67 5b 36 5d 3b 0a 20 20 63 68 61 72 20 7a  Arg[6];.  char z
1340: 44 62 4e 75 6d 5b 33 30 5d 3b 0a 20 20 69 6e 74  DbNum[30];.  int
1350: 20 6d 65 74 61 5b 31 30 5d 3b 0a 20 20 49 6e 69   meta[10];.  Ini
1360: 74 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a  tData initData;.
1370: 20 20 63 68 61 72 20 63 6f 6e 73 74 20 2a 7a 4d    char const *zM
1380: 61 73 74 65 72 53 63 68 65 6d 61 3b 0a 20 20 63  asterSchema;.  c
1390: 68 61 72 20 63 6f 6e 73 74 20 2a 7a 4d 61 73 74  har const *zMast
13a0: 65 72 4e 61 6d 65 3b 0a 0a 20 20 2f 2a 0a 20 20  erName;..  /*.  
13b0: 2a 2a 20 54 68 65 20 6d 61 73 74 65 72 20 64 61  ** The master da
13c0: 74 61 62 61 73 65 20 74 61 62 6c 65 20 68 61 73  tabase table has
13d0: 20 61 20 73 74 72 75 63 74 75 72 65 20 6c 69 6b   a structure lik
13e0: 65 20 74 68 69 73 0a 20 20 2a 2f 0a 20 20 73 74  e this.  */.  st
13f0: 61 74 69 63 20 63 68 61 72 20 6d 61 73 74 65 72  atic char master
1400: 5f 73 63 68 65 6d 61 5b 5d 20 3d 20 0a 20 20 20  _schema[] = .   
1410: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
1420: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 28 5c 6e  sqlite_master(\n
1430: 22 0a 20 20 20 20 20 22 20 20 74 79 70 65 20 74  ".     "  type t
1440: 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20  ext,\n".     "  
1450: 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20  name text,\n".  
1460: 20 20 20 22 20 20 74 62 6c 5f 6e 61 6d 65 20 74     "  tbl_name t
1470: 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20  ext,\n".     "  
1480: 72 6f 6f 74 70 61 67 65 20 69 6e 74 65 67 65 72  rootpage integer
1490: 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20 73 71 6c  ,\n".     "  sql
14a0: 20 74 65 78 74 5c 6e 22 0a 20 20 20 20 20 22 29   text\n".     ")
14b0: 22 0a 20 20 3b 0a 20 20 73 74 61 74 69 63 20 63  ".  ;.  static c
14c0: 68 61 72 20 74 65 6d 70 5f 6d 61 73 74 65 72 5f  har temp_master_
14d0: 73 63 68 65 6d 61 5b 5d 20 3d 20 0a 20 20 20 20  schema[] = .    
14e0: 20 22 43 52 45 41 54 45 20 54 45 4d 50 20 54 41   "CREATE TEMP TA
14f0: 42 4c 45 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  BLE sqlite_temp_
1500: 6d 61 73 74 65 72 28 5c 6e 22 0a 20 20 20 20 20  master(\n".     
1510: 22 20 20 74 79 70 65 20 74 65 78 74 2c 5c 6e 22  "  type text,\n"
1520: 0a 20 20 20 20 20 22 20 20 6e 61 6d 65 20 74 65  .     "  name te
1530: 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20 74  xt,\n".     "  t
1540: 62 6c 5f 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22  bl_name text,\n"
1550: 0a 20 20 20 20 20 22 20 20 72 6f 6f 74 70 61 67  .     "  rootpag
1560: 65 20 69 6e 74 65 67 65 72 2c 5c 6e 22 0a 20 20  e integer,\n".  
1570: 20 20 20 22 20 20 73 71 6c 20 74 65 78 74 5c 6e     "  sql text\n
1580: 22 0a 20 20 20 20 20 22 29 22 0a 20 20 3b 0a 0a  ".     ")".  ;..
1590: 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30    assert( iDb>=0
15a0: 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20   && iDb<db->nDb 
15b0: 29 3b 0a 0a 20 20 2f 2a 20 7a 4d 61 73 74 65 72  );..  /* zMaster
15c0: 53 63 68 65 6d 61 20 61 6e 64 20 7a 49 6e 69 74  Schema and zInit
15d0: 53 63 72 69 70 74 20 61 72 65 20 73 65 74 20 74  Script are set t
15e0: 6f 20 70 6f 69 6e 74 20 61 74 20 74 68 65 20 6d  o point at the m
15f0: 61 73 74 65 72 20 73 63 68 65 6d 61 0a 20 20 2a  aster schema.  *
1600: 2a 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 73 61  * and initialisa
1610: 74 69 6f 6e 20 73 63 72 69 70 74 20 61 70 70 72  tion script appr
1620: 6f 70 72 69 61 74 65 20 66 6f 72 20 74 68 65 20  opriate for the 
1630: 64 61 74 61 62 61 73 65 20 62 65 69 6e 67 0a 20  database being. 
1640: 20 2a 2a 20 69 6e 69 74 69 61 6c 69 73 65 64 2e   ** initialised.
1650: 20 7a 4d 61 73 74 65 72 4e 61 6d 65 20 69 73 20   zMasterName is 
1660: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
1670: 6d 61 73 74 65 72 20 74 61 62 6c 65 2e 0a 20 20  master table..  
1680: 2a 2f 0a 20 20 69 66 28 20 69 44 62 3d 3d 31 20  */.  if( iDb==1 
1690: 29 7b 0a 20 20 20 20 7a 4d 61 73 74 65 72 53 63  ){.    zMasterSc
16a0: 68 65 6d 61 20 3d 20 74 65 6d 70 5f 6d 61 73 74  hema = temp_mast
16b0: 65 72 5f 73 63 68 65 6d 61 3b 0a 20 20 20 20 7a  er_schema;.    z
16c0: 4d 61 73 74 65 72 4e 61 6d 65 20 3d 20 54 45 4d  MasterName = TEM
16d0: 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3b 0a 20  P_MASTER_NAME;. 
16e0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 7a 4d 61 73   }else{.    zMas
16f0: 74 65 72 53 63 68 65 6d 61 20 3d 20 6d 61 73 74  terSchema = mast
1700: 65 72 5f 73 63 68 65 6d 61 3b 0a 20 20 20 20 7a  er_schema;.    z
1710: 4d 61 73 74 65 72 4e 61 6d 65 20 3d 20 4d 41 53  MasterName = MAS
1720: 54 45 52 5f 4e 41 4d 45 3b 0a 20 20 7d 0a 0a 20  TER_NAME;.  }.. 
1730: 20 2f 2a 20 43 6f 6e 73 74 72 75 63 74 20 74 68   /* Construct th
1740: 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65 73 2e  e schema tables.
1750: 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 53 61    */.  sqlite3Sa
1760: 66 65 74 79 4f 66 66 28 64 62 29 3b 0a 20 20 61  fetyOff(db);.  a
1770: 7a 41 72 67 5b 30 5d 20 3d 20 22 74 61 62 6c 65  zArg[0] = "table
1780: 22 3b 0a 20 20 61 7a 41 72 67 5b 31 5d 20 3d 20  ";.  azArg[1] = 
1790: 7a 4d 61 73 74 65 72 4e 61 6d 65 3b 0a 20 20 61  zMasterName;.  a
17a0: 7a 41 72 67 5b 32 5d 20 3d 20 22 31 22 3b 0a 20  zArg[2] = "1";. 
17b0: 20 61 7a 41 72 67 5b 33 5d 20 3d 20 7a 4d 61 73   azArg[3] = zMas
17c0: 74 65 72 53 63 68 65 6d 61 3b 0a 20 20 73 70 72  terSchema;.  spr
17d0: 69 6e 74 66 28 7a 44 62 4e 75 6d 2c 20 22 25 64  intf(zDbNum, "%d
17e0: 22 2c 20 69 44 62 29 3b 0a 20 20 61 7a 41 72 67  ", iDb);.  azArg
17f0: 5b 34 5d 20 3d 20 7a 44 62 4e 75 6d 3b 0a 20 20  [4] = zDbNum;.  
1800: 61 7a 41 72 67 5b 35 5d 20 3d 20 30 3b 0a 20 20  azArg[5] = 0;.  
1810: 69 6e 69 74 44 61 74 61 2e 64 62 20 3d 20 64 62  initData.db = db
1820: 3b 0a 20 20 69 6e 69 74 44 61 74 61 2e 70 7a 45  ;.  initData.pzE
1830: 72 72 4d 73 67 20 3d 20 70 7a 45 72 72 4d 73 67  rrMsg = pzErrMsg
1840: 3b 0a 20 20 73 71 6c 69 74 65 33 49 6e 69 74 43  ;.  sqlite3InitC
1850: 61 6c 6c 62 61 63 6b 28 26 69 6e 69 74 44 61 74  allback(&initDat
1860: 61 2c 20 35 2c 20 28 63 68 61 72 20 2a 2a 29 61  a, 5, (char **)a
1870: 7a 41 72 67 2c 20 30 29 3b 0a 20 20 70 54 61 62  zArg, 0);.  pTab
1880: 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61   = sqlite3FindTa
1890: 62 6c 65 28 64 62 2c 20 7a 4d 61 73 74 65 72 4e  ble(db, zMasterN
18a0: 61 6d 65 2c 20 64 62 2d 3e 61 44 62 5b 69 44 62  ame, db->aDb[iDb
18b0: 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 69 66 28 20  ].zName);.  if( 
18c0: 70 54 61 62 20 29 7b 0a 20 20 20 20 70 54 61 62  pTab ){.    pTab
18d0: 2d 3e 72 65 61 64 4f 6e 6c 79 20 3d 20 31 3b 0a  ->readOnly = 1;.
18e0: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 53 61 66    }.  sqlite3Saf
18f0: 65 74 79 4f 6e 28 64 62 29 3b 0a 0a 20 20 2f 2a  etyOn(db);..  /*
1900: 20 43 72 65 61 74 65 20 61 20 63 75 72 73 6f 72   Create a cursor
1910: 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74   to hold the dat
1920: 61 62 61 73 65 20 6f 70 65 6e 0a 20 20 2a 2f 0a  abase open.  */.
1930: 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 44    if( db->aDb[iD
1940: 62 5d 2e 70 42 74 3d 3d 30 20 29 20 72 65 74 75  b].pBt==0 ) retu
1950: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20  rn SQLITE_OK;.  
1960: 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1970: 65 43 75 72 73 6f 72 28 64 62 2d 3e 61 44 62 5b  eCursor(db->aDb[
1980: 69 44 62 5d 2e 70 42 74 2c 20 4d 41 53 54 45 52  iDb].pBt, MASTER
1990: 5f 52 4f 4f 54 2c 20 30 2c 20 30 2c 20 30 2c 20  _ROOT, 0, 0, 0, 
19a0: 26 63 75 72 4d 61 69 6e 29 3b 0a 20 20 69 66 28  &curMain);.  if(
19b0: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc!=SQLITE_OK &
19c0: 26 20 72 63 21 3d 53 51 4c 49 54 45 5f 45 4d 50  & rc!=SQLITE_EMP
19d0: 54 59 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  TY ){.    sqlite
19e0: 33 53 65 74 53 74 72 69 6e 67 28 70 7a 45 72 72  3SetString(pzErr
19f0: 4d 73 67 2c 20 73 71 6c 69 74 65 33 45 72 72 53  Msg, sqlite3ErrS
1a00: 74 72 28 72 63 29 2c 20 28 63 68 61 72 2a 29 30  tr(rc), (char*)0
1a10: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 72 63  );.    return rc
1a20: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 47 65 74 20  ;.  }..  /* Get 
1a30: 74 68 65 20 64 61 74 61 62 61 73 65 20 6d 65 74  the database met
1a40: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 20  a information.. 
1a50: 20 2a 2a 0a 20 20 2a 2a 20 4d 65 74 61 20 76 61   **.  ** Meta va
1a60: 6c 75 65 73 20 61 72 65 20 61 73 20 66 6f 6c 6c  lues are as foll
1a70: 6f 77 73 3a 0a 20 20 2a 2a 20 20 20 20 6d 65 74  ows:.  **    met
1a80: 61 5b 30 5d 20 20 20 53 63 68 65 6d 61 20 63 6f  a[0]   Schema co
1a90: 6f 6b 69 65 2e 20 20 43 68 61 6e 67 65 73 20 77  okie.  Changes w
1aa0: 69 74 68 20 65 61 63 68 20 73 63 68 65 6d 61 20  ith each schema 
1ab0: 63 68 61 6e 67 65 2e 0a 20 20 2a 2a 20 20 20 20  change..  **    
1ac0: 6d 65 74 61 5b 31 5d 20 20 20 46 69 6c 65 20 66  meta[1]   File f
1ad0: 6f 72 6d 61 74 20 6f 66 20 73 63 68 65 6d 61 20  ormat of schema 
1ae0: 6c 61 79 65 72 2e 0a 20 20 2a 2a 20 20 20 20 6d  layer..  **    m
1af0: 65 74 61 5b 32 5d 20 20 20 53 69 7a 65 20 6f 66  eta[2]   Size of
1b00: 20 74 68 65 20 70 61 67 65 20 63 61 63 68 65 2e   the page cache.
1b10: 0a 20 20 2a 2a 20 20 20 20 6d 65 74 61 5b 33 5d  .  **    meta[3]
1b20: 20 20 20 53 79 6e 63 68 72 6f 6e 6f 75 73 20 73     Synchronous s
1b30: 65 74 74 69 6e 67 2e 20 20 31 3a 6f 66 66 2c 20  etting.  1:off, 
1b40: 32 3a 6e 6f 72 6d 61 6c 2c 20 33 3a 66 75 6c 6c  2:normal, 3:full
1b50: 0a 20 20 2a 2a 20 20 20 20 6d 65 74 61 5b 34 5d  .  **    meta[4]
1b60: 20 20 20 44 62 20 74 65 78 74 20 65 6e 63 6f 64     Db text encod
1b70: 69 6e 67 2e 20 31 3a 55 54 46 2d 38 20 33 3a 55  ing. 1:UTF-8 3:U
1b80: 54 46 2d 31 36 20 4c 45 20 34 3a 55 54 46 2d 31  TF-16 LE 4:UTF-1
1b90: 36 20 42 45 0a 20 20 2a 2a 20 20 20 20 6d 65 74  6 BE.  **    met
1ba0: 61 5b 35 5d 20 20 20 50 72 61 67 6d 61 20 74 65  a[5]   Pragma te
1bb0: 6d 70 5f 73 74 6f 72 65 20 76 61 6c 75 65 2e 20  mp_store value. 
1bc0: 20 53 65 65 20 63 6f 6d 6d 65 6e 74 73 20 6f 6e   See comments on
1bd0: 20 42 74 72 65 65 46 61 63 74 6f 72 79 0a 20 20   BtreeFactory.  
1be0: 2a 2a 20 20 20 20 6d 65 74 61 5b 36 5d 20 20 20  **    meta[6]   
1bf0: 0a 20 20 2a 2a 20 20 20 20 6d 65 74 61 5b 37 5d  .  **    meta[7]
1c00: 0a 20 20 2a 2a 20 20 20 20 6d 65 74 61 5b 38 5d  .  **    meta[8]
1c10: 0a 20 20 2a 2a 20 20 20 20 6d 65 74 61 5b 39 5d  .  **    meta[9]
1c20: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4e 6f 74 65 3a  .  **.  ** Note:
1c30: 20 54 68 65 20 68 61 73 68 20 64 65 66 69 6e 65   The hash define
1c40: 64 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 73 79  d SQLITE_UTF* sy
1c50: 6d 62 6f 6c 73 20 69 6e 20 73 71 6c 69 74 65 49  mbols in sqliteI
1c60: 6e 74 2e 68 20 63 6f 72 72 65 73 70 6f 6e 64 20  nt.h correspond 
1c70: 74 6f 0a 20 20 2a 2a 20 74 68 65 20 70 6f 73 73  to.  ** the poss
1c80: 69 62 6c 65 20 76 61 6c 75 65 73 20 6f 66 20 6d  ible values of m
1c90: 65 74 61 5b 34 5d 2e 0a 20 20 2a 2f 0a 20 20 69  eta[4]..  */.  i
1ca0: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
1cb0: 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   ){.    int i;. 
1cc0: 20 20 20 66 6f 72 28 69 3d 30 3b 20 72 63 3d 3d     for(i=0; rc==
1cd0: 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69 3c 73  SQLITE_OK && i<s
1ce0: 69 7a 65 6f 66 28 6d 65 74 61 29 2f 73 69 7a 65  izeof(meta)/size
1cf0: 6f 66 28 6d 65 74 61 5b 30 5d 29 3b 20 69 2b 2b  of(meta[0]); i++
1d00: 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  ){.      rc = sq
1d10: 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d 65 74  lite3BtreeGetMet
1d20: 61 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  a(db->aDb[iDb].p
1d30: 42 74 2c 20 69 2b 31 2c 20 26 6d 65 74 61 5b 69  Bt, i+1, &meta[i
1d40: 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ]);.    }.    if
1d50: 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 73 71  ( rc ){.      sq
1d60: 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 70  lite3SetString(p
1d70: 7a 45 72 72 4d 73 67 2c 20 73 71 6c 69 74 65 33  zErrMsg, sqlite3
1d80: 45 72 72 53 74 72 28 72 63 29 2c 20 28 63 68 61  ErrStr(rc), (cha
1d90: 72 2a 29 30 29 3b 0a 20 20 20 20 20 20 73 71 6c  r*)0);.      sql
1da0: 69 74 65 33 42 74 72 65 65 43 6c 6f 73 65 43 75  ite3BtreeCloseCu
1db0: 72 73 6f 72 28 63 75 72 4d 61 69 6e 29 3b 0a 20  rsor(curMain);. 
1dc0: 20 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0a       return rc;.
1dd0: 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
1de0: 20 20 20 6d 65 6d 73 65 74 28 6d 65 74 61 2c 20     memset(meta, 
1df0: 30 2c 20 73 69 7a 65 6f 66 28 6d 65 74 61 29 29  0, sizeof(meta))
1e00: 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 61 44 62 5b  ;.  }.  db->aDb[
1e10: 69 44 62 5d 2e 73 63 68 65 6d 61 5f 63 6f 6f 6b  iDb].schema_cook
1e20: 69 65 20 3d 20 6d 65 74 61 5b 30 5d 3b 0a 0a 20  ie = meta[0];.. 
1e30: 20 2f 2a 20 49 66 20 6f 70 65 6e 69 6e 67 20 61   /* If opening a
1e40: 20 6e 6f 6e 2d 65 6d 70 74 79 20 64 61 74 61 62   non-empty datab
1e50: 61 73 65 2c 20 63 68 65 63 6b 20 74 68 65 20 74  ase, check the t
1e60: 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e 20 46 6f  ext encoding. Fo
1e70: 72 20 74 68 65 0a 20 20 2a 2a 20 6d 61 69 6e 20  r the.  ** main 
1e80: 64 61 74 61 62 61 73 65 2c 20 73 65 74 20 73 71  database, set sq
1e90: 6c 69 74 65 33 2e 65 6e 63 20 74 6f 20 74 68 65  lite3.enc to the
1ea0: 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 74 68 65   encoding of the
1eb0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 0a   main database..
1ec0: 20 20 2a 2a 20 46 6f 72 20 61 6e 20 61 74 74 61    ** For an atta
1ed0: 63 68 65 64 20 64 62 2c 20 69 74 20 69 73 20 61  ched db, it is a
1ee0: 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65 20 65  n error if the e
1ef0: 6e 63 6f 64 69 6e 67 20 69 73 20 6e 6f 74 20 74  ncoding is not t
1f00: 68 65 20 73 61 6d 65 0a 20 20 2a 2a 20 61 73 20  he same.  ** as 
1f10: 73 71 6c 69 74 65 33 2e 65 6e 63 2e 0a 20 20 2a  sqlite3.enc..  *
1f20: 2f 0a 20 20 69 66 28 20 6d 65 74 61 5b 34 5d 20  /.  if( meta[4] 
1f30: 29 7b 20 20 2f 2a 20 74 65 78 74 20 65 6e 63 6f  ){  /* text enco
1f40: 64 69 6e 67 20 2a 2f 0a 20 20 20 20 69 66 28 20  ding */.    if( 
1f50: 69 44 62 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  iDb==0 ){.      
1f60: 2f 2a 20 49 66 20 6f 70 65 6e 69 6e 67 20 74 68  /* If opening th
1f70: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c  e main database,
1f80: 20 73 65 74 20 64 62 2d 3e 65 6e 63 2e 20 2a 2f   set db->enc. */
1f90: 0a 20 20 20 20 20 20 64 62 2d 3e 65 6e 63 20 3d  .      db->enc =
1fa0: 20 28 75 38 29 6d 65 74 61 5b 34 5d 3b 0a 20 20   (u8)meta[4];.  
1fb0: 20 20 20 20 64 62 2d 3e 70 44 66 6c 74 43 6f 6c      db->pDfltCol
1fc0: 6c 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 43  l = sqlite3FindC
1fd0: 6f 6c 6c 53 65 71 28 64 62 2c 20 64 62 2d 3e 65  ollSeq(db, db->e
1fe0: 6e 63 2c 20 22 42 49 4e 41 52 59 22 2c 20 36 2c  nc, "BINARY", 6,
1ff0: 20 30 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a   0);.    }else{.
2000: 20 20 20 20 20 20 2f 2a 20 49 66 20 6f 70 65 6e        /* If open
2010: 69 6e 67 20 61 6e 20 61 74 74 61 63 68 65 64 20  ing an attached 
2020: 64 61 74 61 62 61 73 65 2c 20 74 68 65 20 65 6e  database, the en
2030: 63 6f 64 69 6e 67 20 6d 75 63 68 20 6d 61 74 63  coding much matc
2040: 68 20 64 62 2d 3e 65 6e 63 20 2a 2f 0a 20 20 20  h db->enc */.   
2050: 20 20 20 69 66 28 20 6d 65 74 61 5b 34 5d 21 3d     if( meta[4]!=
2060: 64 62 2d 3e 65 6e 63 20 29 7b 0a 20 20 20 20 20  db->enc ){.     
2070: 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43     sqlite3BtreeC
2080: 6c 6f 73 65 43 75 72 73 6f 72 28 63 75 72 4d 61  loseCursor(curMa
2090: 69 6e 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  in);.        sql
20a0: 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 70 7a  ite3SetString(pz
20b0: 45 72 72 4d 73 67 2c 20 22 61 74 74 61 63 68 65  ErrMsg, "attache
20c0: 64 20 64 61 74 61 62 61 73 65 73 20 6d 75 73 74  d databases must
20d0: 20 75 73 65 20 74 68 65 20 73 61 6d 65 22 0a 20   use the same". 
20e0: 20 20 20 20 20 20 20 20 20 20 20 22 20 74 65 78             " tex
20f0: 74 20 65 6e 63 6f 64 69 6e 67 20 61 73 20 6d 61  t encoding as ma
2100: 69 6e 20 64 61 74 61 62 61 73 65 22 2c 20 28 63  in database", (c
2110: 68 61 72 2a 29 30 29 3b 0a 20 20 20 20 20 20 20  har*)0);.       
2120: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45   return SQLITE_E
2130: 52 52 4f 52 3b 0a 20 20 20 20 20 20 7d 0a 20 20  RROR;.      }.  
2140: 20 20 7d 0a 20 20 7d 0a 0a 20 20 69 66 28 20 69    }.  }..  if( i
2150: 44 62 3d 3d 30 20 29 7b 0a 20 20 20 20 73 69 7a  Db==0 ){.    siz
2160: 65 20 3d 20 6d 65 74 61 5b 32 5d 3b 0a 20 20 20  e = meta[2];.   
2170: 20 69 66 28 20 73 69 7a 65 3d 3d 30 20 29 7b 20   if( size==0 ){ 
2180: 73 69 7a 65 20 3d 20 4d 41 58 5f 50 41 47 45 53  size = MAX_PAGES
2190: 3b 20 7d 0a 20 20 20 20 64 62 2d 3e 63 61 63 68  ; }.    db->cach
21a0: 65 5f 73 69 7a 65 20 3d 20 73 69 7a 65 3b 0a 20  e_size = size;. 
21b0: 20 20 20 64 62 2d 3e 73 61 66 65 74 79 5f 6c 65     db->safety_le
21c0: 76 65 6c 20 3d 20 6d 65 74 61 5b 33 5d 3b 0a 20  vel = meta[3];. 
21d0: 20 20 20 69 66 28 20 6d 65 74 61 5b 35 5d 3e 30     if( meta[5]>0
21e0: 20 26 26 20 6d 65 74 61 5b 35 5d 3c 3d 32 20 26   && meta[5]<=2 &
21f0: 26 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65  & db->temp_store
2200: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64 62 2d  ==0 ){.      db-
2210: 3e 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 6d 65  >temp_store = me
2220: 74 61 5b 35 5d 3b 0a 20 20 20 20 7d 0a 20 20 20  ta[5];.    }.   
2230: 20 69 66 28 20 64 62 2d 3e 73 61 66 65 74 79 5f   if( db->safety_
2240: 6c 65 76 65 6c 3d 3d 30 20 29 20 64 62 2d 3e 73  level==0 ) db->s
2250: 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d 20 32 3b  afety_level = 2;
2260: 0a 0a 20 20 20 20 64 62 2d 3e 66 69 6c 65 5f 66  ..    db->file_f
2270: 6f 72 6d 61 74 20 3d 20 6d 65 74 61 5b 31 5d 3b  ormat = meta[1];
2280: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 66 69 6c  .    if( db->fil
2290: 65 5f 66 6f 72 6d 61 74 3d 3d 30 20 29 7b 0a 20  e_format==0 ){. 
22a0: 20 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70       /* This hap
22b0: 70 65 6e 73 20 69 66 20 74 68 65 20 64 61 74 61  pens if the data
22c0: 62 61 73 65 20 77 61 73 20 69 6e 69 74 69 61 6c  base was initial
22d0: 6c 79 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20  ly empty */.    
22e0: 20 20 64 62 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61    db->file_forma
22f0: 74 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  t = 1;.    }.  }
2300: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 66 69 6c  ..  /*.  **  fil
2310: 65 5f 66 6f 72 6d 61 74 3d 3d 31 20 20 20 20 56  e_format==1    V
2320: 65 72 73 69 6f 6e 20 33 2e 30 2e 30 2e 0a 20 20  ersion 3.0.0..  
2330: 2a 2f 0a 20 20 69 66 28 20 6d 65 74 61 5b 31 5d  */.  if( meta[1]
2340: 3e 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  >1 ){.    sqlite
2350: 33 42 74 72 65 65 43 6c 6f 73 65 43 75 72 73 6f  3BtreeCloseCurso
2360: 72 28 63 75 72 4d 61 69 6e 29 3b 0a 20 20 20 20  r(curMain);.    
2370: 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
2380: 28 70 7a 45 72 72 4d 73 67 2c 20 22 75 6e 73 75  (pzErrMsg, "unsu
2390: 70 70 6f 72 74 65 64 20 66 69 6c 65 20 66 6f 72  pported file for
23a0: 6d 61 74 22 2c 20 28 63 68 61 72 2a 29 30 29 3b  mat", (char*)0);
23b0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
23c0: 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  TE_ERROR;.  }.. 
23d0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
23e0: 43 61 63 68 65 53 69 7a 65 28 64 62 2d 3e 61 44  CacheSize(db->aD
23f0: 62 5b 69 44 62 5d 2e 70 42 74 2c 20 64 62 2d 3e  b[iDb].pBt, db->
2400: 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 73  cache_size);.  s
2410: 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 53 61  qlite3BtreeSetSa
2420: 66 65 74 79 4c 65 76 65 6c 28 64 62 2d 3e 61 44  fetyLevel(db->aD
2430: 62 5b 69 44 62 5d 2e 70 42 74 2c 20 6d 65 74 61  b[iDb].pBt, meta
2440: 5b 33 5d 3d 3d 30 20 3f 20 32 20 3a 20 6d 65 74  [3]==0 ? 2 : met
2450: 61 5b 33 5d 29 3b 0a 0a 20 20 2f 2a 20 52 65 61  a[3]);..  /* Rea
2460: 64 20 74 68 65 20 73 63 68 65 6d 61 20 69 6e 66  d the schema inf
2470: 6f 72 6d 61 74 69 6f 6e 20 6f 75 74 20 6f 66 20  ormation out of 
2480: 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65  the schema table
2490: 73 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  s.  */.  assert(
24a0: 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 29   db->init.busy )
24b0: 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
24c0: 54 45 5f 45 4d 50 54 59 20 29 7b 0a 20 20 20 20  TE_EMPTY ){.    
24d0: 2f 2a 20 46 6f 72 20 61 6e 20 65 6d 70 74 79 20  /* For an empty 
24e0: 64 61 74 61 62 61 73 65 2c 20 74 68 65 72 65 20  database, there 
24f0: 69 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20 72 65  is nothing to re
2500: 61 64 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 53  ad */.    rc = S
2510: 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 65 6c 73  QLITE_OK;.  }els
2520: 65 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 71  e{.    char *zSq
2530: 6c 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74  l = 0;.    sqlit
2540: 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 3b  e3SafetyOff(db);
2550: 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
2560: 74 72 69 6e 67 28 26 7a 53 71 6c 2c 20 0a 20 20  tring(&zSql, .  
2570: 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 74 79        "SELECT ty
2580: 70 65 2c 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61  pe, name, rootpa
2590: 67 65 2c 20 73 71 6c 2c 20 22 2c 20 7a 44 62 4e  ge, sql, ", zDbN
25a0: 75 6d 2c 20 22 20 46 52 4f 4d 20 5c 22 22 2c 0a  um, " FROM \"",.
25b0: 20 20 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b          db->aDb[
25c0: 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 22 5c 22 2e  iDb].zName, "\".
25d0: 22 2c 20 7a 4d 61 73 74 65 72 4e 61 6d 65 2c 20  ", zMasterName, 
25e0: 28 63 68 61 72 2a 29 30 29 3b 0a 20 20 20 20 72  (char*)0);.    r
25f0: 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63  c = sqlite3_exec
2600: 28 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74  (db, zSql, sqlit
2610: 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20  e3InitCallback, 
2620: 26 69 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a 20  &initData, 0);. 
2630: 20 20 20 73 71 6c 69 74 65 46 72 65 65 28 7a 53     sqliteFree(zS
2640: 71 6c 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ql);.    sqlite3
2650: 53 61 66 65 74 79 4f 6e 28 64 62 29 3b 0a 20 20  SafetyOn(db);.  
2660: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c    sqlite3BtreeCl
2670: 6f 73 65 43 75 72 73 6f 72 28 63 75 72 4d 61 69  oseCursor(curMai
2680: 6e 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71  n);.  }.  if( sq
2690: 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69  lite3_malloc_fai
26a0: 6c 65 64 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  led ){.    sqlit
26b0: 65 33 53 65 74 53 74 72 69 6e 67 28 70 7a 45 72  e3SetString(pzEr
26c0: 72 4d 73 67 2c 20 22 6f 75 74 20 6f 66 20 6d 65  rMsg, "out of me
26d0: 6d 6f 72 79 22 2c 20 28 63 68 61 72 2a 29 30 29  mory", (char*)0)
26e0: 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
26f0: 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 73 71 6c  E_NOMEM;.    sql
2700: 69 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61  ite3ResetInterna
2710: 6c 53 63 68 65 6d 61 28 64 62 2c 20 30 29 3b 0a  lSchema(db, 0);.
2720: 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51    }.  if( rc==SQ
2730: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 44  LITE_OK ){.    D
2740: 62 53 65 74 50 72 6f 70 65 72 74 79 28 64 62 2c  bSetProperty(db,
2750: 20 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c   iDb, DB_SchemaL
2760: 6f 61 64 65 64 29 3b 0a 20 20 7d 65 6c 73 65 7b  oaded);.  }else{
2770: 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65  .    sqlite3Rese
2780: 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28  tInternalSchema(
2790: 64 62 2c 20 69 44 62 29 3b 0a 20 20 7d 0a 20 20  db, iDb);.  }.  
27a0: 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a  return rc;.}../*
27b0: 0a 2a 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 61  .** Initialize a
27c0: 6c 6c 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ll database file
27d0: 73 20 2d 20 74 68 65 20 6d 61 69 6e 20 64 61 74  s - the main dat
27e0: 61 62 61 73 65 20 66 69 6c 65 2c 20 74 68 65 20  abase file, the 
27f0: 66 69 6c 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20  file.** used to 
2800: 73 74 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20  store temporary 
2810: 74 61 62 6c 65 73 2c 20 61 6e 64 20 61 6e 79 20  tables, and any 
2820: 61 64 64 69 74 69 6f 6e 61 6c 20 64 61 74 61 62  additional datab
2830: 61 73 65 20 66 69 6c 65 73 0a 2a 2a 20 63 72 65  ase files.** cre
2840: 61 74 65 64 20 75 73 69 6e 67 20 41 54 54 41 43  ated using ATTAC
2850: 48 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 52  H statements.  R
2860: 65 74 75 72 6e 20 61 20 73 75 63 63 65 73 73 20  eturn a success 
2870: 63 6f 64 65 2e 20 20 49 66 20 61 6e 0a 2a 2a 20  code.  If an.** 
2880: 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 77 72  error occurs, wr
2890: 69 74 65 20 61 6e 20 65 72 72 6f 72 20 6d 65 73  ite an error mes
28a0: 73 61 67 65 20 69 6e 74 6f 20 2a 70 7a 45 72 72  sage into *pzErr
28b0: 4d 73 67 2e 0a 2a 2a 0a 2a 2a 20 41 66 74 65 72  Msg..**.** After
28c0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
28d0: 20 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20 74 68   initialized, th
28e0: 65 20 53 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c  e SQLITE_Initial
28f0: 69 7a 65 64 0a 2a 2a 20 62 69 74 20 69 73 20 73  ized.** bit is s
2900: 65 74 20 69 6e 20 74 68 65 20 66 6c 61 67 73 20  et in the flags 
2910: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
2920: 69 74 65 20 73 74 72 75 63 74 75 72 65 2e 20 0a  ite structure. .
2930: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  */.int sqlite3In
2940: 69 74 28 73 71 6c 69 74 65 20 2a 64 62 2c 20 63  it(sqlite *db, c
2950: 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 29 7b  har **pzErrMsg){
2960: 0a 20 20 69 6e 74 20 69 2c 20 72 63 3b 0a 20 20  .  int i, rc;.  
2970: 0a 20 20 69 66 28 20 64 62 2d 3e 69 6e 69 74 2e  .  if( db->init.
2980: 62 75 73 79 20 29 20 72 65 74 75 72 6e 20 53 51  busy ) return SQ
2990: 4c 49 54 45 5f 4f 4b 3b 0a 20 20 61 73 73 65 72  LITE_OK;.  asser
29a0: 74 28 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20  t( (db->flags & 
29b0: 53 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c 69 7a  SQLITE_Initializ
29c0: 65 64 29 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d  ed)==0 );.  rc =
29d0: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 64 62   SQLITE_OK;.  db
29e0: 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b  ->init.busy = 1;
29f0: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 72 63 3d 3d  .  for(i=0; rc==
2a00: 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69 3c 64  SQLITE_OK && i<d
2a10: 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20  b->nDb; i++){.  
2a20: 20 20 69 66 28 20 44 62 48 61 73 50 72 6f 70 65    if( DbHasPrope
2a30: 72 74 79 28 64 62 2c 20 69 2c 20 44 42 5f 53 63  rty(db, i, DB_Sc
2a40: 68 65 6d 61 4c 6f 61 64 65 64 29 20 7c 7c 20 69  hemaLoaded) || i
2a50: 3d 3d 31 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ==1 ) continue;.
2a60: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2a70: 49 6e 69 74 4f 6e 65 28 64 62 2c 20 69 2c 20 70  InitOne(db, i, p
2a80: 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 69 66  zErrMsg);.    if
2a90: 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 73 71  ( rc ){.      sq
2aa0: 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e  lite3ResetIntern
2ab0: 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 69 29 3b  alSchema(db, i);
2ac0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a  .    }.  }..  /*
2ad0: 20 4f 6e 63 65 20 61 6c 6c 20 74 68 65 20 6f 74   Once all the ot
2ae0: 68 65 72 20 64 61 74 61 62 61 73 65 73 20 68 61  her databases ha
2af0: 76 65 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69  ve been initiali
2b00: 73 65 64 2c 20 6c 6f 61 64 20 74 68 65 20 73 63  sed, load the sc
2b10: 68 65 6d 61 0a 20 20 2a 2a 20 66 6f 72 20 74 68  hema.  ** for th
2b20: 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 2e  e TEMP database.
2b30: 20 54 68 69 73 20 69 73 20 6c 6f 61 64 65 64 20   This is loaded 
2b40: 6c 61 73 74 2c 20 61 73 20 74 68 65 20 54 45 4d  last, as the TEM
2b50: 50 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20  P database.  ** 
2b60: 73 63 68 65 6d 61 20 6d 61 79 20 63 6f 6e 74 61  schema may conta
2b70: 69 6e 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f  in references to
2b80: 20 6f 62 6a 65 63 74 73 20 69 6e 20 6f 74 68 65   objects in othe
2b90: 72 20 64 61 74 61 62 61 73 65 73 2e 0a 20 20 2a  r databases..  *
2ba0: 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  /.  if( rc==SQLI
2bb0: 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 6e 44 62  TE_OK && db->nDb
2bc0: 3e 31 20 26 26 20 21 44 62 48 61 73 50 72 6f 70  >1 && !DbHasProp
2bd0: 65 72 74 79 28 64 62 2c 20 31 2c 20 44 42 5f 53  erty(db, 1, DB_S
2be0: 63 68 65 6d 61 4c 6f 61 64 65 64 29 20 29 7b 0a  chemaLoaded) ){.
2bf0: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2c00: 49 6e 69 74 4f 6e 65 28 64 62 2c 20 31 2c 20 70  InitOne(db, 1, p
2c10: 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 69 66  zErrMsg);.    if
2c20: 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 73 71  ( rc ){.      sq
2c30: 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e  lite3ResetIntern
2c40: 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 31 29 3b  alSchema(db, 1);
2c50: 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 64 62  .    }.  }..  db
2c60: 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b  ->init.busy = 0;
2c70: 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
2c80: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 64 62 2d 3e  E_OK ){.    db->
2c90: 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f  flags |= SQLITE_
2ca0: 49 6e 69 74 69 61 6c 69 7a 65 64 3b 0a 20 20 20  Initialized;.   
2cb0: 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e   sqlite3CommitIn
2cc0: 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 64 62  ternalChanges(db
2cd0: 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 72 63  );.  }..  if( rc
2ce0: 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
2cf0: 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20     db->flags &= 
2d00: 7e 53 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c 69  ~SQLITE_Initiali
2d10: 7a 65 64 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  zed;.  }.  retur
2d20: 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  n rc;.}../*.** T
2d30: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61  his routine is a
2d40: 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20 64 61   no-op if the da
2d50: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73  tabase schema is
2d60: 20 61 6c 72 65 61 64 79 20 69 6e 69 74 69 61 6c   already initial
2d70: 69 73 65 64 2e 0a 2a 2a 20 4f 74 68 65 72 77 69  ised..** Otherwi
2d80: 73 65 2c 20 74 68 65 20 73 63 68 65 6d 61 20 69  se, the schema i
2d90: 73 20 6c 6f 61 64 65 64 2e 20 41 6e 20 65 72 72  s loaded. An err
2da0: 6f 72 20 63 6f 64 65 20 69 73 20 72 65 74 75 72  or code is retur
2db0: 6e 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ned..*/.int sqli
2dc0: 74 65 33 52 65 61 64 53 63 68 65 6d 61 28 73 71  te3ReadSchema(sq
2dd0: 6c 69 74 65 20 2a 64 62 2c 20 63 68 61 72 20 2a  lite *db, char *
2de0: 2a 70 7a 45 72 72 4d 73 67 29 7b 0a 20 20 69 6e  *pzErrMsg){.  in
2df0: 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  t rc = SQLITE_OK
2e00: 3b 0a 0a 20 20 69 66 28 20 21 64 62 2d 3e 69 6e  ;..  if( !db->in
2e10: 69 74 2e 62 75 73 79 20 29 7b 0a 20 20 20 20 69  it.busy ){.    i
2e20: 66 28 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20  f( (db->flags & 
2e30: 53 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c 69 7a  SQLITE_Initializ
2e40: 65 64 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ed)==0 ){.      
2e50: 72 63 20 3d 20 73 71 6c 69 74 65 33 49 6e 69 74  rc = sqlite3Init
2e60: 28 64 62 2c 20 70 7a 45 72 72 4d 73 67 29 3b 0a  (db, pzErrMsg);.
2e70: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73 65      }.  }.  asse
2e80: 72 74 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  rt( rc!=SQLITE_O
2e90: 4b 20 7c 7c 20 28 64 62 2d 3e 66 6c 61 67 73 20  K || (db->flags 
2ea0: 26 20 53 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c  & SQLITE_Initial
2eb0: 69 7a 65 64 29 7c 7c 64 62 2d 3e 69 6e 69 74 2e  ized)||db->init.
2ec0: 62 75 73 79 20 29 3b 0a 20 20 72 65 74 75 72 6e  busy );.  return
2ed0: 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68   rc;.}../*.** Th
2ee0: 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65  e version of the
2ef0: 20 6c 69 62 72 61 72 79 0a 2a 2f 0a 63 6f 6e 73   library.*/.cons
2f00: 74 20 63 68 61 72 20 72 63 73 69 64 33 5b 5d 20  t char rcsid3[] 
2f10: 3d 20 22 40 28 23 29 20 5c 30 34 34 49 64 3a 20  = "@(#) \044Id: 
2f20: 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 22  SQLite version "
2f30: 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 20   SQLITE_VERSION 
2f40: 22 20 24 22 3b 0a 63 6f 6e 73 74 20 63 68 61 72  " $";.const char
2f50: 20 73 71 6c 69 74 65 33 5f 76 65 72 73 69 6f 6e   sqlite3_version
2f60: 5b 5d 20 3d 20 53 51 4c 49 54 45 5f 56 45 52 53  [] = SQLITE_VERS
2f70: 49 4f 4e 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  ION;../*.** This
2f80: 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20   is the default 
2f90: 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
2fa0: 6f 6e 20 6e 61 6d 65 64 20 22 42 49 4e 41 52 59  on named "BINARY
2fb0: 22 20 77 68 69 63 68 20 69 73 20 61 6c 77 61 79  " which is alway
2fc0: 73 0a 2a 2a 20 61 76 61 69 6c 61 62 6c 65 2e 0a  s.** available..
2fd0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 62 69  */.static int bi
2fe0: 6e 61 72 79 43 6f 6c 6c 61 74 69 6e 67 46 75 6e  naryCollatingFun
2ff0: 63 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73  c(.  void *NotUs
3000: 65 64 2c 0a 20 20 69 6e 74 20 6e 4b 65 79 31 2c  ed,.  int nKey1,
3010: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 4b 65   const void *pKe
3020: 79 31 2c 0a 20 20 69 6e 74 20 6e 4b 65 79 32 2c  y1,.  int nKey2,
3030: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 4b 65   const void *pKe
3040: 79 32 0a 29 7b 0a 20 20 69 6e 74 20 72 63 2c 20  y2.){.  int rc, 
3050: 6e 3b 0a 20 20 6e 20 3d 20 6e 4b 65 79 31 3c 6e  n;.  n = nKey1<n
3060: 4b 65 79 32 20 3f 20 6e 4b 65 79 31 20 3a 20 6e  Key2 ? nKey1 : n
3070: 4b 65 79 32 3b 0a 20 20 72 63 20 3d 20 6d 65 6d  Key2;.  rc = mem
3080: 63 6d 70 28 70 4b 65 79 31 2c 20 70 4b 65 79 32  cmp(pKey1, pKey2
3090: 2c 20 6e 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  , n);.  if( rc==
30a0: 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 6e 4b  0 ){.    rc = nK
30b0: 65 79 31 20 2d 20 6e 4b 65 79 32 3b 0a 20 20 7d  ey1 - nKey2;.  }
30c0: 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a  .  return rc;.}.
30d0: 0a 2f 2a 0a 2a 2a 20 41 6e 6f 74 68 65 72 20 62  ./*.** Another b
30e0: 75 69 6c 74 2d 69 6e 20 63 6f 6c 6c 61 74 69 6e  uilt-in collatin
30f0: 67 20 73 65 71 75 65 6e 63 65 3a 20 4e 4f 43 41  g sequence: NOCA
3100: 53 45 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  SE. .**.** This 
3110: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
3120: 63 65 20 69 73 20 69 6e 74 65 6e 64 65 64 20 74  ce is intended t
3130: 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20 22 63  o be used for "c
3140: 61 73 65 20 69 6e 64 65 70 65 6e 64 61 6e 74 0a  ase independant.
3150: 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 22 2e 20  ** comparison". 
3160: 53 51 4c 69 74 65 27 73 20 6b 6e 6f 77 6c 65 64  SQLite's knowled
3170: 67 65 20 6f 66 20 75 70 70 65 72 20 61 6e 64 20  ge of upper and 
3180: 6c 6f 77 65 72 20 63 61 73 65 20 65 71 75 69 76  lower case equiv
3190: 61 6c 65 6e 74 73 0a 2a 2a 20 65 78 74 65 6e 64  alents.** extend
31a0: 73 20 6f 6e 6c 79 20 74 6f 20 74 68 65 20 32 36  s only to the 26
31b0: 20 63 68 61 72 61 63 74 65 72 73 20 75 73 65 64   characters used
31c0: 20 69 6e 20 74 68 65 20 45 6e 67 6c 69 73 68 20   in the English 
31d0: 6c 61 6e 67 75 61 67 65 2e 0a 2a 2a 0a 2a 2a 20  language..**.** 
31e0: 41 74 20 74 68 65 20 6d 6f 6d 65 6e 74 20 74 68  At the moment th
31f0: 65 72 65 20 69 73 20 6f 6e 6c 79 20 61 20 55 54  ere is only a UT
3200: 46 2d 38 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  F-8 implementati
3210: 6f 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  on..*/.static in
3220: 74 20 6e 6f 63 61 73 65 43 6f 6c 6c 61 74 69 6e  t nocaseCollatin
3230: 67 46 75 6e 63 28 0a 20 20 76 6f 69 64 20 2a 4e  gFunc(.  void *N
3240: 6f 74 55 73 65 64 2c 0a 20 20 69 6e 74 20 6e 4b  otUsed,.  int nK
3250: 65 79 31 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20  ey1, const void 
3260: 2a 70 4b 65 79 31 2c 0a 20 20 69 6e 74 20 6e 4b  *pKey1,.  int nK
3270: 65 79 32 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20  ey2, const void 
3280: 2a 70 4b 65 79 32 0a 29 7b 0a 20 20 69 6e 74 20  *pKey2.){.  int 
3290: 72 20 3d 20 73 71 6c 69 74 65 33 53 74 72 4e 49  r = sqlite3StrNI
32a0: 43 6d 70 28 0a 20 20 20 20 20 20 28 63 6f 6e 73  Cmp(.      (cons
32b0: 74 20 63 68 61 72 20 2a 29 70 4b 65 79 31 2c 20  t char *)pKey1, 
32c0: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 70 4b  (const char *)pK
32d0: 65 79 32 2c 20 28 6e 4b 65 79 31 3e 6e 4b 65 79  ey2, (nKey1>nKey
32e0: 32 29 3f 6e 4b 65 79 31 3a 6e 4b 65 79 32 29 3b  2)?nKey1:nKey2);
32f0: 0a 20 20 69 66 28 20 30 3d 3d 72 20 29 7b 0a 20  .  if( 0==r ){. 
3300: 20 20 20 72 20 3d 20 6e 4b 65 79 31 2d 6e 4b 65     r = nKey1-nKe
3310: 79 32 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  y2;.  }.  return
3320: 20 72 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74   r;.}../*.** Ret
3330: 75 72 6e 20 74 68 65 20 52 4f 57 49 44 20 6f 66  urn the ROWID of
3340: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
3350: 20 69 6e 73 65 72 74 0a 2a 2f 0a 6c 6f 6e 67 20   insert.*/.long 
3360: 6c 6f 6e 67 20 69 6e 74 20 73 71 6c 69 74 65 33  long int sqlite3
3370: 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  _last_insert_row
3380: 69 64 28 73 71 6c 69 74 65 20 2a 64 62 29 7b 0a  id(sqlite *db){.
3390: 20 20 72 65 74 75 72 6e 20 64 62 2d 3e 6c 61 73    return db->las
33a0: 74 52 6f 77 69 64 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  tRowid;.}../*.**
33b0: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   Return the numb
33c0: 65 72 20 6f 66 20 63 68 61 6e 67 65 73 20 69 6e  er of changes in
33d0: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
33e0: 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33   call to sqlite3
33f0: 5f 65 78 65 63 28 29 2e 0a 2a 2f 0a 69 6e 74 20  _exec()..*/.int 
3400: 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28  sqlite3_changes(
3410: 73 71 6c 69 74 65 20 2a 64 62 29 7b 0a 20 20 72  sqlite *db){.  r
3420: 65 74 75 72 6e 20 64 62 2d 3e 6e 43 68 61 6e 67  eturn db->nChang
3430: 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  e;.}../*.** Retu
3440: 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  rn the number of
3450: 20 63 68 61 6e 67 65 73 20 73 69 6e 63 65 20 74   changes since t
3460: 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
3470: 6c 65 20 77 61 73 20 6f 70 65 6e 65 64 2e 0a 2a  le was opened..*
3480: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 74 6f  /.int sqlite3_to
3490: 74 61 6c 5f 63 68 61 6e 67 65 73 28 73 71 6c 69  tal_changes(sqli
34a0: 74 65 33 20 2a 64 62 29 7b 0a 20 20 72 65 74 75  te3 *db){.  retu
34b0: 72 6e 20 64 62 2d 3e 6e 54 6f 74 61 6c 43 68 61  rn db->nTotalCha
34c0: 6e 67 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6c  nge;.}../*.** Cl
34d0: 6f 73 65 20 61 6e 20 65 78 69 73 74 69 6e 67 20  ose an existing 
34e0: 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 0a  SQLite database.
34f0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63  */.int sqlite3_c
3500: 6c 6f 73 65 28 73 71 6c 69 74 65 20 2a 64 62 29  lose(sqlite *db)
3510: 7b 0a 20 20 48 61 73 68 45 6c 65 6d 20 2a 69 3b  {.  HashElem *i;
3520: 0a 20 20 69 6e 74 20 6a 3b 0a 0a 20 20 69 66 28  .  int j;..  if(
3530: 20 21 64 62 20 29 7b 0a 20 20 20 20 72 65 74 75   !db ){.    retu
3540: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20  rn SQLITE_OK;.  
3550: 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 72 65  }..  /* If there
3560: 20 61 72 65 20 61 6e 79 20 6f 75 74 73 74 61 6e   are any outstan
3570: 64 69 6e 67 20 56 4d 73 2c 20 72 65 74 75 72 6e  ding VMs, return
3580: 20 53 51 4c 49 54 45 5f 42 55 53 59 2e 20 2a 2f   SQLITE_BUSY. */
3590: 0a 20 20 69 66 28 20 64 62 2d 3e 70 56 64 62 65  .  if( db->pVdbe
35a0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45   ){.    sqlite3E
35b0: 72 72 6f 72 28 64 62 2c 20 53 51 4c 49 54 45 5f  rror(db, SQLITE_
35c0: 42 55 53 59 2c 20 0a 20 20 20 20 20 20 20 20 22  BUSY, .        "
35d0: 55 6e 61 62 6c 65 20 74 6f 20 63 6c 6f 73 65 20  Unable to close 
35e0: 64 75 65 20 74 6f 20 75 6e 66 69 6e 61 6c 69 73  due to unfinalis
35f0: 65 64 20 73 74 61 74 65 6d 65 6e 74 73 22 29 3b  ed statements");
3600: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
3610: 54 45 5f 42 55 53 59 3b 0a 20 20 7d 0a 20 20 61  TE_BUSY;.  }.  a
3620: 73 73 65 72 74 28 20 21 73 71 6c 69 74 65 33 53  ssert( !sqlite3S
3630: 61 66 65 74 79 43 68 65 63 6b 28 64 62 29 20 29  afetyCheck(db) )
3640: 3b 0a 0a 20 20 2f 2a 20 46 49 58 20 4d 45 3a 20  ;..  /* FIX ME: 
3650: 64 62 2d 3e 6d 61 67 69 63 20 6d 61 79 20 62 65  db->magic may be
3660: 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4d   set to SQLITE_M
3670: 41 47 49 43 5f 43 4c 4f 53 45 44 20 69 66 20 74  AGIC_CLOSED if t
3680: 68 65 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a  he database.  **
3690: 20 63 61 6e 6e 6f 74 20 62 65 20 6f 70 65 6e 65   cannot be opene
36a0: 64 20 66 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f  d for some reaso
36b0: 6e 2e 20 53 6f 20 74 68 69 73 20 72 6f 75 74 69  n. So this routi
36c0: 6e 65 20 6e 65 65 64 73 20 74 6f 20 72 75 6e 20  ne needs to run 
36d0: 69 6e 0a 20 20 2a 2a 20 74 68 61 74 20 63 61 73  in.  ** that cas
36e0: 65 2e 20 42 75 74 20 6d 61 79 62 65 20 74 68 65  e. But maybe the
36f0: 72 65 20 73 68 6f 75 6c 64 20 62 65 20 61 6e 20  re should be an 
3700: 65 78 74 72 61 20 6d 61 67 69 63 20 76 61 6c 75  extra magic valu
3710: 65 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 22  e for the.  ** "
3720: 66 61 69 6c 65 64 20 74 6f 20 6f 70 65 6e 22 20  failed to open" 
3730: 73 74 61 74 65 2e 0a 20 20 2a 2f 0a 20 20 69 66  state..  */.  if
3740: 28 20 64 62 2d 3e 6d 61 67 69 63 21 3d 53 51 4c  ( db->magic!=SQL
3750: 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44  ITE_MAGIC_CLOSED
3760: 20 26 26 20 73 71 6c 69 74 65 33 53 61 66 65 74   && sqlite3Safet
3770: 79 4f 6e 28 64 62 29 20 29 7b 0a 20 20 20 20 2f  yOn(db) ){.    /
3780: 2a 20 70 72 69 6e 74 66 28 22 44 49 44 20 4e 4f  * printf("DID NO
3790: 54 20 43 4c 4f 53 45 5c 6e 22 29 3b 20 66 66 6c  T CLOSE\n"); ffl
37a0: 75 73 68 28 73 74 64 6f 75 74 29 3b 20 2a 2f 0a  ush(stdout); */.
37b0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
37c0: 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  E_ERROR;.  }..  
37d0: 66 6f 72 28 6a 3d 30 3b 20 6a 3c 64 62 2d 3e 6e  for(j=0; j<db->n
37e0: 44 62 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 73 74  Db; j++){.    st
37f0: 72 75 63 74 20 44 62 20 2a 70 44 62 20 3d 20 26  ruct Db *pDb = &
3800: 64 62 2d 3e 61 44 62 5b 6a 5d 3b 0a 20 20 20 20  db->aDb[j];.    
3810: 69 66 28 20 70 44 62 2d 3e 70 42 74 20 29 7b 0a  if( pDb->pBt ){.
3820: 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72        sqlite3Btr
3830: 65 65 43 6c 6f 73 65 28 70 44 62 2d 3e 70 42 74  eeClose(pDb->pBt
3840: 29 3b 0a 20 20 20 20 20 20 70 44 62 2d 3e 70 42  );.      pDb->pB
3850: 74 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d  t = 0;.    }.  }
3860: 0a 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 49  .  sqlite3ResetI
3870: 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62  nternalSchema(db
3880: 2c 20 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20  , 0);.  assert( 
3890: 64 62 2d 3e 6e 44 62 3c 3d 32 20 29 3b 0a 20 20  db->nDb<=2 );.  
38a0: 61 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62 3d  assert( db->aDb=
38b0: 3d 64 62 2d 3e 61 44 62 53 74 61 74 69 63 20 29  =db->aDbStatic )
38c0: 3b 0a 20 20 66 6f 72 28 69 3d 73 71 6c 69 74 65  ;.  for(i=sqlite
38d0: 48 61 73 68 46 69 72 73 74 28 26 64 62 2d 3e 61  HashFirst(&db->a
38e0: 46 75 6e 63 29 3b 20 69 3b 20 69 3d 73 71 6c 69  Func); i; i=sqli
38f0: 74 65 48 61 73 68 4e 65 78 74 28 69 29 29 7b 0a  teHashNext(i)){.
3900: 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75      FuncDef *pFu
3910: 6e 63 2c 20 2a 70 4e 65 78 74 3b 0a 20 20 20 20  nc, *pNext;.    
3920: 66 6f 72 28 70 46 75 6e 63 20 3d 20 28 46 75 6e  for(pFunc = (Fun
3930: 63 44 65 66 2a 29 73 71 6c 69 74 65 48 61 73 68  cDef*)sqliteHash
3940: 44 61 74 61 28 69 29 3b 20 70 46 75 6e 63 3b 20  Data(i); pFunc; 
3950: 70 46 75 6e 63 3d 70 4e 65 78 74 29 7b 0a 20 20  pFunc=pNext){.  
3960: 20 20 20 20 70 4e 65 78 74 20 3d 20 70 46 75 6e      pNext = pFun
3970: 63 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20  c->pNext;.      
3980: 73 71 6c 69 74 65 46 72 65 65 28 70 46 75 6e 63  sqliteFree(pFunc
3990: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20  );.    }.  }..  
39a0: 66 6f 72 28 69 3d 73 71 6c 69 74 65 48 61 73 68  for(i=sqliteHash
39b0: 46 69 72 73 74 28 26 64 62 2d 3e 61 43 6f 6c 6c  First(&db->aColl
39c0: 53 65 71 29 3b 20 69 3b 20 69 3d 73 71 6c 69 74  Seq); i; i=sqlit
39d0: 65 48 61 73 68 4e 65 78 74 28 69 29 29 7b 0a 20  eHashNext(i)){. 
39e0: 20 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c     CollSeq *pCol
39f0: 6c 20 3d 20 28 43 6f 6c 6c 53 65 71 20 2a 29 73  l = (CollSeq *)s
3a00: 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 69 29  qliteHashData(i)
3a10: 3b 0a 20 20 20 20 73 71 6c 69 74 65 46 72 65 65  ;.    sqliteFree
3a20: 28 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 20 20 73  (pColl);.  }.  s
3a30: 71 6c 69 74 65 33 48 61 73 68 43 6c 65 61 72 28  qlite3HashClear(
3a40: 26 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 29 3b 0a  &db->aCollSeq);.
3a50: 0a 20 20 73 71 6c 69 74 65 33 48 61 73 68 43 6c  .  sqlite3HashCl
3a60: 65 61 72 28 26 64 62 2d 3e 61 46 75 6e 63 29 3b  ear(&db->aFunc);
3a70: 0a 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28  .  sqlite3Error(
3a80: 64 62 2c 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 30  db, SQLITE_OK, 0
3a90: 29 3b 20 2f 2a 20 44 65 61 6c 6c 6f 63 61 74 65  ); /* Deallocate
3aa0: 73 20 61 6e 79 20 63 61 63 68 65 64 20 65 72 72  s any cached err
3ab0: 6f 72 20 73 74 72 69 6e 67 73 2e 20 2a 2f 0a 20  or strings. */. 
3ac0: 20 69 66 28 20 64 62 2d 3e 70 56 61 6c 75 65 20   if( db->pValue 
3ad0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 61  ){.    sqlite3Va
3ae0: 6c 75 65 46 72 65 65 28 64 62 2d 3e 70 56 61 6c  lueFree(db->pVal
3af0: 75 65 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64  ue);.  }.  if( d
3b00: 62 2d 3e 70 45 72 72 20 29 7b 0a 20 20 20 20 73  b->pErr ){.    s
3b10: 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28  qlite3ValueFree(
3b20: 64 62 2d 3e 70 45 72 72 29 3b 0a 20 20 7d 0a 0a  db->pErr);.  }..
3b30: 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51    db->magic = SQ
3b40: 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52  LITE_MAGIC_ERROR
3b50: 3b 0a 20 20 73 71 6c 69 74 65 46 72 65 65 28 64  ;.  sqliteFree(d
3b60: 62 29 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c  b);.  return SQL
3b70: 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  ITE_OK;.}../*.**
3b80: 20 52 6f 6c 6c 62 61 63 6b 20 61 6c 6c 20 64 61   Rollback all da
3b90: 74 61 62 61 73 65 20 66 69 6c 65 73 2e 0a 2a 2f  tabase files..*/
3ba0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c  .void sqlite3Rol
3bb0: 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 20  lbackAll(sqlite 
3bc0: 2a 64 62 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20  *db){.  int i;. 
3bd0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e   for(i=0; i<db->
3be0: 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  nDb; i++){.    i
3bf0: 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42  f( db->aDb[i].pB
3c00: 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
3c10: 65 33 42 74 72 65 65 52 6f 6c 6c 62 61 63 6b 28  e3BtreeRollback(
3c20: 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 29 3b  db->aDb[i].pBt);
3c30: 0a 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69  .      db->aDb[i
3c40: 5d 2e 69 6e 54 72 61 6e 73 20 3d 20 30 3b 0a 20  ].inTrans = 0;. 
3c50: 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74     }.  }.  sqlit
3c60: 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53  e3ResetInternalS
3c70: 63 68 65 6d 61 28 64 62 2c 20 30 29 3b 0a 20 20  chema(db, 0);.  
3c80: 2f 2a 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61  /* sqlite3Rollba
3c90: 63 6b 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65  ckInternalChange
3ca0: 73 28 64 62 29 3b 20 2a 2f 0a 7d 0a 0a 2f 2a 0a  s(db); */.}../*.
3cb0: 2a 2a 20 52 65 74 75 72 6e 20 61 20 73 74 61 74  ** Return a stat
3cc0: 69 63 20 73 74 72 69 6e 67 20 74 68 61 74 20 64  ic string that d
3cd0: 65 73 63 72 69 62 65 73 20 74 68 65 20 6b 69 6e  escribes the kin
3ce0: 64 20 6f 66 20 65 72 72 6f 72 20 73 70 65 63 69  d of error speci
3cf0: 66 69 65 64 20 69 6e 20 74 68 65 0a 2a 2a 20 61  fied in the.** a
3d00: 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 63 6f 6e 73  rgument..*/.cons
3d10: 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45  t char *sqlite3E
3d20: 72 72 53 74 72 28 69 6e 74 20 72 63 29 7b 0a 20  rrStr(int rc){. 
3d30: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 0a   const char *z;.
3d40: 20 20 73 77 69 74 63 68 28 20 72 63 20 29 7b 0a    switch( rc ){.
3d50: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
3d60: 4f 4b 3a 20 20 20 20 20 20 20 20 20 7a 20 3d 20  OK:         z = 
3d70: 22 6e 6f 74 20 61 6e 20 65 72 72 6f 72 22 3b 20  "not an error"; 
3d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d90: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
3da0: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
3db0: 45 52 52 4f 52 3a 20 20 20 20 20 20 7a 20 3d 20  ERROR:      z = 
3dc0: 22 53 51 4c 20 6c 6f 67 69 63 20 65 72 72 6f 72  "SQL logic error
3dd0: 20 6f 72 20 6d 69 73 73 69 6e 67 20 64 61 74 61   or missing data
3de0: 62 61 73 65 22 3b 20 20 20 62 72 65 61 6b 3b 0a  base";   break;.
3df0: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
3e00: 49 4e 54 45 52 4e 41 4c 3a 20 20 20 7a 20 3d 20  INTERNAL:   z = 
3e10: 22 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74 65  "internal SQLite
3e20: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
3e30: 66 6c 61 77 22 3b 20 20 20 62 72 65 61 6b 3b 0a  flaw";   break;.
3e40: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
3e50: 50 45 52 4d 3a 20 20 20 20 20 20 20 7a 20 3d 20  PERM:       z = 
3e60: 22 61 63 63 65 73 73 20 70 65 72 6d 69 73 73 69  "access permissi
3e70: 6f 6e 20 64 65 6e 69 65 64 22 3b 20 20 20 20 20  on denied";     
3e80: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
3e90: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
3ea0: 41 42 4f 52 54 3a 20 20 20 20 20 20 7a 20 3d 20  ABORT:      z = 
3eb0: 22 63 61 6c 6c 62 61 63 6b 20 72 65 71 75 65 73  "callback reques
3ec0: 74 65 64 20 71 75 65 72 79 20 61 62 6f 72 74 22  ted query abort"
3ed0: 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  ;        break;.
3ee0: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
3ef0: 42 55 53 59 3a 20 20 20 20 20 20 20 7a 20 3d 20  BUSY:       z = 
3f00: 22 64 61 74 61 62 61 73 65 20 69 73 20 6c 6f 63  "database is loc
3f10: 6b 65 64 22 3b 20 20 20 20 20 20 20 20 20 20 20  ked";           
3f20: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
3f30: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
3f40: 4c 4f 43 4b 45 44 3a 20 20 20 20 20 7a 20 3d 20  LOCKED:     z = 
3f50: 22 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20  "database table 
3f60: 69 73 20 6c 6f 63 6b 65 64 22 3b 20 20 20 20 20  is locked";     
3f70: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
3f80: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
3f90: 4e 4f 4d 45 4d 3a 20 20 20 20 20 20 7a 20 3d 20  NOMEM:      z = 
3fa0: 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 3b  "out of memory";
3fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3fc0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
3fd0: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
3fe0: 52 45 41 44 4f 4e 4c 59 3a 20 20 20 7a 20 3d 20  READONLY:   z = 
3ff0: 22 61 74 74 65 6d 70 74 20 74 6f 20 77 72 69 74  "attempt to writ
4000: 65 20 61 20 72 65 61 64 6f 6e 6c 79 20 64 61 74  e a readonly dat
4010: 61 62 61 73 65 22 3b 20 20 62 72 65 61 6b 3b 0a  abase";  break;.
4020: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
4030: 49 4e 54 45 52 52 55 50 54 3a 20 20 7a 20 3d 20  INTERRUPT:  z = 
4040: 22 69 6e 74 65 72 72 75 70 74 65 64 22 3b 20 20  "interrupted";  
4050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4060: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
4070: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
4080: 49 4f 45 52 52 3a 20 20 20 20 20 20 7a 20 3d 20  IOERR:      z = 
4090: 22 64 69 73 6b 20 49 2f 4f 20 65 72 72 6f 72 22  "disk I/O error"
40a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
40b0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
40c0: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
40d0: 43 4f 52 52 55 50 54 3a 20 20 20 20 7a 20 3d 20  CORRUPT:    z = 
40e0: 22 64 61 74 61 62 61 73 65 20 64 69 73 6b 20 69  "database disk i
40f0: 6d 61 67 65 20 69 73 20 6d 61 6c 66 6f 72 6d 65  mage is malforme
4100: 64 22 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  d";      break;.
4110: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
4120: 4e 4f 54 46 4f 55 4e 44 3a 20 20 20 7a 20 3d 20  NOTFOUND:   z = 
4130: 22 74 61 62 6c 65 20 6f 72 20 72 65 63 6f 72 64  "table or record
4140: 20 6e 6f 74 20 66 6f 75 6e 64 22 3b 20 20 20 20   not found";    
4150: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
4160: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
4170: 46 55 4c 4c 3a 20 20 20 20 20 20 20 7a 20 3d 20  FULL:       z = 
4180: 22 64 61 74 61 62 61 73 65 20 69 73 20 66 75 6c  "database is ful
4190: 6c 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  l";             
41a0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
41b0: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
41c0: 43 41 4e 54 4f 50 45 4e 3a 20 20 20 7a 20 3d 20  CANTOPEN:   z = 
41d0: 22 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e 20  "unable to open 
41e0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 22 3b 20  database file"; 
41f0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
4200: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
4210: 50 52 4f 54 4f 43 4f 4c 3a 20 20 20 7a 20 3d 20  PROTOCOL:   z = 
4220: 22 64 61 74 61 62 61 73 65 20 6c 6f 63 6b 69 6e  "database lockin
4230: 67 20 70 72 6f 74 6f 63 6f 6c 20 66 61 69 6c 75  g protocol failu
4240: 72 65 22 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  re";     break;.
4250: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
4260: 45 4d 50 54 59 3a 20 20 20 20 20 20 7a 20 3d 20  EMPTY:      z = 
4270: 22 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20  "table contains 
4280: 6e 6f 20 64 61 74 61 22 3b 20 20 20 20 20 20 20  no data";       
4290: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
42a0: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
42b0: 53 43 48 45 4d 41 3a 20 20 20 20 20 7a 20 3d 20  SCHEMA:     z = 
42c0: 22 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61  "database schema
42d0: 20 68 61 73 20 63 68 61 6e 67 65 64 22 3b 20 20   has changed";  
42e0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
42f0: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
4300: 54 4f 4f 42 49 47 3a 20 20 20 20 20 7a 20 3d 20  TOOBIG:     z = 
4310: 22 74 6f 6f 20 6d 75 63 68 20 64 61 74 61 20 66  "too much data f
4320: 6f 72 20 6f 6e 65 20 74 61 62 6c 65 20 72 6f 77  or one table row
4330: 22 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  ";       break;.
4340: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
4350: 43 4f 4e 53 54 52 41 49 4e 54 3a 20 7a 20 3d 20  CONSTRAINT: z = 
4360: 22 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c  "constraint fail
4370: 65 64 22 3b 20 20 20 20 20 20 20 20 20 20 20 20  ed";            
4380: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
4390: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
43a0: 4d 49 53 4d 41 54 43 48 3a 20 20 20 7a 20 3d 20  MISMATCH:   z = 
43b0: 22 64 61 74 61 74 79 70 65 20 6d 69 73 6d 61 74  "datatype mismat
43c0: 63 68 22 3b 20 20 20 20 20 20 20 20 20 20 20 20  ch";            
43d0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
43e0: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
43f0: 4d 49 53 55 53 45 3a 20 20 20 20 20 7a 20 3d 20  MISUSE:     z = 
4400: 22 6c 69 62 72 61 72 79 20 72 6f 75 74 69 6e 65  "library routine
4410: 20 63 61 6c 6c 65 64 20 6f 75 74 20 6f 66 20 73   called out of s
4420: 65 71 75 65 6e 63 65 22 3b 62 72 65 61 6b 3b 0a  equence";break;.
4430: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
4440: 4e 4f 4c 46 53 3a 20 20 20 20 20 20 7a 20 3d 20  NOLFS:      z = 
4450: 22 6b 65 72 6e 65 6c 20 6c 61 63 6b 73 20 6c 61  "kernel lacks la
4460: 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74  rge file support
4470: 22 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  ";       break;.
4480: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
4490: 41 55 54 48 3a 20 20 20 20 20 20 20 7a 20 3d 20  AUTH:       z = 
44a0: 22 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 64  "authorization d
44b0: 65 6e 69 65 64 22 3b 20 20 20 20 20 20 20 20 20  enied";         
44c0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
44d0: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
44e0: 46 4f 52 4d 41 54 3a 20 20 20 20 20 7a 20 3d 20  FORMAT:     z = 
44f0: 22 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62  "auxiliary datab
4500: 61 73 65 20 66 6f 72 6d 61 74 20 65 72 72 6f 72  ase format error
4510: 22 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  ";       break;.
4520: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
4530: 52 41 4e 47 45 3a 20 20 20 20 20 20 7a 20 3d 20  RANGE:      z = 
4540: 22 62 69 6e 64 20 69 6e 64 65 78 20 6f 75 74 20  "bind index out 
4550: 6f 66 20 72 61 6e 67 65 22 3b 20 20 20 20 20 20  of range";      
4560: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
4570: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
4580: 4e 4f 54 41 44 42 3a 20 20 20 20 20 7a 20 3d 20  NOTADB:     z = 
4590: 22 66 69 6c 65 20 69 73 20 65 6e 63 72 79 70 74  "file is encrypt
45a0: 65 64 20 6f 72 20 69 73 20 6e 6f 74 20 61 20 64  ed or is not a d
45b0: 61 74 61 62 61 73 65 22 3b 62 72 65 61 6b 3b 0a  atabase";break;.
45c0: 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20      default:    
45d0: 20 20 20 20 20 20 20 20 20 20 20 20 7a 20 3d 20              z = 
45e0: 22 75 6e 6b 6e 6f 77 6e 20 65 72 72 6f 72 22 3b  "unknown error";
45f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4600: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
4610: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a 3b 0a    }.  return z;.
4620: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  }../*.** This ro
4630: 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 73  utine implements
4640: 20 61 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b   a busy callback
4650: 20 74 68 61 74 20 73 6c 65 65 70 73 20 61 6e 64   that sleeps and
4660: 20 74 72 69 65 73 0a 2a 2a 20 61 67 61 69 6e 20   tries.** again 
4670: 75 6e 74 69 6c 20 61 20 74 69 6d 65 6f 75 74 20  until a timeout 
4680: 76 61 6c 75 65 20 69 73 20 72 65 61 63 68 65 64  value is reached
4690: 2e 20 20 54 68 65 20 74 69 6d 65 6f 75 74 20 76  .  The timeout v
46a0: 61 6c 75 65 20 69 73 0a 2a 2a 20 61 6e 20 69 6e  alue is.** an in
46b0: 74 65 67 65 72 20 6e 75 6d 62 65 72 20 6f 66 20  teger number of 
46c0: 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 70 61 73  milliseconds pas
46d0: 73 65 64 20 69 6e 20 61 73 20 74 68 65 20 66 69  sed in as the fi
46e0: 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 2e  rst.** argument.
46f0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73  .*/.static int s
4700: 71 6c 69 74 65 44 65 66 61 75 6c 74 42 75 73 79  qliteDefaultBusy
4710: 43 61 6c 6c 62 61 63 6b 28 0a 20 76 6f 69 64 20  Callback(. void 
4720: 2a 54 69 6d 65 6f 75 74 2c 20 20 20 20 20 20 20  *Timeout,       
4730: 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61      /* Maximum a
4740: 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20 74 6f  mount of time to
4750: 20 77 61 69 74 20 2a 2f 0a 20 69 6e 74 20 63 6f   wait */. int co
4760: 75 6e 74 20 20 20 20 20 20 20 20 20 20 20 20 20  unt             
4770: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
4780: 74 69 6d 65 73 20 74 61 62 6c 65 20 68 61 73 20  times table has 
4790: 62 65 65 6e 20 62 75 73 79 20 2a 2f 0a 29 7b 0a  been busy */.){.
47a0: 23 69 66 20 53 51 4c 49 54 45 5f 4d 49 4e 5f 53  #if SQLITE_MIN_S
47b0: 4c 45 45 50 5f 4d 53 3d 3d 31 0a 20 20 73 74 61  LEEP_MS==1.  sta
47c0: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 64  tic const char d
47d0: 65 6c 61 79 73 5b 5d 20 3d 0a 20 20 20 20 20 7b  elays[] =.     {
47e0: 20 31 2c 20 32 2c 20 35 2c 20 31 30 2c 20 31 35   1, 2, 5, 10, 15
47f0: 2c 20 32 30 2c 20 32 35 2c 20 32 35 2c 20 20 32  , 20, 25, 25,  2
4800: 35 2c 20 20 35 30 2c 20 20 35 30 2c 20 20 35 30  5,  50,  50,  50
4810: 2c 20 31 30 30 7d 3b 0a 20 20 73 74 61 74 69 63  , 100};.  static
4820: 20 63 6f 6e 73 74 20 73 68 6f 72 74 20 69 6e 74   const short int
4830: 20 74 6f 74 61 6c 73 5b 5d 20 3d 0a 20 20 20 20   totals[] =.    
4840: 20 7b 20 30 2c 20 31 2c 20 33 2c 20 20 38 2c 20   { 0, 1, 3,  8, 
4850: 31 38 2c 20 33 33 2c 20 35 33 2c 20 37 38 2c 20  18, 33, 53, 78, 
4860: 31 30 33 2c 20 31 32 38 2c 20 31 37 38 2c 20 32  103, 128, 178, 2
4870: 32 38 2c 20 32 38 37 7d 3b 0a 23 20 64 65 66 69  28, 287};.# defi
4880: 6e 65 20 4e 44 45 4c 41 59 20 28 73 69 7a 65 6f  ne NDELAY (sizeo
4890: 66 28 64 65 6c 61 79 73 29 2f 73 69 7a 65 6f 66  f(delays)/sizeof
48a0: 28 64 65 6c 61 79 73 5b 30 5d 29 29 0a 20 20 69  (delays[0])).  i
48b0: 6e 74 20 74 69 6d 65 6f 75 74 20 3d 20 28 69 6e  nt timeout = (in
48c0: 74 29 54 69 6d 65 6f 75 74 3b 0a 20 20 69 6e 74  t)Timeout;.  int
48d0: 20 64 65 6c 61 79 2c 20 70 72 69 6f 72 3b 0a 0a   delay, prior;..
48e0: 20 20 69 66 28 20 63 6f 75 6e 74 20 3c 3d 20 4e    if( count <= N
48f0: 44 45 4c 41 59 20 29 7b 0a 20 20 20 20 64 65 6c  DELAY ){.    del
4900: 61 79 20 3d 20 64 65 6c 61 79 73 5b 63 6f 75 6e  ay = delays[coun
4910: 74 2d 31 5d 3b 0a 20 20 20 20 70 72 69 6f 72 20  t-1];.    prior 
4920: 3d 20 74 6f 74 61 6c 73 5b 63 6f 75 6e 74 2d 31  = totals[count-1
4930: 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  ];.  }else{.    
4940: 64 65 6c 61 79 20 3d 20 64 65 6c 61 79 73 5b 4e  delay = delays[N
4950: 44 45 4c 41 59 2d 31 5d 3b 0a 20 20 20 20 70 72  DELAY-1];.    pr
4960: 69 6f 72 20 3d 20 74 6f 74 61 6c 73 5b 4e 44 45  ior = totals[NDE
4970: 4c 41 59 2d 31 5d 20 2b 20 64 65 6c 61 79 2a 28  LAY-1] + delay*(
4980: 63 6f 75 6e 74 2d 4e 44 45 4c 41 59 2d 31 29 3b  count-NDELAY-1);
4990: 0a 20 20 7d 0a 20 20 69 66 28 20 70 72 69 6f 72  .  }.  if( prior
49a0: 20 2b 20 64 65 6c 61 79 20 3e 20 74 69 6d 65 6f   + delay > timeo
49b0: 75 74 20 29 7b 0a 20 20 20 20 64 65 6c 61 79 20  ut ){.    delay 
49c0: 3d 20 74 69 6d 65 6f 75 74 20 2d 20 70 72 69 6f  = timeout - prio
49d0: 72 3b 0a 20 20 20 20 69 66 28 20 64 65 6c 61 79  r;.    if( delay
49e0: 3c 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  <=0 ) return 0;.
49f0: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 4f 73 53    }.  sqlite3OsS
4a00: 6c 65 65 70 28 64 65 6c 61 79 29 3b 0a 20 20 72  leep(delay);.  r
4a10: 65 74 75 72 6e 20 31 3b 0a 23 65 6c 73 65 0a 20  eturn 1;.#else. 
4a20: 20 69 6e 74 20 74 69 6d 65 6f 75 74 20 3d 20 28   int timeout = (
4a30: 69 6e 74 29 54 69 6d 65 6f 75 74 3b 0a 20 20 69  int)Timeout;.  i
4a40: 66 28 20 28 63 6f 75 6e 74 2b 31 29 2a 31 30 30  f( (count+1)*100
4a50: 30 20 3e 20 74 69 6d 65 6f 75 74 20 29 7b 0a 20  0 > timeout ){. 
4a60: 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d     return 0;.  }
4a70: 0a 20 20 73 71 6c 69 74 65 33 4f 73 53 6c 65 65  .  sqlite3OsSlee
4a80: 70 28 31 30 30 30 29 3b 0a 20 20 72 65 74 75 72  p(1000);.  retur
4a90: 6e 20 31 3b 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f  n 1;.#endif.}../
4aa0: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
4ab0: 65 20 73 65 74 73 20 74 68 65 20 62 75 73 79 20  e sets the busy 
4ac0: 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 6e 20  callback for an 
4ad0: 53 71 6c 69 74 65 20 64 61 74 61 62 61 73 65 20  Sqlite database 
4ae0: 74 6f 20 74 68 65 0a 2a 2a 20 67 69 76 65 6e 20  to the.** given 
4af0: 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f  callback functio
4b00: 6e 20 77 69 74 68 20 74 68 65 20 67 69 76 65 6e  n with the given
4b10: 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69 6e   argument..*/.in
4b20: 74 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 68  t sqlite3_busy_h
4b30: 61 6e 64 6c 65 72 28 0a 20 20 73 71 6c 69 74 65  andler(.  sqlite
4b40: 33 20 2a 64 62 2c 0a 20 20 69 6e 74 20 28 2a 78  3 *db,.  int (*x
4b50: 42 75 73 79 29 28 76 6f 69 64 2a 2c 69 6e 74 29  Busy)(void*,int)
4b60: 2c 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 0a 29  ,.  void *pArg.)
4b70: 7b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64  {.  db->busyHand
4b80: 6c 65 72 2e 78 46 75 6e 63 20 3d 20 78 42 75 73  ler.xFunc = xBus
4b90: 79 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e  y;.  db->busyHan
4ba0: 64 6c 65 72 2e 70 41 72 67 20 3d 20 70 41 72 67  dler.pArg = pArg
4bb0: 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ;.  return SQLIT
4bc0: 45 5f 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  E_OK;.}..#ifndef
4bd0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
4be0: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 2f  GRESS_CALLBACK./
4bf0: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
4c00: 65 20 73 65 74 73 20 74 68 65 20 70 72 6f 67 72  e sets the progr
4c10: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72  ess callback for
4c20: 20 61 6e 20 53 71 6c 69 74 65 20 64 61 74 61 62   an Sqlite datab
4c30: 61 73 65 20 74 6f 20 74 68 65 0a 2a 2a 20 67 69  ase to the.** gi
4c40: 76 65 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e  ven callback fun
4c50: 63 74 69 6f 6e 20 77 69 74 68 20 74 68 65 20 67  ction with the g
4c60: 69 76 65 6e 20 61 72 67 75 6d 65 6e 74 2e 20 54  iven argument. T
4c70: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
4c80: 62 61 63 6b 20 77 69 6c 6c 0a 2a 2a 20 62 65 20  back will.** be 
4c90: 69 6e 76 6f 6b 65 64 20 65 76 65 72 79 20 6e 4f  invoked every nO
4ca0: 70 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f 0a 76  ps opcodes..*/.v
4cb0: 6f 69 64 20 73 71 6c 69 74 65 33 5f 70 72 6f 67  oid sqlite3_prog
4cc0: 72 65 73 73 5f 68 61 6e 64 6c 65 72 28 0a 20 20  ress_handler(.  
4cd0: 73 71 6c 69 74 65 20 2a 64 62 2c 20 0a 20 20 69  sqlite *db, .  i
4ce0: 6e 74 20 6e 4f 70 73 2c 0a 20 20 69 6e 74 20 28  nt nOps,.  int (
4cf0: 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69 64  *xProgress)(void
4d00: 2a 29 2c 20 0a 20 20 76 6f 69 64 20 2a 70 41 72  *), .  void *pAr
4d10: 67 0a 29 7b 0a 20 20 69 66 28 20 6e 4f 70 73 3e  g.){.  if( nOps>
4d20: 30 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78 50 72  0 ){.    db->xPr
4d30: 6f 67 72 65 73 73 20 3d 20 78 50 72 6f 67 72 65  ogress = xProgre
4d40: 73 73 3b 0a 20 20 20 20 64 62 2d 3e 6e 50 72 6f  ss;.    db->nPro
4d50: 67 72 65 73 73 4f 70 73 20 3d 20 6e 4f 70 73 3b  gressOps = nOps;
4d60: 0a 20 20 20 20 64 62 2d 3e 70 50 72 6f 67 72 65  .    db->pProgre
4d70: 73 73 41 72 67 20 3d 20 70 41 72 67 3b 0a 20 20  ssArg = pArg;.  
4d80: 7d 65 6c 73 65 7b 0a 20 20 20 20 64 62 2d 3e 78  }else{.    db->x
4d90: 50 72 6f 67 72 65 73 73 20 3d 20 30 3b 0a 20 20  Progress = 0;.  
4da0: 20 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f    db->nProgressO
4db0: 70 73 20 3d 20 30 3b 0a 20 20 20 20 64 62 2d 3e  ps = 0;.    db->
4dc0: 70 50 72 6f 67 72 65 73 73 41 72 67 20 3d 20 30  pProgressArg = 0
4dd0: 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a  ;.  }.}.#endif..
4de0: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  ./*.** This rout
4df0: 69 6e 65 20 69 6e 73 74 61 6c 6c 73 20 61 20 64  ine installs a d
4e00: 65 66 61 75 6c 74 20 62 75 73 79 20 68 61 6e 64  efault busy hand
4e10: 6c 65 72 20 74 68 61 74 20 77 61 69 74 73 20 66  ler that waits f
4e20: 6f 72 20 74 68 65 0a 2a 2a 20 73 70 65 63 69 66  or the.** specif
4e30: 69 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 6d 69  ied number of mi
4e40: 6c 6c 69 73 65 63 6f 6e 64 73 20 62 65 66 6f 72  lliseconds befor
4e50: 65 20 72 65 74 75 72 6e 69 6e 67 20 30 2e 0a 2a  e returning 0..*
4e60: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 75  /.int sqlite3_bu
4e70: 73 79 5f 74 69 6d 65 6f 75 74 28 73 71 6c 69 74  sy_timeout(sqlit
4e80: 65 33 20 2a 64 62 2c 20 69 6e 74 20 6d 73 29 7b  e3 *db, int ms){
4e90: 0a 20 20 69 66 28 20 6d 73 3e 30 20 29 7b 0a 20  .  if( ms>0 ){. 
4ea0: 20 20 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f     sqlite3_busy_
4eb0: 68 61 6e 64 6c 65 72 28 64 62 2c 20 73 71 6c 69  handler(db, sqli
4ec0: 74 65 44 65 66 61 75 6c 74 42 75 73 79 43 61 6c  teDefaultBusyCal
4ed0: 6c 62 61 63 6b 2c 20 28 76 6f 69 64 2a 29 6d 73  lback, (void*)ms
4ee0: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
4ef0: 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 68 61 6e  sqlite3_busy_han
4f00: 64 6c 65 72 28 64 62 2c 20 30 2c 20 30 29 3b 0a  dler(db, 0, 0);.
4f10: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 53 51 4c    }.  return SQL
4f20: 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  ITE_OK;.}../*.**
4f30: 20 43 61 75 73 65 20 61 6e 79 20 70 65 6e 64 69   Cause any pendi
4f40: 6e 67 20 6f 70 65 72 61 74 69 6f 6e 20 74 6f 20  ng operation to 
4f50: 73 74 6f 70 20 61 74 20 69 74 73 20 65 61 72 6c  stop at its earl
4f60: 69 65 73 74 20 6f 70 70 6f 72 74 75 6e 69 74 79  iest opportunity
4f70: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
4f80: 33 5f 69 6e 74 65 72 72 75 70 74 28 73 71 6c 69  3_interrupt(sqli
4f90: 74 65 20 2a 64 62 29 7b 0a 20 20 64 62 2d 3e 66  te *db){.  db->f
4fa0: 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49  lags |= SQLITE_I
4fb0: 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 0a  nterrupt;.}../*.
4fc0: 2a 2a 20 57 69 6e 64 6f 77 73 20 73 79 73 74 65  ** Windows syste
4fd0: 6d 73 20 73 68 6f 75 6c 64 20 63 61 6c 6c 20 74  ms should call t
4fe0: 68 69 73 20 72 6f 75 74 69 6e 65 20 74 6f 20 66  his routine to f
4ff0: 72 65 65 20 6d 65 6d 6f 72 79 20 74 68 61 74 0a  ree memory that.
5000: 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64 20 69  ** is returned i
5010: 6e 20 74 68 65 20 69 6e 20 74 68 65 20 65 72 72  n the in the err
5020: 6d 73 67 20 70 61 72 61 6d 65 74 65 72 20 6f 66  msg parameter of
5030: 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28 29 20   sqlite3_open() 
5040: 77 68 65 6e 0a 2a 2a 20 53 51 4c 69 74 65 20 69  when.** SQLite i
5050: 73 20 61 20 44 4c 4c 2e 20 20 46 6f 72 20 73 6f  s a DLL.  For so
5060: 6d 65 20 72 65 61 73 6f 6e 2c 20 69 74 20 64 6f  me reason, it do
5070: 65 73 20 6e 6f 74 20 77 6f 72 6b 20 74 6f 20 63  es not work to c
5080: 61 6c 6c 20 66 72 65 65 28 29 0a 2a 2a 20 64 69  all free().** di
5090: 72 65 63 74 6c 79 2e 0a 2a 2a 0a 2a 2a 20 4e 6f  rectly..**.** No
50a0: 74 65 20 74 68 61 74 20 77 65 20 6e 65 65 64 20  te that we need 
50b0: 74 6f 20 63 61 6c 6c 20 66 72 65 65 28 29 20 6e  to call free() n
50c0: 6f 74 20 73 71 6c 69 74 65 46 72 65 65 28 29 20  ot sqliteFree() 
50d0: 68 65 72 65 2c 20 73 69 6e 63 65 20 65 76 65 72  here, since ever
50e0: 79 0a 2a 2a 20 73 74 72 69 6e 67 20 74 68 61 74  y.** string that
50f0: 20 69 73 20 65 78 70 6f 72 74 65 64 20 66 72 6f   is exported fro
5100: 6d 20 53 51 4c 69 74 65 20 73 68 6f 75 6c 64 20  m SQLite should 
5110: 68 61 76 65 20 61 6c 72 65 61 64 79 20 70 61 73  have already pas
5120: 73 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 73  sed through.** s
5130: 71 6c 69 74 65 33 53 74 72 52 65 61 6c 6c 6f 63  qlite3StrRealloc
5140: 28 29 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  ()..*/.void sqli
5150: 74 65 33 5f 66 72 65 65 28 63 68 61 72 20 2a 70  te3_free(char *p
5160: 29 7b 20 66 72 65 65 28 70 29 3b 20 7d 0a 0a 2f  ){ free(p); }../
5170: 2a 0a 2a 2a 20 43 72 65 61 74 65 20 6e 65 77 20  *.** Create new 
5180: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  user functions..
5190: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63  */.int sqlite3_c
51a0: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 0a  reate_function(.
51b0: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a 20    sqlite3 *db,. 
51c0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 75   const char *zFu
51d0: 6e 63 74 69 6f 6e 4e 61 6d 65 2c 0a 20 20 69 6e  nctionName,.  in
51e0: 74 20 6e 41 72 67 2c 0a 20 20 69 6e 74 20 65 6e  t nArg,.  int en
51f0: 63 2c 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  c,.  void *pUser
5200: 44 61 74 61 2c 0a 20 20 76 6f 69 64 20 28 2a 78  Data,.  void (*x
5210: 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f  Func)(sqlite3_co
5220: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
5230: 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20  e3_value **),.  
5240: 76 6f 69 64 20 28 2a 78 53 74 65 70 29 28 73 71  void (*xStep)(sq
5250: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
5260: 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
5270: 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 78   **),.  void (*x
5280: 46 69 6e 61 6c 29 28 73 71 6c 69 74 65 33 5f 63  Final)(sqlite3_c
5290: 6f 6e 74 65 78 74 2a 29 0a 29 7b 0a 20 20 46 75  ontext*).){.  Fu
52a0: 6e 63 44 65 66 20 2a 70 3b 0a 20 20 69 6e 74 20  ncDef *p;.  int 
52b0: 6e 4e 61 6d 65 3b 0a 0a 20 20 69 66 28 20 28 64  nName;..  if( (d
52c0: 62 3d 3d 30 20 7c 7c 20 7a 46 75 6e 63 74 69 6f  b==0 || zFunctio
52d0: 6e 4e 61 6d 65 3d 3d 30 20 7c 7c 20 73 71 6c 69  nName==0 || sqli
52e0: 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 28 64  te3SafetyCheck(d
52f0: 62 29 29 20 7c 7c 0a 20 20 20 20 20 20 28 78 46  b)) ||.      (xF
5300: 75 6e 63 20 26 26 20 28 78 46 69 6e 61 6c 20 7c  unc && (xFinal |
5310: 7c 20 78 53 74 65 70 29 29 20 7c 7c 20 0a 20 20  | xStep)) || .  
5320: 20 20 20 20 28 21 78 46 75 6e 63 20 26 26 20 28      (!xFunc && (
5330: 78 46 69 6e 61 6c 20 26 26 20 21 78 53 74 65 70  xFinal && !xStep
5340: 29 29 20 7c 7c 0a 20 20 20 20 20 20 28 21 78 46  )) ||.      (!xF
5350: 75 6e 63 20 26 26 20 28 21 78 46 69 6e 61 6c 20  unc && (!xFinal 
5360: 26 26 20 78 53 74 65 70 29 29 20 7c 7c 0a 20 20  && xStep)) ||.  
5370: 20 20 20 20 28 6e 41 72 67 3c 2d 31 20 7c 7c 20      (nArg<-1 || 
5380: 6e 41 72 67 3e 31 32 37 29 20 7c 7c 0a 20 20 20  nArg>127) ||.   
5390: 20 20 20 28 32 35 35 3c 28 6e 4e 61 6d 65 20 3d     (255<(nName =
53a0: 20 73 74 72 6c 65 6e 28 7a 46 75 6e 63 74 69 6f   strlen(zFunctio
53b0: 6e 4e 61 6d 65 29 29 29 20 29 7b 0a 20 20 20 20  nName))) ){.    
53c0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52  return SQLITE_ER
53d0: 52 4f 52 3b 0a 20 20 7d 0a 20 20 0a 20 20 2f 2a  ROR;.  }.  .  /*
53e0: 20 49 66 20 53 51 4c 49 54 45 5f 55 54 46 31 36   If SQLITE_UTF16
53f0: 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 73   is specified as
5400: 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 74 79   the encoding ty
5410: 70 65 2c 20 74 72 61 6e 73 66 6f 72 6d 20 74 68  pe, transform th
5420: 69 73 0a 20 20 2a 2a 20 74 6f 20 6f 6e 65 20 6f  is.  ** to one o
5430: 66 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  f SQLITE_UTF16LE
5440: 20 6f 72 20 53 51 4c 49 54 45 5f 55 54 46 31 36   or SQLITE_UTF16
5450: 42 45 20 75 73 69 6e 67 20 74 68 65 0a 20 20 2a  BE using the.  *
5460: 2a 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  * SQLITE_UTF16NA
5470: 54 49 56 45 20 6d 61 63 72 6f 2e 20 53 51 4c 49  TIVE macro. SQLI
5480: 54 45 5f 55 54 46 31 36 20 69 73 20 6e 6f 74 20  TE_UTF16 is not 
5490: 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 2e  used internally.
54a0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 66 20 53 51  .  **.  ** If SQ
54b0: 4c 49 54 45 5f 41 4e 59 20 69 73 20 73 70 65 63  LITE_ANY is spec
54c0: 69 66 69 65 64 2c 20 61 64 64 20 74 68 72 65 65  ified, add three
54d0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 65   versions of the
54e0: 20 66 75 6e 63 74 69 6f 6e 0a 20 20 2a 2a 20 74   function.  ** t
54f0: 6f 20 74 68 65 20 68 61 73 68 20 74 61 62 6c 65  o the hash table
5500: 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 65 6e 63  ..  */.  if( enc
5510: 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 20 29  ==SQLITE_UTF16 )
5520: 7b 0a 20 20 20 20 65 6e 63 20 3d 20 53 51 4c 49  {.    enc = SQLI
5530: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 3b 0a  TE_UTF16NATIVE;.
5540: 20 20 7d 65 6c 73 65 20 69 66 28 20 65 6e 63 3d    }else if( enc=
5550: 3d 53 51 4c 49 54 45 5f 41 4e 59 20 29 7b 0a 20  =SQLITE_ANY ){. 
5560: 20 20 20 69 6e 74 20 72 63 3b 0a 20 20 20 20 72     int rc;.    r
5570: 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61  c = sqlite3_crea
5580: 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20  te_function(db, 
5590: 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 6e  zFunctionName, n
55a0: 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
55b0: 2c 0a 20 20 20 20 20 20 20 20 20 70 55 73 65 72  ,.         pUser
55c0: 44 61 74 61 2c 20 78 46 75 6e 63 2c 20 78 53 74  Data, xFunc, xSt
55d0: 65 70 2c 20 78 46 69 6e 61 6c 29 3b 0a 20 20 20  ep, xFinal);.   
55e0: 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
55f0: 4f 4b 20 29 20 72 65 74 75 72 6e 20 72 63 3b 0a  OK ) return rc;.
5600: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
5610: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
5620: 28 64 62 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61  (db, zFunctionNa
5630: 6d 65 2c 20 6e 41 72 67 2c 20 53 51 4c 49 54 45  me, nArg, SQLITE
5640: 5f 55 54 46 31 36 4c 45 2c 0a 20 20 20 20 20 20  _UTF16LE,.      
5650: 20 20 70 55 73 65 72 44 61 74 61 2c 20 78 46 75    pUserData, xFu
5660: 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  nc, xStep, xFina
5670: 6c 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d  l);.    if( rc!=
5680: 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72 65 74 75  SQLITE_OK ) retu
5690: 72 6e 20 72 63 3b 0a 20 20 20 20 65 6e 63 20 3d  rn rc;.    enc =
56a0: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3b   SQLITE_UTF16BE;
56b0: 0a 20 20 7d 0a 0a 20 20 70 20 3d 20 73 71 6c 69  .  }..  p = sqli
56c0: 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28  te3FindFunction(
56d0: 64 62 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d  db, zFunctionNam
56e0: 65 2c 20 6e 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  e, nName, nArg, 
56f0: 65 6e 63 2c 20 31 29 3b 0a 20 20 69 66 28 20 70  enc, 1);.  if( p
5700: 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 31 3b 0a  ==0 ) return 1;.
5710: 20 20 70 2d 3e 78 46 75 6e 63 20 3d 20 78 46 75    p->xFunc = xFu
5720: 6e 63 3b 0a 20 20 70 2d 3e 78 53 74 65 70 20 3d  nc;.  p->xStep =
5730: 20 78 53 74 65 70 3b 0a 20 20 70 2d 3e 78 46 69   xStep;.  p->xFi
5740: 6e 61 6c 69 7a 65 20 3d 20 78 46 69 6e 61 6c 3b  nalize = xFinal;
5750: 0a 20 20 70 2d 3e 70 55 73 65 72 44 61 74 61 20  .  p->pUserData 
5760: 3d 20 70 55 73 65 72 44 61 74 61 3b 0a 20 20 72  = pUserData;.  r
5770: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b  eturn SQLITE_OK;
5780: 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63  .}.int sqlite3_c
5790: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 31 36  reate_function16
57a0: 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c  (.  sqlite3 *db,
57b0: 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a  .  const void *z
57c0: 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 0a 20 20  FunctionName,.  
57d0: 69 6e 74 20 6e 41 72 67 2c 0a 20 20 69 6e 74 20  int nArg,.  int 
57e0: 65 54 65 78 74 52 65 70 2c 0a 20 20 76 6f 69 64  eTextRep,.  void
57f0: 20 2a 70 55 73 65 72 44 61 74 61 2c 0a 20 20 76   *pUserData,.  v
5800: 6f 69 64 20 28 2a 78 46 75 6e 63 29 28 73 71 6c  oid (*xFunc)(sql
5810: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
5820: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
5830: 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 78 53 74  *),.  void (*xSt
5840: 65 70 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ep)(sqlite3_cont
5850: 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
5860: 5f 76 61 6c 75 65 2a 2a 29 2c 0a 20 20 76 6f 69  _value**),.  voi
5870: 64 20 28 2a 78 46 69 6e 61 6c 29 28 73 71 6c 69  d (*xFinal)(sqli
5880: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 0a 29 7b  te3_context*).){
5890: 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 68 61  .  int rc;.  cha
58a0: 72 20 63 6f 6e 73 74 20 2a 7a 46 75 6e 63 38 3b  r const *zFunc8;
58b0: 0a 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  ..  sqlite3_valu
58c0: 65 20 2a 70 54 6d 70 20 3d 20 73 71 6c 69 74 65  e *pTmp = sqlite
58d0: 33 47 65 74 54 72 61 6e 73 69 65 6e 74 56 61 6c  3GetTransientVal
58e0: 75 65 28 64 62 29 3b 0a 20 20 73 71 6c 69 74 65  ue(db);.  sqlite
58f0: 33 56 61 6c 75 65 53 65 74 53 74 72 28 70 54 6d  3ValueSetStr(pTm
5900: 70 2c 20 2d 31 2c 20 7a 46 75 6e 63 74 69 6f 6e  p, -1, zFunction
5910: 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55 54 46  Name, SQLITE_UTF
5920: 31 36 4e 41 54 49 56 45 2c 53 51 4c 49 54 45 5f  16NATIVE,SQLITE_
5930: 53 54 41 54 49 43 29 3b 0a 20 20 7a 46 75 6e 63  STATIC);.  zFunc
5940: 38 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65  8 = sqlite3Value
5950: 54 65 78 74 28 70 54 6d 70 2c 20 53 51 4c 49 54  Text(pTmp, SQLIT
5960: 45 5f 55 54 46 38 29 3b 0a 0a 20 20 69 66 28 20  E_UTF8);..  if( 
5970: 21 7a 46 75 6e 63 38 20 29 7b 0a 20 20 20 20 72  !zFunc8 ){.    r
5980: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d  eturn SQLITE_NOM
5990: 45 4d 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73  EM;.  }.  rc = s
59a0: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
59b0: 6e 63 74 69 6f 6e 28 64 62 2c 20 7a 46 75 6e 63  nction(db, zFunc
59c0: 38 2c 20 6e 41 72 67 2c 20 65 54 65 78 74 52 65  8, nArg, eTextRe
59d0: 70 2c 20 0a 20 20 20 20 20 20 70 55 73 65 72 44  p, .      pUserD
59e0: 61 74 61 2c 20 78 46 75 6e 63 2c 20 78 53 74 65  ata, xFunc, xSte
59f0: 70 2c 20 78 46 69 6e 61 6c 29 3b 0a 20 20 72 65  p, xFinal);.  re
5a00: 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a  turn rc;.}../*.*
5a10: 2a 20 52 65 67 69 73 74 65 72 20 61 20 74 72 61  * Register a tra
5a20: 63 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68  ce function.  Th
5a30: 65 20 70 41 72 67 20 66 72 6f 6d 20 74 68 65 20  e pArg from the 
5a40: 70 72 65 76 69 6f 75 73 6c 79 20 72 65 67 69 73  previously regis
5a50: 74 65 72 65 64 20 74 72 61 63 65 0a 2a 2a 20 69  tered trace.** i
5a60: 73 20 72 65 74 75 72 6e 65 64 2e 20 20 0a 2a 2a  s returned.  .**
5a70: 0a 2a 2a 20 41 20 4e 55 4c 4c 20 74 72 61 63 65  .** A NULL trace
5a80: 20 66 75 6e 63 74 69 6f 6e 20 6d 65 61 6e 73 20   function means 
5a90: 74 68 61 74 20 6e 6f 20 74 72 61 63 69 6e 67 20  that no tracing 
5aa0: 69 73 20 65 78 65 63 75 74 65 73 2e 20 20 41 20  is executes.  A 
5ab0: 6e 6f 6e 2d 4e 55 4c 4c 0a 2a 2a 20 74 72 61 63  non-NULL.** trac
5ac0: 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  e is a pointer t
5ad0: 6f 20 61 20 66 75 6e 63 74 69 6f 6e 20 74 68 61  o a function tha
5ae0: 74 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 74 20  t is invoked at 
5af0: 74 68 65 20 73 74 61 72 74 20 6f 66 20 65 61 63  the start of eac
5b00: 68 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 65 78 65  h.** sqlite3_exe
5b10: 63 28 29 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71  c()..*/.void *sq
5b20: 6c 69 74 65 33 5f 74 72 61 63 65 28 73 71 6c 69  lite3_trace(sqli
5b30: 74 65 20 2a 64 62 2c 20 76 6f 69 64 20 28 2a 78  te *db, void (*x
5b40: 54 72 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f 6e  Trace)(void*,con
5b50: 73 74 20 63 68 61 72 2a 29 2c 20 76 6f 69 64 20  st char*), void 
5b60: 2a 70 41 72 67 29 7b 0a 20 20 76 6f 69 64 20 2a  *pArg){.  void *
5b70: 70 4f 6c 64 20 3d 20 64 62 2d 3e 70 54 72 61 63  pOld = db->pTrac
5b80: 65 41 72 67 3b 0a 20 20 64 62 2d 3e 78 54 72 61  eArg;.  db->xTra
5b90: 63 65 20 3d 20 78 54 72 61 63 65 3b 0a 20 20 64  ce = xTrace;.  d
5ba0: 62 2d 3e 70 54 72 61 63 65 41 72 67 20 3d 20 70  b->pTraceArg = p
5bb0: 41 72 67 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f  Arg;.  return pO
5bc0: 6c 64 3b 0a 7d 0a 0a 2f 2a 2a 2a 20 45 58 50 45  ld;.}../*** EXPE
5bd0: 52 49 4d 45 4e 54 41 4c 20 2a 2a 2a 0a 2a 2a 0a  RIMENTAL ***.**.
5be0: 2a 2a 20 52 65 67 69 73 74 65 72 20 61 20 66 75  ** Register a fu
5bf0: 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 69 6e 76  nction to be inv
5c00: 6f 6b 65 64 20 77 68 65 6e 20 61 20 74 72 61 6e  oked when a tran
5c10: 73 61 63 74 69 6f 6e 20 63 6f 6d 6d 65 6e 74 73  saction comments
5c20: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 66  ..** If either f
5c30: 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
5c40: 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74  non-zero, then t
5c50: 68 65 20 63 6f 6d 6d 69 74 20 62 65 63 6f 6d 65  he commit become
5c60: 73 20 61 0a 2a 2a 20 72 6f 6c 6c 62 61 63 6b 2e  s a.** rollback.
5c70: 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  .*/.void *sqlite
5c80: 33 5f 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 0a 20  3_commit_hook(. 
5c90: 20 73 71 6c 69 74 65 20 2a 64 62 2c 20 20 20 20   sqlite *db,    
5ca0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 74             /* At
5cb0: 74 61 63 68 20 74 68 65 20 68 6f 6f 6b 20 74 6f  tach the hook to
5cc0: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a   this database *
5cd0: 2f 0a 20 20 69 6e 74 20 28 2a 78 43 61 6c 6c 62  /.  int (*xCallb
5ce0: 61 63 6b 29 28 76 6f 69 64 2a 29 2c 20 20 2f 2a  ack)(void*),  /*
5cf0: 20 46 75 6e 63 74 69 6f 6e 20 74 6f 20 69 6e 76   Function to inv
5d00: 6f 6b 65 20 6f 6e 20 65 61 63 68 20 63 6f 6d 6d  oke on each comm
5d10: 69 74 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41  it */.  void *pA
5d20: 72 67 20 20 20 20 20 20 20 20 20 20 20 20 20 20  rg              
5d30: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
5d40: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f   the function */
5d50: 0a 29 7b 0a 20 20 76 6f 69 64 20 2a 70 4f 6c 64  .){.  void *pOld
5d60: 20 3d 20 64 62 2d 3e 70 43 6f 6d 6d 69 74 41 72   = db->pCommitAr
5d70: 67 3b 0a 20 20 64 62 2d 3e 78 43 6f 6d 6d 69 74  g;.  db->xCommit
5d80: 43 61 6c 6c 62 61 63 6b 20 3d 20 78 43 61 6c 6c  Callback = xCall
5d90: 62 61 63 6b 3b 0a 20 20 64 62 2d 3e 70 43 6f 6d  back;.  db->pCom
5da0: 6d 69 74 41 72 67 20 3d 20 70 41 72 67 3b 0a 20  mitArg = pArg;. 
5db0: 20 72 65 74 75 72 6e 20 70 4f 6c 64 3b 0a 7d 0a   return pOld;.}.
5dc0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ../*.** This rou
5dd0: 74 69 6e 65 20 69 73 20 63 61 6c 6c 65 64 20 74  tine is called t
5de0: 6f 20 63 72 65 61 74 65 20 61 20 63 6f 6e 6e 65  o create a conne
5df0: 63 74 69 6f 6e 20 74 6f 20 61 20 64 61 74 61 62  ction to a datab
5e00: 61 73 65 20 42 54 72 65 65 0a 2a 2a 20 64 72 69  ase BTree.** dri
5e10: 76 65 72 2e 20 20 49 66 20 7a 46 69 6c 65 6e 61  ver.  If zFilena
5e20: 6d 65 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  me is the name o
5e30: 66 20 61 20 66 69 6c 65 2c 20 74 68 65 6e 20 74  f a file, then t
5e40: 68 61 74 20 66 69 6c 65 20 69 73 0a 2a 2a 20 6f  hat file is.** o
5e50: 70 65 6e 65 64 20 61 6e 64 20 75 73 65 64 2e 20  pened and used. 
5e60: 20 49 66 20 7a 46 69 6c 65 6e 61 6d 65 20 69 73   If zFilename is
5e70: 20 74 68 65 20 6d 61 67 69 63 20 6e 61 6d 65 20   the magic name 
5e80: 22 3a 6d 65 6d 6f 72 79 3a 22 20 74 68 65 6e 0a  ":memory:" then.
5e90: 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ** the database 
5ea0: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 6d 65 6d  is stored in mem
5eb0: 6f 72 79 20 28 61 6e 64 20 69 73 20 74 68 75 73  ory (and is thus
5ec0: 20 66 6f 72 67 6f 74 74 65 6e 20 61 73 20 73 6f   forgotten as so
5ed0: 6f 6e 20 61 73 0a 2a 2a 20 74 68 65 20 63 6f 6e  on as.** the con
5ee0: 6e 65 63 74 69 6f 6e 20 69 73 20 63 6c 6f 73 65  nection is close
5ef0: 64 2e 29 20 20 49 66 20 7a 46 69 6c 65 6e 61 6d  d.)  If zFilenam
5f00: 65 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  e is NULL then t
5f10: 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 69  he database.** i
5f20: 73 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20  s for temporary 
5f30: 75 73 65 20 6f 6e 6c 79 20 61 6e 64 20 69 73 20  use only and is 
5f40: 64 65 6c 65 74 65 64 20 61 73 20 73 6f 6f 6e 20  deleted as soon 
5f50: 61 73 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  as the connectio
5f60: 6e 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64 2e 0a  n.** is closed..
5f70: 2a 2a 0a 2a 2a 20 41 20 74 65 6d 70 6f 72 61 72  **.** A temporar
5f80: 79 20 64 61 74 61 62 61 73 65 20 63 61 6e 20 62  y database can b
5f90: 65 20 65 69 74 68 65 72 20 61 20 64 69 73 6b 20  e either a disk 
5fa0: 66 69 6c 65 20 28 74 68 61 74 20 69 73 20 61 75  file (that is au
5fb0: 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20 64  tomatically.** d
5fc0: 65 6c 65 74 65 64 20 77 68 65 6e 20 74 68 65 20  eleted when the 
5fd0: 66 69 6c 65 20 69 73 20 63 6c 6f 73 65 64 29 20  file is closed) 
5fe0: 6f 72 20 61 20 73 65 74 20 6f 66 20 72 65 64 2d  or a set of red-
5ff0: 62 6c 61 63 6b 20 74 72 65 65 73 20 68 65 6c 64  black trees held
6000: 20 69 6e 20 6d 65 6d 6f 72 79 2c 0a 2a 2a 20 64   in memory,.** d
6010: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20  epending on the 
6020: 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 54 45  values of the TE
6030: 4d 50 5f 53 54 4f 52 45 20 63 6f 6d 70 69 6c 65  MP_STORE compile
6040: 2d 74 69 6d 65 20 6d 61 63 72 6f 20 61 6e 64 20  -time macro and 
6050: 74 68 65 0a 2a 2a 20 64 62 2d 3e 74 65 6d 70 5f  the.** db->temp_
6060: 73 74 6f 72 65 20 76 61 72 69 61 62 6c 65 2c 20  store variable, 
6070: 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65  according to the
6080: 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 68 61 72 74   following chart
6090: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 54 45  :.**.**       TE
60a0: 4d 50 5f 53 54 4f 52 45 20 20 20 20 20 64 62 2d  MP_STORE     db-
60b0: 3e 74 65 6d 70 5f 73 74 6f 72 65 20 20 20 20 20  >temp_store     
60c0: 4c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 65 6d 70  Location of temp
60d0: 6f 72 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a  orary database.*
60e0: 2a 20 20 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d  *       --------
60f0: 2d 2d 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d  --     ---------
6100: 2d 2d 2d 2d 2d 20 20 20 20 20 2d 2d 2d 2d 2d 2d  -----     ------
6110: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6120: 2d 2d 2d 2d 2d 2d 2d 2d 0a 2a 2a 20 20 20 20 20  --------.**     
6130: 20 20 20 20 20 20 30 20 20 20 20 20 20 20 20 20        0         
6140: 20 20 20 20 20 20 61 6e 79 20 20 20 20 20 20 20        any       
6150: 20 20 20 20 20 20 66 69 6c 65 0a 2a 2a 20 20 20        file.**   
6160: 20 20 20 20 20 20 20 20 31 20 20 20 20 20 20 20          1       
6170: 20 20 20 20 20 20 20 20 20 31 20 20 20 20 20 20           1      
6180: 20 20 20 20 20 20 20 20 66 69 6c 65 0a 2a 2a 20          file.** 
6190: 20 20 20 20 20 20 20 20 20 20 31 20 20 20 20 20            1     
61a0: 20 20 20 20 20 20 20 20 20 20 20 32 20 20 20 20             2    
61b0: 20 20 20 20 20 20 20 20 20 20 6d 65 6d 6f 72 79            memory
61c0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 31 20  .**           1 
61d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30                 0
61e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
61f0: 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  le.**           
6200: 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2               
6210: 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20   1              
6220: 66 69 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  file.**         
6230: 20 20 32 20 20 20 20 20 20 20 20 20 20 20 20 20    2             
6240: 20 20 20 32 20 20 20 20 20 20 20 20 20 20 20 20     2            
6250: 20 20 6d 65 6d 6f 72 79 0a 2a 2a 20 20 20 20 20    memory.**     
6260: 20 20 20 20 20 20 32 20 20 20 20 20 20 20 20 20        2         
6270: 20 20 20 20 20 20 20 30 20 20 20 20 20 20 20 20         0        
6280: 20 20 20 20 20 20 6d 65 6d 6f 72 79 0a 2a 2a 20        memory.** 
6290: 20 20 20 20 20 20 20 20 20 20 33 20 20 20 20 20            3     
62a0: 20 20 20 20 20 20 20 20 20 20 61 6e 79 20 20 20            any   
62b0: 20 20 20 20 20 20 20 20 20 20 6d 65 6d 6f 72 79            memory
62c0: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  .*/.int sqlite3B
62d0: 74 72 65 65 46 61 63 74 6f 72 79 28 0a 20 20 63  treeFactory(.  c
62e0: 6f 6e 73 74 20 73 71 6c 69 74 65 20 2a 64 62 2c  onst sqlite *db,
62f0: 09 20 20 20 20 2f 2a 20 4d 61 69 6e 20 64 61 74  .    /* Main dat
6300: 61 62 61 73 65 20 77 68 65 6e 20 6f 70 65 6e 69  abase when openi
6310: 6e 67 20 61 75 78 20 6f 74 68 65 72 77 69 73 65  ng aux otherwise
6320: 20 30 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68   0 */.  const ch
6330: 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20 20  ar *zFilename,  
6340: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
6350: 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67   file containing
6360: 20 74 68 65 20 42 54 72 65 65 20 64 61 74 61 62   the BTree datab
6370: 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6f 6d 69  ase */.  int omi
6380: 74 4a 6f 75 72 6e 61 6c 2c 20 20 20 20 20 20 20  tJournal,       
6390: 20 20 20 2f 2a 20 69 66 20 54 52 55 45 20 74 68     /* if TRUE th
63a0: 65 6e 20 64 6f 20 6e 6f 74 20 6a 6f 75 72 6e 61  en do not journa
63b0: 6c 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20  l this file */. 
63c0: 20 69 6e 74 20 6e 43 61 63 68 65 2c 20 20 20 20   int nCache,    
63d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f             /* Ho
63e0: 77 20 6d 61 6e 79 20 70 61 67 65 73 20 69 6e 20  w many pages in 
63f0: 74 68 65 20 70 61 67 65 20 63 61 63 68 65 20 2a  the page cache *
6400: 2f 0a 20 20 42 74 72 65 65 20 2a 2a 70 70 42 74  /.  Btree **ppBt
6410: 72 65 65 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ree           /*
6420: 20 50 6f 69 6e 74 65 72 20 74 6f 20 6e 65 77 20   Pointer to new 
6430: 42 74 72 65 65 20 6f 62 6a 65 63 74 20 77 72 69  Btree object wri
6440: 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 29 7b 0a  tten here */.){.
6450: 20 20 69 6e 74 20 62 74 72 65 65 5f 66 6c 61 67    int btree_flag
6460: 73 20 3d 20 30 3b 0a 20 20 0a 20 20 61 73 73 65  s = 0;.  .  asse
6470: 72 74 28 20 70 70 42 74 72 65 65 20 21 3d 20 30  rt( ppBtree != 0
6480: 29 3b 0a 20 20 69 66 28 20 6f 6d 69 74 4a 6f 75  );.  if( omitJou
6490: 72 6e 61 6c 20 29 7b 0a 20 20 20 20 62 74 72 65  rnal ){.    btre
64a0: 65 5f 66 6c 61 67 73 20 7c 3d 20 42 54 52 45 45  e_flags |= BTREE
64b0: 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 3b 0a 20  _OMIT_JOURNAL;. 
64c0: 20 7d 0a 20 20 69 66 28 20 21 7a 46 69 6c 65 6e   }.  if( !zFilen
64d0: 61 6d 65 20 29 7b 0a 20 20 20 20 62 74 72 65 65  ame ){.    btree
64e0: 5f 66 6c 61 67 73 20 7c 3d 20 42 54 52 45 45 5f  _flags |= BTREE_
64f0: 4d 45 4d 4f 52 59 3b 0a 20 20 7d 0a 0a 20 20 72  MEMORY;.  }..  r
6500: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 42 74 72  eturn sqlite3Btr
6510: 65 65 4f 70 65 6e 28 7a 46 69 6c 65 6e 61 6d 65  eeOpen(zFilename
6520: 2c 20 70 70 42 74 72 65 65 2c 20 6e 43 61 63 68  , ppBtree, nCach
6530: 65 2c 20 62 74 72 65 65 5f 66 6c 61 67 73 2c 0a  e, btree_flags,.
6540: 20 20 20 20 20 20 28 76 6f 69 64 20 2a 29 26 64        (void *)&d
6550: 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 29 3b  b->busyHandler);
6560: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  .}../*.** Return
6570: 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 45   UTF-8 encoded E
6580: 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20  nglish language 
6590: 65 78 70 6c 61 6e 61 74 69 6f 6e 20 6f 66 20 74  explanation of t
65a0: 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 0a 2a  he most recent.*
65b0: 2a 20 65 72 72 6f 72 2e 0a 2a 2f 0a 63 6f 6e 73  * error..*/.cons
65c0: 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f  t char *sqlite3_
65d0: 65 72 72 6d 73 67 28 73 71 6c 69 74 65 33 20 2a  errmsg(sqlite3 *
65e0: 64 62 29 7b 0a 20 20 69 66 28 20 21 64 62 20 7c  db){.  if( !db |
65f0: 7c 20 21 64 62 2d 3e 70 45 72 72 20 29 7b 0a 20  | !db->pErr ){. 
6600: 20 20 20 2f 2a 20 49 66 20 64 62 20 69 73 20 4e     /* If db is N
6610: 55 4c 4c 2c 20 74 68 65 6e 20 61 73 73 75 6d 65  ULL, then assume
6620: 20 74 68 61 74 20 61 20 6d 61 6c 6c 6f 63 28 29   that a malloc()
6630: 20 66 61 69 6c 65 64 20 64 75 72 69 6e 67 20 61   failed during a
6640: 6e 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33  n.    ** sqlite3
6650: 5f 6f 70 65 6e 28 29 20 63 61 6c 6c 2e 0a 20 20  _open() call..  
6660: 20 20 2a 2f 0a 20 20 20 20 72 65 74 75 72 6e 20    */.    return 
6670: 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 53 51  sqlite3ErrStr(SQ
6680: 4c 49 54 45 5f 4e 4f 4d 45 4d 29 3b 0a 20 20 7d  LITE_NOMEM);.  }
6690: 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 5f  .  if( !sqlite3_
66a0: 76 61 6c 75 65 5f 74 65 78 74 28 64 62 2d 3e 70  value_text(db->p
66b0: 45 72 72 29 20 29 7b 0a 20 20 20 20 72 65 74 75  Err) ){.    retu
66c0: 72 6e 20 73 71 6c 69 74 65 33 45 72 72 53 74 72  rn sqlite3ErrStr
66d0: 28 64 62 2d 3e 65 72 72 43 6f 64 65 29 3b 0a 20  (db->errCode);. 
66e0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69   }.  return sqli
66f0: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 64  te3_value_text(d
6700: 62 2d 3e 70 45 72 72 29 3b 0a 7d 0a 0a 2f 2a 0a  b->pErr);.}../*.
6710: 2a 2a 20 52 65 74 75 72 6e 20 55 54 46 2d 31 36  ** Return UTF-16
6720: 20 65 6e 63 6f 64 65 64 20 45 6e 67 6c 69 73 68   encoded English
6730: 20 6c 61 6e 67 75 61 67 65 20 65 78 70 6c 61 6e   language explan
6740: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6d 6f 73  ation of the mos
6750: 74 20 72 65 63 65 6e 74 0a 2a 2a 20 65 72 72 6f  t recent.** erro
6760: 72 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 76 6f 69 64  r..*/.const void
6770: 20 2a 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67   *sqlite3_errmsg
6780: 31 36 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b  16(sqlite3 *db){
6790: 0a 20 20 2f 2a 20 42 65 63 61 75 73 65 20 61 6c  .  /* Because al
67a0: 6c 20 74 68 65 20 63 68 61 72 61 63 74 65 72 73  l the characters
67b0: 20 69 6e 20 74 68 65 20 73 74 72 69 6e 67 20 61   in the string a
67c0: 72 65 20 69 6e 20 74 68 65 20 75 6e 69 63 6f 64  re in the unicod
67d0: 65 0a 20 20 2a 2a 20 72 61 6e 67 65 20 30 78 30  e.  ** range 0x0
67e0: 30 2d 30 78 46 46 2c 20 69 66 20 77 65 20 70 61  0-0xFF, if we pa
67f0: 64 20 74 68 65 20 62 69 67 2d 65 6e 64 69 61 6e  d the big-endian
6800: 20 73 74 72 69 6e 67 20 77 69 74 68 20 61 20 0a   string with a .
6810: 20 20 2a 2a 20 7a 65 72 6f 20 62 79 74 65 2c 20    ** zero byte, 
6820: 77 65 20 63 61 6e 20 6f 62 74 61 69 6e 20 74 68  we can obtain th
6830: 65 20 6c 69 74 74 6c 65 2d 65 6e 64 69 61 6e 20  e little-endian 
6840: 73 74 72 69 6e 67 20 77 69 74 68 0a 20 20 2a 2a  string with.  **
6850: 20 26 62 69 67 5f 65 6e 64 69 61 6e 5b 31 5d 2e   &big_endian[1].
6860: 0a 20 20 2a 2f 0a 20 20 73 74 61 74 69 63 20 63  .  */.  static c
6870: 68 61 72 20 6f 75 74 4f 66 4d 65 6d 42 65 5b 5d  har outOfMemBe[]
6880: 20 3d 20 7b 0a 20 20 20 20 30 2c 20 27 6f 27 2c   = {.    0, 'o',
6890: 20 30 2c 20 27 75 27 2c 20 30 2c 20 27 74 27 2c   0, 'u', 0, 't',
68a0: 20 30 2c 20 27 20 27 2c 20 0a 20 20 20 20 30 2c   0, ' ', .    0,
68b0: 20 27 6f 27 2c 20 30 2c 20 27 66 27 2c 20 30 2c   'o', 0, 'f', 0,
68c0: 20 27 20 27 2c 20 0a 20 20 20 20 30 2c 20 27 6d   ' ', .    0, 'm
68d0: 27 2c 20 30 2c 20 27 65 27 2c 20 30 2c 20 27 6d  ', 0, 'e', 0, 'm
68e0: 27 2c 20 30 2c 20 27 6f 27 2c 20 30 2c 20 27 72  ', 0, 'o', 0, 'r
68f0: 27 2c 20 30 2c 20 27 79 27 2c 20 30 2c 20 30 2c  ', 0, 'y', 0, 0,
6900: 20 30 0a 20 20 7d 3b 0a 0a 20 20 69 66 28 20 64   0.  };..  if( d
6910: 62 20 26 26 20 64 62 2d 3e 70 45 72 72 20 29 7b  b && db->pErr ){
6920: 0a 20 20 20 20 69 66 28 20 21 73 71 6c 69 74 65  .    if( !sqlite
6930: 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 28 64  3_value_text16(d
6940: 62 2d 3e 70 45 72 72 29 20 29 7b 0a 20 20 20 20  b->pErr) ){.    
6950: 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65    sqlite3ValueSe
6960: 74 53 74 72 28 64 62 2d 3e 70 45 72 72 2c 20 2d  tStr(db->pErr, -
6970: 31 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74 72  1, sqlite3ErrStr
6980: 28 64 62 2d 3e 65 72 72 43 6f 64 65 29 2c 0a 20  (db->errCode),. 
6990: 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
69a0: 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41  UTF8, SQLITE_STA
69b0: 54 49 43 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  TIC);.    }.    
69c0: 69 66 28 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  if( sqlite3_valu
69d0: 65 5f 74 65 78 74 31 36 28 64 62 2d 3e 70 45 72  e_text16(db->pEr
69e0: 72 29 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75  r) ){.      retu
69f0: 72 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  rn sqlite3_value
6a00: 5f 74 65 78 74 31 36 28 64 62 2d 3e 70 45 72 72  _text16(db->pErr
6a10: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 20 0a 0a  );.    }.  }  ..
6a20: 20 20 2f 2a 20 49 66 20 64 62 20 69 73 20 4e 55    /* If db is NU
6a30: 4c 4c 2c 20 74 68 65 6e 20 61 73 73 75 6d 65 20  LL, then assume 
6a40: 74 68 61 74 20 61 20 6d 61 6c 6c 6f 63 28 29 20  that a malloc() 
6a50: 66 61 69 6c 65 64 20 64 75 72 69 6e 67 20 61 6e  failed during an
6a60: 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 6f 70  .  ** sqlite3_op
6a70: 65 6e 28 29 20 63 61 6c 6c 2e 20 57 65 20 68 61  en() call. We ha
6a80: 76 65 20 61 20 73 74 61 74 69 63 20 76 65 72 73  ve a static vers
6a90: 69 6f 6e 20 6f 66 20 74 68 65 20 73 74 72 69 6e  ion of the strin
6aa0: 67 20 0a 20 20 2a 2a 20 22 6f 75 74 20 6f 66 20  g .  ** "out of 
6ab0: 6d 65 6d 6f 72 79 22 20 65 6e 63 6f 64 65 64 20  memory" encoded 
6ac0: 75 73 69 6e 67 20 55 54 46 2d 31 36 20 6a 75 73  using UTF-16 jus
6ad0: 74 20 66 6f 72 20 74 68 69 73 20 70 75 72 70 6f  t for this purpo
6ae0: 73 65 2e 0a 20 20 2a 2f 0a 20 20 72 65 74 75 72  se..  */.  retur
6af0: 6e 20 28 76 6f 69 64 20 2a 29 28 26 6f 75 74 4f  n (void *)(&outO
6b00: 66 4d 65 6d 42 65 5b 53 51 4c 49 54 45 5f 55 54  fMemBe[SQLITE_UT
6b10: 46 31 36 4e 41 54 49 56 45 3d 3d 53 51 4c 49 54  F16NATIVE==SQLIT
6b20: 45 5f 55 54 46 31 36 4c 45 3f 31 3a 30 5d 29 3b  E_UTF16LE?1:0]);
6b30: 0a 7d 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .}..int sqlite3_
6b40: 65 72 72 63 6f 64 65 28 73 71 6c 69 74 65 33 20  errcode(sqlite3 
6b50: 2a 64 62 29 7b 0a 20 20 69 66 28 20 21 64 62 20  *db){.  if( !db 
6b60: 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  ) return SQLITE_
6b70: 4e 4f 4d 45 4d 3b 0a 20 20 72 65 74 75 72 6e 20  NOMEM;.  return 
6b80: 64 62 2d 3e 65 72 72 43 6f 64 65 3b 0a 7d 0a 0a  db->errCode;.}..
6b90: 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 73 63 68 65  /*.** Check sche
6ba0: 6d 61 20 63 6f 6f 6b 69 65 73 20 69 6e 20 61 6c  ma cookies in al
6bb0: 6c 20 64 61 74 61 62 61 73 65 73 20 65 78 63 65  l databases exce
6bc0: 70 74 20 54 45 4d 50 2e 20 20 49 66 20 61 6e 79  pt TEMP.  If any
6bd0: 20 63 6f 6f 6b 69 65 20 69 73 20 6f 75 74 0a 2a   cookie is out.*
6be0: 2a 20 6f 66 20 64 61 74 65 2c 20 72 65 74 75 72  * of date, retur
6bf0: 6e 20 30 2e 20 20 49 66 20 61 6c 6c 20 73 63 68  n 0.  If all sch
6c00: 65 6d 61 20 63 6f 6f 6b 69 65 73 20 61 72 65 20  ema cookies are 
6c10: 63 75 72 72 65 6e 74 2c 20 72 65 74 75 72 6e 20  current, return 
6c20: 31 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  1..*/.static int
6c30: 20 73 63 68 65 6d 61 49 73 56 61 6c 69 64 28 73   schemaIsValid(s
6c40: 71 6c 69 74 65 20 2a 64 62 29 7b 0a 20 20 69 6e  qlite *db){.  in
6c50: 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 72 63 3b  t iDb;.  int rc;
6c60: 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 63 75 72  .  BtCursor *cur
6c70: 54 65 6d 70 3b 0a 20 20 69 6e 74 20 63 6f 6f 6b  Temp;.  int cook
6c80: 69 65 3b 0a 20 20 69 6e 74 20 61 6c 6c 4f 6b 20  ie;.  int allOk 
6c90: 3d 20 31 3b 0a 0a 20 20 66 6f 72 28 69 44 62 3d  = 1;..  for(iDb=
6ca0: 30 3b 20 61 6c 6c 4f 6b 20 26 26 20 69 44 62 3c  0; allOk && iDb<
6cb0: 64 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b 29 7b  db->nDb; iDb++){
6cc0: 0a 20 20 20 20 42 74 72 65 65 20 2a 70 42 74 3b  .    Btree *pBt;
6cd0: 0a 20 20 20 20 69 66 28 20 69 44 62 3d 3d 31 20  .    if( iDb==1 
6ce0: 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20  ) continue;.    
6cf0: 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 69 44  pBt = db->aDb[iD
6d00: 62 5d 2e 70 42 74 3b 0a 20 20 20 20 69 66 28 20  b].pBt;.    if( 
6d10: 70 42 74 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75  pBt==0 ) continu
6d20: 65 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  e;.    rc = sqli
6d30: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
6d40: 42 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c  Bt, MASTER_ROOT,
6d50: 20 30 2c 20 30 2c 20 30 2c 20 26 63 75 72 54 65   0, 0, 0, &curTe
6d60: 6d 70 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  mp);.    if( rc=
6d70: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
6d80: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
6d90: 42 74 72 65 65 47 65 74 4d 65 74 61 28 70 42 74  BtreeGetMeta(pBt
6da0: 2c 20 31 2c 20 26 63 6f 6f 6b 69 65 29 3b 0a 20  , 1, &cookie);. 
6db0: 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
6dc0: 49 54 45 5f 4f 4b 20 26 26 20 63 6f 6f 6b 69 65  ITE_OK && cookie
6dd0: 21 3d 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 73  !=db->aDb[iDb].s
6de0: 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 29 7b 0a  chema_cookie ){.
6df0: 20 20 20 20 20 20 20 20 61 6c 6c 4f 6b 20 3d 20          allOk = 
6e00: 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  0;.      }.     
6e10: 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 6f   sqlite3BtreeClo
6e20: 73 65 43 75 72 73 6f 72 28 63 75 72 54 65 6d 70  seCursor(curTemp
6e30: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72  );.    }.  }.  r
6e40: 65 74 75 72 6e 20 61 6c 6c 4f 6b 3b 0a 7d 0a 0a  eturn allOk;.}..
6e50: 2f 2a 0a 2a 2a 20 43 6f 6d 70 69 6c 65 20 74 68  /*.** Compile th
6e60: 65 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20  e UTF-8 encoded 
6e70: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 7a 53  SQL statement zS
6e80: 71 6c 20 69 6e 74 6f 20 61 20 73 74 61 74 65 6d  ql into a statem
6e90: 65 6e 74 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 69  ent handle..*/.i
6ea0: 6e 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  nt sqlite3_prepa
6eb0: 72 65 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  re(.  sqlite3 *d
6ec0: 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b,              
6ed0: 2f 2a 20 44 61 74 61 62 61 73 65 20 68 61 6e 64  /* Database hand
6ee0: 6c 65 2e 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  le. */.  const c
6ef0: 68 61 72 20 2a 7a 53 71 6c 2c 20 20 20 20 20 20  har *zSql,      
6f00: 20 20 20 2f 2a 20 55 54 46 2d 38 20 65 6e 63 6f     /* UTF-8 enco
6f10: 64 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  ded SQL statemen
6f20: 74 2e 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74  t. */.  int nByt
6f30: 65 73 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  es,             
6f40: 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 7a    /* Length of z
6f50: 53 71 6c 20 69 6e 20 62 79 74 65 73 2e 20 2a 2f  Sql in bytes. */
6f60: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
6f70: 2a 2a 70 70 53 74 6d 74 2c 20 20 20 20 2f 2a 20  **ppStmt,    /* 
6f80: 4f 55 54 3a 20 41 20 70 6f 69 6e 74 65 72 20 74  OUT: A pointer t
6f90: 6f 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  o the prepared s
6fa0: 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 63 6f  tatement */.  co
6fb0: 6e 73 74 20 63 68 61 72 2a 2a 20 70 7a 54 61 69  nst char** pzTai
6fc0: 6c 20 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20  l       /* OUT: 
6fd0: 45 6e 64 20 6f 66 20 70 61 72 73 65 64 20 73 74  End of parsed st
6fe0: 72 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 50 61 72  ring */.){.  Par
6ff0: 73 65 20 73 50 61 72 73 65 3b 0a 20 20 63 68 61  se sParse;.  cha
7000: 72 20 2a 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a  r *zErrMsg = 0;.
7010: 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54    int rc = SQLIT
7020: 45 5f 4f 4b 3b 0a 0a 20 20 61 73 73 65 72 74 28  E_OK;..  assert(
7030: 20 70 70 53 74 6d 74 20 29 3b 0a 20 20 2a 70 70   ppStmt );.  *pp
7040: 53 74 6d 74 20 3d 20 30 3b 0a 20 20 69 66 28 20  Stmt = 0;.  if( 
7050: 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28  sqlite3SafetyOn(
7060: 64 62 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  db) ){.    rc = 
7070: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20  SQLITE_MISUSE;. 
7080: 20 20 20 67 6f 74 6f 20 70 72 65 70 61 72 65 5f     goto prepare_
7090: 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 6d 65 6d 73  out;.  }..  mems
70a0: 65 74 28 26 73 50 61 72 73 65 2c 20 30 2c 20 73  et(&sParse, 0, s
70b0: 69 7a 65 6f 66 28 73 50 61 72 73 65 29 29 3b 0a  izeof(sParse));.
70c0: 20 20 73 50 61 72 73 65 2e 64 62 20 3d 20 64 62    sParse.db = db
70d0: 3b 0a 20 20 73 71 6c 69 74 65 33 52 75 6e 50 61  ;.  sqlite3RunPa
70e0: 72 73 65 72 28 26 73 50 61 72 73 65 2c 20 7a 53  rser(&sParse, zS
70f0: 71 6c 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a 0a  ql, &zErrMsg);..
7100: 20 20 69 66 28 20 64 62 2d 3e 78 54 72 61 63 65    if( db->xTrace
7110: 20 26 26 20 21 64 62 2d 3e 69 6e 69 74 2e 62 75   && !db->init.bu
7120: 73 79 20 29 7b 0a 20 20 20 20 2f 2a 20 54 72 61  sy ){.    /* Tra
7130: 63 65 20 6f 6e 6c 79 20 74 68 65 20 73 74 61 74  ce only the stat
7140: 6d 65 6e 74 20 74 68 61 74 20 77 61 73 20 63 6f  ment that was co
7150: 6d 70 69 6c 65 64 2e 0a 20 20 20 20 2a 2a 20 4d  mpiled..    ** M
7160: 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 74 68  ake a copy of th
7170: 61 74 20 70 61 72 74 20 6f 66 20 74 68 65 20 53  at part of the S
7180: 51 4c 20 73 74 72 69 6e 67 20 73 69 6e 63 65 20  QL string since 
7190: 7a 53 51 4c 20 69 73 20 63 6f 6e 73 74 0a 20 20  zSQL is const.  
71a0: 20 20 2a 2a 20 61 6e 64 20 77 65 20 6d 75 73 74    ** and we must
71b0: 20 70 61 73 73 20 61 20 7a 65 72 6f 20 74 65 72   pass a zero ter
71c0: 6d 69 6e 61 74 65 64 20 73 74 72 69 6e 67 20 74  minated string t
71d0: 6f 20 74 68 65 20 74 72 61 63 65 20 66 75 6e 63  o the trace func
71e0: 74 69 6f 6e 0a 20 20 20 20 2a 2a 20 54 68 65 20  tion.    ** The 
71f0: 63 6f 70 79 20 69 73 20 75 6e 6e 65 63 65 73 73  copy is unnecess
7200: 61 72 79 20 69 66 20 74 68 65 20 74 61 69 6c 20  ary if the tail 
7210: 70 6f 69 6e 74 65 72 20 69 73 20 70 6f 69 6e 74  pointer is point
7220: 69 6e 67 20 61 74 20 74 68 65 0a 20 20 20 20 2a  ing at the.    *
7230: 2a 20 62 65 67 69 6e 6e 69 67 20 6f 72 20 65 6e  * beginnig or en
7240: 64 20 6f 66 20 74 68 65 20 53 51 4c 20 73 74 72  d of the SQL str
7250: 69 6e 67 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ing..    */.    
7260: 69 66 28 20 73 50 61 72 73 65 2e 7a 54 61 69 6c  if( sParse.zTail
7270: 20 26 26 20 73 50 61 72 73 65 2e 7a 54 61 69 6c   && sParse.zTail
7280: 21 3d 7a 53 71 6c 20 26 26 20 2a 73 50 61 72 73  !=zSql && *sPars
7290: 65 2e 7a 54 61 69 6c 20 29 7b 0a 20 20 20 20 20  e.zTail ){.     
72a0: 20 63 68 61 72 20 2a 74 6d 70 53 71 6c 20 3d 20   char *tmpSql = 
72b0: 73 71 6c 69 74 65 53 74 72 4e 44 75 70 28 7a 53  sqliteStrNDup(zS
72c0: 71 6c 2c 20 73 50 61 72 73 65 2e 7a 54 61 69 6c  ql, sParse.zTail
72d0: 20 2d 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20   - zSql);.      
72e0: 69 66 28 20 74 6d 70 53 71 6c 20 29 7b 0a 20 20  if( tmpSql ){.  
72f0: 20 20 20 20 20 20 64 62 2d 3e 78 54 72 61 63 65        db->xTrace
7300: 28 64 62 2d 3e 70 54 72 61 63 65 41 72 67 2c 20  (db->pTraceArg, 
7310: 74 6d 70 53 71 6c 29 3b 0a 20 20 20 20 20 20 20  tmpSql);.       
7320: 20 66 72 65 65 28 74 6d 70 53 71 6c 29 3b 0a 20   free(tmpSql);. 
7330: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
7340: 20 20 20 20 2f 2a 20 49 66 20 61 20 6d 65 6d 6f      /* If a memo
7350: 72 79 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65  ry error occurre
7360: 64 20 64 75 72 69 6e 67 20 74 68 65 20 63 6f 70  d during the cop
7370: 79 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 72  y,.        ** tr
7380: 61 63 65 20 65 6e 74 69 72 65 20 53 51 4c 20 73  ace entire SQL s
7390: 74 72 69 6e 67 20 61 6e 64 20 66 61 6c 6c 20 74  tring and fall t
73a0: 68 72 6f 75 67 68 20 74 6f 20 74 68 65 0a 20 20  hrough to the.  
73b0: 20 20 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33        ** sqlite3
73c0: 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 20 74  _malloc_failed t
73d0: 65 73 74 20 74 6f 20 72 65 70 6f 72 74 20 74 68  est to report th
73e0: 65 20 65 72 72 6f 72 2e 0a 20 20 20 20 20 20 20  e error..       
73f0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 64 62 2d 3e   */.        db->
7400: 78 54 72 61 63 65 28 64 62 2d 3e 70 54 72 61 63  xTrace(db->pTrac
7410: 65 41 72 67 2c 20 7a 53 71 6c 29 3b 20 0a 20 20  eArg, zSql); .  
7420: 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
7430: 0a 20 20 20 20 20 20 64 62 2d 3e 78 54 72 61 63  .      db->xTrac
7440: 65 28 64 62 2d 3e 70 54 72 61 63 65 41 72 67 2c  e(db->pTraceArg,
7450: 20 7a 53 71 6c 29 3b 20 0a 20 20 20 20 7d 0a 20   zSql); .    }. 
7460: 20 7d 0a 0a 20 20 2f 2a 20 50 72 69 6e 74 20 61   }..  /* Print a
7470: 20 63 6f 70 79 20 6f 66 20 53 51 4c 20 61 73 20   copy of SQL as 
7480: 69 74 20 69 73 20 65 78 65 63 75 74 65 64 20 69  it is executed i
7490: 66 20 74 68 65 20 53 51 4c 5f 54 52 41 43 45 20  f the SQL_TRACE 
74a0: 70 72 61 67 6d 61 20 69 73 20 74 75 72 6e 65 64  pragma is turned
74b0: 0a 20 20 2a 2a 20 6f 6e 20 69 6e 20 64 65 62 75  .  ** on in debu
74c0: 67 67 69 6e 67 20 6d 6f 64 65 2e 0a 20 20 2a 2f  gging mode..  */
74d0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
74e0: 45 42 55 47 0a 20 20 69 66 28 20 28 64 62 2d 3e  EBUG.  if( (db->
74f0: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 53  flags & SQLITE_S
7500: 71 6c 54 72 61 63 65 29 21 3d 30 20 26 26 20 73  qlTrace)!=0 && s
7510: 50 61 72 73 65 2e 7a 54 61 69 6c 20 26 26 20 73  Parse.zTail && s
7520: 50 61 72 73 65 2e 7a 54 61 69 6c 21 3d 7a 53 71  Parse.zTail!=zSq
7530: 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
7540: 44 65 62 75 67 50 72 69 6e 74 66 28 22 53 51 4c  DebugPrintf("SQL
7550: 2d 74 72 61 63 65 3a 20 25 2e 2a 73 5c 6e 22 2c  -trace: %.*s\n",
7560: 20 73 50 61 72 73 65 2e 7a 54 61 69 6c 20 2d 20   sParse.zTail - 
7570: 7a 53 71 6c 2c 20 7a 53 71 6c 29 3b 0a 20 20 7d  zSql, zSql);.  }
7580: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
7590: 45 5f 44 45 42 55 47 20 2a 2f 0a 0a 0a 20 20 69  E_DEBUG */...  i
75a0: 66 28 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  f( sqlite3_mallo
75b0: 63 5f 66 61 69 6c 65 64 20 29 7b 0a 20 20 20 20  c_failed ){.    
75c0: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  rc = SQLITE_NOME
75d0: 4d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 6f  M;.    sqlite3Ro
75e0: 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 29 3b 0a 20  llbackAll(db);. 
75f0: 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 49     sqlite3ResetI
7600: 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62  nternalSchema(db
7610: 2c 20 30 29 3b 0a 20 20 20 20 64 62 2d 3e 66 6c  , 0);.    db->fl
7620: 61 67 73 20 26 3d 20 7e 53 51 4c 49 54 45 5f 49  ags &= ~SQLITE_I
7630: 6e 54 72 61 6e 73 3b 0a 20 20 20 20 67 6f 74 6f  nTrans;.    goto
7640: 20 70 72 65 70 61 72 65 5f 6f 75 74 3b 0a 20 20   prepare_out;.  
7650: 7d 0a 20 20 69 66 28 20 73 50 61 72 73 65 2e 72  }.  if( sParse.r
7660: 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29  c==SQLITE_DONE )
7670: 20 73 50 61 72 73 65 2e 72 63 20 3d 20 53 51 4c   sParse.rc = SQL
7680: 49 54 45 5f 4f 4b 3b 0a 20 20 69 66 28 20 73 50  ITE_OK;.  if( sP
7690: 61 72 73 65 2e 63 68 65 63 6b 53 63 68 65 6d 61  arse.checkSchema
76a0: 20 26 26 20 21 73 63 68 65 6d 61 49 73 56 61 6c   && !schemaIsVal
76b0: 69 64 28 64 62 29 20 29 7b 0a 20 20 20 20 73 50  id(db) ){.    sP
76c0: 61 72 73 65 2e 72 63 20 3d 20 53 51 4c 49 54 45  arse.rc = SQLITE
76d0: 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 69  _SCHEMA;.  }.  i
76e0: 66 28 20 73 50 61 72 73 65 2e 72 63 3d 3d 53 51  f( sParse.rc==SQ
76f0: 4c 49 54 45 5f 53 43 48 45 4d 41 20 29 7b 0a 20  LITE_SCHEMA ){. 
7700: 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 49     sqlite3ResetI
7710: 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62  nternalSchema(db
7720: 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  , 0);.  }.  if( 
7730: 70 7a 54 61 69 6c 20 29 20 2a 70 7a 54 61 69 6c  pzTail ) *pzTail
7740: 20 3d 20 73 50 61 72 73 65 2e 7a 54 61 69 6c 3b   = sParse.zTail;
7750: 0a 20 20 72 63 20 3d 20 73 50 61 72 73 65 2e 72  .  rc = sParse.r
7760: 63 3b 0a 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  c;..  if( rc==SQ
7770: 4c 49 54 45 5f 4f 4b 20 26 26 20 73 50 61 72 73  LITE_OK && sPars
7780: 65 2e 70 56 64 62 65 20 26 26 20 73 50 61 72 73  e.pVdbe && sPars
7790: 65 2e 65 78 70 6c 61 69 6e 20 29 7b 0a 20 20 20  e.explain ){.   
77a0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
77b0: 75 6d 43 6f 6c 73 28 73 50 61 72 73 65 2e 70 56  umCols(sParse.pV
77c0: 64 62 65 2c 20 35 29 3b 0a 20 20 20 20 73 71 6c  dbe, 5);.    sql
77d0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
77e0: 6d 65 28 73 50 61 72 73 65 2e 70 56 64 62 65 2c  me(sParse.pVdbe,
77f0: 20 30 2c 20 22 61 64 64 72 22 2c 20 50 33 5f 53   0, "addr", P3_S
7800: 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69  TATIC);.    sqli
7810: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
7820: 65 28 73 50 61 72 73 65 2e 70 56 64 62 65 2c 20  e(sParse.pVdbe, 
7830: 31 2c 20 22 6f 70 63 6f 64 65 22 2c 20 50 33 5f  1, "opcode", P3_
7840: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c  STATIC);.    sql
7850: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
7860: 6d 65 28 73 50 61 72 73 65 2e 70 56 64 62 65 2c  me(sParse.pVdbe,
7870: 20 32 2c 20 22 70 31 22 2c 20 50 33 5f 53 54 41   2, "p1", P3_STA
7880: 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  TIC);.    sqlite
7890: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
78a0: 73 50 61 72 73 65 2e 70 56 64 62 65 2c 20 33 2c  sParse.pVdbe, 3,
78b0: 20 22 70 32 22 2c 20 50 33 5f 53 54 41 54 49 43   "p2", P3_STATIC
78c0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
78d0: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 73 50 61  beSetColName(sPa
78e0: 72 73 65 2e 70 56 64 62 65 2c 20 34 2c 20 22 70  rse.pVdbe, 4, "p
78f0: 33 22 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a  3", P3_STATIC);.
7900: 20 20 7d 20 0a 0a 70 72 65 70 61 72 65 5f 6f 75    } ..prepare_ou
7910: 74 3a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  t:.  if( sqlite3
7920: 53 61 66 65 74 79 4f 66 66 28 64 62 29 20 29 7b  SafetyOff(db) ){
7930: 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
7940: 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 20 20 69  _MISUSE;.  }.  i
7950: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
7960: 20 29 7b 0a 20 20 20 20 2a 70 70 53 74 6d 74 20   ){.    *ppStmt 
7970: 3d 20 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a  = (sqlite3_stmt*
7980: 29 73 50 61 72 73 65 2e 70 56 64 62 65 3b 0a 20  )sParse.pVdbe;. 
7990: 20 7d 65 6c 73 65 20 69 66 28 20 73 50 61 72 73   }else if( sPars
79a0: 65 2e 70 56 64 62 65 20 29 7b 0a 20 20 20 20 73  e.pVdbe ){.    s
79b0: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
79c0: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 29 73  (sqlite3_stmt*)s
79d0: 50 61 72 73 65 2e 70 56 64 62 65 29 3b 0a 20 20  Parse.pVdbe);.  
79e0: 7d 0a 0a 20 20 69 66 28 20 7a 45 72 72 4d 73 67  }..  if( zErrMsg
79f0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45   ){.    sqlite3E
7a00: 72 72 6f 72 28 64 62 2c 20 72 63 2c 20 22 25 73  rror(db, rc, "%s
7a10: 22 2c 20 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20  ", zErrMsg);.   
7a20: 20 73 71 6c 69 74 65 46 72 65 65 28 7a 45 72 72   sqliteFree(zErr
7a30: 4d 73 67 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  Msg);.  }else{. 
7a40: 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28     sqlite3Error(
7a50: 64 62 2c 20 72 63 2c 20 30 29 3b 0a 20 20 7d 0a  db, rc, 0);.  }.
7a60: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a    return rc;.}..
7a70: 2f 2a 0a 2a 2a 20 43 6f 6d 70 69 6c 65 20 74 68  /*.** Compile th
7a80: 65 20 55 54 46 2d 31 36 20 65 6e 63 6f 64 65 64  e UTF-16 encoded
7a90: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 7a   SQL statement z
7aa0: 53 71 6c 20 69 6e 74 6f 20 61 20 73 74 61 74 65  Sql into a state
7ab0: 6d 65 6e 74 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a  ment handle..*/.
7ac0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70  int sqlite3_prep
7ad0: 61 72 65 31 36 28 0a 20 20 73 71 6c 69 74 65 33  are16(.  sqlite3
7ae0: 20 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20 20   *db,           
7af0: 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 68     /* Database h
7b00: 61 6e 64 6c 65 2e 20 2a 2f 20 0a 20 20 63 6f 6e  andle. */ .  con
7b10: 73 74 20 76 6f 69 64 20 2a 7a 53 71 6c 2c 20 20  st void *zSql,  
7b20: 20 20 20 20 20 20 20 2f 2a 20 55 54 46 2d 38 20         /* UTF-8 
7b30: 65 6e 63 6f 64 65 64 20 53 51 4c 20 73 74 61 74  encoded SQL stat
7b40: 65 6d 65 6e 74 2e 20 2a 2f 0a 20 20 69 6e 74 20  ement. */.  int 
7b50: 6e 42 79 74 65 73 2c 20 20 20 20 20 20 20 20 20  nBytes,         
7b60: 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20        /* Length 
7b70: 6f 66 20 7a 53 71 6c 20 69 6e 20 62 79 74 65 73  of zSql in bytes
7b80: 2e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 73  . */.  sqlite3_s
7b90: 74 6d 74 20 2a 2a 70 70 53 74 6d 74 2c 20 20 20  tmt **ppStmt,   
7ba0: 20 2f 2a 20 4f 55 54 3a 20 41 20 70 6f 69 6e 74   /* OUT: A point
7bb0: 65 72 20 74 6f 20 74 68 65 20 70 72 65 70 61 72  er to the prepar
7bc0: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a  ed statement */.
7bd0: 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2a 70    const void **p
7be0: 7a 54 61 69 6c 20 20 20 20 20 20 20 2f 2a 20 4f  zTail       /* O
7bf0: 55 54 3a 20 45 6e 64 20 6f 66 20 70 61 72 73 65  UT: End of parse
7c00: 64 20 73 74 72 69 6e 67 20 2a 2f 0a 29 7b 0a 20  d string */.){. 
7c10: 20 2f 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f   /* This functio
7c20: 6e 20 63 75 72 72 65 6e 74 6c 79 20 77 6f 72 6b  n currently work
7c30: 73 20 62 79 20 66 69 72 73 74 20 74 72 61 6e 73  s by first trans
7c40: 66 6f 72 6d 69 6e 67 20 74 68 65 20 55 54 46 2d  forming the UTF-
7c50: 31 36 0a 20 20 2a 2a 20 65 6e 63 6f 64 65 64 20  16.  ** encoded 
7c60: 73 74 72 69 6e 67 20 74 6f 20 55 54 46 2d 38 2c  string to UTF-8,
7c70: 20 74 68 65 6e 20 69 6e 76 6f 6b 69 6e 67 20 73   then invoking s
7c80: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
7c90: 2e 20 54 68 65 0a 20 20 2a 2a 20 74 72 69 63 6b  . The.  ** trick
7ca0: 79 20 62 69 74 20 69 73 20 66 69 67 75 72 69 6e  y bit is figurin
7cb0: 67 20 6f 75 74 20 74 68 65 20 70 6f 69 6e 74 65  g out the pointe
7cc0: 72 20 74 6f 20 72 65 74 75 72 6e 20 69 6e 20 2a  r to return in *
7cd0: 70 7a 54 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 63  pzTail..  */.  c
7ce0: 68 61 72 20 63 6f 6e 73 74 20 2a 7a 53 71 6c 38  har const *zSql8
7cf0: 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 63 6f 6e   = 0;.  char con
7d00: 73 74 20 2a 7a 54 61 69 6c 38 20 3d 20 30 3b 0a  st *zTail8 = 0;.
7d10: 20 20 69 6e 74 20 72 63 3b 0a 20 20 73 71 6c 69    int rc;.  sqli
7d20: 74 65 33 5f 76 61 6c 75 65 20 2a 70 54 6d 70 3b  te3_value *pTmp;
7d30: 0a 0a 20 20 70 54 6d 70 20 3d 20 73 71 6c 69 74  ..  pTmp = sqlit
7d40: 65 33 47 65 74 54 72 61 6e 73 69 65 6e 74 56 61  e3GetTransientVa
7d50: 6c 75 65 28 64 62 29 3b 0a 20 20 73 71 6c 69 74  lue(db);.  sqlit
7d60: 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 70 54  e3ValueSetStr(pT
7d70: 6d 70 2c 20 2d 31 2c 20 7a 53 71 6c 2c 20 53 51  mp, -1, zSql, SQ
7d80: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
7d90: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
7da0: 3b 0a 20 20 7a 53 71 6c 38 20 3d 20 73 71 6c 69  ;.  zSql8 = sqli
7db0: 74 65 33 56 61 6c 75 65 54 65 78 74 28 70 54 6d  te3ValueText(pTm
7dc0: 70 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3b  p, SQLITE_UTF8);
7dd0: 0a 20 20 69 66 28 20 21 7a 53 71 6c 38 20 29 7b  .  if( !zSql8 ){
7de0: 0a 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f  .    sqlite3Erro
7df0: 72 28 64 62 2c 20 53 51 4c 49 54 45 5f 4e 4f 4d  r(db, SQLITE_NOM
7e00: 45 4d 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  EM, 0);.    retu
7e10: 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b  rn SQLITE_NOMEM;
7e20: 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
7e30: 74 65 33 5f 70 72 65 70 61 72 65 28 64 62 2c 20  te3_prepare(db, 
7e40: 7a 53 71 6c 38 2c 20 2d 31 2c 20 70 70 53 74 6d  zSql8, -1, ppStm
7e50: 74 2c 20 26 7a 54 61 69 6c 38 29 3b 0a 0a 20 20  t, &zTail8);..  
7e60: 69 66 28 20 7a 54 61 69 6c 38 20 26 26 20 70 7a  if( zTail8 && pz
7e70: 54 61 69 6c 20 29 7b 0a 20 20 20 20 2f 2a 20 49  Tail ){.    /* I
7e80: 66 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  f sqlite3_prepar
7e90: 65 20 72 65 74 75 72 6e 73 20 61 20 74 61 69 6c  e returns a tail
7ea0: 20 70 6f 69 6e 74 65 72 2c 20 77 65 20 63 61 6c   pointer, we cal
7eb0: 63 75 6c 61 74 65 20 74 68 65 0a 20 20 20 20 2a  culate the.    *
7ec0: 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 70 6f 69  * equivalent poi
7ed0: 6e 74 65 72 20 69 6e 74 6f 20 74 68 65 20 55 54  nter into the UT
7ee0: 46 2d 31 36 20 73 74 72 69 6e 67 20 62 79 20 63  F-16 string by c
7ef0: 6f 75 6e 74 69 6e 67 20 74 68 65 20 75 6e 69 63  ounting the unic
7f00: 6f 64 65 0a 20 20 20 20 2a 2a 20 63 68 61 72 61  ode.    ** chara
7f10: 63 74 65 72 73 20 62 65 74 77 65 65 6e 20 7a 53  cters between zS
7f20: 71 6c 38 20 61 6e 64 20 7a 54 61 69 6c 38 2c 20  ql8 and zTail8, 
7f30: 61 6e 64 20 74 68 65 6e 20 72 65 74 75 72 6e 69  and then returni
7f40: 6e 67 20 61 20 70 6f 69 6e 74 65 72 0a 20 20 20  ng a pointer.   
7f50: 20 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e 75 6d   ** the same num
7f60: 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72  ber of character
7f70: 73 20 69 6e 74 6f 20 74 68 65 20 55 54 46 2d 31  s into the UTF-1
7f80: 36 20 73 74 72 69 6e 67 2e 0a 20 20 20 20 2a 2f  6 string..    */
7f90: 0a 20 20 20 20 69 6e 74 20 63 68 61 72 73 5f 70  .    int chars_p
7fa0: 61 72 73 65 64 20 3d 20 73 71 6c 69 74 65 33 75  arsed = sqlite3u
7fb0: 74 66 38 43 68 61 72 4c 65 6e 28 7a 53 71 6c 38  tf8CharLen(zSql8
7fc0: 2c 20 7a 54 61 69 6c 38 2d 7a 53 71 6c 38 29 3b  , zTail8-zSql8);
7fd0: 0a 20 20 20 20 2a 70 7a 54 61 69 6c 20 3d 20 28  .    *pzTail = (
7fe0: 75 38 20 2a 29 7a 53 71 6c 20 2b 20 73 71 6c 69  u8 *)zSql + sqli
7ff0: 74 65 33 75 74 66 31 36 42 79 74 65 4c 65 6e 28  te3utf16ByteLen(
8000: 7a 53 71 6c 2c 20 63 68 61 72 73 5f 70 61 72 73  zSql, chars_pars
8010: 65 64 29 3b 0a 20 20 7d 0a 20 0a 20 20 72 65 74  ed);.  }. .  ret
8020: 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  urn rc;.}../*.**
8030: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 64 6f   This routine do
8040: 65 73 20 74 68 65 20 77 6f 72 6b 20 6f 66 20 6f  es the work of o
8050: 70 65 6e 69 6e 67 20 61 20 64 61 74 61 62 61 73  pening a databas
8060: 65 20 6f 6e 20 62 65 68 61 6c 66 20 6f 66 0a 2a  e on behalf of.*
8070: 2a 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28 29  * sqlite3_open()
8080: 20 61 6e 64 20 73 71 6c 69 74 65 33 5f 6f 70 65   and sqlite3_ope
8090: 6e 31 36 28 29 2e 20 54 68 65 20 64 61 74 61 62  n16(). The datab
80a0: 61 73 65 20 66 69 6c 65 6e 61 6d 65 20 22 7a 46  ase filename "zF
80b0: 69 6c 65 6e 61 6d 65 22 20 20 0a 2a 2a 20 69 73  ilename"  .** is
80c0: 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 2e 20   UTF-8 encoded. 
80d0: 54 68 65 20 66 6f 75 72 74 68 20 61 72 67 75 6d  The fourth argum
80e0: 65 6e 74 2c 20 22 64 65 66 5f 65 6e 63 22 20 69  ent, "def_enc" i
80f0: 73 20 6f 6e 65 20 6f 66 20 74 68 65 20 54 45 58  s one of the TEX
8100: 54 5f 2a 0a 2a 2a 20 6d 61 63 72 6f 73 20 66 72  T_*.** macros fr
8110: 6f 6d 20 73 71 6c 69 74 65 49 6e 74 2e 68 2e 20  om sqliteInt.h. 
8120: 49 66 20 77 65 20 65 6e 64 20 75 70 20 63 72 65  If we end up cre
8130: 61 74 69 6e 67 20 61 20 6e 65 77 20 64 61 74 61  ating a new data
8140: 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 28 6e 6f  base file.** (no
8150: 74 20 6f 70 65 6e 69 6e 67 20 61 6e 20 65 78 69  t opening an exi
8160: 73 74 69 6e 67 20 6f 6e 65 29 2c 20 74 68 65 20  sting one), the 
8170: 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 6f 66  text encoding of
8180: 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
8190: 20 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20   will be set to 
81a0: 74 68 69 73 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73  this value..*/.s
81b0: 74 61 74 69 63 20 69 6e 74 20 6f 70 65 6e 44 61  tatic int openDa
81c0: 74 61 62 61 73 65 28 0a 20 20 63 6f 6e 73 74 20  tabase(.  const 
81d0: 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c  char *zFilename,
81e0: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 66 69 6c   /* Database fil
81f0: 65 6e 61 6d 65 20 55 54 46 2d 38 20 65 6e 63 6f  ename UTF-8 enco
8200: 64 65 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ded */.  sqlite3
8210: 20 2a 2a 70 70 44 62 20 20 20 20 20 20 20 20 20   **ppDb         
8220: 2f 2a 20 4f 55 54 3a 20 52 65 74 75 72 6e 65 64  /* OUT: Returned
8230: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
8240: 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33   */.){.  sqlite3
8250: 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 2c 20   *db;.  int rc, 
8260: 69 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d  i;.  char *zErrM
8270: 73 67 20 3d 20 30 3b 0a 0a 20 20 2f 2a 20 41 6c  sg = 0;..  /* Al
8280: 6c 6f 63 61 74 65 20 74 68 65 20 73 71 6c 69 74  locate the sqlit
8290: 65 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  e data structure
82a0: 20 2a 2f 0a 20 20 64 62 20 3d 20 73 71 6c 69 74   */.  db = sqlit
82b0: 65 4d 61 6c 6c 6f 63 28 20 73 69 7a 65 6f 66 28  eMalloc( sizeof(
82c0: 73 71 6c 69 74 65 29 20 29 3b 0a 20 20 69 66 28  sqlite) );.  if(
82d0: 20 64 62 3d 3d 30 20 29 20 67 6f 74 6f 20 6f 70   db==0 ) goto op
82e0: 65 6e 64 62 5f 6f 75 74 3b 0a 20 20 64 62 2d 3e  endb_out;.  db->
82f0: 70 72 69 6f 72 4e 65 77 52 6f 77 69 64 20 3d 20  priorNewRowid = 
8300: 30 3b 0a 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d  0;.  db->magic =
8310: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55   SQLITE_MAGIC_BU
8320: 53 59 3b 0a 20 20 64 62 2d 3e 6e 44 62 20 3d 20  SY;.  db->nDb = 
8330: 32 3b 0a 20 20 64 62 2d 3e 61 44 62 20 3d 20 64  2;.  db->aDb = d
8340: 62 2d 3e 61 44 62 53 74 61 74 69 63 3b 0a 20 20  b->aDbStatic;.  
8350: 64 62 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45  db->enc = SQLITE
8360: 5f 55 54 46 38 3b 0a 20 20 64 62 2d 3e 61 75 74  _UTF8;.  db->aut
8370: 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 2f  oCommit = 1;.  /
8380: 2a 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53  * db->flags |= S
8390: 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61  QLITE_ShortColNa
83a0: 6d 65 73 3b 20 2a 2f 0a 20 20 73 71 6c 69 74 65  mes; */.  sqlite
83b0: 33 48 61 73 68 49 6e 69 74 28 26 64 62 2d 3e 61  3HashInit(&db->a
83c0: 46 75 6e 63 2c 20 53 51 4c 49 54 45 5f 48 41 53  Func, SQLITE_HAS
83d0: 48 5f 53 54 52 49 4e 47 2c 20 30 29 3b 0a 20 20  H_STRING, 0);.  
83e0: 73 71 6c 69 74 65 33 48 61 73 68 49 6e 69 74 28  sqlite3HashInit(
83f0: 26 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 2c 20 53  &db->aCollSeq, S
8400: 51 4c 49 54 45 5f 48 41 53 48 5f 53 54 52 49 4e  QLITE_HASH_STRIN
8410: 47 2c 20 30 29 3b 0a 20 20 66 6f 72 28 69 3d 30  G, 0);.  for(i=0
8420: 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b  ; i<db->nDb; i++
8430: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 48 61  ){.    sqlite3Ha
8440: 73 68 49 6e 69 74 28 26 64 62 2d 3e 61 44 62 5b  shInit(&db->aDb[
8450: 69 5d 2e 74 62 6c 48 61 73 68 2c 20 53 51 4c 49  i].tblHash, SQLI
8460: 54 45 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c 20  TE_HASH_STRING, 
8470: 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 48  0);.    sqlite3H
8480: 61 73 68 49 6e 69 74 28 26 64 62 2d 3e 61 44 62  ashInit(&db->aDb
8490: 5b 69 5d 2e 69 64 78 48 61 73 68 2c 20 53 51 4c  [i].idxHash, SQL
84a0: 49 54 45 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c  ITE_HASH_STRING,
84b0: 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   0);.    sqlite3
84c0: 48 61 73 68 49 6e 69 74 28 26 64 62 2d 3e 61 44  HashInit(&db->aD
84d0: 62 5b 69 5d 2e 74 72 69 67 48 61 73 68 2c 20 53  b[i].trigHash, S
84e0: 51 4c 49 54 45 5f 48 41 53 48 5f 53 54 52 49 4e  QLITE_HASH_STRIN
84f0: 47 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74  G, 0);.    sqlit
8500: 65 33 48 61 73 68 49 6e 69 74 28 26 64 62 2d 3e  e3HashInit(&db->
8510: 61 44 62 5b 69 5d 2e 61 46 4b 65 79 2c 20 53 51  aDb[i].aFKey, SQ
8520: 4c 49 54 45 5f 48 41 53 48 5f 53 54 52 49 4e 47  LITE_HASH_STRING
8530: 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 0a 20 20 2f  , 1);.  }.  .  /
8540: 2a 20 41 64 64 20 74 68 65 20 64 65 66 61 75 6c  * Add the defaul
8550: 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  t collation sequ
8560: 65 6e 63 65 20 42 49 4e 41 52 59 2e 20 42 49 4e  ence BINARY. BIN
8570: 41 52 59 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f  ARY works for bo
8580: 74 68 20 55 54 46 2d 38 0a 20 20 2a 2a 20 61 6e  th UTF-8.  ** an
8590: 64 20 55 54 46 2d 31 36 2c 20 73 6f 20 61 64 64  d UTF-16, so add
85a0: 20 61 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 65   a version for e
85b0: 61 63 68 20 74 6f 20 61 76 6f 69 64 20 61 6e 79  ach to avoid any
85c0: 20 75 6e 6e 65 63 65 73 73 61 72 79 0a 20 20 2a   unnecessary.  *
85d0: 2a 20 63 6f 6e 76 65 72 73 69 6f 6e 73 2e 20 54  * conversions. T
85e0: 68 65 20 6f 6e 6c 79 20 65 72 72 6f 72 20 74 68  he only error th
85f0: 61 74 20 63 61 6e 20 6f 63 63 75 72 20 68 65 72  at can occur her
8600: 65 20 69 73 20 61 20 6d 61 6c 6c 6f 63 28 29 20  e is a malloc() 
8610: 66 61 69 6c 75 72 65 2e 0a 20 20 2a 2f 0a 20 20  failure..  */.  
8620: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63  sqlite3_create_c
8630: 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 22 42 49  ollation(db, "BI
8640: 4e 41 52 59 22 2c 20 53 51 4c 49 54 45 5f 55 54  NARY", SQLITE_UT
8650: 46 38 2c 20 30 2c 62 69 6e 61 72 79 43 6f 6c 6c  F8, 0,binaryColl
8660: 61 74 69 6e 67 46 75 6e 63 29 3b 0a 20 20 73 71  atingFunc);.  sq
8670: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c  lite3_create_col
8680: 6c 61 74 69 6f 6e 28 64 62 2c 20 22 42 49 4e 41  lation(db, "BINA
8690: 52 59 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  RY", SQLITE_UTF1
86a0: 36 4c 45 2c 20 30 2c 62 69 6e 61 72 79 43 6f 6c  6LE, 0,binaryCol
86b0: 6c 61 74 69 6e 67 46 75 6e 63 29 3b 0a 20 20 73  latingFunc);.  s
86c0: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f  qlite3_create_co
86d0: 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 22 42 49 4e  llation(db, "BIN
86e0: 41 52 59 22 2c 20 53 51 4c 49 54 45 5f 55 54 46  ARY", SQLITE_UTF
86f0: 31 36 42 45 2c 20 30 2c 62 69 6e 61 72 79 43 6f  16BE, 0,binaryCo
8700: 6c 6c 61 74 69 6e 67 46 75 6e 63 29 3b 0a 20 20  llatingFunc);.  
8710: 64 62 2d 3e 70 44 66 6c 74 43 6f 6c 6c 20 3d 20  db->pDfltColl = 
8720: 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53  sqlite3FindCollS
8730: 65 71 28 64 62 2c 20 64 62 2d 3e 65 6e 63 2c 20  eq(db, db->enc, 
8740: 22 42 49 4e 41 52 59 22 2c 20 36 2c 20 30 29 3b  "BINARY", 6, 0);
8750: 0a 20 20 69 66 28 20 21 64 62 2d 3e 70 44 66 6c  .  if( !db->pDfl
8760: 74 43 6f 6c 6c 20 29 7b 0a 20 20 20 20 72 63 20  tColl ){.    rc 
8770: 3d 20 64 62 2d 3e 65 72 72 43 6f 64 65 3b 0a 20  = db->errCode;. 
8780: 20 20 20 61 73 73 65 72 74 28 20 72 63 21 3d 53     assert( rc!=S
8790: 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20 20  QLITE_OK );.    
87a0: 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49  db->magic = SQLI
87b0: 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 3b  TE_MAGIC_CLOSED;
87c0: 0a 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e 64 62  .    goto opendb
87d0: 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  _out;.  }..  /* 
87e0: 41 6c 73 6f 20 61 64 64 20 61 20 55 54 46 2d 38  Also add a UTF-8
87f0: 20 63 61 73 65 2d 69 6e 73 65 6e 73 69 74 69 76   case-insensitiv
8800: 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  e collation sequ
8810: 65 6e 63 65 2e 20 2a 2f 0a 20 20 73 71 6c 69 74  ence. */.  sqlit
8820: 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74  e3_create_collat
8830: 69 6f 6e 28 64 62 2c 20 22 4e 4f 43 41 53 45 22  ion(db, "NOCASE"
8840: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30  , SQLITE_UTF8, 0
8850: 2c 20 6e 6f 63 61 73 65 43 6f 6c 6c 61 74 69 6e  , nocaseCollatin
8860: 67 46 75 6e 63 29 3b 0a 0a 20 20 2f 2a 20 4f 70  gFunc);..  /* Op
8870: 65 6e 20 74 68 65 20 62 61 63 6b 65 6e 64 20 64  en the backend d
8880: 61 74 61 62 61 73 65 20 64 72 69 76 65 72 20 2a  atabase driver *
8890: 2f 0a 20 20 69 66 28 20 7a 46 69 6c 65 6e 61 6d  /.  if( zFilenam
88a0: 65 5b 30 5d 3d 3d 27 3a 27 20 26 26 20 73 74 72  e[0]==':' && str
88b0: 63 6d 70 28 7a 46 69 6c 65 6e 61 6d 65 2c 22 3a  cmp(zFilename,":
88c0: 6d 65 6d 6f 72 79 3a 22 29 3d 3d 30 20 29 7b 0a  memory:")==0 ){.
88d0: 20 20 20 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f      db->temp_sto
88e0: 72 65 20 3d 20 32 3b 0a 20 20 20 20 64 62 2d 3e  re = 2;.    db->
88f0: 6e 4d 61 73 74 65 72 20 3d 20 30 3b 20 20 20 20  nMaster = 0;    
8900: 2f 2a 20 44 69 73 61 62 6c 65 20 61 74 6f 6d 69  /* Disable atomi
8910: 63 20 6d 75 6c 74 69 2d 66 69 6c 65 20 63 6f 6d  c multi-file com
8920: 6d 69 74 20 66 6f 72 20 3a 6d 65 6d 6f 72 79 3a  mit for :memory:
8930: 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   */.  }else{.   
8940: 20 64 62 2d 3e 6e 4d 61 73 74 65 72 20 3d 20 2d   db->nMaster = -
8950: 31 3b 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20  1;   /* Size of 
8960: 6d 61 73 74 65 72 20 6a 6f 75 72 6e 61 6c 20 66  master journal f
8970: 69 6c 65 6e 61 6d 65 20 69 6e 69 74 69 61 6c 6c  ilename initiall
8980: 79 20 75 6e 6b 6e 6f 77 6e 20 2a 2f 0a 20 20 7d  y unknown */.  }
8990: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
89a0: 74 72 65 65 46 61 63 74 6f 72 79 28 64 62 2c 20  treeFactory(db, 
89b0: 7a 46 69 6c 65 6e 61 6d 65 2c 20 30 2c 20 4d 41  zFilename, 0, MA
89c0: 58 5f 50 41 47 45 53 2c 20 26 64 62 2d 3e 61 44  X_PAGES, &db->aD
89d0: 62 5b 30 5d 2e 70 42 74 29 3b 0a 20 20 69 66 28  b[0].pBt);.  if(
89e0: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
89f0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45 72 72  {.    sqlite3Err
8a00: 6f 72 28 64 62 2c 20 72 63 2c 20 30 29 3b 0a 20  or(db, rc, 0);. 
8a10: 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53     db->magic = S
8a20: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53  QLITE_MAGIC_CLOS
8a30: 45 44 3b 0a 20 20 20 20 67 6f 74 6f 20 6f 70 65  ED;.    goto ope
8a40: 6e 64 62 5f 6f 75 74 3b 0a 20 20 7d 0a 20 20 64  ndb_out;.  }.  d
8a50: 62 2d 3e 61 44 62 5b 30 5d 2e 7a 4e 61 6d 65 20  b->aDb[0].zName 
8a60: 3d 20 22 6d 61 69 6e 22 3b 0a 20 20 64 62 2d 3e  = "main";.  db->
8a70: 61 44 62 5b 31 5d 2e 7a 4e 61 6d 65 20 3d 20 22  aDb[1].zName = "
8a80: 74 65 6d 70 22 3b 0a 0a 20 20 2f 2a 20 52 65 67  temp";..  /* Reg
8a90: 69 73 74 65 72 20 61 6c 6c 20 62 75 69 6c 74 2d  ister all built-
8aa0: 69 6e 20 66 75 6e 63 74 69 6f 6e 73 2c 20 62 75  in functions, bu
8ab0: 74 20 64 6f 20 6e 6f 74 20 61 74 74 65 6d 70 74  t do not attempt
8ac0: 20 74 6f 20 72 65 61 64 20 74 68 65 0a 20 20 2a   to read the.  *
8ad0: 2a 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  * database schem
8ae0: 61 20 79 65 74 2e 20 54 68 69 73 20 69 73 20 64  a yet. This is d
8af0: 65 6c 61 79 65 64 20 75 6e 74 69 6c 20 74 68 65  elayed until the
8b00: 20 66 69 72 73 74 20 74 69 6d 65 20 74 68 65 20   first time the 
8b10: 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 69 73  database.  ** is
8b20: 20 61 63 63 65 73 73 65 64 2e 0a 20 20 2a 2f 0a   accessed..  */.
8b30: 20 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65    sqlite3Registe
8b40: 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  rBuiltinFunction
8b50: 73 28 64 62 29 3b 0a 20 20 69 66 28 20 72 63 3d  s(db);.  if( rc=
8b60: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
8b70: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64    sqlite3Error(d
8b80: 62 2c 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 30 29  b, SQLITE_OK, 0)
8b90: 3b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20  ;.    db->magic 
8ba0: 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f  = SQLITE_MAGIC_O
8bb0: 50 45 4e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  PEN;.  }else{.  
8bc0: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64    sqlite3Error(d
8bd0: 62 2c 20 72 63 2c 20 22 25 73 22 2c 20 7a 45 72  b, rc, "%s", zEr
8be0: 72 4d 73 67 2c 20 30 29 3b 0a 20 20 20 20 69 66  rMsg, 0);.    if
8bf0: 28 20 7a 45 72 72 4d 73 67 20 29 20 73 71 6c 69  ( zErrMsg ) sqli
8c00: 74 65 46 72 65 65 28 7a 45 72 72 4d 73 67 29 3b  teFree(zErrMsg);
8c10: 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d  .    db->magic =
8c20: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c   SQLITE_MAGIC_CL
8c30: 4f 53 45 44 3b 0a 20 20 7d 0a 0a 6f 70 65 6e 64  OSED;.  }..opend
8c40: 62 5f 6f 75 74 3a 0a 20 20 2a 70 70 44 62 20 3d  b_out:.  *ppDb =
8c50: 20 64 62 3b 0a 20 20 72 65 74 75 72 6e 20 73 71   db;.  return sq
8c60: 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28 64 62  lite3_errcode(db
8c70: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 70 65 6e  );.}../*.** Open
8c80: 20 61 20 6e 65 77 20 64 61 74 61 62 61 73 65 20   a new database 
8c90: 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73  handle..*/.int s
8ca0: 71 6c 69 74 65 33 5f 6f 70 65 6e 28 0a 20 20 63  qlite3_open(.  c
8cb0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65  onst char *zFile
8cc0: 6e 61 6d 65 2c 20 0a 20 20 73 71 6c 69 74 65 33  name, .  sqlite3
8cd0: 20 2a 2a 70 70 44 62 20 0a 29 7b 0a 20 20 72 65   **ppDb .){.  re
8ce0: 74 75 72 6e 20 6f 70 65 6e 44 61 74 61 62 61 73  turn openDatabas
8cf0: 65 28 7a 46 69 6c 65 6e 61 6d 65 2c 20 70 70 44  e(zFilename, ppD
8d00: 62 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 70 65  b);.}../*.** Ope
8d10: 6e 20 61 20 6e 65 77 20 64 61 74 61 62 61 73 65  n a new database
8d20: 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 69 6e 74 20   handle..*/.int 
8d30: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 28 0a  sqlite3_open16(.
8d40: 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 46    const void *zF
8d50: 69 6c 65 6e 61 6d 65 2c 20 0a 20 20 73 71 6c 69  ilename, .  sqli
8d60: 74 65 33 20 2a 2a 70 70 44 62 0a 29 7b 0a 20 20  te3 **ppDb.){.  
8d70: 63 68 61 72 20 63 6f 6e 73 74 20 2a 7a 46 69 6c  char const *zFil
8d80: 65 6e 61 6d 65 38 3b 20 20 20 2f 2a 20 7a 46 69  ename8;   /* zFi
8d90: 6c 65 6e 61 6d 65 20 65 6e 63 6f 64 65 64 20 69  lename encoded i
8da0: 6e 20 55 54 46 2d 38 20 69 6e 73 74 65 61 64 20  n UTF-8 instead 
8db0: 6f 66 20 55 54 46 2d 31 36 20 2a 2f 0a 20 20 69  of UTF-16 */.  i
8dc0: 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e  nt rc = SQLITE_N
8dd0: 4f 4d 45 4d 3b 0a 20 20 73 71 6c 69 74 65 33 5f  OMEM;.  sqlite3_
8de0: 76 61 6c 75 65 20 2a 70 56 61 6c 3b 0a 0a 20 20  value *pVal;..  
8df0: 61 73 73 65 72 74 28 20 70 70 44 62 20 29 3b 0a  assert( ppDb );.
8e00: 20 20 2a 70 70 44 62 20 3d 20 30 3b 0a 20 20 70    *ppDb = 0;.  p
8e10: 56 61 6c 20 3d 20 73 71 6c 69 74 65 33 56 61 6c  Val = sqlite3Val
8e20: 75 65 4e 65 77 28 29 3b 0a 20 20 73 71 6c 69 74  ueNew();.  sqlit
8e30: 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 70 56  e3ValueSetStr(pV
8e40: 61 6c 2c 20 2d 31 2c 20 7a 46 69 6c 65 6e 61 6d  al, -1, zFilenam
8e50: 65 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e  e, SQLITE_UTF16N
8e60: 41 54 49 56 45 2c 20 53 51 4c 49 54 45 5f 53 54  ATIVE, SQLITE_ST
8e70: 41 54 49 43 29 3b 0a 20 20 7a 46 69 6c 65 6e 61  ATIC);.  zFilena
8e80: 6d 65 38 20 3d 20 73 71 6c 69 74 65 33 56 61 6c  me8 = sqlite3Val
8e90: 75 65 54 65 78 74 28 70 56 61 6c 2c 20 53 51 4c  ueText(pVal, SQL
8ea0: 49 54 45 5f 55 54 46 38 29 3b 0a 20 20 69 66 28  ITE_UTF8);.  if(
8eb0: 20 7a 46 69 6c 65 6e 61 6d 65 38 20 29 7b 0a 20   zFilename8 ){. 
8ec0: 20 20 20 72 63 20 3d 20 6f 70 65 6e 44 61 74 61     rc = openData
8ed0: 62 61 73 65 28 7a 46 69 6c 65 6e 61 6d 65 38 2c  base(zFilename8,
8ee0: 20 70 70 44 62 29 3b 0a 20 20 20 20 69 66 28 20   ppDb);.    if( 
8ef0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
8f00: 20 2a 70 70 44 62 20 29 7b 0a 20 20 20 20 20 20   *ppDb ){.      
8f10: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 2a 70 70  sqlite3_exec(*pp
8f20: 44 62 2c 20 22 50 52 41 47 4d 41 20 65 6e 63 6f  Db, "PRAGMA enco
8f30: 64 69 6e 67 20 3d 20 27 55 54 46 2d 31 36 27 22  ding = 'UTF-16'"
8f40: 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  , 0, 0, 0);.    
8f50: 7d 0a 20 20 7d 0a 20 20 69 66 28 20 70 56 61 6c  }.  }.  if( pVal
8f60: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
8f70: 61 6c 75 65 46 72 65 65 28 70 56 61 6c 29 3b 0a  alueFree(pVal);.
8f80: 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 72 63    }..  return rc
8f90: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  ;.}../*.** The f
8fa0: 6f 6c 6c 6f 77 69 6e 67 20 72 6f 75 74 69 6e 65  ollowing routine
8fb0: 20 64 65 73 74 72 6f 79 73 20 61 20 76 69 72 74   destroys a virt
8fc0: 75 61 6c 20 6d 61 63 68 69 6e 65 20 74 68 61 74  ual machine that
8fd0: 20 69 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a   is created by.*
8fe0: 2a 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63 6f  * the sqlite3_co
8ff0: 6d 70 69 6c 65 28 29 20 72 6f 75 74 69 6e 65 2e  mpile() routine.
9000: 20 54 68 65 20 69 6e 74 65 67 65 72 20 72 65 74   The integer ret
9010: 75 72 6e 65 64 20 69 73 20 61 6e 20 53 51 4c 49  urned is an SQLI
9020: 54 45 5f 0a 2a 2a 20 73 75 63 63 65 73 73 2f 66  TE_.** success/f
9030: 61 69 6c 75 72 65 20 63 6f 64 65 20 74 68 61 74  ailure code that
9040: 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20 72   describes the r
9050: 65 73 75 6c 74 20 6f 66 20 65 78 65 63 75 74 69  esult of executi
9060: 6e 67 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a  ng the virtual.*
9070: 2a 20 6d 61 63 68 69 6e 65 2e 0a 2a 2a 0a 2a 2a  * machine..**.**
9080: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65   This routine se
9090: 74 73 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64  ts the error cod
90a0: 65 20 61 6e 64 20 73 74 72 69 6e 67 20 72 65 74  e and string ret
90b0: 75 72 6e 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69  urned by.** sqli
90c0: 74 65 33 5f 65 72 72 63 6f 64 65 28 29 2c 20 73  te3_errcode(), s
90d0: 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 29 20  qlite3_errmsg() 
90e0: 61 6e 64 20 73 71 6c 69 74 65 33 5f 65 72 72 6d  and sqlite3_errm
90f0: 73 67 31 36 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73  sg16()..*/.int s
9100: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
9110: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
9120: 74 6d 74 29 7b 0a 20 20 72 65 74 75 72 6e 20 73  tmt){.  return s
9130: 71 6c 69 74 65 33 56 64 62 65 46 69 6e 61 6c 69  qlite3VdbeFinali
9140: 7a 65 28 28 56 64 62 65 2a 29 70 53 74 6d 74 2c  ze((Vdbe*)pStmt,
9150: 20 30 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 65   0);.}../*.** Te
9160: 72 6d 69 6e 61 74 65 20 74 68 65 20 63 75 72 72  rminate the curr
9170: 65 6e 74 20 65 78 65 63 75 74 69 6f 6e 20 6f 66  ent execution of
9180: 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e   an SQL statemen
9190: 74 20 61 6e 64 20 72 65 73 65 74 20 69 74 0a 2a  t and reset it.*
91a0: 2a 20 62 61 63 6b 20 74 6f 20 69 74 73 20 73 74  * back to its st
91b0: 61 72 74 69 6e 67 20 73 74 61 74 65 20 73 6f 20  arting state so 
91c0: 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72  that it can be r
91d0: 65 75 73 65 64 2e 20 41 20 73 75 63 63 65 73 73  eused. A success
91e0: 20 63 6f 64 65 20 66 72 6f 6d 0a 2a 2a 20 74 68   code from.** th
91f0: 65 20 70 72 69 6f 72 20 65 78 65 63 75 74 69 6f  e prior executio
9200: 6e 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a  n is returned..*
9210: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
9220: 65 20 73 65 74 73 20 74 68 65 20 65 72 72 6f 72  e sets the error
9230: 20 63 6f 64 65 20 61 6e 64 20 73 74 72 69 6e 67   code and string
9240: 20 72 65 74 75 72 6e 65 64 20 62 79 0a 2a 2a 20   returned by.** 
9250: 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28  sqlite3_errcode(
9260: 29 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  ), sqlite3_errms
9270: 67 28 29 20 61 6e 64 20 73 71 6c 69 74 65 33 5f  g() and sqlite3_
9280: 65 72 72 6d 73 67 31 36 28 29 2e 0a 2a 2f 0a 69  errmsg16()..*/.i
9290: 6e 74 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74  nt sqlite3_reset
92a0: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70  (sqlite3_stmt *p
92b0: 53 74 6d 74 29 7b 0a 20 20 69 6e 74 20 72 63 20  Stmt){.  int rc 
92c0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 73  = sqlite3VdbeRes
92d0: 65 74 28 28 56 64 62 65 2a 29 70 53 74 6d 74 2c  et((Vdbe*)pStmt,
92e0: 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64   0);.  sqlite3Vd
92f0: 62 65 4d 61 6b 65 52 65 61 64 79 28 28 56 64 62  beMakeReady((Vdb
9300: 65 2a 29 70 53 74 6d 74 2c 20 2d 31 2c 20 30 29  e*)pStmt, -1, 0)
9310: 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d  ;.  return rc;.}
9320: 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  ../*.** Register
9330: 20 61 20 6e 65 77 20 63 6f 6c 6c 61 74 69 6f 6e   a new collation
9340: 20 73 65 71 75 65 6e 63 65 20 77 69 74 68 20 74   sequence with t
9350: 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
9360: 6c 65 20 64 62 2e 0a 2a 2f 0a 69 6e 74 20 73 71  le db..*/.int sq
9370: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c  lite3_create_col
9380: 6c 61 74 69 6f 6e 28 0a 20 20 73 71 6c 69 74 65  lation(.  sqlite
9390: 33 2a 20 64 62 2c 20 0a 20 20 63 6f 6e 73 74 20  3* db, .  const 
93a0: 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 20 0a 20 20  char *zName, .  
93b0: 69 6e 74 20 65 6e 63 2c 20 0a 20 20 76 6f 69 64  int enc, .  void
93c0: 2a 20 70 43 74 78 2c 0a 20 20 69 6e 74 28 2a 78  * pCtx,.  int(*x
93d0: 43 6f 6d 70 61 72 65 29 28 76 6f 69 64 2a 2c 69  Compare)(void*,i
93e0: 6e 74 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 69  nt,const void*,i
93f0: 6e 74 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 0a  nt,const void*).
9400: 29 7b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43  ){.  CollSeq *pC
9410: 6f 6c 6c 3b 0a 20 20 69 6e 74 20 72 63 20 3d 20  oll;.  int rc = 
9420: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 0a 20 20  SQLITE_OK;.  .  
9430: 2f 2a 20 49 66 20 53 51 4c 49 54 45 5f 55 54 46  /* If SQLITE_UTF
9440: 31 36 20 69 73 20 73 70 65 63 69 66 69 65 64 20  16 is specified 
9450: 61 73 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20  as the encoding 
9460: 74 79 70 65 2c 20 74 72 61 6e 73 66 6f 72 6d 20  type, transform 
9470: 74 68 69 73 0a 20 20 2a 2a 20 74 6f 20 6f 6e 65  this.  ** to one
9480: 20 6f 66 20 53 51 4c 49 54 45 5f 55 54 46 31 36   of SQLITE_UTF16
9490: 4c 45 20 6f 72 20 53 51 4c 49 54 45 5f 55 54 46  LE or SQLITE_UTF
94a0: 31 36 42 45 20 75 73 69 6e 67 20 74 68 65 0a 20  16BE using the. 
94b0: 20 2a 2a 20 53 51 4c 49 54 45 5f 55 54 46 31 36   ** SQLITE_UTF16
94c0: 4e 41 54 49 56 45 20 6d 61 63 72 6f 2e 20 53 51  NATIVE macro. SQ
94d0: 4c 49 54 45 5f 55 54 46 31 36 20 69 73 20 6e 6f  LITE_UTF16 is no
94e0: 74 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c  t used internall
94f0: 79 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 65 6e  y..  */.  if( en
9500: 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 20  c==SQLITE_UTF16 
9510: 29 7b 0a 20 20 20 20 65 6e 63 20 3d 20 53 51 4c  ){.    enc = SQL
9520: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 3b  ITE_UTF16NATIVE;
9530: 0a 20 20 7d 0a 0a 20 20 69 66 28 20 65 6e 63 21  .  }..  if( enc!
9540: 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 26 26 20  =SQLITE_UTF8 && 
9550: 65 6e 63 21 3d 53 51 4c 49 54 45 5f 55 54 46 31  enc!=SQLITE_UTF1
9560: 36 4c 45 20 26 26 20 65 6e 63 21 3d 53 51 4c 49  6LE && enc!=SQLI
9570: 54 45 5f 55 54 46 31 36 42 45 20 29 7b 0a 20 20  TE_UTF16BE ){.  
9580: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64    sqlite3Error(d
9590: 62 2c 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 2c  b, SQLITE_ERROR,
95a0: 20 0a 20 20 20 20 20 20 20 20 22 50 61 72 61 6d   .        "Param
95b0: 20 33 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 72   3 to sqlite3_cr
95c0: 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 29  eate_collation()
95d0: 20 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f 66 20   must be one of 
95e0: 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 49 54  ".        "SQLIT
95f0: 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 55  E_UTF8, SQLITE_U
9600: 54 46 31 36 2c 20 53 51 4c 49 54 45 5f 55 54 46  TF16, SQLITE_UTF
9610: 31 36 4c 45 20 6f 72 20 53 51 4c 49 54 45 5f 55  16LE or SQLITE_U
9620: 54 46 31 36 42 45 22 0a 20 20 20 20 29 3b 0a 20  TF16BE".    );. 
9630: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
9640: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 70 43  _ERROR;.  }.  pC
9650: 6f 6c 6c 20 3d 20 73 71 6c 69 74 65 33 46 69 6e  oll = sqlite3Fin
9660: 64 43 6f 6c 6c 53 65 71 28 64 62 2c 20 28 75 38  dCollSeq(db, (u8
9670: 29 65 6e 63 2c 20 7a 4e 61 6d 65 2c 20 73 74 72  )enc, zName, str
9680: 6c 65 6e 28 7a 4e 61 6d 65 29 2c 20 31 29 3b 0a  len(zName), 1);.
9690: 20 20 69 66 28 20 30 3d 3d 70 43 6f 6c 6c 20 29    if( 0==pColl )
96a0: 7b 0a 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  {.   rc = SQLITE
96b0: 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d 65 6c 73 65 7b  _NOMEM;.  }else{
96c0: 0a 20 20 20 20 70 43 6f 6c 6c 2d 3e 78 43 6d 70  .    pColl->xCmp
96d0: 20 3d 20 78 43 6f 6d 70 61 72 65 3b 0a 20 20 20   = xCompare;.   
96e0: 20 70 43 6f 6c 6c 2d 3e 70 55 73 65 72 20 3d 20   pColl->pUser = 
96f0: 70 43 74 78 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  pCtx;.  }.  sqli
9700: 74 65 33 45 72 72 6f 72 28 64 62 2c 20 72 63 2c  te3Error(db, rc,
9710: 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63   0);.  return rc
9720: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73  ;.}../*.** Regis
9730: 74 65 72 20 61 20 6e 65 77 20 63 6f 6c 6c 61 74  ter a new collat
9740: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 69 74  ion sequence wit
9750: 68 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  h the database h
9760: 61 6e 64 6c 65 20 64 62 2e 0a 2a 2f 0a 69 6e 74  andle db..*/.int
9770: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
9780: 63 6f 6c 6c 61 74 69 6f 6e 31 36 28 0a 20 20 73  collation16(.  s
9790: 71 6c 69 74 65 33 2a 20 64 62 2c 20 0a 20 20 63  qlite3* db, .  c
97a0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
97b0: 2c 20 0a 20 20 69 6e 74 20 65 6e 63 2c 20 0a 20  , .  int enc, . 
97c0: 20 76 6f 69 64 2a 20 70 43 74 78 2c 0a 20 20 69   void* pCtx,.  i
97d0: 6e 74 28 2a 78 43 6f 6d 70 61 72 65 29 28 76 6f  nt(*xCompare)(vo
97e0: 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f  id*,int,const vo
97f0: 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f  id*,int,const vo
9800: 69 64 2a 29 0a 29 7b 0a 20 20 63 68 61 72 20 63  id*).){.  char c
9810: 6f 6e 73 74 20 2a 7a 4e 61 6d 65 38 3b 0a 20 20  onst *zName8;.  
9820: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
9830: 54 6d 70 20 3d 20 73 71 6c 69 74 65 33 47 65 74  Tmp = sqlite3Get
9840: 54 72 61 6e 73 69 65 6e 74 56 61 6c 75 65 28 64  TransientValue(d
9850: 62 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c  b);.  sqlite3Val
9860: 75 65 53 65 74 53 74 72 28 70 54 6d 70 2c 20 2d  ueSetStr(pTmp, -
9870: 31 2c 20 7a 4e 61 6d 65 2c 20 53 51 4c 49 54 45  1, zName, SQLITE
9880: 5f 55 54 46 31 36 4e 41 54 49 56 45 2c 20 53 51  _UTF16NATIVE, SQ
9890: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
98a0: 7a 4e 61 6d 65 38 20 3d 20 73 71 6c 69 74 65 33  zName8 = sqlite3
98b0: 56 61 6c 75 65 54 65 78 74 28 70 54 6d 70 2c 20  ValueText(pTmp, 
98c0: 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20 20  SQLITE_UTF8);.  
98d0: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 63  return sqlite3_c
98e0: 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28  reate_collation(
98f0: 64 62 2c 20 7a 4e 61 6d 65 38 2c 20 65 6e 63 2c  db, zName8, enc,
9900: 20 70 43 74 78 2c 20 78 43 6f 6d 70 61 72 65 29   pCtx, xCompare)
9910: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73  ;.}../*.** Regis
9920: 74 65 72 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20  ter a collation 
9930: 73 65 71 75 65 6e 63 65 20 66 61 63 74 6f 72 79  sequence factory
9940: 20 63 61 6c 6c 62 61 63 6b 20 77 69 74 68 20 74   callback with t
9950: 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
9960: 6c 65 0a 2a 2a 20 64 62 2e 20 52 65 70 6c 61 63  le.** db. Replac
9970: 65 20 61 6e 79 20 70 72 65 76 69 6f 75 73 6c 79  e any previously
9980: 20 69 6e 73 74 61 6c 6c 65 64 20 63 6f 6c 6c 61   installed colla
9990: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 61  tion sequence fa
99a0: 63 74 6f 72 79 2e 0a 2a 2f 0a 69 6e 74 20 73 71  ctory..*/.int sq
99b0: 6c 69 74 65 33 5f 63 6f 6c 6c 61 74 69 6f 6e 5f  lite3_collation_
99c0: 6e 65 65 64 65 64 28 0a 20 20 73 71 6c 69 74 65  needed(.  sqlite
99d0: 33 20 2a 64 62 2c 20 0a 20 20 76 6f 69 64 20 2a  3 *db, .  void *
99e0: 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 2c 20  pCollNeededArg, 
99f0: 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65  .  void(*xCollNe
9a00: 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69  eded)(void*,sqli
9a10: 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65  te3*,int eTextRe
9a20: 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 0a 29  p,const char*).)
9a30: 7b 0a 20 20 64 62 2d 3e 78 43 6f 6c 6c 4e 65 65  {.  db->xCollNee
9a40: 64 65 64 20 3d 20 78 43 6f 6c 6c 4e 65 65 64 65  ded = xCollNeede
9a50: 64 3b 0a 20 20 64 62 2d 3e 78 43 6f 6c 6c 4e 65  d;.  db->xCollNe
9a60: 65 64 65 64 31 36 20 3d 20 30 3b 0a 20 20 64 62  eded16 = 0;.  db
9a70: 2d 3e 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67  ->pCollNeededArg
9a80: 20 3d 20 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72   = pCollNeededAr
9a90: 67 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49  g;.  return SQLI
9aa0: 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  TE_OK;.}../*.** 
9ab0: 52 65 67 69 73 74 65 72 20 61 20 63 6f 6c 6c 61  Register a colla
9ac0: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 61  tion sequence fa
9ad0: 63 74 6f 72 79 20 63 61 6c 6c 62 61 63 6b 20 77  ctory callback w
9ae0: 69 74 68 20 74 68 65 20 64 61 74 61 62 61 73 65  ith the database
9af0: 20 68 61 6e 64 6c 65 0a 2a 2a 20 64 62 2e 20 52   handle.** db. R
9b00: 65 70 6c 61 63 65 20 61 6e 79 20 70 72 65 76 69  eplace any previ
9b10: 6f 75 73 6c 79 20 69 6e 73 74 61 6c 6c 65 64 20  ously installed 
9b20: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
9b30: 63 65 20 66 61 63 74 6f 72 79 2e 0a 2a 2f 0a 69  ce factory..*/.i
9b40: 6e 74 20 73 71 6c 69 74 65 33 5f 63 6f 6c 6c 61  nt sqlite3_colla
9b50: 74 69 6f 6e 5f 6e 65 65 64 65 64 31 36 28 0a 20  tion_needed16(. 
9b60: 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 0a 20   sqlite3 *db, . 
9b70: 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64   void *pCollNeed
9b80: 65 64 41 72 67 2c 20 0a 20 20 76 6f 69 64 28 2a  edArg, .  void(*
9b90: 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28 76  xCollNeeded16)(v
9ba0: 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e  oid*,sqlite3*,in
9bb0: 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74  t eTextRep,const
9bc0: 20 76 6f 69 64 2a 29 0a 29 7b 0a 20 20 64 62 2d   void*).){.  db-
9bd0: 3e 78 43 6f 6c 6c 4e 65 65 64 65 64 20 3d 20 30  >xCollNeeded = 0
9be0: 3b 0a 20 20 64 62 2d 3e 78 43 6f 6c 6c 4e 65 65  ;.  db->xCollNee
9bf0: 64 65 64 31 36 20 3d 20 78 43 6f 6c 6c 4e 65 65  ded16 = xCollNee
9c00: 64 65 64 31 36 3b 0a 20 20 64 62 2d 3e 70 43 6f  ded16;.  db->pCo
9c10: 6c 6c 4e 65 65 64 65 64 41 72 67 20 3d 20 70 43  llNeededArg = pC
9c20: 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20 20  ollNeededArg;.  
9c30: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
9c40: 3b 0a 7d 0a                                      ;.}.