/ Hex Artifact Content
Login
SQLite training in Houston TX on 2019-11-05 (details)
Part of the 2019 Tcl Conference

Artifact c7dc54c62c86cab8b2e2883aef607c179eefa611:


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 36 34 20 32 30 30 34 2f 31 31  ,v 1.264 2004/11
0280: 2f 31 31 20 30 35 3a 31 30 3a 34 34 20 64 61 6e  /11 05:10:44 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 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
02f0: 20 63 6f 6e 73 74 61 6e 74 20 76 61 6c 75 65 20   constant value 
0300: 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20 53  is used by the S
0310: 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20  QLITE_BIGENDIAN 
0320: 61 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 4c 49  and.** SQLITE_LI
0330: 54 54 4c 45 45 4e 44 49 41 4e 20 6d 61 63 72 6f  TTLEENDIAN macro
0340: 73 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 69 6e 74 20  s..*/.const int 
0350: 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a  sqlite3one = 1;.
0360: 0a 2f 2a 0a 2a 2a 20 46 69 6c 6c 20 74 68 65 20  ./*.** Fill the 
0370: 49 6e 69 74 44 61 74 61 20 73 74 72 75 63 74 75  InitData structu
0380: 72 65 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72  re with an error
0390: 20 6d 65 73 73 61 67 65 20 74 68 61 74 20 69 6e   message that in
03a0: 64 69 63 61 74 65 73 0a 2a 2a 20 74 68 61 74 20  dicates.** that 
03b0: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
03c0: 63 6f 72 72 75 70 74 2e 0a 2a 2f 0a 73 74 61 74  corrupt..*/.stat
03d0: 69 63 20 76 6f 69 64 20 63 6f 72 72 75 70 74 53  ic void corruptS
03e0: 63 68 65 6d 61 28 49 6e 69 74 44 61 74 61 20 2a  chema(InitData *
03f0: 70 44 61 74 61 2c 20 63 6f 6e 73 74 20 63 68 61  pData, const cha
0400: 72 20 2a 7a 45 78 74 72 61 29 7b 0a 20 20 69 66  r *zExtra){.  if
0410: 28 20 21 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  ( !sqlite3_mallo
0420: 63 5f 66 61 69 6c 65 64 20 29 7b 0a 20 20 20 20  c_failed ){.    
0430: 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
0440: 28 70 44 61 74 61 2d 3e 70 7a 45 72 72 4d 73 67  (pData->pzErrMsg
0450: 2c 20 22 6d 61 6c 66 6f 72 6d 65 64 20 64 61 74  , "malformed dat
0460: 61 62 61 73 65 20 73 63 68 65 6d 61 22 2c 0a 20  abase schema",. 
0470: 20 20 20 20 20 20 7a 45 78 74 72 61 21 3d 30 20        zExtra!=0 
0480: 26 26 20 7a 45 78 74 72 61 5b 30 5d 21 3d 30 20  && zExtra[0]!=0 
0490: 3f 20 22 20 2d 20 22 20 3a 20 28 63 68 61 72 2a  ? " - " : (char*
04a0: 29 30 2c 20 7a 45 78 74 72 61 2c 20 28 63 68 61  )0, zExtra, (cha
04b0: 72 2a 29 30 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a  r*)0);.  }.}../*
04c0: 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68 65 20  .** This is the 
04d0: 63 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69 6e 65  callback routine
04e0: 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20 74 68   for the code th
04f0: 61 74 20 69 6e 69 74 69 61 6c 69 7a 65 73 20 74  at initializes t
0500: 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20  he.** database. 
0510: 20 53 65 65 20 73 71 6c 69 74 65 33 49 6e 69 74   See sqlite3Init
0520: 28 29 20 62 65 6c 6f 77 20 66 6f 72 20 61 64 64  () below for add
0530: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
0540: 69 6f 6e 2e 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ion..** This rou
0550: 74 69 6e 65 20 69 73 20 61 6c 73 6f 20 63 61 6c  tine is also cal
0560: 6c 65 64 20 66 72 6f 6d 20 74 68 65 20 4f 50 5f  led from the OP_
0570: 50 61 72 73 65 53 63 68 65 6d 61 20 6f 70 63 6f  ParseSchema opco
0580: 64 65 20 6f 66 20 74 68 65 20 56 44 42 45 2e 0a  de of the VDBE..
0590: 2a 2a 0a 2a 2a 20 45 61 63 68 20 63 61 6c 6c 62  **.** Each callb
05a0: 61 63 6b 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  ack contains the
05b0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72   following infor
05c0: 6d 61 74 69 6f 6e 3a 0a 2a 2a 0a 2a 2a 20 20 20  mation:.**.**   
05d0: 20 20 61 72 67 76 5b 30 5d 20 3d 20 6e 61 6d 65    argv[0] = name
05e0: 20 6f 66 20 74 68 69 6e 67 20 62 65 69 6e 67 20   of thing being 
05f0: 63 72 65 61 74 65 64 0a 2a 2a 20 20 20 20 20 61  created.**     a
0600: 72 67 76 5b 31 5d 20 3d 20 72 6f 6f 74 20 70 61  rgv[1] = root pa
0610: 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 61  ge number for ta
0620: 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 4e  ble or index.  N
0630: 55 4c 4c 20 66 6f 72 20 74 72 69 67 67 65 72 20  ULL for trigger 
0640: 6f 72 20 76 69 65 77 2e 0a 2a 2a 20 20 20 20 20  or view..**     
0650: 61 72 67 76 5b 32 5d 20 3d 20 53 51 4c 20 74 65  argv[2] = SQL te
0660: 78 74 20 66 6f 72 20 74 68 65 20 43 52 45 41 54  xt for the CREAT
0670: 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20  E statement..** 
0680: 20 20 20 20 61 72 67 76 5b 33 5d 20 3d 20 22 31      argv[3] = "1
0690: 22 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20  " for temporary 
06a0: 66 69 6c 65 73 2c 20 22 30 22 20 66 6f 72 20 6d  files, "0" for m
06b0: 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 22 32  ain database, "2
06c0: 22 20 6f 72 20 6d 6f 72 65 0a 2a 2a 20 20 20 20  " or more.**    
06d0: 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 61             for a
06e0: 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
06f0: 65 20 66 69 6c 65 73 2e 0a 2a 2a 0a 2a 2f 0a 69  e files..**.*/.i
0700: 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61  nt sqlite3InitCa
0710: 6c 6c 62 61 63 6b 28 76 6f 69 64 20 2a 70 49 6e  llback(void *pIn
0720: 69 74 2c 20 69 6e 74 20 61 72 67 63 2c 20 63 68  it, int argc, ch
0730: 61 72 20 2a 2a 61 72 67 76 2c 20 63 68 61 72 20  ar **argv, char 
0740: 2a 2a 61 7a 43 6f 6c 4e 61 6d 65 29 7b 0a 20 20  **azColName){.  
0750: 49 6e 69 74 44 61 74 61 20 2a 70 44 61 74 61 20  InitData *pData 
0760: 3d 20 28 49 6e 69 74 44 61 74 61 2a 29 70 49 6e  = (InitData*)pIn
0770: 69 74 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  it;.  sqlite3 *d
0780: 62 20 3d 20 70 44 61 74 61 2d 3e 64 62 3b 0a 20  b = pData->db;. 
0790: 20 69 6e 74 20 69 44 62 3b 0a 0a 20 20 61 73 73   int iDb;..  ass
07a0: 65 72 74 28 20 61 72 67 63 3d 3d 34 20 29 3b 0a  ert( argc==4 );.
07b0: 20 20 69 66 28 20 61 72 67 76 3d 3d 30 20 29 20    if( argv==0 ) 
07c0: 72 65 74 75 72 6e 20 30 3b 20 20 20 2f 2a 20 4d  return 0;   /* M
07d0: 69 67 68 74 20 68 61 70 70 65 6e 20 69 66 20 45  ight happen if E
07e0: 4d 50 54 59 5f 52 45 53 55 4c 54 5f 43 41 4c 4c  MPTY_RESULT_CALL
07f0: 42 41 43 4b 53 20 61 72 65 20 6f 6e 20 2a 2f 0a  BACKS are on */.
0800: 20 20 69 66 28 20 61 72 67 76 5b 31 5d 3d 3d 30    if( argv[1]==0
0810: 20 7c 7c 20 61 72 67 76 5b 33 5d 3d 3d 30 20 29   || argv[3]==0 )
0820: 7b 0a 20 20 20 20 63 6f 72 72 75 70 74 53 63 68  {.    corruptSch
0830: 65 6d 61 28 70 44 61 74 61 2c 20 30 29 3b 0a 20  ema(pData, 0);. 
0840: 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d     return 1;.  }
0850: 0a 20 20 69 44 62 20 3d 20 61 74 6f 69 28 61 72  .  iDb = atoi(ar
0860: 67 76 5b 33 5d 29 3b 0a 20 20 61 73 73 65 72 74  gv[3]);.  assert
0870: 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c  ( iDb>=0 && iDb<
0880: 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 69 66 28  db->nDb );.  if(
0890: 20 61 72 67 76 5b 32 5d 20 26 26 20 61 72 67 76   argv[2] && argv
08a0: 5b 32 5d 5b 30 5d 20 29 7b 0a 20 20 20 20 2f 2a  [2][0] ){.    /*
08b0: 20 43 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72   Call the parser
08c0: 20 74 6f 20 70 72 6f 63 65 73 73 20 61 20 43 52   to process a CR
08d0: 45 41 54 45 20 54 41 42 4c 45 2c 20 49 4e 44 45  EATE TABLE, INDE
08e0: 58 20 6f 72 20 56 49 45 57 2e 0a 20 20 20 20 2a  X or VIEW..    *
08f0: 2a 20 42 75 74 20 62 65 63 61 75 73 65 20 64 62  * But because db
0900: 2d 3e 69 6e 69 74 2e 62 75 73 79 20 69 73 20 73  ->init.busy is s
0910: 65 74 20 74 6f 20 31 2c 20 6e 6f 20 56 44 42 45  et to 1, no VDBE
0920: 20 63 6f 64 65 20 69 73 20 67 65 6e 65 72 61 74   code is generat
0930: 65 64 0a 20 20 20 20 2a 2a 20 6f 72 20 65 78 65  ed.    ** or exe
0940: 63 75 74 65 64 2e 20 20 41 6c 6c 20 74 68 65 20  cuted.  All the 
0950: 70 61 72 73 65 72 20 64 6f 65 73 20 69 73 20 62  parser does is b
0960: 75 69 6c 64 20 74 68 65 20 69 6e 74 65 72 6e 61  uild the interna
0970: 6c 20 64 61 74 61 0a 20 20 20 20 2a 2a 20 73 74  l data.    ** st
0980: 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65  ructures that de
0990: 73 63 72 69 62 65 20 74 68 65 20 74 61 62 6c 65  scribe the table
09a0: 2c 20 69 6e 64 65 78 2c 20 6f 72 20 76 69 65 77  , index, or view
09b0: 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 63 68 61  ..    */.    cha
09c0: 72 20 2a 7a 45 72 72 3b 0a 20 20 20 20 69 6e 74  r *zErr;.    int
09d0: 20 72 63 3b 0a 20 20 20 20 61 73 73 65 72 74 28   rc;.    assert(
09e0: 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 29   db->init.busy )
09f0: 3b 0a 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 69  ;.    db->init.i
0a00: 44 62 20 3d 20 69 44 62 3b 0a 20 20 20 20 64 62  Db = iDb;.    db
0a10: 2d 3e 69 6e 69 74 2e 6e 65 77 54 6e 75 6d 20 3d  ->init.newTnum =
0a20: 20 61 74 6f 69 28 61 72 67 76 5b 31 5d 29 3b 0a   atoi(argv[1]);.
0a30: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
0a40: 5f 65 78 65 63 28 64 62 2c 20 61 72 67 76 5b 32  _exec(db, argv[2
0a50: 5d 2c 20 30 2c 20 30 2c 20 26 7a 45 72 72 29 3b  ], 0, 0, &zErr);
0a60: 0a 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 69 44  .    db->init.iD
0a70: 62 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 53  b = 0;.    if( S
0a80: 51 4c 49 54 45 5f 4f 4b 21 3d 72 63 20 29 7b 0a  QLITE_OK!=rc ){.
0a90: 20 20 20 20 20 20 63 6f 72 72 75 70 74 53 63 68        corruptSch
0aa0: 65 6d 61 28 70 44 61 74 61 2c 20 7a 45 72 72 29  ema(pData, zErr)
0ab0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
0ac0: 66 72 65 65 28 7a 45 72 72 29 3b 0a 20 20 20 20  free(zErr);.    
0ad0: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20 20    return rc;.   
0ae0: 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
0af0: 2f 2a 20 49 66 20 74 68 65 20 53 51 4c 20 63 6f  /* If the SQL co
0b00: 6c 75 6d 6e 20 69 73 20 62 6c 61 6e 6b 20 69 74  lumn is blank it
0b10: 20 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20 61   means this is a
0b20: 6e 20 69 6e 64 65 78 20 74 68 61 74 0a 20 20 20  n index that.   
0b30: 20 2a 2a 20 77 61 73 20 63 72 65 61 74 65 64 20   ** was created 
0b40: 74 6f 20 62 65 20 74 68 65 20 50 52 49 4d 41 52  to be the PRIMAR
0b50: 59 20 4b 45 59 20 6f 72 20 74 6f 20 66 75 6c 66  Y KEY or to fulf
0b60: 69 6c 6c 20 61 20 55 4e 49 51 55 45 0a 20 20 20  ill a UNIQUE.   
0b70: 20 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20 66   ** constraint f
0b80: 6f 72 20 61 20 43 52 45 41 54 45 20 54 41 42 4c  or a CREATE TABL
0b90: 45 2e 20 20 54 68 65 20 69 6e 64 65 78 20 73 68  E.  The index sh
0ba0: 6f 75 6c 64 20 68 61 76 65 20 61 6c 72 65 61 64  ould have alread
0bb0: 79 0a 20 20 20 20 2a 2a 20 62 65 65 6e 20 63 72  y.    ** been cr
0bc0: 65 61 74 65 64 20 77 68 65 6e 20 77 65 20 70 72  eated when we pr
0bd0: 6f 63 65 73 73 65 64 20 74 68 65 20 43 52 45 41  ocessed the CREA
0be0: 54 45 20 54 41 42 4c 45 2e 20 20 41 6c 6c 20 77  TE TABLE.  All w
0bf0: 65 20 68 61 76 65 0a 20 20 20 20 2a 2a 20 74 6f  e have.    ** to
0c00: 20 64 6f 20 68 65 72 65 20 69 73 20 72 65 63 6f   do here is reco
0c10: 72 64 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  rd the root page
0c20: 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74   number for that
0c30: 20 69 6e 64 65 78 2e 0a 20 20 20 20 2a 2f 0a 20   index..    */. 
0c40: 20 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78     Index *pIndex
0c50: 3b 0a 20 20 20 20 70 49 6e 64 65 78 20 3d 20 73  ;.    pIndex = s
0c60: 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28  qlite3FindIndex(
0c70: 64 62 2c 20 61 72 67 76 5b 30 5d 2c 20 64 62 2d  db, argv[0], db-
0c80: 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65 29  >aDb[iDb].zName)
0c90: 3b 0a 20 20 20 20 69 66 28 20 70 49 6e 64 65 78  ;.    if( pIndex
0ca0: 3d 3d 30 20 7c 7c 20 70 49 6e 64 65 78 2d 3e 74  ==0 || pIndex->t
0cb0: 6e 75 6d 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  num!=0 ){.      
0cc0: 2f 2a 20 54 68 69 73 20 63 61 6e 20 6f 63 63 75  /* This can occu
0cd0: 72 20 69 66 20 74 68 65 72 65 20 65 78 69 73 74  r if there exist
0ce0: 73 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20 61 20  s an index on a 
0cf0: 54 45 4d 50 20 74 61 62 6c 65 20 77 68 69 63 68  TEMP table which
0d00: 0a 20 20 20 20 20 20 2a 2a 20 68 61 73 20 74 68  .      ** has th
0d10: 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 73 20 61  e same name as a
0d20: 6e 6f 74 68 65 72 20 69 6e 64 65 78 20 6f 6e 20  nother index on 
0d30: 61 20 70 65 72 6d 61 6e 65 6e 74 20 69 6e 64 65  a permanent inde
0d40: 78 2e 20 20 53 69 6e 63 65 0a 20 20 20 20 20 20  x.  Since.      
0d50: 2a 2a 20 74 68 65 20 70 65 72 6d 61 6e 65 6e 74  ** the permanent
0d60: 20 74 61 62 6c 65 20 69 73 20 68 69 64 64 65 6e   table is hidden
0d70: 20 62 79 20 74 68 65 20 54 45 4d 50 20 74 61 62   by the TEMP tab
0d80: 6c 65 2c 20 77 65 20 63 61 6e 20 61 6c 73 6f 0a  le, we can also.
0d90: 20 20 20 20 20 20 2a 2a 20 73 61 66 65 6c 79 20        ** safely 
0da0: 69 67 6e 6f 72 65 20 74 68 65 20 69 6e 64 65 78  ignore the index
0db0: 20 6f 6e 20 74 68 65 20 70 65 72 6d 61 6e 65 6e   on the permanen
0dc0: 74 20 74 61 62 6c 65 2e 0a 20 20 20 20 20 20 2a  t table..      *
0dd0: 2f 0a 20 20 20 20 20 20 2f 2a 20 44 6f 20 4e 6f  /.      /* Do No
0de0: 74 68 69 6e 67 20 2a 2f 3b 0a 20 20 20 20 7d 65  thing */;.    }e
0df0: 6c 73 65 7b 0a 20 20 20 20 20 20 70 49 6e 64 65  lse{.      pInde
0e00: 78 2d 3e 74 6e 75 6d 20 3d 20 61 74 6f 69 28 61  x->tnum = atoi(a
0e10: 72 67 76 5b 31 5d 29 3b 0a 20 20 20 20 7d 0a 20  rgv[1]);.    }. 
0e20: 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d   }.  return 0;.}
0e30: 0a 0a 2f 2a 0a 2a 2a 20 41 74 74 65 6d 70 74 20  ../*.** Attempt 
0e40: 74 6f 20 72 65 61 64 20 74 68 65 20 64 61 74 61  to read the data
0e50: 62 61 73 65 20 73 63 68 65 6d 61 20 61 6e 64 20  base schema and 
0e60: 69 6e 69 74 69 61 6c 69 7a 65 20 69 6e 74 65 72  initialize inter
0e70: 6e 61 6c 0a 2a 2a 20 64 61 74 61 20 73 74 72 75  nal.** data stru
0e80: 63 74 75 72 65 73 20 66 6f 72 20 61 20 73 69 6e  ctures for a sin
0e90: 67 6c 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  gle database fil
0ea0: 65 2e 20 20 54 68 65 20 69 6e 64 65 78 20 6f 66  e.  The index of
0eb0: 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65   the.** database
0ec0: 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62   file is given b
0ed0: 79 20 69 44 62 2e 20 20 69 44 62 3d 3d 30 20 69  y iDb.  iDb==0 i
0ee0: 73 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 6d  s used for the m
0ef0: 61 69 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e  ain.** database.
0f00: 20 20 69 44 62 3d 3d 31 20 73 68 6f 75 6c 64 20    iDb==1 should 
0f10: 6e 65 76 65 72 20 62 65 20 75 73 65 64 2e 20 20  never be used.  
0f20: 69 44 62 3e 3d 32 20 69 73 20 75 73 65 64 20 66  iDb>=2 is used f
0f30: 6f 72 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20  or.** auxiliary 
0f40: 64 61 74 61 62 61 73 65 73 2e 20 20 52 65 74 75  databases.  Retu
0f50: 72 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51  rn one of the SQ
0f60: 4c 49 54 45 5f 20 65 72 72 6f 72 20 63 6f 64 65  LITE_ error code
0f70: 73 20 74 6f 0a 2a 2a 20 69 6e 64 69 63 61 74 65  s to.** indicate
0f80: 20 73 75 63 63 65 73 73 20 6f 72 20 66 61 69 6c   success or fail
0f90: 75 72 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ure..*/.static i
0fa0: 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 4f 6e  nt sqlite3InitOn
0fb0: 65 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69  e(sqlite3 *db, i
0fc0: 6e 74 20 69 44 62 2c 20 63 68 61 72 20 2a 2a 70  nt iDb, char **p
0fd0: 7a 45 72 72 4d 73 67 29 7b 0a 20 20 69 6e 74 20  zErrMsg){.  int 
0fe0: 72 63 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  rc;.  BtCursor *
0ff0: 63 75 72 4d 61 69 6e 3b 0a 20 20 69 6e 74 20 73  curMain;.  int s
1000: 69 7a 65 3b 0a 20 20 54 61 62 6c 65 20 2a 70 54  ize;.  Table *pT
1010: 61 62 3b 0a 20 20 63 68 61 72 20 63 6f 6e 73 74  ab;.  char const
1020: 20 2a 61 7a 41 72 67 5b 35 5d 3b 0a 20 20 63 68   *azArg[5];.  ch
1030: 61 72 20 7a 44 62 4e 75 6d 5b 33 30 5d 3b 0a 20  ar zDbNum[30];. 
1040: 20 69 6e 74 20 6d 65 74 61 5b 31 30 5d 3b 0a 20   int meta[10];. 
1050: 20 49 6e 69 74 44 61 74 61 20 69 6e 69 74 44 61   InitData initDa
1060: 74 61 3b 0a 20 20 63 68 61 72 20 63 6f 6e 73 74  ta;.  char const
1070: 20 2a 7a 4d 61 73 74 65 72 53 63 68 65 6d 61 3b   *zMasterSchema;
1080: 0a 20 20 63 68 61 72 20 63 6f 6e 73 74 20 2a 7a  .  char const *z
1090: 4d 61 73 74 65 72 4e 61 6d 65 3b 0a 0a 20 20 2f  MasterName;..  /
10a0: 2a 0a 20 20 2a 2a 20 54 68 65 20 6d 61 73 74 65  *.  ** The maste
10b0: 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  r database table
10c0: 20 68 61 73 20 61 20 73 74 72 75 63 74 75 72 65   has a structure
10d0: 20 6c 69 6b 65 20 74 68 69 73 0a 20 20 2a 2f 0a   like this.  */.
10e0: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63    static const c
10f0: 68 61 72 20 6d 61 73 74 65 72 5f 73 63 68 65 6d  har master_schem
1100: 61 5b 5d 20 3d 20 0a 20 20 20 20 20 22 43 52 45  a[] = .     "CRE
1110: 41 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65  ATE TABLE sqlite
1120: 5f 6d 61 73 74 65 72 28 5c 6e 22 0a 20 20 20 20  _master(\n".    
1130: 20 22 20 20 74 79 70 65 20 74 65 78 74 2c 5c 6e   "  type text,\n
1140: 22 0a 20 20 20 20 20 22 20 20 6e 61 6d 65 20 74  ".     "  name t
1150: 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20  ext,\n".     "  
1160: 74 62 6c 5f 6e 61 6d 65 20 74 65 78 74 2c 5c 6e  tbl_name text,\n
1170: 22 0a 20 20 20 20 20 22 20 20 72 6f 6f 74 70 61  ".     "  rootpa
1180: 67 65 20 69 6e 74 65 67 65 72 2c 5c 6e 22 0a 20  ge integer,\n". 
1190: 20 20 20 20 22 20 20 73 71 6c 20 74 65 78 74 5c      "  sql text\
11a0: 6e 22 0a 20 20 20 20 20 22 29 22 0a 20 20 3b 0a  n".     ")".  ;.
11b0: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63    static const c
11c0: 68 61 72 20 74 65 6d 70 5f 6d 61 73 74 65 72 5f  har temp_master_
11d0: 73 63 68 65 6d 61 5b 5d 20 3d 20 0a 20 20 20 20  schema[] = .    
11e0: 20 22 43 52 45 41 54 45 20 54 45 4d 50 20 54 41   "CREATE TEMP TA
11f0: 42 4c 45 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  BLE sqlite_temp_
1200: 6d 61 73 74 65 72 28 5c 6e 22 0a 20 20 20 20 20  master(\n".     
1210: 22 20 20 74 79 70 65 20 74 65 78 74 2c 5c 6e 22  "  type text,\n"
1220: 0a 20 20 20 20 20 22 20 20 6e 61 6d 65 20 74 65  .     "  name te
1230: 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20 74  xt,\n".     "  t
1240: 62 6c 5f 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22  bl_name text,\n"
1250: 0a 20 20 20 20 20 22 20 20 72 6f 6f 74 70 61 67  .     "  rootpag
1260: 65 20 69 6e 74 65 67 65 72 2c 5c 6e 22 0a 20 20  e integer,\n".  
1270: 20 20 20 22 20 20 73 71 6c 20 74 65 78 74 5c 6e     "  sql text\n
1280: 22 0a 20 20 20 20 20 22 29 22 0a 20 20 3b 0a 0a  ".     ")".  ;..
1290: 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30    assert( iDb>=0
12a0: 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20   && iDb<db->nDb 
12b0: 29 3b 0a 0a 20 20 2f 2a 20 7a 4d 61 73 74 65 72  );..  /* zMaster
12c0: 53 63 68 65 6d 61 20 61 6e 64 20 7a 49 6e 69 74  Schema and zInit
12d0: 53 63 72 69 70 74 20 61 72 65 20 73 65 74 20 74  Script are set t
12e0: 6f 20 70 6f 69 6e 74 20 61 74 20 74 68 65 20 6d  o point at the m
12f0: 61 73 74 65 72 20 73 63 68 65 6d 61 0a 20 20 2a  aster schema.  *
1300: 2a 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 73 61  * and initialisa
1310: 74 69 6f 6e 20 73 63 72 69 70 74 20 61 70 70 72  tion script appr
1320: 6f 70 72 69 61 74 65 20 66 6f 72 20 74 68 65 20  opriate for the 
1330: 64 61 74 61 62 61 73 65 20 62 65 69 6e 67 0a 20  database being. 
1340: 20 2a 2a 20 69 6e 69 74 69 61 6c 69 73 65 64 2e   ** initialised.
1350: 20 7a 4d 61 73 74 65 72 4e 61 6d 65 20 69 73 20   zMasterName is 
1360: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
1370: 6d 61 73 74 65 72 20 74 61 62 6c 65 2e 0a 20 20  master table..  
1380: 2a 2f 0a 20 20 69 66 28 20 69 44 62 3d 3d 31 20  */.  if( iDb==1 
1390: 29 7b 0a 20 20 20 20 7a 4d 61 73 74 65 72 53 63  ){.    zMasterSc
13a0: 68 65 6d 61 20 3d 20 74 65 6d 70 5f 6d 61 73 74  hema = temp_mast
13b0: 65 72 5f 73 63 68 65 6d 61 3b 0a 20 20 20 20 7a  er_schema;.    z
13c0: 4d 61 73 74 65 72 4e 61 6d 65 20 3d 20 54 45 4d  MasterName = TEM
13d0: 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3b 0a 20  P_MASTER_NAME;. 
13e0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 7a 4d 61 73   }else{.    zMas
13f0: 74 65 72 53 63 68 65 6d 61 20 3d 20 6d 61 73 74  terSchema = mast
1400: 65 72 5f 73 63 68 65 6d 61 3b 0a 20 20 20 20 7a  er_schema;.    z
1410: 4d 61 73 74 65 72 4e 61 6d 65 20 3d 20 4d 41 53  MasterName = MAS
1420: 54 45 52 5f 4e 41 4d 45 3b 0a 20 20 7d 0a 0a 20  TER_NAME;.  }.. 
1430: 20 2f 2a 20 43 6f 6e 73 74 72 75 63 74 20 74 68   /* Construct th
1440: 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65 73 2e  e schema tables.
1450: 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 53 61    */.  sqlite3Sa
1460: 66 65 74 79 4f 66 66 28 64 62 29 3b 0a 20 20 61  fetyOff(db);.  a
1470: 7a 41 72 67 5b 30 5d 20 3d 20 7a 4d 61 73 74 65  zArg[0] = zMaste
1480: 72 4e 61 6d 65 3b 0a 20 20 61 7a 41 72 67 5b 31  rName;.  azArg[1
1490: 5d 20 3d 20 22 31 22 3b 0a 20 20 61 7a 41 72 67  ] = "1";.  azArg
14a0: 5b 32 5d 20 3d 20 7a 4d 61 73 74 65 72 53 63 68  [2] = zMasterSch
14b0: 65 6d 61 3b 0a 20 20 73 70 72 69 6e 74 66 28 7a  ema;.  sprintf(z
14c0: 44 62 4e 75 6d 2c 20 22 25 64 22 2c 20 69 44 62  DbNum, "%d", iDb
14d0: 29 3b 0a 20 20 61 7a 41 72 67 5b 33 5d 20 3d 20  );.  azArg[3] = 
14e0: 7a 44 62 4e 75 6d 3b 0a 20 20 61 7a 41 72 67 5b  zDbNum;.  azArg[
14f0: 34 5d 20 3d 20 30 3b 0a 20 20 69 6e 69 74 44 61  4] = 0;.  initDa
1500: 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20 69 6e  ta.db = db;.  in
1510: 69 74 44 61 74 61 2e 70 7a 45 72 72 4d 73 67 20  itData.pzErrMsg 
1520: 3d 20 70 7a 45 72 72 4d 73 67 3b 0a 20 20 72 63  = pzErrMsg;.  rc
1530: 20 3d 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61   = sqlite3InitCa
1540: 6c 6c 62 61 63 6b 28 26 69 6e 69 74 44 61 74 61  llback(&initData
1550: 2c 20 34 2c 20 28 63 68 61 72 20 2a 2a 29 61 7a  , 4, (char **)az
1560: 41 72 67 2c 20 30 29 3b 0a 20 20 69 66 28 20 72  Arg, 0);.  if( r
1570: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
1580: 20 20 20 20 73 71 6c 69 74 65 33 53 61 66 65 74      sqlite3Safet
1590: 79 4f 6e 28 64 62 29 3b 0a 20 20 20 20 72 65 74  yOn(db);.    ret
15a0: 75 72 6e 20 72 63 3b 0a 20 20 7d 0a 20 20 70 54  urn rc;.  }.  pT
15b0: 61 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64  ab = sqlite3Find
15c0: 54 61 62 6c 65 28 64 62 2c 20 7a 4d 61 73 74 65  Table(db, zMaste
15d0: 72 4e 61 6d 65 2c 20 64 62 2d 3e 61 44 62 5b 69  rName, db->aDb[i
15e0: 44 62 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 69 66  Db].zName);.  if
15f0: 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20 70 54  ( pTab ){.    pT
1600: 61 62 2d 3e 72 65 61 64 4f 6e 6c 79 20 3d 20 31  ab->readOnly = 1
1610: 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 53  ;.  }.  sqlite3S
1620: 61 66 65 74 79 4f 6e 28 64 62 29 3b 0a 0a 20 20  afetyOn(db);..  
1630: 2f 2a 20 43 72 65 61 74 65 20 61 20 63 75 72 73  /* Create a curs
1640: 6f 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64  or to hold the d
1650: 61 74 61 62 61 73 65 20 6f 70 65 6e 0a 20 20 2a  atabase open.  *
1660: 2f 0a 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b  /.  if( db->aDb[
1670: 69 44 62 5d 2e 70 42 74 3d 3d 30 20 29 7b 0a 20  iDb].pBt==0 ){. 
1680: 20 20 20 69 66 28 20 69 44 62 3d 3d 31 20 29 20     if( iDb==1 ) 
1690: 44 62 53 65 74 50 72 6f 70 65 72 74 79 28 64 62  DbSetProperty(db
16a0: 2c 20 31 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f  , 1, DB_SchemaLo
16b0: 61 64 65 64 29 3b 0a 20 20 20 20 72 65 74 75 72  aded);.    retur
16c0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d  n SQLITE_OK;.  }
16d0: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
16e0: 74 72 65 65 43 75 72 73 6f 72 28 64 62 2d 3e 61  treeCursor(db->a
16f0: 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 4d 41 53  Db[iDb].pBt, MAS
1700: 54 45 52 5f 52 4f 4f 54 2c 20 30 2c 20 30 2c 20  TER_ROOT, 0, 0, 
1710: 30 2c 20 26 63 75 72 4d 61 69 6e 29 3b 0a 20 20  0, &curMain);.  
1720: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1730: 4b 20 26 26 20 72 63 21 3d 53 51 4c 49 54 45 5f  K && rc!=SQLITE_
1740: 45 4d 50 54 59 20 29 7b 0a 20 20 20 20 73 71 6c  EMPTY ){.    sql
1750: 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 70 7a  ite3SetString(pz
1760: 45 72 72 4d 73 67 2c 20 73 71 6c 69 74 65 33 45  ErrMsg, sqlite3E
1770: 72 72 53 74 72 28 72 63 29 2c 20 28 63 68 61 72  rrStr(rc), (char
1780: 2a 29 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  *)0);.    return
1790: 20 72 63 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 47   rc;.  }..  /* G
17a0: 65 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  et the database 
17b0: 6d 65 74 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  meta information
17c0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4d 65 74 61  ..  **.  ** Meta
17d0: 20 76 61 6c 75 65 73 20 61 72 65 20 61 73 20 66   values are as f
17e0: 6f 6c 6c 6f 77 73 3a 0a 20 20 2a 2a 20 20 20 20  ollows:.  **    
17f0: 6d 65 74 61 5b 30 5d 20 20 20 53 63 68 65 6d 61  meta[0]   Schema
1800: 20 63 6f 6f 6b 69 65 2e 20 20 43 68 61 6e 67 65   cookie.  Change
1810: 73 20 77 69 74 68 20 65 61 63 68 20 73 63 68 65  s with each sche
1820: 6d 61 20 63 68 61 6e 67 65 2e 0a 20 20 2a 2a 20  ma change..  ** 
1830: 20 20 20 6d 65 74 61 5b 31 5d 20 20 20 46 69 6c     meta[1]   Fil
1840: 65 20 66 6f 72 6d 61 74 20 6f 66 20 73 63 68 65  e format of sche
1850: 6d 61 20 6c 61 79 65 72 2e 0a 20 20 2a 2a 20 20  ma layer..  **  
1860: 20 20 6d 65 74 61 5b 32 5d 20 20 20 53 69 7a 65    meta[2]   Size
1870: 20 6f 66 20 74 68 65 20 70 61 67 65 20 63 61 63   of the page cac
1880: 68 65 2e 0a 20 20 2a 2a 20 20 20 20 6d 65 74 61  he..  **    meta
1890: 5b 33 5d 20 20 20 55 73 65 20 66 72 65 65 6c 69  [3]   Use freeli
18a0: 73 74 20 69 66 20 30 2e 20 20 41 75 74 6f 76 61  st if 0.  Autova
18b0: 63 75 75 6d 20 69 66 20 67 72 65 61 74 65 72 20  cuum if greater 
18c0: 74 68 61 6e 20 7a 65 72 6f 2e 0a 20 20 2a 2a 20  than zero..  ** 
18d0: 20 20 20 6d 65 74 61 5b 34 5d 20 20 20 44 62 20     meta[4]   Db 
18e0: 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e 20 31  text encoding. 1
18f0: 3a 55 54 46 2d 38 20 33 3a 55 54 46 2d 31 36 20  :UTF-8 3:UTF-16 
1900: 4c 45 20 34 3a 55 54 46 2d 31 36 20 42 45 0a 20  LE 4:UTF-16 BE. 
1910: 20 2a 2a 20 20 20 20 6d 65 74 61 5b 35 5d 20 20   **    meta[5]  
1920: 20 54 68 65 20 75 73 65 72 20 63 6f 6f 6b 69 65   The user cookie
1930: 2e 20 55 73 65 64 20 62 79 20 74 68 65 20 61 70  . Used by the ap
1940: 70 6c 69 63 61 74 69 6f 6e 2e 0a 20 20 2a 2a 20  plication..  ** 
1950: 20 20 20 6d 65 74 61 5b 36 5d 20 20 20 0a 20 20     meta[6]   .  
1960: 2a 2a 20 20 20 20 6d 65 74 61 5b 37 5d 0a 20 20  **    meta[7].  
1970: 2a 2a 20 20 20 20 6d 65 74 61 5b 38 5d 0a 20 20  **    meta[8].  
1980: 2a 2a 20 20 20 20 6d 65 74 61 5b 39 5d 0a 20 20  **    meta[9].  
1990: 2a 2a 0a 20 20 2a 2a 20 4e 6f 74 65 3a 20 54 68  **.  ** Note: Th
19a0: 65 20 68 61 73 68 20 64 65 66 69 6e 65 64 20 53  e hash defined S
19b0: 51 4c 49 54 45 5f 55 54 46 2a 20 73 79 6d 62 6f  QLITE_UTF* symbo
19c0: 6c 73 20 69 6e 20 73 71 6c 69 74 65 49 6e 74 2e  ls in sqliteInt.
19d0: 68 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 0a  h correspond to.
19e0: 20 20 2a 2a 20 74 68 65 20 70 6f 73 73 69 62 6c    ** the possibl
19f0: 65 20 76 61 6c 75 65 73 20 6f 66 20 6d 65 74 61  e values of meta
1a00: 5b 34 5d 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  [4]..  */.  if( 
1a10: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
1a20: 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20  .    int i;.    
1a30: 66 6f 72 28 69 3d 30 3b 20 72 63 3d 3d 53 51 4c  for(i=0; rc==SQL
1a40: 49 54 45 5f 4f 4b 20 26 26 20 69 3c 73 69 7a 65  ITE_OK && i<size
1a50: 6f 66 28 6d 65 74 61 29 2f 73 69 7a 65 6f 66 28  of(meta)/sizeof(
1a60: 6d 65 74 61 5b 30 5d 29 3b 20 69 2b 2b 29 7b 0a  meta[0]); i++){.
1a70: 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1a80: 65 33 42 74 72 65 65 47 65 74 4d 65 74 61 28 64  e3BtreeGetMeta(d
1a90: 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c  b->aDb[iDb].pBt,
1aa0: 20 69 2b 31 2c 20 28 75 33 32 20 2a 29 26 6d 65   i+1, (u32 *)&me
1ab0: 74 61 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  ta[i]);.    }.  
1ac0: 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
1ad0: 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
1ae0: 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20 73 71 6c  ng(pzErrMsg, sql
1af0: 69 74 65 33 45 72 72 53 74 72 28 72 63 29 2c 20  ite3ErrStr(rc), 
1b00: 28 63 68 61 72 2a 29 30 29 3b 0a 20 20 20 20 20  (char*)0);.     
1b10: 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 6f   sqlite3BtreeClo
1b20: 73 65 43 75 72 73 6f 72 28 63 75 72 4d 61 69 6e  seCursor(curMain
1b30: 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
1b40: 72 63 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  rc;.    }.  }els
1b50: 65 7b 0a 20 20 20 20 6d 65 6d 73 65 74 28 6d 65  e{.    memset(me
1b60: 74 61 2c 20 30 2c 20 73 69 7a 65 6f 66 28 6d 65  ta, 0, sizeof(me
1b70: 74 61 29 29 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e  ta));.  }.  db->
1b80: 61 44 62 5b 69 44 62 5d 2e 73 63 68 65 6d 61 5f  aDb[iDb].schema_
1b90: 63 6f 6f 6b 69 65 20 3d 20 6d 65 74 61 5b 30 5d  cookie = meta[0]
1ba0: 3b 0a 0a 20 20 2f 2a 20 49 66 20 6f 70 65 6e 69  ;..  /* If openi
1bb0: 6e 67 20 61 20 6e 6f 6e 2d 65 6d 70 74 79 20 64  ng a non-empty d
1bc0: 61 74 61 62 61 73 65 2c 20 63 68 65 63 6b 20 74  atabase, check t
1bd0: 68 65 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67  he text encoding
1be0: 2e 20 46 6f 72 20 74 68 65 0a 20 20 2a 2a 20 6d  . For the.  ** m
1bf0: 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 73 65  ain database, se
1c00: 74 20 73 71 6c 69 74 65 33 2e 65 6e 63 20 74 6f  t sqlite3.enc to
1c10: 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66   the encoding of
1c20: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
1c30: 73 65 2e 0a 20 20 2a 2a 20 46 6f 72 20 61 6e 20  se..  ** For an 
1c40: 61 74 74 61 63 68 65 64 20 64 62 2c 20 69 74 20  attached db, it 
1c50: 69 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74  is an error if t
1c60: 68 65 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 6e  he encoding is n
1c70: 6f 74 20 74 68 65 20 73 61 6d 65 0a 20 20 2a 2a  ot the same.  **
1c80: 20 61 73 20 73 71 6c 69 74 65 33 2e 65 6e 63 2e   as sqlite3.enc.
1c90: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 6d 65 74 61  .  */.  if( meta
1ca0: 5b 34 5d 20 29 7b 20 20 2f 2a 20 74 65 78 74 20  [4] ){  /* text 
1cb0: 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 20 20  encoding */.    
1cc0: 69 66 28 20 69 44 62 3d 3d 30 20 29 7b 0a 20 20  if( iDb==0 ){.  
1cd0: 20 20 20 20 2f 2a 20 49 66 20 6f 70 65 6e 69 6e      /* If openin
1ce0: 67 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  g the main datab
1cf0: 61 73 65 2c 20 73 65 74 20 64 62 2d 3e 65 6e 63  ase, set db->enc
1d00: 2e 20 2a 2f 0a 20 20 20 20 20 20 64 62 2d 3e 65  . */.      db->e
1d10: 6e 63 20 3d 20 28 75 38 29 6d 65 74 61 5b 34 5d  nc = (u8)meta[4]
1d20: 3b 0a 20 20 20 20 20 20 64 62 2d 3e 70 44 66 6c  ;.      db->pDfl
1d30: 74 43 6f 6c 6c 20 3d 20 73 71 6c 69 74 65 33 46  tColl = sqlite3F
1d40: 69 6e 64 43 6f 6c 6c 53 65 71 28 64 62 2c 20 64  indCollSeq(db, d
1d50: 62 2d 3e 65 6e 63 2c 20 22 42 49 4e 41 52 59 22  b->enc, "BINARY"
1d60: 2c 20 36 2c 20 30 29 3b 0a 20 20 20 20 7d 65 6c  , 6, 0);.    }el
1d70: 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20  se{.      /* If 
1d80: 6f 70 65 6e 69 6e 67 20 61 6e 20 61 74 74 61 63  opening an attac
1d90: 68 65 64 20 64 61 74 61 62 61 73 65 2c 20 74 68  hed database, th
1da0: 65 20 65 6e 63 6f 64 69 6e 67 20 6d 75 63 68 20  e encoding much 
1db0: 6d 61 74 63 68 20 64 62 2d 3e 65 6e 63 20 2a 2f  match db->enc */
1dc0: 0a 20 20 20 20 20 20 69 66 28 20 6d 65 74 61 5b  .      if( meta[
1dd0: 34 5d 21 3d 64 62 2d 3e 65 6e 63 20 29 7b 0a 20  4]!=db->enc ){. 
1de0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74         sqlite3Bt
1df0: 72 65 65 43 6c 6f 73 65 43 75 72 73 6f 72 28 63  reeCloseCursor(c
1e00: 75 72 4d 61 69 6e 29 3b 0a 20 20 20 20 20 20 20  urMain);.       
1e10: 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
1e20: 67 28 70 7a 45 72 72 4d 73 67 2c 20 22 61 74 74  g(pzErrMsg, "att
1e30: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20  ached databases 
1e40: 6d 75 73 74 20 75 73 65 20 74 68 65 20 73 61 6d  must use the sam
1e50: 65 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  e".            "
1e60: 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 61   text encoding a
1e70: 73 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 22  s main database"
1e80: 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a 20 20 20  , (char*)0);.   
1e90: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
1ea0: 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20  TE_ERROR;.      
1eb0: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 73  }.    }.  }..  s
1ec0: 69 7a 65 20 3d 20 6d 65 74 61 5b 32 5d 3b 0a 20  ize = meta[2];. 
1ed0: 20 69 66 28 20 73 69 7a 65 3d 3d 30 20 29 7b 20   if( size==0 ){ 
1ee0: 73 69 7a 65 20 3d 20 4d 41 58 5f 50 41 47 45 53  size = MAX_PAGES
1ef0: 3b 20 7d 0a 20 20 64 62 2d 3e 61 44 62 5b 69 44  ; }.  db->aDb[iD
1f00: 62 5d 2e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20  b].cache_size = 
1f10: 73 69 7a 65 3b 0a 0a 20 20 69 66 28 20 69 44 62  size;..  if( iDb
1f20: 3d 3d 30 20 29 7b 0a 20 20 20 20 64 62 2d 3e 66  ==0 ){.    db->f
1f30: 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 6d 65 74  ile_format = met
1f40: 61 5b 31 5d 3b 0a 20 20 20 20 69 66 28 20 64 62  a[1];.    if( db
1f50: 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3d 3d 30  ->file_format==0
1f60: 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 69   ){.      /* Thi
1f70: 73 20 68 61 70 70 65 6e 73 20 69 66 20 74 68 65  s happens if the
1f80: 20 64 61 74 61 62 61 73 65 20 77 61 73 20 69 6e   database was in
1f90: 69 74 69 61 6c 6c 79 20 65 6d 70 74 79 20 2a 2f  itially empty */
1fa0: 0a 20 20 20 20 20 20 64 62 2d 3e 66 69 6c 65 5f  .      db->file_
1fb0: 66 6f 72 6d 61 74 20 3d 20 31 3b 0a 20 20 20 20  format = 1;.    
1fc0: 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  }.  }..  /*.  **
1fd0: 20 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3d 3d 31    file_format==1
1fe0: 20 20 20 20 56 65 72 73 69 6f 6e 20 33 2e 30 2e      Version 3.0.
1ff0: 30 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 6d 65  0..  */.  if( me
2000: 74 61 5b 31 5d 3e 31 20 29 7b 0a 20 20 20 20 73  ta[1]>1 ){.    s
2010: 71 6c 69 74 65 33 42 74 72 65 65 43 6c 6f 73 65  qlite3BtreeClose
2020: 43 75 72 73 6f 72 28 63 75 72 4d 61 69 6e 29 3b  Cursor(curMain);
2030: 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
2040: 74 72 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20  tring(pzErrMsg, 
2050: 22 75 6e 73 75 70 70 6f 72 74 65 64 20 66 69 6c  "unsupported fil
2060: 65 20 66 6f 72 6d 61 74 22 2c 20 28 63 68 61 72  e format", (char
2070: 2a 29 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  *)0);.    return
2080: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
2090: 20 7d 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72   }..  sqlite3Btr
20a0: 65 65 53 65 74 43 61 63 68 65 53 69 7a 65 28 64  eeSetCacheSize(d
20b0: 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c  b->aDb[iDb].pBt,
20c0: 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 63 61   db->aDb[iDb].ca
20d0: 63 68 65 5f 73 69 7a 65 29 3b 0a 0a 20 20 2f 2a  che_size);..  /*
20e0: 20 52 65 61 64 20 74 68 65 20 73 63 68 65 6d 61   Read the schema
20f0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 75 74   information out
2100: 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20 74   of the schema t
2110: 61 62 6c 65 73 0a 20 20 2a 2f 0a 20 20 61 73 73  ables.  */.  ass
2120: 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75  ert( db->init.bu
2130: 73 79 20 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  sy );.  if( rc==
2140: 53 51 4c 49 54 45 5f 45 4d 50 54 59 20 29 7b 0a  SQLITE_EMPTY ){.
2150: 20 20 20 20 2f 2a 20 46 6f 72 20 61 6e 20 65 6d      /* For an em
2160: 70 74 79 20 64 61 74 61 62 61 73 65 2c 20 74 68  pty database, th
2170: 65 72 65 20 69 73 20 6e 6f 74 68 69 6e 67 20 74  ere is nothing t
2180: 6f 20 72 65 61 64 20 2a 2f 0a 20 20 20 20 72 63  o read */.    rc
2190: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
21a0: 7d 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20  }else{.    char 
21b0: 2a 7a 53 71 6c 3b 0a 20 20 20 20 7a 53 71 6c 20  *zSql;.    zSql 
21c0: 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66  = sqlite3MPrintf
21d0: 28 0a 20 20 20 20 20 20 20 20 22 53 45 4c 45 43  (.        "SELEC
21e0: 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65  T name, rootpage
21f0: 2c 20 73 71 6c 2c 20 25 73 20 46 52 4f 4d 20 27  , sql, %s FROM '
2200: 25 71 27 2e 25 73 22 2c 0a 20 20 20 20 20 20 20  %q'.%s",.       
2210: 20 7a 44 62 4e 75 6d 2c 20 64 62 2d 3e 61 44 62   zDbNum, db->aDb
2220: 5b 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d 61  [iDb].zName, zMa
2230: 73 74 65 72 4e 61 6d 65 29 3b 0a 20 20 20 20 73  sterName);.    s
2240: 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28  qlite3SafetyOff(
2250: 64 62 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  db);.    rc = sq
2260: 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a  lite3_exec(db, z
2270: 53 71 6c 2c 20 73 71 6c 69 74 65 33 49 6e 69 74  Sql, sqlite3Init
2280: 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44  Callback, &initD
2290: 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c  ata, 0);.    sql
22a0: 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29  ite3SafetyOn(db)
22b0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 46 72 65 65  ;.    sqliteFree
22c0: 28 7a 53 71 6c 29 3b 0a 20 20 20 20 73 71 6c 69  (zSql);.    sqli
22d0: 74 65 33 42 74 72 65 65 43 6c 6f 73 65 43 75 72  te3BtreeCloseCur
22e0: 73 6f 72 28 63 75 72 4d 61 69 6e 29 3b 0a 20 20  sor(curMain);.  
22f0: 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f  }.  if( sqlite3_
2300: 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 20 29 7b  malloc_failed ){
2310: 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
2320: 74 72 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20  tring(pzErrMsg, 
2330: 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 2c  "out of memory",
2340: 20 28 63 68 61 72 2a 29 30 29 3b 0a 20 20 20 20   (char*)0);.    
2350: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  rc = SQLITE_NOME
2360: 4d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65  M;.    sqlite3Re
2370: 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d  setInternalSchem
2380: 61 28 64 62 2c 20 30 29 3b 0a 20 20 7d 0a 20 20  a(db, 0);.  }.  
2390: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
23a0: 4b 20 29 7b 0a 20 20 20 20 44 62 53 65 74 50 72  K ){.    DbSetPr
23b0: 6f 70 65 72 74 79 28 64 62 2c 20 69 44 62 2c 20  operty(db, iDb, 
23c0: 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29  DB_SchemaLoaded)
23d0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
23e0: 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65 72  qlite3ResetInter
23f0: 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 69 44  nalSchema(db, iD
2400: 62 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  b);.  }.  return
2410: 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e   rc;.}../*.** In
2420: 69 74 69 61 6c 69 7a 65 20 61 6c 6c 20 64 61 74  itialize all dat
2430: 61 62 61 73 65 20 66 69 6c 65 73 20 2d 20 74 68  abase files - th
2440: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
2450: 66 69 6c 65 2c 20 74 68 65 20 66 69 6c 65 0a 2a  file, the file.*
2460: 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  * used to store 
2470: 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
2480: 2c 20 61 6e 64 20 61 6e 79 20 61 64 64 69 74 69  , and any additi
2490: 6f 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 69  onal database fi
24a0: 6c 65 73 0a 2a 2a 20 63 72 65 61 74 65 64 20 75  les.** created u
24b0: 73 69 6e 67 20 41 54 54 41 43 48 20 73 74 61 74  sing ATTACH stat
24c0: 65 6d 65 6e 74 73 2e 20 20 52 65 74 75 72 6e 20  ements.  Return 
24d0: 61 20 73 75 63 63 65 73 73 20 63 6f 64 65 2e 20  a success code. 
24e0: 20 49 66 20 61 6e 0a 2a 2a 20 65 72 72 6f 72 20   If an.** error 
24f0: 6f 63 63 75 72 73 2c 20 77 72 69 74 65 20 61 6e  occurs, write an
2500: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69   error message i
2510: 6e 74 6f 20 2a 70 7a 45 72 72 4d 73 67 2e 0a 2a  nto *pzErrMsg..*
2520: 2a 0a 2a 2a 20 41 66 74 65 72 20 74 68 65 20 64  *.** After the d
2530: 61 74 61 62 61 73 65 20 69 73 20 69 6e 69 74 69  atabase is initi
2540: 61 6c 69 7a 65 64 2c 20 74 68 65 20 53 51 4c 49  alized, the SQLI
2550: 54 45 5f 49 6e 69 74 69 61 6c 69 7a 65 64 0a 2a  TE_Initialized.*
2560: 2a 20 62 69 74 20 69 73 20 73 65 74 20 69 6e 20  * bit is set in 
2570: 74 68 65 20 66 6c 61 67 73 20 66 69 65 6c 64 20  the flags field 
2580: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 20 73 74  of the sqlite st
2590: 72 75 63 74 75 72 65 2e 20 0a 2a 2f 0a 69 6e 74  ructure. .*/.int
25a0: 20 73 71 6c 69 74 65 33 49 6e 69 74 28 73 71 6c   sqlite3Init(sql
25b0: 69 74 65 33 20 2a 64 62 2c 20 63 68 61 72 20 2a  ite3 *db, char *
25c0: 2a 70 7a 45 72 72 4d 73 67 29 7b 0a 20 20 69 6e  *pzErrMsg){.  in
25d0: 74 20 69 2c 20 72 63 3b 0a 20 20 0a 20 20 69 66  t i, rc;.  .  if
25e0: 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20  ( db->init.busy 
25f0: 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  ) return SQLITE_
2600: 4f 4b 3b 0a 20 20 61 73 73 65 72 74 28 20 28 64  OK;.  assert( (d
2610: 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
2620: 45 5f 49 6e 69 74 69 61 6c 69 7a 65 64 29 3d 3d  E_Initialized)==
2630: 30 20 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  0 );.  rc = SQLI
2640: 54 45 5f 4f 4b 3b 0a 20 20 64 62 2d 3e 69 6e 69  TE_OK;.  db->ini
2650: 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20 66 6f  t.busy = 1;.  fo
2660: 72 28 69 3d 30 3b 20 72 63 3d 3d 53 51 4c 49 54  r(i=0; rc==SQLIT
2670: 45 5f 4f 4b 20 26 26 20 69 3c 64 62 2d 3e 6e 44  E_OK && i<db->nD
2680: 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28  b; i++){.    if(
2690: 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 64   DbHasProperty(d
26a0: 62 2c 20 69 2c 20 44 42 5f 53 63 68 65 6d 61 4c  b, i, DB_SchemaL
26b0: 6f 61 64 65 64 29 20 7c 7c 20 69 3d 3d 31 20 29  oaded) || i==1 )
26c0: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 72   continue;.    r
26d0: 63 20 3d 20 73 71 6c 69 74 65 33 49 6e 69 74 4f  c = sqlite3InitO
26e0: 6e 65 28 64 62 2c 20 69 2c 20 70 7a 45 72 72 4d  ne(db, i, pzErrM
26f0: 73 67 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20  sg);.    if( rc 
2700: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
2710: 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68  ResetInternalSch
2720: 65 6d 61 28 64 62 2c 20 69 29 3b 0a 20 20 20 20  ema(db, i);.    
2730: 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4f 6e 63 65  }.  }..  /* Once
2740: 20 61 6c 6c 20 74 68 65 20 6f 74 68 65 72 20 64   all the other d
2750: 61 74 61 62 61 73 65 73 20 68 61 76 65 20 62 65  atabases have be
2760: 65 6e 20 69 6e 69 74 69 61 6c 69 73 65 64 2c 20  en initialised, 
2770: 6c 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61 0a  load the schema.
2780: 20 20 2a 2a 20 66 6f 72 20 74 68 65 20 54 45 4d    ** for the TEM
2790: 50 20 64 61 74 61 62 61 73 65 2e 20 54 68 69 73  P database. This
27a0: 20 69 73 20 6c 6f 61 64 65 64 20 6c 61 73 74 2c   is loaded last,
27b0: 20 61 73 20 74 68 65 20 54 45 4d 50 20 64 61 74   as the TEMP dat
27c0: 61 62 61 73 65 0a 20 20 2a 2a 20 73 63 68 65 6d  abase.  ** schem
27d0: 61 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 72 65  a may contain re
27e0: 66 65 72 65 6e 63 65 73 20 74 6f 20 6f 62 6a 65  ferences to obje
27f0: 63 74 73 20 69 6e 20 6f 74 68 65 72 20 64 61 74  cts in other dat
2800: 61 62 61 73 65 73 2e 0a 20 20 2a 2f 0a 20 20 69  abases..  */.  i
2810: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
2820: 20 26 26 20 64 62 2d 3e 6e 44 62 3e 31 20 26 26   && db->nDb>1 &&
2830: 20 21 44 62 48 61 73 50 72 6f 70 65 72 74 79 28   !DbHasProperty(
2840: 64 62 2c 20 31 2c 20 44 42 5f 53 63 68 65 6d 61  db, 1, DB_Schema
2850: 4c 6f 61 64 65 64 29 20 29 7b 0a 20 20 20 20 72  Loaded) ){.    r
2860: 63 20 3d 20 73 71 6c 69 74 65 33 49 6e 69 74 4f  c = sqlite3InitO
2870: 6e 65 28 64 62 2c 20 31 2c 20 70 7a 45 72 72 4d  ne(db, 1, pzErrM
2880: 73 67 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20  sg);.    if( rc 
2890: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
28a0: 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68  ResetInternalSch
28b0: 65 6d 61 28 64 62 2c 20 31 29 3b 0a 20 20 20 20  ema(db, 1);.    
28c0: 7d 0a 20 20 7d 0a 0a 20 20 64 62 2d 3e 69 6e 69  }.  }..  db->ini
28d0: 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20 69 66  t.busy = 0;.  if
28e0: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
28f0: 29 7b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73  ){.    db->flags
2900: 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 69 74 69   |= SQLITE_Initi
2910: 61 6c 69 7a 65 64 3b 0a 20 20 20 20 73 71 6c 69  alized;.    sqli
2920: 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61  te3CommitInterna
2930: 6c 43 68 61 6e 67 65 73 28 64 62 29 3b 0a 20 20  lChanges(db);.  
2940: 7d 0a 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  }..  if( rc!=SQL
2950: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 64 62  ITE_OK ){.    db
2960: 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 53 51 4c 49  ->flags &= ~SQLI
2970: 54 45 5f 49 6e 69 74 69 61 6c 69 7a 65 64 3b 0a  TE_Initialized;.
2980: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b    }.  return rc;
2990: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72  .}../*.** This r
29a0: 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f  outine is a no-o
29b0: 70 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73  p if the databas
29c0: 65 20 73 63 68 65 6d 61 20 69 73 20 61 6c 72 65  e schema is alre
29d0: 61 64 79 20 69 6e 69 74 69 61 6c 69 73 65 64 2e  ady initialised.
29e0: 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 74  .** Otherwise, t
29f0: 68 65 20 73 63 68 65 6d 61 20 69 73 20 6c 6f 61  he schema is loa
2a00: 64 65 64 2e 20 41 6e 20 65 72 72 6f 72 20 63 6f  ded. An error co
2a10: 64 65 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a  de is returned..
2a20: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  */.int sqlite3Re
2a30: 61 64 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a  adSchema(Parse *
2a40: 70 50 61 72 73 65 29 7b 0a 20 20 69 6e 74 20 72  pParse){.  int r
2a50: 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
2a60: 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70   sqlite3 *db = p
2a70: 50 61 72 73 65 2d 3e 64 62 3b 0a 20 20 69 66 28  Parse->db;.  if(
2a80: 20 21 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20   !db->init.busy 
2a90: 29 7b 0a 20 20 20 20 69 66 28 20 28 64 62 2d 3e  ){.    if( (db->
2aa0: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 49  flags & SQLITE_I
2ab0: 6e 69 74 69 61 6c 69 7a 65 64 29 3d 3d 30 20 29  nitialized)==0 )
2ac0: 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
2ad0: 69 74 65 33 49 6e 69 74 28 64 62 2c 20 26 70 50  ite3Init(db, &pP
2ae0: 61 72 73 65 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  arse->zErrMsg);.
2af0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73 65      }.  }.  asse
2b00: 72 74 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  rt( rc!=SQLITE_O
2b10: 4b 20 7c 7c 20 28 64 62 2d 3e 66 6c 61 67 73 20  K || (db->flags 
2b20: 26 20 53 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c  & SQLITE_Initial
2b30: 69 7a 65 64 29 7c 7c 64 62 2d 3e 69 6e 69 74 2e  ized)||db->init.
2b40: 62 75 73 79 20 29 3b 0a 20 20 69 66 28 20 72 63  busy );.  if( rc
2b50: 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
2b60: 20 20 20 70 50 61 72 73 65 2d 3e 72 63 20 3d 20     pParse->rc = 
2b70: 72 63 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e  rc;.    pParse->
2b80: 6e 45 72 72 2b 2b 3b 0a 20 20 7d 0a 20 20 72 65  nErr++;.  }.  re
2b90: 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a  turn rc;.}../*.*
2ba0: 2a 20 54 68 65 20 76 65 72 73 69 6f 6e 20 6f 66  * The version of
2bb0: 20 74 68 65 20 6c 69 62 72 61 72 79 0a 2a 2f 0a   the library.*/.
2bc0: 63 6f 6e 73 74 20 63 68 61 72 20 72 63 73 69 64  const char rcsid
2bd0: 33 5b 5d 20 3d 20 22 40 28 23 29 20 5c 30 34 34  3[] = "@(#) \044
2be0: 49 64 3a 20 53 51 4c 69 74 65 20 76 65 72 73 69  Id: SQLite versi
2bf0: 6f 6e 20 22 20 53 51 4c 49 54 45 5f 56 45 52 53  on " SQLITE_VERS
2c00: 49 4f 4e 20 22 20 24 22 3b 0a 63 6f 6e 73 74 20  ION " $";.const 
2c10: 63 68 61 72 20 73 71 6c 69 74 65 33 5f 76 65 72  char sqlite3_ver
2c20: 73 69 6f 6e 5b 5d 20 3d 20 53 51 4c 49 54 45 5f  sion[] = SQLITE_
2c30: 56 45 52 53 49 4f 4e 3b 0a 63 6f 6e 73 74 20 63  VERSION;.const c
2c40: 68 61 72 20 2a 73 71 6c 69 74 65 33 5f 6c 69 62  har *sqlite3_lib
2c50: 76 65 72 73 69 6f 6e 28 76 6f 69 64 29 7b 20 72  version(void){ r
2c60: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 76 65  eturn sqlite3_ve
2c70: 72 73 69 6f 6e 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20  rsion; }../*.** 
2c80: 54 68 69 73 20 69 73 20 74 68 65 20 64 65 66 61  This is the defa
2c90: 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  ult collating fu
2ca0: 6e 63 74 69 6f 6e 20 6e 61 6d 65 64 20 22 42 49  nction named "BI
2cb0: 4e 41 52 59 22 20 77 68 69 63 68 20 69 73 20 61  NARY" which is a
2cc0: 6c 77 61 79 73 0a 2a 2a 20 61 76 61 69 6c 61 62  lways.** availab
2cd0: 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  le..*/.static in
2ce0: 74 20 62 69 6e 61 72 79 43 6f 6c 6c 61 74 69 6e  t binaryCollatin
2cf0: 67 46 75 6e 63 28 0a 20 20 76 6f 69 64 20 2a 4e  gFunc(.  void *N
2d00: 6f 74 55 73 65 64 2c 0a 20 20 69 6e 74 20 6e 4b  otUsed,.  int nK
2d10: 65 79 31 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20  ey1, const void 
2d20: 2a 70 4b 65 79 31 2c 0a 20 20 69 6e 74 20 6e 4b  *pKey1,.  int nK
2d30: 65 79 32 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20  ey2, const void 
2d40: 2a 70 4b 65 79 32 0a 29 7b 0a 20 20 69 6e 74 20  *pKey2.){.  int 
2d50: 72 63 2c 20 6e 3b 0a 20 20 6e 20 3d 20 6e 4b 65  rc, n;.  n = nKe
2d60: 79 31 3c 6e 4b 65 79 32 20 3f 20 6e 4b 65 79 31  y1<nKey2 ? nKey1
2d70: 20 3a 20 6e 4b 65 79 32 3b 0a 20 20 72 63 20 3d   : nKey2;.  rc =
2d80: 20 6d 65 6d 63 6d 70 28 70 4b 65 79 31 2c 20 70   memcmp(pKey1, p
2d90: 4b 65 79 32 2c 20 6e 29 3b 0a 20 20 69 66 28 20  Key2, n);.  if( 
2da0: 72 63 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20  rc==0 ){.    rc 
2db0: 3d 20 6e 4b 65 79 31 20 2d 20 6e 4b 65 79 32 3b  = nKey1 - nKey2;
2dc0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63  .  }.  return rc
2dd0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 6f 74 68  ;.}../*.** Anoth
2de0: 65 72 20 62 75 69 6c 74 2d 69 6e 20 63 6f 6c 6c  er built-in coll
2df0: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 3a 20  ating sequence: 
2e00: 4e 4f 43 41 53 45 2e 20 0a 2a 2a 0a 2a 2a 20 54  NOCASE. .**.** T
2e10: 68 69 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  his collating se
2e20: 71 75 65 6e 63 65 20 69 73 20 69 6e 74 65 6e 64  quence is intend
2e30: 65 64 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f  ed to be used fo
2e40: 72 20 22 63 61 73 65 20 69 6e 64 65 70 65 6e 64  r "case independ
2e50: 61 6e 74 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f  ant.** compariso
2e60: 6e 22 2e 20 53 51 4c 69 74 65 27 73 20 6b 6e 6f  n". SQLite's kno
2e70: 77 6c 65 64 67 65 20 6f 66 20 75 70 70 65 72 20  wledge of upper 
2e80: 61 6e 64 20 6c 6f 77 65 72 20 63 61 73 65 20 65  and lower case e
2e90: 71 75 69 76 61 6c 65 6e 74 73 0a 2a 2a 20 65 78  quivalents.** ex
2ea0: 74 65 6e 64 73 20 6f 6e 6c 79 20 74 6f 20 74 68  tends only to th
2eb0: 65 20 32 36 20 63 68 61 72 61 63 74 65 72 73 20  e 26 characters 
2ec0: 75 73 65 64 20 69 6e 20 74 68 65 20 45 6e 67 6c  used in the Engl
2ed0: 69 73 68 20 6c 61 6e 67 75 61 67 65 2e 0a 2a 2a  ish language..**
2ee0: 0a 2a 2a 20 41 74 20 74 68 65 20 6d 6f 6d 65 6e  .** At the momen
2ef0: 74 20 74 68 65 72 65 20 69 73 20 6f 6e 6c 79 20  t there is only 
2f00: 61 20 55 54 46 2d 38 20 69 6d 70 6c 65 6d 65 6e  a UTF-8 implemen
2f10: 74 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61 74 69  tation..*/.stati
2f20: 63 20 69 6e 74 20 6e 6f 63 61 73 65 43 6f 6c 6c  c int nocaseColl
2f30: 61 74 69 6e 67 46 75 6e 63 28 0a 20 20 76 6f 69  atingFunc(.  voi
2f40: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 69 6e  d *NotUsed,.  in
2f50: 74 20 6e 4b 65 79 31 2c 20 63 6f 6e 73 74 20 76  t nKey1, const v
2f60: 6f 69 64 20 2a 70 4b 65 79 31 2c 0a 20 20 69 6e  oid *pKey1,.  in
2f70: 74 20 6e 4b 65 79 32 2c 20 63 6f 6e 73 74 20 76  t nKey2, const v
2f80: 6f 69 64 20 2a 70 4b 65 79 32 0a 29 7b 0a 20 20  oid *pKey2.){.  
2f90: 69 6e 74 20 72 20 3d 20 73 71 6c 69 74 65 33 53  int r = sqlite3S
2fa0: 74 72 4e 49 43 6d 70 28 0a 20 20 20 20 20 20 28  trNICmp(.      (
2fb0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 70 4b 65  const char *)pKe
2fc0: 79 31 2c 20 28 63 6f 6e 73 74 20 63 68 61 72 20  y1, (const char 
2fd0: 2a 29 70 4b 65 79 32 2c 20 28 6e 4b 65 79 31 3c  *)pKey2, (nKey1<
2fe0: 6e 4b 65 79 32 29 3f 6e 4b 65 79 31 3a 6e 4b 65  nKey2)?nKey1:nKe
2ff0: 79 32 29 3b 0a 20 20 69 66 28 20 30 3d 3d 72 20  y2);.  if( 0==r 
3000: 29 7b 0a 20 20 20 20 72 20 3d 20 6e 4b 65 79 31  ){.    r = nKey1
3010: 2d 6e 4b 65 79 32 3b 0a 20 20 7d 0a 20 20 72 65  -nKey2;.  }.  re
3020: 74 75 72 6e 20 72 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn r;.}../*.**
3030: 20 52 65 74 75 72 6e 20 74 68 65 20 52 4f 57 49   Return the ROWI
3040: 44 20 6f 66 20 74 68 65 20 6d 6f 73 74 20 72 65  D of the most re
3050: 63 65 6e 74 20 69 6e 73 65 72 74 0a 2a 2f 0a 73  cent insert.*/.s
3060: 71 6c 69 74 65 5f 69 6e 74 36 34 20 73 71 6c 69  qlite_int64 sqli
3070: 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f  te3_last_insert_
3080: 72 6f 77 69 64 28 73 71 6c 69 74 65 33 20 2a 64  rowid(sqlite3 *d
3090: 62 29 7b 0a 20 20 72 65 74 75 72 6e 20 64 62 2d  b){.  return db-
30a0: 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 7d 0a 0a 2f  >lastRowid;.}../
30b0: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
30c0: 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 6e 67 65  number of change
30d0: 73 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 72 65  s in the most re
30e0: 63 65 6e 74 20 63 61 6c 6c 20 74 6f 20 73 71 6c  cent call to sql
30f0: 69 74 65 33 5f 65 78 65 63 28 29 2e 0a 2a 2f 0a  ite3_exec()..*/.
3100: 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 68 61 6e  int sqlite3_chan
3110: 67 65 73 28 73 71 6c 69 74 65 33 20 2a 64 62 29  ges(sqlite3 *db)
3120: 7b 0a 20 20 72 65 74 75 72 6e 20 64 62 2d 3e 6e  {.  return db->n
3130: 43 68 61 6e 67 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  Change;.}../*.**
3140: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   Return the numb
3150: 65 72 20 6f 66 20 63 68 61 6e 67 65 73 20 73 69  er of changes si
3160: 6e 63 65 20 74 68 65 20 64 61 74 61 62 61 73 65  nce the database
3170: 20 68 61 6e 64 6c 65 20 77 61 73 20 6f 70 65 6e   handle was open
3180: 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ed..*/.int sqlit
3190: 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73  e3_total_changes
31a0: 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20  (sqlite3 *db){. 
31b0: 20 72 65 74 75 72 6e 20 64 62 2d 3e 6e 54 6f 74   return db->nTot
31c0: 61 6c 43 68 61 6e 67 65 3b 0a 7d 0a 0a 2f 2a 0a  alChange;.}../*.
31d0: 2a 2a 20 43 6c 6f 73 65 20 61 6e 20 65 78 69 73  ** Close an exis
31e0: 74 69 6e 67 20 53 51 4c 69 74 65 20 64 61 74 61  ting SQLite data
31f0: 62 61 73 65 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  base.*/.int sqli
3200: 74 65 33 5f 63 6c 6f 73 65 28 73 71 6c 69 74 65  te3_close(sqlite
3210: 33 20 2a 64 62 29 7b 0a 20 20 48 61 73 68 45 6c  3 *db){.  HashEl
3220: 65 6d 20 2a 69 3b 0a 20 20 69 6e 74 20 6a 3b 0a  em *i;.  int j;.
3230: 0a 20 20 69 66 28 20 21 64 62 20 29 7b 0a 20 20  .  if( !db ){.  
3240: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
3250: 4f 4b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71  OK;.  }.  if( sq
3260: 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
3270: 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75  (db) ){.    retu
3280: 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  rn SQLITE_MISUSE
3290: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74  ;.  }..  /* If t
32a0: 68 65 72 65 20 61 72 65 20 61 6e 79 20 6f 75 74  here are any out
32b0: 73 74 61 6e 64 69 6e 67 20 56 4d 73 2c 20 72 65  standing VMs, re
32c0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 42 55 53 59  turn SQLITE_BUSY
32d0: 2e 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 70  . */.  if( db->p
32e0: 56 64 62 65 20 29 7b 0a 20 20 20 20 73 71 6c 69  Vdbe ){.    sqli
32f0: 74 65 33 45 72 72 6f 72 28 64 62 2c 20 53 51 4c  te3Error(db, SQL
3300: 49 54 45 5f 42 55 53 59 2c 20 0a 20 20 20 20 20  ITE_BUSY, .     
3310: 20 20 20 22 55 6e 61 62 6c 65 20 74 6f 20 63 6c     "Unable to cl
3320: 6f 73 65 20 64 75 65 20 74 6f 20 75 6e 66 69 6e  ose due to unfin
3330: 61 6c 69 73 65 64 20 73 74 61 74 65 6d 65 6e 74  alised statement
3340: 73 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  s");.    return 
3350: 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d  SQLITE_BUSY;.  }
3360: 0a 20 20 61 73 73 65 72 74 28 20 21 73 71 6c 69  .  assert( !sqli
3370: 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 28 64  te3SafetyCheck(d
3380: 62 29 20 29 3b 0a 0a 20 20 2f 2a 20 46 49 58 20  b) );..  /* FIX 
3390: 4d 45 3a 20 64 62 2d 3e 6d 61 67 69 63 20 6d 61  ME: db->magic ma
33a0: 79 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c 49  y be set to SQLI
33b0: 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20  TE_MAGIC_CLOSED 
33c0: 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  if the database.
33d0: 20 20 2a 2a 20 63 61 6e 6e 6f 74 20 62 65 20 6f    ** cannot be o
33e0: 70 65 6e 65 64 20 66 6f 72 20 73 6f 6d 65 20 72  pened for some r
33f0: 65 61 73 6f 6e 2e 20 53 6f 20 74 68 69 73 20 72  eason. So this r
3400: 6f 75 74 69 6e 65 20 6e 65 65 64 73 20 74 6f 20  outine needs to 
3410: 72 75 6e 20 69 6e 0a 20 20 2a 2a 20 74 68 61 74  run in.  ** that
3420: 20 63 61 73 65 2e 20 42 75 74 20 6d 61 79 62 65   case. But maybe
3430: 20 74 68 65 72 65 20 73 68 6f 75 6c 64 20 62 65   there should be
3440: 20 61 6e 20 65 78 74 72 61 20 6d 61 67 69 63 20   an extra magic 
3450: 76 61 6c 75 65 20 66 6f 72 20 74 68 65 0a 20 20  value for the.  
3460: 2a 2a 20 22 66 61 69 6c 65 64 20 74 6f 20 6f 70  ** "failed to op
3470: 65 6e 22 20 73 74 61 74 65 2e 0a 20 20 2a 2f 0a  en" state..  */.
3480: 20 20 69 66 28 20 64 62 2d 3e 6d 61 67 69 63 21    if( db->magic!
3490: 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c  =SQLITE_MAGIC_CL
34a0: 4f 53 45 44 20 26 26 20 73 71 6c 69 74 65 33 53  OSED && sqlite3S
34b0: 61 66 65 74 79 4f 6e 28 64 62 29 20 29 7b 0a 20  afetyOn(db) ){. 
34c0: 20 20 20 2f 2a 20 70 72 69 6e 74 66 28 22 44 49     /* printf("DI
34d0: 44 20 4e 4f 54 20 43 4c 4f 53 45 5c 6e 22 29 3b  D NOT CLOSE\n");
34e0: 20 66 66 6c 75 73 68 28 73 74 64 6f 75 74 29 3b   fflush(stdout);
34f0: 20 2a 2f 0a 20 20 20 20 72 65 74 75 72 6e 20 53   */.    return S
3500: 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d  QLITE_ERROR;.  }
3510: 0a 0a 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 64  ..  for(j=0; j<d
3520: 62 2d 3e 6e 44 62 3b 20 6a 2b 2b 29 7b 0a 20 20  b->nDb; j++){.  
3530: 20 20 73 74 72 75 63 74 20 44 62 20 2a 70 44 62    struct Db *pDb
3540: 20 3d 20 26 64 62 2d 3e 61 44 62 5b 6a 5d 3b 0a   = &db->aDb[j];.
3550: 20 20 20 20 69 66 28 20 70 44 62 2d 3e 70 42 74      if( pDb->pBt
3560: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
3570: 33 42 74 72 65 65 43 6c 6f 73 65 28 70 44 62 2d  3BtreeClose(pDb-
3580: 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 70 44 62  >pBt);.      pDb
3590: 2d 3e 70 42 74 20 3d 20 30 3b 0a 20 20 20 20 7d  ->pBt = 0;.    }
35a0: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52 65  .  }.  sqlite3Re
35b0: 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d  setInternalSchem
35c0: 61 28 64 62 2c 20 30 29 3b 0a 20 20 61 73 73 65  a(db, 0);.  asse
35d0: 72 74 28 20 64 62 2d 3e 6e 44 62 3c 3d 32 20 29  rt( db->nDb<=2 )
35e0: 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  ;.  assert( db->
35f0: 61 44 62 3d 3d 64 62 2d 3e 61 44 62 53 74 61 74  aDb==db->aDbStat
3600: 69 63 20 29 3b 0a 20 20 66 6f 72 28 69 3d 73 71  ic );.  for(i=sq
3610: 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 26 64  liteHashFirst(&d
3620: 62 2d 3e 61 46 75 6e 63 29 3b 20 69 3b 20 69 3d  b->aFunc); i; i=
3630: 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 69  sqliteHashNext(i
3640: 29 29 7b 0a 20 20 20 20 46 75 6e 63 44 65 66 20  )){.    FuncDef 
3650: 2a 70 46 75 6e 63 2c 20 2a 70 4e 65 78 74 3b 0a  *pFunc, *pNext;.
3660: 20 20 20 20 66 6f 72 28 70 46 75 6e 63 20 3d 20      for(pFunc = 
3670: 28 46 75 6e 63 44 65 66 2a 29 73 71 6c 69 74 65  (FuncDef*)sqlite
3680: 48 61 73 68 44 61 74 61 28 69 29 3b 20 70 46 75  HashData(i); pFu
3690: 6e 63 3b 20 70 46 75 6e 63 3d 70 4e 65 78 74 29  nc; pFunc=pNext)
36a0: 7b 0a 20 20 20 20 20 20 70 4e 65 78 74 20 3d 20  {.      pNext = 
36b0: 70 46 75 6e 63 2d 3e 70 4e 65 78 74 3b 0a 20 20  pFunc->pNext;.  
36c0: 20 20 20 20 73 71 6c 69 74 65 46 72 65 65 28 70      sqliteFree(p
36d0: 46 75 6e 63 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  Func);.    }.  }
36e0: 0a 0a 20 20 66 6f 72 28 69 3d 73 71 6c 69 74 65  ..  for(i=sqlite
36f0: 48 61 73 68 46 69 72 73 74 28 26 64 62 2d 3e 61  HashFirst(&db->a
3700: 43 6f 6c 6c 53 65 71 29 3b 20 69 3b 20 69 3d 73  CollSeq); i; i=s
3710: 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 69 29  qliteHashNext(i)
3720: 29 7b 0a 20 20 20 20 43 6f 6c 6c 53 65 71 20 2a  ){.    CollSeq *
3730: 70 43 6f 6c 6c 20 3d 20 28 43 6f 6c 6c 53 65 71  pColl = (CollSeq
3740: 20 2a 29 73 71 6c 69 74 65 48 61 73 68 44 61 74   *)sqliteHashDat
3750: 61 28 69 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  a(i);.    sqlite
3760: 46 72 65 65 28 70 43 6f 6c 6c 29 3b 0a 20 20 7d  Free(pColl);.  }
3770: 0a 20 20 73 71 6c 69 74 65 33 48 61 73 68 43 6c  .  sqlite3HashCl
3780: 65 61 72 28 26 64 62 2d 3e 61 43 6f 6c 6c 53 65  ear(&db->aCollSe
3790: 71 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33 48 61  q);..  sqlite3Ha
37a0: 73 68 43 6c 65 61 72 28 26 64 62 2d 3e 61 46 75  shClear(&db->aFu
37b0: 6e 63 29 3b 0a 20 20 73 71 6c 69 74 65 33 45 72  nc);.  sqlite3Er
37c0: 72 6f 72 28 64 62 2c 20 53 51 4c 49 54 45 5f 4f  ror(db, SQLITE_O
37d0: 4b 2c 20 30 29 3b 20 2f 2a 20 44 65 61 6c 6c 6f  K, 0); /* Deallo
37e0: 63 61 74 65 73 20 61 6e 79 20 63 61 63 68 65 64  cates any cached
37f0: 20 65 72 72 6f 72 20 73 74 72 69 6e 67 73 2e 20   error strings. 
3800: 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 70 56 61  */.  if( db->pVa
3810: 6c 75 65 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  lue ){.    sqlit
3820: 65 33 56 61 6c 75 65 46 72 65 65 28 64 62 2d 3e  e3ValueFree(db->
3830: 70 56 61 6c 75 65 29 3b 0a 20 20 7d 0a 20 20 69  pValue);.  }.  i
3840: 66 28 20 64 62 2d 3e 70 45 72 72 20 29 7b 0a 20  f( db->pErr ){. 
3850: 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46     sqlite3ValueF
3860: 72 65 65 28 64 62 2d 3e 70 45 72 72 29 3b 0a 20  ree(db->pErr);. 
3870: 20 7d 0a 0a 20 20 64 62 2d 3e 6d 61 67 69 63 20   }..  db->magic 
3880: 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45  = SQLITE_MAGIC_E
3890: 52 52 4f 52 3b 0a 20 20 73 71 6c 69 74 65 46 72  RROR;.  sqliteFr
38a0: 65 65 28 64 62 29 3b 0a 20 20 72 65 74 75 72 6e  ee(db);.  return
38b0: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f   SQLITE_OK;.}../
38c0: 2a 0a 2a 2a 20 52 6f 6c 6c 62 61 63 6b 20 61 6c  *.** Rollback al
38d0: 6c 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  l database files
38e0: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
38f0: 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c  3RollbackAll(sql
3900: 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74  ite3 *db){.  int
3910: 20 69 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69   i;.  for(i=0; i
3920: 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a  <db->nDb; i++){.
3930: 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b      if( db->aDb[
3940: 69 5d 2e 70 42 74 20 29 7b 0a 20 20 20 20 20 20  i].pBt ){.      
3950: 73 71 6c 69 74 65 33 42 74 72 65 65 52 6f 6c 6c  sqlite3BtreeRoll
3960: 62 61 63 6b 28 64 62 2d 3e 61 44 62 5b 69 5d 2e  back(db->aDb[i].
3970: 70 42 74 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  pBt);.      db->
3980: 61 44 62 5b 69 5d 2e 69 6e 54 72 61 6e 73 20 3d  aDb[i].inTrans =
3990: 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   0;.    }.  }.  
39a0: 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65  sqlite3ResetInte
39b0: 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 30  rnalSchema(db, 0
39c0: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  );.}../*.** Retu
39d0: 72 6e 20 61 20 73 74 61 74 69 63 20 73 74 72 69  rn a static stri
39e0: 6e 67 20 74 68 61 74 20 64 65 73 63 72 69 62 65  ng that describe
39f0: 73 20 74 68 65 20 6b 69 6e 64 20 6f 66 20 65 72  s the kind of er
3a00: 72 6f 72 20 73 70 65 63 69 66 69 65 64 20 69 6e  ror specified in
3a10: 20 74 68 65 0a 2a 2a 20 61 72 67 75 6d 65 6e 74   the.** argument
3a20: 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20  ..*/.const char 
3a30: 2a 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 69  *sqlite3ErrStr(i
3a40: 6e 74 20 72 63 29 7b 0a 20 20 63 6f 6e 73 74 20  nt rc){.  const 
3a50: 63 68 61 72 20 2a 7a 3b 0a 20 20 73 77 69 74 63  char *z;.  switc
3a60: 68 28 20 72 63 20 29 7b 0a 20 20 20 20 63 61 73  h( rc ){.    cas
3a70: 65 20 53 51 4c 49 54 45 5f 52 4f 57 3a 0a 20 20  e SQLITE_ROW:.  
3a80: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 44 4f    case SQLITE_DO
3a90: 4e 45 3a 0a 20 20 20 20 63 61 73 65 20 53 51 4c  NE:.    case SQL
3aa0: 49 54 45 5f 4f 4b 3a 20 20 20 20 20 20 20 20 20  ITE_OK:         
3ab0: 7a 20 3d 20 22 6e 6f 74 20 61 6e 20 65 72 72 6f  z = "not an erro
3ac0: 72 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  r";             
3ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
3ae0: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
3af0: 49 54 45 5f 45 52 52 4f 52 3a 20 20 20 20 20 20  ITE_ERROR:      
3b00: 7a 20 3d 20 22 53 51 4c 20 6c 6f 67 69 63 20 65  z = "SQL logic e
3b10: 72 72 6f 72 20 6f 72 20 6d 69 73 73 69 6e 67 20  rror or missing 
3b20: 64 61 74 61 62 61 73 65 22 3b 20 20 20 62 72 65  database";   bre
3b30: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
3b40: 49 54 45 5f 49 4e 54 45 52 4e 41 4c 3a 20 20 20  ITE_INTERNAL:   
3b50: 7a 20 3d 20 22 69 6e 74 65 72 6e 61 6c 20 53 51  z = "internal SQ
3b60: 4c 69 74 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  Lite implementat
3b70: 69 6f 6e 20 66 6c 61 77 22 3b 20 20 20 62 72 65  ion flaw";   bre
3b80: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
3b90: 49 54 45 5f 50 45 52 4d 3a 20 20 20 20 20 20 20  ITE_PERM:       
3ba0: 7a 20 3d 20 22 61 63 63 65 73 73 20 70 65 72 6d  z = "access perm
3bb0: 69 73 73 69 6f 6e 20 64 65 6e 69 65 64 22 3b 20  ission denied"; 
3bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
3bd0: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
3be0: 49 54 45 5f 41 42 4f 52 54 3a 20 20 20 20 20 20  ITE_ABORT:      
3bf0: 7a 20 3d 20 22 63 61 6c 6c 62 61 63 6b 20 72 65  z = "callback re
3c00: 71 75 65 73 74 65 64 20 71 75 65 72 79 20 61 62  quested query ab
3c10: 6f 72 74 22 3b 20 20 20 20 20 20 20 20 62 72 65  ort";        bre
3c20: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
3c30: 49 54 45 5f 42 55 53 59 3a 20 20 20 20 20 20 20  ITE_BUSY:       
3c40: 7a 20 3d 20 22 64 61 74 61 62 61 73 65 20 69 73  z = "database is
3c50: 20 6c 6f 63 6b 65 64 22 3b 20 20 20 20 20 20 20   locked";       
3c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
3c70: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
3c80: 49 54 45 5f 4c 4f 43 4b 45 44 3a 20 20 20 20 20  ITE_LOCKED:     
3c90: 7a 20 3d 20 22 64 61 74 61 62 61 73 65 20 74 61  z = "database ta
3ca0: 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64 22 3b 20  ble is locked"; 
3cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
3cc0: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
3cd0: 49 54 45 5f 4e 4f 4d 45 4d 3a 20 20 20 20 20 20  ITE_NOMEM:      
3ce0: 7a 20 3d 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f  z = "out of memo
3cf0: 72 79 22 3b 20 20 20 20 20 20 20 20 20 20 20 20  ry";            
3d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
3d10: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
3d20: 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3a 20 20 20  ITE_READONLY:   
3d30: 7a 20 3d 20 22 61 74 74 65 6d 70 74 20 74 6f 20  z = "attempt to 
3d40: 77 72 69 74 65 20 61 20 72 65 61 64 6f 6e 6c 79  write a readonly
3d50: 20 64 61 74 61 62 61 73 65 22 3b 20 20 62 72 65   database";  bre
3d60: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
3d70: 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3a 20 20  ITE_INTERRUPT:  
3d80: 7a 20 3d 20 22 69 6e 74 65 72 72 75 70 74 65 64  z = "interrupted
3d90: 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ";              
3da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
3db0: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
3dc0: 49 54 45 5f 49 4f 45 52 52 3a 20 20 20 20 20 20  ITE_IOERR:      
3dd0: 7a 20 3d 20 22 64 69 73 6b 20 49 2f 4f 20 65 72  z = "disk I/O er
3de0: 72 6f 72 22 3b 20 20 20 20 20 20 20 20 20 20 20  ror";           
3df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
3e00: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
3e10: 49 54 45 5f 43 4f 52 52 55 50 54 3a 20 20 20 20  ITE_CORRUPT:    
3e20: 7a 20 3d 20 22 64 61 74 61 62 61 73 65 20 64 69  z = "database di
3e30: 73 6b 20 69 6d 61 67 65 20 69 73 20 6d 61 6c 66  sk image is malf
3e40: 6f 72 6d 65 64 22 3b 20 20 20 20 20 20 62 72 65  ormed";      bre
3e50: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
3e60: 49 54 45 5f 4e 4f 54 46 4f 55 4e 44 3a 20 20 20  ITE_NOTFOUND:   
3e70: 7a 20 3d 20 22 74 61 62 6c 65 20 6f 72 20 72 65  z = "table or re
3e80: 63 6f 72 64 20 6e 6f 74 20 66 6f 75 6e 64 22 3b  cord not found";
3e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
3ea0: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
3eb0: 49 54 45 5f 46 55 4c 4c 3a 20 20 20 20 20 20 20  ITE_FULL:       
3ec0: 7a 20 3d 20 22 64 61 74 61 62 61 73 65 20 69 73  z = "database is
3ed0: 20 66 75 6c 6c 22 3b 20 20 20 20 20 20 20 20 20   full";         
3ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
3ef0: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
3f00: 49 54 45 5f 43 41 4e 54 4f 50 45 4e 3a 20 20 20  ITE_CANTOPEN:   
3f10: 7a 20 3d 20 22 75 6e 61 62 6c 65 20 74 6f 20 6f  z = "unable to o
3f20: 70 65 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  pen database fil
3f30: 65 22 3b 20 20 20 20 20 20 20 20 20 20 62 72 65  e";          bre
3f40: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
3f50: 49 54 45 5f 50 52 4f 54 4f 43 4f 4c 3a 20 20 20  ITE_PROTOCOL:   
3f60: 7a 20 3d 20 22 64 61 74 61 62 61 73 65 20 6c 6f  z = "database lo
3f70: 63 6b 69 6e 67 20 70 72 6f 74 6f 63 6f 6c 20 66  cking protocol f
3f80: 61 69 6c 75 72 65 22 3b 20 20 20 20 20 62 72 65  ailure";     bre
3f90: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
3fa0: 49 54 45 5f 45 4d 50 54 59 3a 20 20 20 20 20 20  ITE_EMPTY:      
3fb0: 7a 20 3d 20 22 74 61 62 6c 65 20 63 6f 6e 74 61  z = "table conta
3fc0: 69 6e 73 20 6e 6f 20 64 61 74 61 22 3b 20 20 20  ins no data";   
3fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
3fe0: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
3ff0: 49 54 45 5f 53 43 48 45 4d 41 3a 20 20 20 20 20  ITE_SCHEMA:     
4000: 7a 20 3d 20 22 64 61 74 61 62 61 73 65 20 73 63  z = "database sc
4010: 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64  hema has changed
4020: 22 3b 20 20 20 20 20 20 20 20 20 20 20 62 72 65  ";           bre
4030: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
4040: 49 54 45 5f 54 4f 4f 42 49 47 3a 20 20 20 20 20  ITE_TOOBIG:     
4050: 7a 20 3d 20 22 74 6f 6f 20 6d 75 63 68 20 64 61  z = "too much da
4060: 74 61 20 66 6f 72 20 6f 6e 65 20 74 61 62 6c 65  ta for one table
4070: 20 72 6f 77 22 3b 20 20 20 20 20 20 20 62 72 65   row";       bre
4080: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
4090: 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 3a 20  ITE_CONSTRAINT: 
40a0: 7a 20 3d 20 22 63 6f 6e 73 74 72 61 69 6e 74 20  z = "constraint 
40b0: 66 61 69 6c 65 64 22 3b 20 20 20 20 20 20 20 20  failed";        
40c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
40d0: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
40e0: 49 54 45 5f 4d 49 53 4d 41 54 43 48 3a 20 20 20  ITE_MISMATCH:   
40f0: 7a 20 3d 20 22 64 61 74 61 74 79 70 65 20 6d 69  z = "datatype mi
4100: 73 6d 61 74 63 68 22 3b 20 20 20 20 20 20 20 20  smatch";        
4110: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
4120: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
4130: 49 54 45 5f 4d 49 53 55 53 45 3a 20 20 20 20 20  ITE_MISUSE:     
4140: 7a 20 3d 20 22 6c 69 62 72 61 72 79 20 72 6f 75  z = "library rou
4150: 74 69 6e 65 20 63 61 6c 6c 65 64 20 6f 75 74 20  tine called out 
4160: 6f 66 20 73 65 71 75 65 6e 63 65 22 3b 62 72 65  of sequence";bre
4170: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
4180: 49 54 45 5f 4e 4f 4c 46 53 3a 20 20 20 20 20 20  ITE_NOLFS:      
4190: 7a 20 3d 20 22 6b 65 72 6e 65 6c 20 6c 61 63 6b  z = "kernel lack
41a0: 73 20 6c 61 72 67 65 20 66 69 6c 65 20 73 75 70  s large file sup
41b0: 70 6f 72 74 22 3b 20 20 20 20 20 20 20 62 72 65  port";       bre
41c0: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
41d0: 49 54 45 5f 41 55 54 48 3a 20 20 20 20 20 20 20  ITE_AUTH:       
41e0: 7a 20 3d 20 22 61 75 74 68 6f 72 69 7a 61 74 69  z = "authorizati
41f0: 6f 6e 20 64 65 6e 69 65 64 22 3b 20 20 20 20 20  on denied";     
4200: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
4210: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
4220: 49 54 45 5f 46 4f 52 4d 41 54 3a 20 20 20 20 20  ITE_FORMAT:     
4230: 7a 20 3d 20 22 61 75 78 69 6c 69 61 72 79 20 64  z = "auxiliary d
4240: 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 20 65  atabase format e
4250: 72 72 6f 72 22 3b 20 20 20 20 20 20 20 62 72 65  rror";       bre
4260: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
4270: 49 54 45 5f 52 41 4e 47 45 3a 20 20 20 20 20 20  ITE_RANGE:      
4280: 7a 20 3d 20 22 62 69 6e 64 20 69 6e 64 65 78 20  z = "bind index 
4290: 6f 75 74 20 6f 66 20 72 61 6e 67 65 22 3b 20 20  out of range";  
42a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
42b0: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
42c0: 49 54 45 5f 4e 4f 54 41 44 42 3a 20 20 20 20 20  ITE_NOTADB:     
42d0: 7a 20 3d 20 22 66 69 6c 65 20 69 73 20 65 6e 63  z = "file is enc
42e0: 72 79 70 74 65 64 20 6f 72 20 69 73 20 6e 6f 74  rypted or is not
42f0: 20 61 20 64 61 74 61 62 61 73 65 22 3b 62 72 65   a database";bre
4300: 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a  ak;.    default:
4310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4320: 7a 20 3d 20 22 75 6e 6b 6e 6f 77 6e 20 65 72 72  z = "unknown err
4330: 6f 72 22 3b 20 20 20 20 20 20 20 20 20 20 20 20  or";            
4340: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
4350: 61 6b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  ak;.  }.  return
4360: 20 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69   z;.}../*.** Thi
4370: 73 20 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d  s routine implem
4380: 65 6e 74 73 20 61 20 62 75 73 79 20 63 61 6c 6c  ents a busy call
4390: 62 61 63 6b 20 74 68 61 74 20 73 6c 65 65 70 73  back that sleeps
43a0: 20 61 6e 64 20 74 72 69 65 73 0a 2a 2a 20 61 67   and tries.** ag
43b0: 61 69 6e 20 75 6e 74 69 6c 20 61 20 74 69 6d 65  ain until a time
43c0: 6f 75 74 20 76 61 6c 75 65 20 69 73 20 72 65 61  out value is rea
43d0: 63 68 65 64 2e 20 20 54 68 65 20 74 69 6d 65 6f  ched.  The timeo
43e0: 75 74 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20 61  ut value is.** a
43f0: 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d 62 65 72  n integer number
4400: 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73   of milliseconds
4410: 20 70 61 73 73 65 64 20 69 6e 20 61 73 20 74 68   passed in as th
4420: 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d  e first.** argum
4430: 65 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ent..*/.static i
4440: 6e 74 20 73 71 6c 69 74 65 44 65 66 61 75 6c 74  nt sqliteDefault
4450: 42 75 73 79 43 61 6c 6c 62 61 63 6b 28 0a 20 76  BusyCallback(. v
4460: 6f 69 64 20 2a 54 69 6d 65 6f 75 74 2c 20 20 20  oid *Timeout,   
4470: 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
4480: 75 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d  um amount of tim
4490: 65 20 74 6f 20 77 61 69 74 20 2a 2f 0a 20 69 6e  e to wait */. in
44a0: 74 20 63 6f 75 6e 74 20 20 20 20 20 20 20 20 20  t count         
44b0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
44c0: 20 6f 66 20 74 69 6d 65 73 20 74 61 62 6c 65 20   of times table 
44d0: 68 61 73 20 62 65 65 6e 20 62 75 73 79 20 2a 2f  has been busy */
44e0: 0a 29 7b 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  .){.#if SQLITE_M
44f0: 49 4e 5f 53 4c 45 45 50 5f 4d 53 3d 3d 31 0a 20  IN_SLEEP_MS==1. 
4500: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
4510: 61 72 20 64 65 6c 61 79 73 5b 5d 20 3d 0a 20 20  ar delays[] =.  
4520: 20 20 20 7b 20 31 2c 20 32 2c 20 35 2c 20 31 30     { 1, 2, 5, 10
4530: 2c 20 31 35 2c 20 32 30 2c 20 32 35 2c 20 32 35  , 15, 20, 25, 25
4540: 2c 20 20 32 35 2c 20 20 35 30 2c 20 20 35 30 2c  ,  25,  50,  50,
4550: 20 20 35 30 2c 20 31 30 30 7d 3b 0a 20 20 73 74    50, 100};.  st
4560: 61 74 69 63 20 63 6f 6e 73 74 20 73 68 6f 72 74  atic const short
4570: 20 69 6e 74 20 74 6f 74 61 6c 73 5b 5d 20 3d 0a   int totals[] =.
4580: 20 20 20 20 20 7b 20 30 2c 20 31 2c 20 33 2c 20       { 0, 1, 3, 
4590: 20 38 2c 20 31 38 2c 20 33 33 2c 20 35 33 2c 20   8, 18, 33, 53, 
45a0: 37 38 2c 20 31 30 33 2c 20 31 32 38 2c 20 31 37  78, 103, 128, 17
45b0: 38 2c 20 32 32 38 2c 20 32 38 37 7d 3b 0a 23 20  8, 228, 287};.# 
45c0: 64 65 66 69 6e 65 20 4e 44 45 4c 41 59 20 28 73  define NDELAY (s
45d0: 69 7a 65 6f 66 28 64 65 6c 61 79 73 29 2f 73 69  izeof(delays)/si
45e0: 7a 65 6f 66 28 64 65 6c 61 79 73 5b 30 5d 29 29  zeof(delays[0]))
45f0: 0a 20 20 70 74 72 20 74 69 6d 65 6f 75 74 20 3d  .  ptr timeout =
4600: 20 28 70 74 72 29 54 69 6d 65 6f 75 74 3b 0a 20   (ptr)Timeout;. 
4610: 20 70 74 72 20 64 65 6c 61 79 2c 20 70 72 69 6f   ptr delay, prio
4620: 72 3b 0a 0a 20 20 69 66 28 20 63 6f 75 6e 74 20  r;..  if( count 
4630: 3c 3d 20 4e 44 45 4c 41 59 20 29 7b 0a 20 20 20  <= NDELAY ){.   
4640: 20 64 65 6c 61 79 20 3d 20 64 65 6c 61 79 73 5b   delay = delays[
4650: 63 6f 75 6e 74 2d 31 5d 3b 0a 20 20 20 20 70 72  count-1];.    pr
4660: 69 6f 72 20 3d 20 74 6f 74 61 6c 73 5b 63 6f 75  ior = totals[cou
4670: 6e 74 2d 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  nt-1];.  }else{.
4680: 20 20 20 20 64 65 6c 61 79 20 3d 20 64 65 6c 61      delay = dela
4690: 79 73 5b 4e 44 45 4c 41 59 2d 31 5d 3b 0a 20 20  ys[NDELAY-1];.  
46a0: 20 20 70 72 69 6f 72 20 3d 20 74 6f 74 61 6c 73    prior = totals
46b0: 5b 4e 44 45 4c 41 59 2d 31 5d 20 2b 20 64 65 6c  [NDELAY-1] + del
46c0: 61 79 2a 28 63 6f 75 6e 74 2d 4e 44 45 4c 41 59  ay*(count-NDELAY
46d0: 2d 31 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  -1);.  }.  if( p
46e0: 72 69 6f 72 20 2b 20 64 65 6c 61 79 20 3e 20 74  rior + delay > t
46f0: 69 6d 65 6f 75 74 20 29 7b 0a 20 20 20 20 64 65  imeout ){.    de
4700: 6c 61 79 20 3d 20 74 69 6d 65 6f 75 74 20 2d 20  lay = timeout - 
4710: 70 72 69 6f 72 3b 0a 20 20 20 20 69 66 28 20 64  prior;.    if( d
4720: 65 6c 61 79 3c 3d 30 20 29 20 72 65 74 75 72 6e  elay<=0 ) return
4730: 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65   0;.  }.  sqlite
4740: 33 4f 73 53 6c 65 65 70 28 64 65 6c 61 79 29 3b  3OsSleep(delay);
4750: 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 23 65 6c  .  return 1;.#el
4760: 73 65 0a 20 20 69 6e 74 20 74 69 6d 65 6f 75 74  se.  int timeout
4770: 20 3d 20 28 69 6e 74 29 54 69 6d 65 6f 75 74 3b   = (int)Timeout;
4780: 0a 20 20 69 66 28 20 28 63 6f 75 6e 74 2b 31 29  .  if( (count+1)
4790: 2a 31 30 30 30 20 3e 20 74 69 6d 65 6f 75 74 20  *1000 > timeout 
47a0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b  ){.    return 0;
47b0: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 4f 73  .  }.  sqlite3Os
47c0: 53 6c 65 65 70 28 31 30 30 30 29 3b 0a 20 20 72  Sleep(1000);.  r
47d0: 65 74 75 72 6e 20 31 3b 0a 23 65 6e 64 69 66 0a  eturn 1;.#endif.
47e0: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  }../*.** This ro
47f0: 75 74 69 6e 65 20 73 65 74 73 20 74 68 65 20 62  utine sets the b
4800: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72  usy callback for
4810: 20 61 6e 20 53 71 6c 69 74 65 20 64 61 74 61 62   an Sqlite datab
4820: 61 73 65 20 74 6f 20 74 68 65 0a 2a 2a 20 67 69  ase to the.** gi
4830: 76 65 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e  ven callback fun
4840: 63 74 69 6f 6e 20 77 69 74 68 20 74 68 65 20 67  ction with the g
4850: 69 76 65 6e 20 61 72 67 75 6d 65 6e 74 2e 0a 2a  iven argument..*
4860: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 75  /.int sqlite3_bu
4870: 73 79 5f 68 61 6e 64 6c 65 72 28 0a 20 20 73 71  sy_handler(.  sq
4880: 6c 69 74 65 33 20 2a 64 62 2c 0a 20 20 69 6e 74  lite3 *db,.  int
4890: 20 28 2a 78 42 75 73 79 29 28 76 6f 69 64 2a 2c   (*xBusy)(void*,
48a0: 69 6e 74 29 2c 0a 20 20 76 6f 69 64 20 2a 70 41  int),.  void *pA
48b0: 72 67 0a 29 7b 0a 20 20 69 66 28 20 73 71 6c 69  rg.){.  if( sqli
48c0: 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 28 64  te3SafetyCheck(d
48d0: 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  b) ){.    return
48e0: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a   SQLITE_MISUSE;.
48f0: 20 20 7d 0a 20 20 64 62 2d 3e 62 75 73 79 48 61    }.  db->busyHa
4900: 6e 64 6c 65 72 2e 78 46 75 6e 63 20 3d 20 78 42  ndler.xFunc = xB
4910: 75 73 79 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48  usy;.  db->busyH
4920: 61 6e 64 6c 65 72 2e 70 41 72 67 20 3d 20 70 41  andler.pArg = pA
4930: 72 67 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c  rg;.  return SQL
4940: 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e 64  ITE_OK;.}..#ifnd
4950: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
4960: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
4970: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  ./*.** This rout
4980: 69 6e 65 20 73 65 74 73 20 74 68 65 20 70 72 6f  ine sets the pro
4990: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 66  gress callback f
49a0: 6f 72 20 61 6e 20 53 71 6c 69 74 65 20 64 61 74  or an Sqlite dat
49b0: 61 62 61 73 65 20 74 6f 20 74 68 65 0a 2a 2a 20  abase to the.** 
49c0: 67 69 76 65 6e 20 63 61 6c 6c 62 61 63 6b 20 66  given callback f
49d0: 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 74 68 65  unction with the
49e0: 20 67 69 76 65 6e 20 61 72 67 75 6d 65 6e 74 2e   given argument.
49f0: 20 54 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   The progress ca
4a00: 6c 6c 62 61 63 6b 20 77 69 6c 6c 0a 2a 2a 20 62  llback will.** b
4a10: 65 20 69 6e 76 6f 6b 65 64 20 65 76 65 72 79 20  e invoked every 
4a20: 6e 4f 70 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f  nOps opcodes..*/
4a30: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 70 72  .void sqlite3_pr
4a40: 6f 67 72 65 73 73 5f 68 61 6e 64 6c 65 72 28 0a  ogress_handler(.
4a50: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 0a    sqlite3 *db, .
4a60: 20 20 69 6e 74 20 6e 4f 70 73 2c 0a 20 20 69 6e    int nOps,.  in
4a70: 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76  t (*xProgress)(v
4a80: 6f 69 64 2a 29 2c 20 0a 20 20 76 6f 69 64 20 2a  oid*), .  void *
4a90: 70 41 72 67 0a 29 7b 0a 20 20 69 66 28 20 21 73  pArg.){.  if( !s
4aa0: 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
4ab0: 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 69 66 28  k(db) ){.    if(
4ac0: 20 6e 4f 70 73 3e 30 20 29 7b 0a 20 20 20 20 20   nOps>0 ){.     
4ad0: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 3d   db->xProgress =
4ae0: 20 78 50 72 6f 67 72 65 73 73 3b 0a 20 20 20 20   xProgress;.    
4af0: 20 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f    db->nProgressO
4b00: 70 73 20 3d 20 6e 4f 70 73 3b 0a 20 20 20 20 20  ps = nOps;.     
4b10: 20 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72   db->pProgressAr
4b20: 67 20 3d 20 70 41 72 67 3b 0a 20 20 20 20 7d 65  g = pArg;.    }e
4b30: 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 78  lse{.      db->x
4b40: 50 72 6f 67 72 65 73 73 20 3d 20 30 3b 0a 20 20  Progress = 0;.  
4b50: 20 20 20 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73      db->nProgres
4b60: 73 4f 70 73 20 3d 20 30 3b 0a 20 20 20 20 20 20  sOps = 0;.      
4b70: 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67  db->pProgressArg
4b80: 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   = 0;.    }.  }.
4b90: 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a  }.#endif.../*.**
4ba0: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69 6e   This routine in
4bb0: 73 74 61 6c 6c 73 20 61 20 64 65 66 61 75 6c 74  stalls a default
4bc0: 20 62 75 73 79 20 68 61 6e 64 6c 65 72 20 74 68   busy handler th
4bd0: 61 74 20 77 61 69 74 73 20 66 6f 72 20 74 68 65  at waits for the
4be0: 0a 2a 2a 20 73 70 65 63 69 66 69 65 64 20 6e 75  .** specified nu
4bf0: 6d 62 65 72 20 6f 66 20 6d 69 6c 6c 69 73 65 63  mber of millisec
4c00: 6f 6e 64 73 20 62 65 66 6f 72 65 20 72 65 74 75  onds before retu
4c10: 72 6e 69 6e 67 20 30 2e 0a 2a 2f 0a 69 6e 74 20  rning 0..*/.int 
4c20: 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d  sqlite3_busy_tim
4c30: 65 6f 75 74 28 73 71 6c 69 74 65 33 20 2a 64 62  eout(sqlite3 *db
4c40: 2c 20 69 6e 74 20 6d 73 29 7b 0a 20 20 69 66 28  , int ms){.  if(
4c50: 20 6d 73 3e 30 20 29 7b 0a 20 20 20 20 73 71 6c   ms>0 ){.    sql
4c60: 69 74 65 33 5f 62 75 73 79 5f 68 61 6e 64 6c 65  ite3_busy_handle
4c70: 72 28 64 62 2c 20 73 71 6c 69 74 65 44 65 66 61  r(db, sqliteDefa
4c80: 75 6c 74 42 75 73 79 43 61 6c 6c 62 61 63 6b 2c  ultBusyCallback,
4c90: 20 28 76 6f 69 64 2a 29 28 70 74 72 29 6d 73 29   (void*)(ptr)ms)
4ca0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
4cb0: 71 6c 69 74 65 33 5f 62 75 73 79 5f 68 61 6e 64  qlite3_busy_hand
4cc0: 6c 65 72 28 64 62 2c 20 30 2c 20 30 29 3b 0a 20  ler(db, 0, 0);. 
4cd0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49   }.  return SQLI
4ce0: 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  TE_OK;.}../*.** 
4cf0: 43 61 75 73 65 20 61 6e 79 20 70 65 6e 64 69 6e  Cause any pendin
4d00: 67 20 6f 70 65 72 61 74 69 6f 6e 20 74 6f 20 73  g operation to s
4d10: 74 6f 70 20 61 74 20 69 74 73 20 65 61 72 6c 69  top at its earli
4d20: 65 73 74 20 6f 70 70 6f 72 74 75 6e 69 74 79 2e  est opportunity.
4d30: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
4d40: 5f 69 6e 74 65 72 72 75 70 74 28 73 71 6c 69 74  _interrupt(sqlit
4d50: 65 33 20 2a 64 62 29 7b 0a 20 20 69 66 28 20 21  e3 *db){.  if( !
4d60: 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
4d70: 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 64 62  ck(db) ){.    db
4d80: 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54  ->flags |= SQLIT
4d90: 45 5f 49 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d  E_Interrupt;.  }
4da0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 69 6e 64 6f 77  .}../*.** Window
4db0: 73 20 73 79 73 74 65 6d 73 20 73 68 6f 75 6c 64  s systems should
4dc0: 20 63 61 6c 6c 20 74 68 69 73 20 72 6f 75 74 69   call this routi
4dd0: 6e 65 20 74 6f 20 66 72 65 65 20 6d 65 6d 6f 72  ne to free memor
4de0: 79 20 74 68 61 74 0a 2a 2a 20 69 73 20 72 65 74  y that.** is ret
4df0: 75 72 6e 65 64 20 69 6e 20 74 68 65 20 69 6e 20  urned in the in 
4e00: 74 68 65 20 65 72 72 6d 73 67 20 70 61 72 61 6d  the errmsg param
4e10: 65 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33 5f  eter of sqlite3_
4e20: 6f 70 65 6e 28 29 20 77 68 65 6e 0a 2a 2a 20 53  open() when.** S
4e30: 51 4c 69 74 65 20 69 73 20 61 20 44 4c 4c 2e 20  QLite is a DLL. 
4e40: 20 46 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e   For some reason
4e50: 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 77 6f  , it does not wo
4e60: 72 6b 20 74 6f 20 63 61 6c 6c 20 66 72 65 65 28  rk to call free(
4e70: 29 0a 2a 2a 20 64 69 72 65 63 74 6c 79 2e 0a 2a  ).** directly..*
4e80: 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 77  *.** Note that w
4e90: 65 20 6e 65 65 64 20 74 6f 20 63 61 6c 6c 20 66  e need to call f
4ea0: 72 65 65 28 29 20 6e 6f 74 20 73 71 6c 69 74 65  ree() not sqlite
4eb0: 46 72 65 65 28 29 20 68 65 72 65 2e 0a 2a 2f 0a  Free() here..*/.
4ec0: 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 66 72 65  void sqlite3_fre
4ed0: 65 28 63 68 61 72 20 2a 70 29 7b 20 66 72 65 65  e(char *p){ free
4ee0: 28 70 29 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 43 72  (p); }../*.** Cr
4ef0: 65 61 74 65 20 6e 65 77 20 75 73 65 72 20 66 75  eate new user fu
4f00: 6e 63 74 69 6f 6e 73 2e 0a 2a 2f 0a 69 6e 74 20  nctions..*/.int 
4f10: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
4f20: 75 6e 63 74 69 6f 6e 28 0a 20 20 73 71 6c 69 74  unction(.  sqlit
4f30: 65 33 20 2a 64 62 2c 0a 20 20 63 6f 6e 73 74 20  e3 *db,.  const 
4f40: 63 68 61 72 20 2a 7a 46 75 6e 63 74 69 6f 6e 4e  char *zFunctionN
4f50: 61 6d 65 2c 0a 20 20 69 6e 74 20 6e 41 72 67 2c  ame,.  int nArg,
4f60: 0a 20 20 69 6e 74 20 65 6e 63 2c 0a 20 20 76 6f  .  int enc,.  vo
4f70: 69 64 20 2a 70 55 73 65 72 44 61 74 61 2c 0a 20  id *pUserData,. 
4f80: 20 76 6f 69 64 20 28 2a 78 46 75 6e 63 29 28 73   void (*xFunc)(s
4f90: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
4fa0: 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
4fb0: 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a  e **),.  void (*
4fc0: 78 53 74 65 70 29 28 73 71 6c 69 74 65 33 5f 63  xStep)(sqlite3_c
4fd0: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
4fe0: 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20  te3_value **),. 
4ff0: 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 29 28   void (*xFinal)(
5000: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
5010: 29 0a 29 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a  ).){.  FuncDef *
5020: 70 3b 0a 20 20 69 6e 74 20 6e 4e 61 6d 65 3b 0a  p;.  int nName;.
5030: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
5040: 66 65 74 79 43 68 65 63 6b 28 64 62 29 20 29 7b  fetyCheck(db) ){
5050: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
5060: 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 20  TE_MISUSE;.  }. 
5070: 20 69 66 28 20 7a 46 75 6e 63 74 69 6f 6e 4e 61   if( zFunctionNa
5080: 6d 65 3d 3d 30 20 7c 7c 0a 20 20 20 20 20 20 28  me==0 ||.      (
5090: 78 46 75 6e 63 20 26 26 20 28 78 46 69 6e 61 6c  xFunc && (xFinal
50a0: 20 7c 7c 20 78 53 74 65 70 29 29 20 7c 7c 20 0a   || xStep)) || .
50b0: 20 20 20 20 20 20 28 21 78 46 75 6e 63 20 26 26        (!xFunc &&
50c0: 20 28 78 46 69 6e 61 6c 20 26 26 20 21 78 53 74   (xFinal && !xSt
50d0: 65 70 29 29 20 7c 7c 0a 20 20 20 20 20 20 28 21  ep)) ||.      (!
50e0: 78 46 75 6e 63 20 26 26 20 28 21 78 46 69 6e 61  xFunc && (!xFina
50f0: 6c 20 26 26 20 78 53 74 65 70 29 29 20 7c 7c 0a  l && xStep)) ||.
5100: 20 20 20 20 20 20 28 6e 41 72 67 3c 2d 31 20 7c        (nArg<-1 |
5110: 7c 20 6e 41 72 67 3e 31 32 37 29 20 7c 7c 0a 20  | nArg>127) ||. 
5120: 20 20 20 20 20 28 32 35 35 3c 28 6e 4e 61 6d 65       (255<(nName
5130: 20 3d 20 73 74 72 6c 65 6e 28 7a 46 75 6e 63 74   = strlen(zFunct
5140: 69 6f 6e 4e 61 6d 65 29 29 29 20 29 7b 0a 20 20  ionName))) ){.  
5150: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
5160: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 0a 20 20  ERROR;.  }.  .  
5170: 2f 2a 20 49 66 20 53 51 4c 49 54 45 5f 55 54 46  /* If SQLITE_UTF
5180: 31 36 20 69 73 20 73 70 65 63 69 66 69 65 64 20  16 is specified 
5190: 61 73 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20  as the encoding 
51a0: 74 79 70 65 2c 20 74 72 61 6e 73 66 6f 72 6d 20  type, transform 
51b0: 74 68 69 73 0a 20 20 2a 2a 20 74 6f 20 6f 6e 65  this.  ** to one
51c0: 20 6f 66 20 53 51 4c 49 54 45 5f 55 54 46 31 36   of SQLITE_UTF16
51d0: 4c 45 20 6f 72 20 53 51 4c 49 54 45 5f 55 54 46  LE or SQLITE_UTF
51e0: 31 36 42 45 20 75 73 69 6e 67 20 74 68 65 0a 20  16BE using the. 
51f0: 20 2a 2a 20 53 51 4c 49 54 45 5f 55 54 46 31 36   ** SQLITE_UTF16
5200: 4e 41 54 49 56 45 20 6d 61 63 72 6f 2e 20 53 51  NATIVE macro. SQ
5210: 4c 49 54 45 5f 55 54 46 31 36 20 69 73 20 6e 6f  LITE_UTF16 is no
5220: 74 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c  t used internall
5230: 79 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 66 20  y..  **.  ** If 
5240: 53 51 4c 49 54 45 5f 41 4e 59 20 69 73 20 73 70  SQLITE_ANY is sp
5250: 65 63 69 66 69 65 64 2c 20 61 64 64 20 74 68 72  ecified, add thr
5260: 65 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 74  ee versions of t
5270: 68 65 20 66 75 6e 63 74 69 6f 6e 0a 20 20 2a 2a  he function.  **
5280: 20 74 6f 20 74 68 65 20 68 61 73 68 20 74 61 62   to the hash tab
5290: 6c 65 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 65  le..  */.  if( e
52a0: 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36  nc==SQLITE_UTF16
52b0: 20 29 7b 0a 20 20 20 20 65 6e 63 20 3d 20 53 51   ){.    enc = SQ
52c0: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
52d0: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 65 6e  ;.  }else if( en
52e0: 63 3d 3d 53 51 4c 49 54 45 5f 41 4e 59 20 29 7b  c==SQLITE_ANY ){
52f0: 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a 20 20 20  .    int rc;.   
5300: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72   rc = sqlite3_cr
5310: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62  eate_function(db
5320: 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c  , zFunctionName,
5330: 20 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54   nArg, SQLITE_UT
5340: 46 38 2c 0a 20 20 20 20 20 20 20 20 20 70 55 73  F8,.         pUs
5350: 65 72 44 61 74 61 2c 20 78 46 75 6e 63 2c 20 78  erData, xFunc, x
5360: 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 3b 0a 20  Step, xFinal);. 
5370: 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
5380: 45 5f 4f 4b 20 29 20 72 65 74 75 72 6e 20 72 63  E_OK ) return rc
5390: 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
53a0: 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
53b0: 6f 6e 28 64 62 2c 20 7a 46 75 6e 63 74 69 6f 6e  on(db, zFunction
53c0: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 53 51 4c 49  Name, nArg, SQLI
53d0: 54 45 5f 55 54 46 31 36 4c 45 2c 0a 20 20 20 20  TE_UTF16LE,.    
53e0: 20 20 20 20 70 55 73 65 72 44 61 74 61 2c 20 78      pUserData, x
53f0: 46 75 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69  Func, xStep, xFi
5400: 6e 61 6c 29 3b 0a 20 20 20 20 69 66 28 20 72 63  nal);.    if( rc
5410: 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72 65  !=SQLITE_OK ) re
5420: 74 75 72 6e 20 72 63 3b 0a 20 20 20 20 65 6e 63  turn rc;.    enc
5430: 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42   = SQLITE_UTF16B
5440: 45 3b 0a 20 20 7d 0a 0a 20 20 70 20 3d 20 73 71  E;.  }..  p = sq
5450: 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f  lite3FindFunctio
5460: 6e 28 64 62 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e  n(db, zFunctionN
5470: 61 6d 65 2c 20 6e 4e 61 6d 65 2c 20 6e 41 72 67  ame, nName, nArg
5480: 2c 20 65 6e 63 2c 20 31 29 3b 0a 20 20 69 66 28  , enc, 1);.  if(
5490: 20 70 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 53   p==0 ) return S
54a0: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 70  QLITE_NOMEM;.  p
54b0: 2d 3e 78 46 75 6e 63 20 3d 20 78 46 75 6e 63 3b  ->xFunc = xFunc;
54c0: 0a 20 20 70 2d 3e 78 53 74 65 70 20 3d 20 78 53  .  p->xStep = xS
54d0: 74 65 70 3b 0a 20 20 70 2d 3e 78 46 69 6e 61 6c  tep;.  p->xFinal
54e0: 69 7a 65 20 3d 20 78 46 69 6e 61 6c 3b 0a 20 20  ize = xFinal;.  
54f0: 70 2d 3e 70 55 73 65 72 44 61 74 61 20 3d 20 70  p->pUserData = p
5500: 55 73 65 72 44 61 74 61 3b 0a 20 20 72 65 74 75  UserData;.  retu
5510: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a  rn SQLITE_OK;.}.
5520: 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 72 65 61  int sqlite3_crea
5530: 74 65 5f 66 75 6e 63 74 69 6f 6e 31 36 28 0a 20  te_function16(. 
5540: 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a 20 20   sqlite3 *db,.  
5550: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 46 75 6e  const void *zFun
5560: 63 74 69 6f 6e 4e 61 6d 65 2c 0a 20 20 69 6e 74  ctionName,.  int
5570: 20 6e 41 72 67 2c 0a 20 20 69 6e 74 20 65 54 65   nArg,.  int eTe
5580: 78 74 52 65 70 2c 0a 20 20 76 6f 69 64 20 2a 70  xtRep,.  void *p
5590: 55 73 65 72 44 61 74 61 2c 0a 20 20 76 6f 69 64  UserData,.  void
55a0: 20 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74 65   (*xFunc)(sqlite
55b0: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
55c0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 2c  qlite3_value**),
55d0: 0a 20 20 76 6f 69 64 20 28 2a 78 53 74 65 70 29  .  void (*xStep)
55e0: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
55f0: 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
5600: 6c 75 65 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28  lue**),.  void (
5610: 2a 78 46 69 6e 61 6c 29 28 73 71 6c 69 74 65 33  *xFinal)(sqlite3
5620: 5f 63 6f 6e 74 65 78 74 2a 29 0a 29 7b 0a 20 20  _context*).){.  
5630: 69 6e 74 20 72 63 3b 0a 20 20 63 68 61 72 20 63  int rc;.  char c
5640: 6f 6e 73 74 20 2a 7a 46 75 6e 63 38 3b 0a 20 20  onst *zFunc8;.  
5650: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
5660: 54 6d 70 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69  Tmp;..  if( sqli
5670: 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 28 64  te3SafetyCheck(d
5680: 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  b) ){.    return
5690: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a   SQLITE_MISUSE;.
56a0: 20 20 7d 0a 20 20 70 54 6d 70 20 3d 20 73 71 6c    }.  pTmp = sql
56b0: 69 74 65 33 47 65 74 54 72 61 6e 73 69 65 6e 74  ite3GetTransient
56c0: 56 61 6c 75 65 28 64 62 29 3b 0a 20 20 73 71 6c  Value(db);.  sql
56d0: 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28  ite3ValueSetStr(
56e0: 70 54 6d 70 2c 20 2d 31 2c 20 7a 46 75 6e 63 74  pTmp, -1, zFunct
56f0: 69 6f 6e 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f  ionName, SQLITE_
5700: 55 54 46 31 36 4e 41 54 49 56 45 2c 53 51 4c 49  UTF16NATIVE,SQLI
5710: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 7a 46  TE_STATIC);.  zF
5720: 75 6e 63 38 20 3d 20 73 71 6c 69 74 65 33 56 61  unc8 = sqlite3Va
5730: 6c 75 65 54 65 78 74 28 70 54 6d 70 2c 20 53 51  lueText(pTmp, SQ
5740: 4c 49 54 45 5f 55 54 46 38 29 3b 0a 0a 20 20 69  LITE_UTF8);..  i
5750: 66 28 20 21 7a 46 75 6e 63 38 20 29 7b 0a 20 20  f( !zFunc8 ){.  
5760: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
5770: 4e 4f 4d 45 4d 3b 0a 20 20 7d 0a 20 20 72 63 20  NOMEM;.  }.  rc 
5780: 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  = sqlite3_create
5790: 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 7a 46  _function(db, zF
57a0: 75 6e 63 38 2c 20 6e 41 72 67 2c 20 65 54 65 78  unc8, nArg, eTex
57b0: 74 52 65 70 2c 20 0a 20 20 20 20 20 20 70 55 73  tRep, .      pUs
57c0: 65 72 44 61 74 61 2c 20 78 46 75 6e 63 2c 20 78  erData, xFunc, x
57d0: 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 3b 0a 20  Step, xFinal);. 
57e0: 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f   return rc;.}../
57f0: 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 61 20  *.** Register a 
5800: 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 2e 20  trace function. 
5810: 20 54 68 65 20 70 41 72 67 20 66 72 6f 6d 20 74   The pArg from t
5820: 68 65 20 70 72 65 76 69 6f 75 73 6c 79 20 72 65  he previously re
5830: 67 69 73 74 65 72 65 64 20 74 72 61 63 65 0a 2a  gistered trace.*
5840: 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20  * is returned.  
5850: 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 74 72  .**.** A NULL tr
5860: 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 6d 65 61  ace function mea
5870: 6e 73 20 74 68 61 74 20 6e 6f 20 74 72 61 63 69  ns that no traci
5880: 6e 67 20 69 73 20 65 78 65 63 75 74 65 73 2e 20  ng is executes. 
5890: 20 41 20 6e 6f 6e 2d 4e 55 4c 4c 0a 2a 2a 20 74   A non-NULL.** t
58a0: 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65  race is a pointe
58b0: 72 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 20  r to a function 
58c0: 74 68 61 74 20 69 73 20 69 6e 76 6f 6b 65 64 20  that is invoked 
58d0: 61 74 20 74 68 65 20 73 74 61 72 74 20 6f 66 20  at the start of 
58e0: 65 61 63 68 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  each.** sqlite3_
58f0: 65 78 65 63 28 29 2e 0a 2a 2f 0a 76 6f 69 64 20  exec()..*/.void 
5900: 2a 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 73  *sqlite3_trace(s
5910: 71 6c 69 74 65 33 20 2a 64 62 2c 20 76 6f 69 64  qlite3 *db, void
5920: 20 28 2a 78 54 72 61 63 65 29 28 76 6f 69 64 2a   (*xTrace)(void*
5930: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 2c 20 76  ,const char*), v
5940: 6f 69 64 20 2a 70 41 72 67 29 7b 0a 20 20 76 6f  oid *pArg){.  vo
5950: 69 64 20 2a 70 4f 6c 64 20 3d 20 64 62 2d 3e 70  id *pOld = db->p
5960: 54 72 61 63 65 41 72 67 3b 0a 20 20 64 62 2d 3e  TraceArg;.  db->
5970: 78 54 72 61 63 65 20 3d 20 78 54 72 61 63 65 3b  xTrace = xTrace;
5980: 0a 20 20 64 62 2d 3e 70 54 72 61 63 65 41 72 67  .  db->pTraceArg
5990: 20 3d 20 70 41 72 67 3b 0a 20 20 72 65 74 75 72   = pArg;.  retur
59a0: 6e 20 70 4f 6c 64 3b 0a 7d 0a 0a 2f 2a 2a 2a 20  n pOld;.}../*** 
59b0: 45 58 50 45 52 49 4d 45 4e 54 41 4c 20 2a 2a 2a  EXPERIMENTAL ***
59c0: 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
59d0: 61 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65  a function to be
59e0: 20 69 6e 76 6f 6b 65 64 20 77 68 65 6e 20 61 20   invoked when a 
59f0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 6d  transaction comm
5a00: 65 6e 74 73 2e 0a 2a 2a 20 49 66 20 65 69 74 68  ents..** If eith
5a10: 65 72 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  er function retu
5a20: 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68  rns non-zero, th
5a30: 65 6e 20 74 68 65 20 63 6f 6d 6d 69 74 20 62 65  en the commit be
5a40: 63 6f 6d 65 73 20 61 0a 2a 2a 20 72 6f 6c 6c 62  comes a.** rollb
5a50: 61 63 6b 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71  ack..*/.void *sq
5a60: 6c 69 74 65 33 5f 63 6f 6d 6d 69 74 5f 68 6f 6f  lite3_commit_hoo
5a70: 6b 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  k(.  sqlite3 *db
5a80: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
5a90: 2a 20 41 74 74 61 63 68 20 74 68 65 20 68 6f 6f  * Attach the hoo
5aa0: 6b 20 74 6f 20 74 68 69 73 20 64 61 74 61 62 61  k to this databa
5ab0: 73 65 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43  se */.  int (*xC
5ac0: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 2c  allback)(void*),
5ad0: 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 74 6f    /* Function to
5ae0: 20 69 6e 76 6f 6b 65 20 6f 6e 20 65 61 63 68 20   invoke on each 
5af0: 63 6f 6d 6d 69 74 20 2a 2f 0a 20 20 76 6f 69 64  commit */.  void
5b00: 20 2a 70 41 72 67 20 20 20 20 20 20 20 20 20 20   *pArg          
5b10: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
5b20: 74 20 74 6f 20 74 68 65 20 66 75 6e 63 74 69 6f  t to the functio
5b30: 6e 20 2a 2f 0a 29 7b 0a 20 20 76 6f 69 64 20 2a  n */.){.  void *
5b40: 70 4f 6c 64 20 3d 20 64 62 2d 3e 70 43 6f 6d 6d  pOld = db->pComm
5b50: 69 74 41 72 67 3b 0a 20 20 64 62 2d 3e 78 43 6f  itArg;.  db->xCo
5b60: 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 20 3d 20 78  mmitCallback = x
5b70: 43 61 6c 6c 62 61 63 6b 3b 0a 20 20 64 62 2d 3e  Callback;.  db->
5b80: 70 43 6f 6d 6d 69 74 41 72 67 20 3d 20 70 41 72  pCommitArg = pAr
5b90: 67 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f 6c 64  g;.  return pOld
5ba0: 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  ;.}.../*.** This
5bb0: 20 72 6f 75 74 69 6e 65 20 69 73 20 63 61 6c 6c   routine is call
5bc0: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 63  ed to create a c
5bd0: 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61 20 64  onnection to a d
5be0: 61 74 61 62 61 73 65 20 42 54 72 65 65 0a 2a 2a  atabase BTree.**
5bf0: 20 64 72 69 76 65 72 2e 20 20 49 66 20 7a 46 69   driver.  If zFi
5c00: 6c 65 6e 61 6d 65 20 69 73 20 74 68 65 20 6e 61  lename is the na
5c10: 6d 65 20 6f 66 20 61 20 66 69 6c 65 2c 20 74 68  me of a file, th
5c20: 65 6e 20 74 68 61 74 20 66 69 6c 65 20 69 73 0a  en that file is.
5c30: 2a 2a 20 6f 70 65 6e 65 64 20 61 6e 64 20 75 73  ** opened and us
5c40: 65 64 2e 20 20 49 66 20 7a 46 69 6c 65 6e 61 6d  ed.  If zFilenam
5c50: 65 20 69 73 20 74 68 65 20 6d 61 67 69 63 20 6e  e is the magic n
5c60: 61 6d 65 20 22 3a 6d 65 6d 6f 72 79 3a 22 20 74  ame ":memory:" t
5c70: 68 65 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 62  hen.** the datab
5c80: 61 73 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ase is stored in
5c90: 20 6d 65 6d 6f 72 79 20 28 61 6e 64 20 69 73 20   memory (and is 
5ca0: 74 68 75 73 20 66 6f 72 67 6f 74 74 65 6e 20 61  thus forgotten a
5cb0: 73 20 73 6f 6f 6e 20 61 73 0a 2a 2a 20 74 68 65  s soon as.** the
5cc0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63   connection is c
5cd0: 6c 6f 73 65 64 2e 29 20 20 49 66 20 7a 46 69 6c  losed.)  If zFil
5ce0: 65 6e 61 6d 65 20 69 73 20 4e 55 4c 4c 20 74 68  ename is NULL th
5cf0: 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  en the database.
5d00: 2a 2a 20 69 73 20 66 6f 72 20 74 65 6d 70 6f 72  ** is for tempor
5d10: 61 72 79 20 75 73 65 20 6f 6e 6c 79 20 61 6e 64  ary use only and
5d20: 20 69 73 20 64 65 6c 65 74 65 64 20 61 73 20 73   is deleted as s
5d30: 6f 6f 6e 20 61 73 20 74 68 65 20 63 6f 6e 6e 65  oon as the conne
5d40: 63 74 69 6f 6e 0a 2a 2a 20 69 73 20 63 6c 6f 73  ction.** is clos
5d50: 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 65 6d 70  ed..**.** A temp
5d60: 6f 72 61 72 79 20 64 61 74 61 62 61 73 65 20 63  orary database c
5d70: 61 6e 20 62 65 20 65 69 74 68 65 72 20 61 20 64  an be either a d
5d80: 69 73 6b 20 66 69 6c 65 20 28 74 68 61 74 20 69  isk file (that i
5d90: 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a  s automatically.
5da0: 2a 2a 20 64 65 6c 65 74 65 64 20 77 68 65 6e 20  ** deleted when 
5db0: 74 68 65 20 66 69 6c 65 20 69 73 20 63 6c 6f 73  the file is clos
5dc0: 65 64 29 20 6f 72 20 61 20 73 65 74 20 6f 66 20  ed) or a set of 
5dd0: 72 65 64 2d 62 6c 61 63 6b 20 74 72 65 65 73 20  red-black trees 
5de0: 68 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 2c 0a  held in memory,.
5df0: 2a 2a 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ** depending on 
5e00: 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 74 68  the values of th
5e10: 65 20 54 45 4d 50 5f 53 54 4f 52 45 20 63 6f 6d  e TEMP_STORE com
5e20: 70 69 6c 65 2d 74 69 6d 65 20 6d 61 63 72 6f 20  pile-time macro 
5e30: 61 6e 64 20 74 68 65 0a 2a 2a 20 64 62 2d 3e 74  and the.** db->t
5e40: 65 6d 70 5f 73 74 6f 72 65 20 76 61 72 69 61 62  emp_store variab
5e50: 6c 65 2c 20 61 63 63 6f 72 64 69 6e 67 20 74 6f  le, according to
5e60: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   the following c
5e70: 68 61 72 74 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  hart:.**.**     
5e80: 20 20 54 45 4d 50 5f 53 54 4f 52 45 20 20 20 20    TEMP_STORE    
5e90: 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 20   db->temp_store 
5ea0: 20 20 20 20 4c 6f 63 61 74 69 6f 6e 20 6f 66 20      Location of 
5eb0: 74 65 6d 70 6f 72 61 72 79 20 64 61 74 61 62 61  temporary databa
5ec0: 73 65 0a 2a 2a 20 20 20 20 20 20 20 2d 2d 2d 2d  se.**       ----
5ed0: 2d 2d 2d 2d 2d 2d 20 20 20 20 20 2d 2d 2d 2d 2d  ------     -----
5ee0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 20 20 20 20 2d 2d  ---------     --
5ef0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5f00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2a 2a 20  ------------.** 
5f10: 20 20 20 20 20 20 20 20 20 20 30 20 20 20 20 20            0     
5f20: 20 20 20 20 20 20 20 20 20 20 61 6e 79 20 20 20            any   
5f30: 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 0a 2a            file.*
5f40: 2a 20 20 20 20 20 20 20 20 20 20 20 31 20 20 20  *           1   
5f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 31 20 20               1  
5f60: 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
5f70: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 31 20  .**           1 
5f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32                 2
5f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 65                me
5fa0: 6d 6f 72 79 0a 2a 2a 20 20 20 20 20 20 20 20 20  mory.**         
5fb0: 20 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20    1             
5fc0: 20 20 20 30 20 20 20 20 20 20 20 20 20 20 20 20     0            
5fd0: 20 20 66 69 6c 65 0a 2a 2a 20 20 20 20 20 20 20    file.**       
5fe0: 20 20 20 20 32 20 20 20 20 20 20 20 20 20 20 20      2           
5ff0: 20 20 20 20 20 31 20 20 20 20 20 20 20 20 20 20       1          
6000: 20 20 20 20 66 69 6c 65 0a 2a 2a 20 20 20 20 20      file.**     
6010: 20 20 20 20 20 20 32 20 20 20 20 20 20 20 20 20        2         
6020: 20 20 20 20 20 20 20 32 20 20 20 20 20 20 20 20         2        
6030: 20 20 20 20 20 20 6d 65 6d 6f 72 79 0a 2a 2a 20        memory.** 
6040: 20 20 20 20 20 20 20 20 20 20 32 20 20 20 20 20            2     
6050: 20 20 20 20 20 20 20 20 20 20 20 30 20 20 20 20             0    
6060: 20 20 20 20 20 20 20 20 20 20 6d 65 6d 6f 72 79            memory
6070: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 33 20  .**           3 
6080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e                an
6090: 79 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 65  y             me
60a0: 6d 6f 72 79 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  mory.*/.int sqli
60b0: 74 65 33 42 74 72 65 65 46 61 63 74 6f 72 79 28  te3BtreeFactory(
60c0: 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
60d0: 20 2a 64 62 2c 20 20 20 20 20 20 20 20 2f 2a 20   *db,        /* 
60e0: 4d 61 69 6e 20 64 61 74 61 62 61 73 65 20 77 68  Main database wh
60f0: 65 6e 20 6f 70 65 6e 69 6e 67 20 61 75 78 20 6f  en opening aux o
6100: 74 68 65 72 77 69 73 65 20 30 20 2a 2f 0a 20 20  therwise 0 */.  
6110: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c  const char *zFil
6120: 65 6e 61 6d 65 2c 20 20 20 20 2f 2a 20 4e 61 6d  ename,    /* Nam
6130: 65 20 6f 66 20 74 68 65 20 66 69 6c 65 20 63 6f  e of the file co
6140: 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 42 54 72  ntaining the BTr
6150: 65 65 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  ee database */. 
6160: 20 69 6e 74 20 6f 6d 69 74 4a 6f 75 72 6e 61 6c   int omitJournal
6170: 2c 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 66  ,          /* if
6180: 20 54 52 55 45 20 74 68 65 6e 20 64 6f 20 6e 6f   TRUE then do no
6190: 74 20 6a 6f 75 72 6e 61 6c 20 74 68 69 73 20 66  t journal this f
61a0: 69 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 61  ile */.  int nCa
61b0: 63 68 65 2c 20 20 20 20 20 20 20 20 20 20 20 20  che,            
61c0: 20 20 20 2f 2a 20 48 6f 77 20 6d 61 6e 79 20 70     /* How many p
61d0: 61 67 65 73 20 69 6e 20 74 68 65 20 70 61 67 65  ages in the page
61e0: 20 63 61 63 68 65 20 2a 2f 0a 20 20 42 74 72 65   cache */.  Btre
61f0: 65 20 2a 2a 70 70 42 74 72 65 65 20 20 20 20 20  e **ppBtree     
6200: 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
6210: 20 74 6f 20 6e 65 77 20 42 74 72 65 65 20 6f 62   to new Btree ob
6220: 6a 65 63 74 20 77 72 69 74 74 65 6e 20 68 65 72  ject written her
6230: 65 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 62 74  e */.){.  int bt
6240: 72 65 65 5f 66 6c 61 67 73 20 3d 20 30 3b 0a 20  ree_flags = 0;. 
6250: 20 69 6e 74 20 72 63 3b 0a 20 20 0a 20 20 61 73   int rc;.  .  as
6260: 73 65 72 74 28 20 70 70 42 74 72 65 65 20 21 3d  sert( ppBtree !=
6270: 20 30 29 3b 0a 20 20 69 66 28 20 6f 6d 69 74 4a   0);.  if( omitJ
6280: 6f 75 72 6e 61 6c 20 29 7b 0a 20 20 20 20 62 74  ournal ){.    bt
6290: 72 65 65 5f 66 6c 61 67 73 20 7c 3d 20 42 54 52  ree_flags |= BTR
62a0: 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 3b  EE_OMIT_JOURNAL;
62b0: 0a 20 20 7d 0a 20 20 69 66 28 20 7a 46 69 6c 65  .  }.  if( zFile
62c0: 6e 61 6d 65 3d 3d 30 20 29 7b 0a 23 69 66 6e 64  name==0 ){.#ifnd
62d0: 65 66 20 54 45 4d 50 5f 53 54 4f 52 45 0a 23 20  ef TEMP_STORE.# 
62e0: 64 65 66 69 6e 65 20 54 45 4d 50 5f 53 54 4f 52  define TEMP_STOR
62f0: 45 20 31 0a 23 65 6e 64 69 66 0a 23 69 66 20 54  E 1.#endif.#if T
6300: 45 4d 50 5f 53 54 4f 52 45 3d 3d 30 0a 20 20 20  EMP_STORE==0.   
6310: 20 2f 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 20 2a   /* Do nothing *
6320: 2f 0a 23 65 6e 64 69 66 0a 23 69 66 20 54 45 4d  /.#endif.#if TEM
6330: 50 5f 53 54 4f 52 45 3d 3d 31 0a 20 20 20 20 69  P_STORE==1.    i
6340: 66 28 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  f( db->temp_stor
6350: 65 3d 3d 32 20 29 20 7a 46 69 6c 65 6e 61 6d 65  e==2 ) zFilename
6360: 20 3d 20 22 3a 6d 65 6d 6f 72 79 3a 22 3b 0a 23   = ":memory:";.#
6370: 65 6e 64 69 66 0a 23 69 66 20 54 45 4d 50 5f 53  endif.#if TEMP_S
6380: 54 4f 52 45 3d 3d 32 0a 20 20 20 20 69 66 28 20  TORE==2.    if( 
6390: 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 21 3d  db->temp_store!=
63a0: 31 20 29 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20  1 ) zFilename = 
63b0: 22 3a 6d 65 6d 6f 72 79 3a 22 3b 0a 23 65 6e 64  ":memory:";.#end
63c0: 69 66 0a 23 69 66 20 54 45 4d 50 5f 53 54 4f 52  if.#if TEMP_STOR
63d0: 45 3d 3d 33 0a 20 20 20 20 7a 46 69 6c 65 6e 61  E==3.    zFilena
63e0: 6d 65 20 3d 20 22 3a 6d 65 6d 6f 72 79 3a 22 3b  me = ":memory:";
63f0: 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 0a 20 20 72  .#endif.  }..  r
6400: 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
6410: 4f 70 65 6e 28 7a 46 69 6c 65 6e 61 6d 65 2c 20  Open(zFilename, 
6420: 70 70 42 74 72 65 65 2c 20 62 74 72 65 65 5f 66  ppBtree, btree_f
6430: 6c 61 67 73 29 3b 0a 20 20 69 66 28 20 72 63 3d  lags);.  if( rc=
6440: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
6450: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65    sqlite3BtreeSe
6460: 74 42 75 73 79 48 61 6e 64 6c 65 72 28 2a 70 70  tBusyHandler(*pp
6470: 42 74 72 65 65 2c 20 28 76 6f 69 64 2a 29 26 64  Btree, (void*)&d
6480: 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 29 3b  b->busyHandler);
6490: 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
64a0: 65 53 65 74 43 61 63 68 65 53 69 7a 65 28 2a 70  eSetCacheSize(*p
64b0: 70 42 74 72 65 65 2c 20 6e 43 61 63 68 65 29 3b  pBtree, nCache);
64c0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63  .  }.  return rc
64d0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  ;.}../*.** Retur
64e0: 6e 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20  n UTF-8 encoded 
64f0: 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65  English language
6500: 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 6f 66 20   explanation of 
6510: 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 0a  the most recent.
6520: 2a 2a 20 65 72 72 6f 72 2e 0a 2a 2f 0a 63 6f 6e  ** error..*/.con
6530: 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
6540: 5f 65 72 72 6d 73 67 28 73 71 6c 69 74 65 33 20  _errmsg(sqlite3 
6550: 2a 64 62 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68  *db){.  const ch
6560: 61 72 20 2a 7a 3b 0a 20 20 69 66 28 20 73 71 6c  ar *z;.  if( sql
6570: 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c  ite3_malloc_fail
6580: 65 64 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  ed ){.    return
6590: 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 53   sqlite3ErrStr(S
65a0: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 29 3b 0a 20 20  QLITE_NOMEM);.  
65b0: 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  }.  if( sqlite3S
65c0: 61 66 65 74 79 43 68 65 63 6b 28 64 62 29 20 7c  afetyCheck(db) |
65d0: 7c 20 64 62 2d 3e 65 72 72 43 6f 64 65 3d 3d 53  | db->errCode==S
65e0: 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 29 7b 0a  QLITE_MISUSE ){.
65f0: 20 20 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74      return sqlit
6600: 65 33 45 72 72 53 74 72 28 53 51 4c 49 54 45 5f  e3ErrStr(SQLITE_
6610: 4d 49 53 55 53 45 29 3b 0a 20 20 7d 0a 20 20 7a  MISUSE);.  }.  z
6620: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
6630: 5f 74 65 78 74 28 64 62 2d 3e 70 45 72 72 29 3b  _text(db->pErr);
6640: 0a 20 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20  .  if( z==0 ){. 
6650: 20 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 45 72     z = sqlite3Er
6660: 72 53 74 72 28 64 62 2d 3e 65 72 72 43 6f 64 65  rStr(db->errCode
6670: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
6680: 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  z;.}../*.** Retu
6690: 72 6e 20 55 54 46 2d 31 36 20 65 6e 63 6f 64 65  rn UTF-16 encode
66a0: 64 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61  d English langua
66b0: 67 65 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 6f  ge explanation o
66c0: 66 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  f the most recen
66d0: 74 0a 2a 2a 20 65 72 72 6f 72 2e 0a 2a 2f 0a 63  t.** error..*/.c
66e0: 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74  onst void *sqlit
66f0: 65 33 5f 65 72 72 6d 73 67 31 36 28 73 71 6c 69  e3_errmsg16(sqli
6700: 74 65 33 20 2a 64 62 29 7b 0a 20 20 2f 2a 20 42  te3 *db){.  /* B
6710: 65 63 61 75 73 65 20 61 6c 6c 20 74 68 65 20 63  ecause all the c
6720: 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 65  haracters in the
6730: 20 73 74 72 69 6e 67 20 61 72 65 20 69 6e 20 74   string are in t
6740: 68 65 20 75 6e 69 63 6f 64 65 0a 20 20 2a 2a 20  he unicode.  ** 
6750: 72 61 6e 67 65 20 30 78 30 30 2d 30 78 46 46 2c  range 0x00-0xFF,
6760: 20 69 66 20 77 65 20 70 61 64 20 74 68 65 20 62   if we pad the b
6770: 69 67 2d 65 6e 64 69 61 6e 20 73 74 72 69 6e 67  ig-endian string
6780: 20 77 69 74 68 20 61 20 0a 20 20 2a 2a 20 7a 65   with a .  ** ze
6790: 72 6f 20 62 79 74 65 2c 20 77 65 20 63 61 6e 20  ro byte, we can 
67a0: 6f 62 74 61 69 6e 20 74 68 65 20 6c 69 74 74 6c  obtain the littl
67b0: 65 2d 65 6e 64 69 61 6e 20 73 74 72 69 6e 67 20  e-endian string 
67c0: 77 69 74 68 0a 20 20 2a 2a 20 26 62 69 67 5f 65  with.  ** &big_e
67d0: 6e 64 69 61 6e 5b 31 5d 2e 0a 20 20 2a 2f 0a 20  ndian[1]..  */. 
67e0: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
67f0: 61 72 20 6f 75 74 4f 66 4d 65 6d 42 65 5b 5d 20  ar outOfMemBe[] 
6800: 3d 20 7b 0a 20 20 20 20 30 2c 20 27 6f 27 2c 20  = {.    0, 'o', 
6810: 30 2c 20 27 75 27 2c 20 30 2c 20 27 74 27 2c 20  0, 'u', 0, 't', 
6820: 30 2c 20 27 20 27 2c 20 0a 20 20 20 20 30 2c 20  0, ' ', .    0, 
6830: 27 6f 27 2c 20 30 2c 20 27 66 27 2c 20 30 2c 20  'o', 0, 'f', 0, 
6840: 27 20 27 2c 20 0a 20 20 20 20 30 2c 20 27 6d 27  ' ', .    0, 'm'
6850: 2c 20 30 2c 20 27 65 27 2c 20 30 2c 20 27 6d 27  , 0, 'e', 0, 'm'
6860: 2c 20 30 2c 20 27 6f 27 2c 20 30 2c 20 27 72 27  , 0, 'o', 0, 'r'
6870: 2c 20 30 2c 20 27 79 27 2c 20 30 2c 20 30 2c 20  , 0, 'y', 0, 0, 
6880: 30 0a 20 20 7d 3b 0a 20 20 73 74 61 74 69 63 20  0.  };.  static 
6890: 63 6f 6e 73 74 20 63 68 61 72 20 6d 69 73 75 73  const char misus
68a0: 65 42 65 20 5b 5d 20 3d 20 7b 0a 20 20 20 20 30  eBe [] = {.    0
68b0: 2c 20 27 6c 27 2c 20 30 2c 20 27 69 27 2c 20 30  , 'l', 0, 'i', 0
68c0: 2c 20 27 62 27 2c 20 30 2c 20 27 72 27 2c 20 30  , 'b', 0, 'r', 0
68d0: 2c 20 27 61 27 2c 20 30 2c 20 27 72 27 2c 20 30  , 'a', 0, 'r', 0
68e0: 2c 20 27 79 27 2c 20 30 2c 20 27 20 27 2c 20 0a  , 'y', 0, ' ', .
68f0: 20 20 20 20 30 2c 20 27 72 27 2c 20 30 2c 20 27      0, 'r', 0, '
6900: 6f 27 2c 20 30 2c 20 27 75 27 2c 20 30 2c 20 27  o', 0, 'u', 0, '
6910: 74 27 2c 20 30 2c 20 27 69 27 2c 20 30 2c 20 27  t', 0, 'i', 0, '
6920: 6e 27 2c 20 30 2c 20 27 65 27 2c 20 30 2c 20 27  n', 0, 'e', 0, '
6930: 20 27 2c 20 0a 20 20 20 20 30 2c 20 27 63 27 2c   ', .    0, 'c',
6940: 20 30 2c 20 27 61 27 2c 20 30 2c 20 27 6c 27 2c   0, 'a', 0, 'l',
6950: 20 30 2c 20 27 6c 27 2c 20 30 2c 20 27 65 27 2c   0, 'l', 0, 'e',
6960: 20 30 2c 20 27 64 27 2c 20 30 2c 20 27 20 27 2c   0, 'd', 0, ' ',
6970: 20 0a 20 20 20 20 30 2c 20 27 6f 27 2c 20 30 2c   .    0, 'o', 0,
6980: 20 27 75 27 2c 20 30 2c 20 27 74 27 2c 20 30 2c   'u', 0, 't', 0,
6990: 20 27 20 27 2c 20 0a 20 20 20 20 30 2c 20 27 6f   ' ', .    0, 'o
69a0: 27 2c 20 30 2c 20 27 66 27 2c 20 30 2c 20 27 20  ', 0, 'f', 0, ' 
69b0: 27 2c 20 0a 20 20 20 20 30 2c 20 27 73 27 2c 20  ', .    0, 's', 
69c0: 30 2c 20 27 65 27 2c 20 30 2c 20 27 71 27 2c 20  0, 'e', 0, 'q', 
69d0: 30 2c 20 27 75 27 2c 20 30 2c 20 27 65 27 2c 20  0, 'u', 0, 'e', 
69e0: 30 2c 20 27 6e 27 2c 20 30 2c 20 27 63 27 2c 20  0, 'n', 0, 'c', 
69f0: 30 2c 20 27 65 27 2c 20 30 2c 20 30 2c 20 30 0a  0, 'e', 0, 0, 0.
6a00: 20 20 7d 3b 0a 0a 20 20 63 6f 6e 73 74 20 76 6f    };..  const vo
6a10: 69 64 20 2a 7a 3b 0a 20 20 69 66 28 20 73 71 6c  id *z;.  if( sql
6a20: 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c  ite3_malloc_fail
6a30: 65 64 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  ed ){.    return
6a40: 20 28 76 6f 69 64 20 2a 29 28 26 6f 75 74 4f 66   (void *)(&outOf
6a50: 4d 65 6d 42 65 5b 53 51 4c 49 54 45 5f 55 54 46  MemBe[SQLITE_UTF
6a60: 31 36 4e 41 54 49 56 45 3d 3d 53 51 4c 49 54 45  16NATIVE==SQLITE
6a70: 5f 55 54 46 31 36 4c 45 3f 31 3a 30 5d 29 3b 0a  _UTF16LE?1:0]);.
6a80: 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65    }.  if( sqlite
6a90: 33 53 61 66 65 74 79 43 68 65 63 6b 28 64 62 29  3SafetyCheck(db)
6aa0: 20 7c 7c 20 64 62 2d 3e 65 72 72 43 6f 64 65 3d   || db->errCode=
6ab0: 3d 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 29  =SQLITE_MISUSE )
6ac0: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 28 76 6f  {.    return (vo
6ad0: 69 64 20 2a 29 28 26 6d 69 73 75 73 65 42 65 5b  id *)(&misuseBe[
6ae0: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
6af0: 56 45 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36  VE==SQLITE_UTF16
6b00: 4c 45 3f 31 3a 30 5d 29 3b 0a 20 20 7d 0a 20 20  LE?1:0]);.  }.  
6b10: 7a 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  z = sqlite3_valu
6b20: 65 5f 74 65 78 74 31 36 28 64 62 2d 3e 70 45 72  e_text16(db->pEr
6b30: 72 29 3b 0a 20 20 69 66 28 20 7a 3d 3d 30 20 29  r);.  if( z==0 )
6b40: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c  {.    sqlite3Val
6b50: 75 65 53 65 74 53 74 72 28 64 62 2d 3e 70 45 72  ueSetStr(db->pEr
6b60: 72 2c 20 2d 31 2c 20 73 71 6c 69 74 65 33 45 72  r, -1, sqlite3Er
6b70: 72 53 74 72 28 64 62 2d 3e 65 72 72 43 6f 64 65  rStr(db->errCode
6b80: 29 2c 0a 20 20 20 20 20 20 20 20 20 53 51 4c 49  ),.         SQLI
6b90: 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f  TE_UTF8, SQLITE_
6ba0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 7a 20 3d  STATIC);.    z =
6bb0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
6bc0: 65 78 74 31 36 28 64 62 2d 3e 70 45 72 72 29 3b  ext16(db->pErr);
6bd0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a 3b  .  }.  return z;
6be0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  .}../*.** Return
6bf0: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
6c00: 20 65 72 72 6f 72 20 63 6f 64 65 20 67 65 6e 65   error code gene
6c10: 72 61 74 65 64 20 62 79 20 61 6e 20 53 51 4c 69  rated by an SQLi
6c20: 74 65 20 72 6f 75 74 69 6e 65 2e 0a 2a 2f 0a 69  te routine..*/.i
6c30: 6e 74 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f  nt sqlite3_errco
6c40: 64 65 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b  de(sqlite3 *db){
6c50: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 6d  .  if( sqlite3_m
6c60: 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 20 29 7b 0a  alloc_failed ){.
6c70: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
6c80: 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d 0a 20 20 69  E_NOMEM;.  }.  i
6c90: 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  f( sqlite3Safety
6ca0: 43 68 65 63 6b 28 64 62 29 20 29 7b 0a 20 20 20  Check(db) ){.   
6cb0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d   return SQLITE_M
6cc0: 49 53 55 53 45 3b 0a 20 20 7d 0a 20 20 72 65 74  ISUSE;.  }.  ret
6cd0: 75 72 6e 20 64 62 2d 3e 65 72 72 43 6f 64 65 3b  urn db->errCode;
6ce0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20  .}../*.** Check 
6cf0: 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 73 20 69  schema cookies i
6d00: 6e 20 61 6c 6c 20 64 61 74 61 62 61 73 65 73 2e  n all databases.
6d10: 20 20 49 66 20 61 6e 79 20 63 6f 6f 6b 69 65 20    If any cookie 
6d20: 69 73 20 6f 75 74 0a 2a 2a 20 6f 66 20 64 61 74  is out.** of dat
6d30: 65 2c 20 72 65 74 75 72 6e 20 30 2e 20 20 49 66  e, return 0.  If
6d40: 20 61 6c 6c 20 73 63 68 65 6d 61 20 63 6f 6f 6b   all schema cook
6d50: 69 65 73 20 61 72 65 20 63 75 72 72 65 6e 74 2c  ies are current,
6d60: 20 72 65 74 75 72 6e 20 31 2e 0a 2a 2f 0a 73 74   return 1..*/.st
6d70: 61 74 69 63 20 69 6e 74 20 73 63 68 65 6d 61 49  atic int schemaI
6d80: 73 56 61 6c 69 64 28 73 71 6c 69 74 65 33 20 2a  sValid(sqlite3 *
6d90: 64 62 29 7b 0a 20 20 69 6e 74 20 69 44 62 3b 0a  db){.  int iDb;.
6da0: 20 20 69 6e 74 20 72 63 3b 0a 20 20 42 74 43 75    int rc;.  BtCu
6db0: 72 73 6f 72 20 2a 63 75 72 54 65 6d 70 3b 0a 20  rsor *curTemp;. 
6dc0: 20 69 6e 74 20 63 6f 6f 6b 69 65 3b 0a 20 20 69   int cookie;.  i
6dd0: 6e 74 20 61 6c 6c 4f 6b 20 3d 20 31 3b 0a 0a 20  nt allOk = 1;.. 
6de0: 20 66 6f 72 28 69 44 62 3d 30 3b 20 61 6c 6c 4f   for(iDb=0; allO
6df0: 6b 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62  k && iDb<db->nDb
6e00: 3b 20 69 44 62 2b 2b 29 7b 0a 20 20 20 20 42 74  ; iDb++){.    Bt
6e10: 72 65 65 20 2a 70 42 74 3b 0a 20 20 20 20 70 42  ree *pBt;.    pB
6e20: 74 20 3d 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d  t = db->aDb[iDb]
6e30: 2e 70 42 74 3b 0a 20 20 20 20 69 66 28 20 70 42  .pBt;.    if( pB
6e40: 74 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b  t==0 ) continue;
6e50: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
6e60: 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 42 74  3BtreeCursor(pBt
6e70: 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 30  , MASTER_ROOT, 0
6e80: 2c 20 30 2c 20 30 2c 20 26 63 75 72 54 65 6d 70  , 0, 0, &curTemp
6e90: 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  );.    if( rc==S
6ea0: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
6eb0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
6ec0: 72 65 65 47 65 74 4d 65 74 61 28 70 42 74 2c 20  reeGetMeta(pBt, 
6ed0: 31 2c 20 28 75 33 32 20 2a 29 26 63 6f 6f 6b 69  1, (u32 *)&cooki
6ee0: 65 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  e);.      if( rc
6ef0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 63  ==SQLITE_OK && c
6f00: 6f 6f 6b 69 65 21 3d 64 62 2d 3e 61 44 62 5b 69  ookie!=db->aDb[i
6f10: 44 62 5d 2e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69  Db].schema_cooki
6f20: 65 20 29 7b 0a 20 20 20 20 20 20 20 20 61 6c 6c  e ){.        all
6f30: 4f 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  Ok = 0;.      }.
6f40: 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72        sqlite3Btr
6f50: 65 65 43 6c 6f 73 65 43 75 72 73 6f 72 28 63 75  eeCloseCursor(cu
6f60: 72 54 65 6d 70 29 3b 0a 20 20 20 20 7d 0a 20 20  rTemp);.    }.  
6f70: 7d 0a 20 20 72 65 74 75 72 6e 20 61 6c 6c 4f 6b  }.  return allOk
6f80: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d 70 69  ;.}../*.** Compi
6f90: 6c 65 20 74 68 65 20 55 54 46 2d 38 20 65 6e 63  le the UTF-8 enc
6fa0: 6f 64 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65  oded SQL stateme
6fb0: 6e 74 20 7a 53 71 6c 20 69 6e 74 6f 20 61 20 73  nt zSql into a s
6fc0: 74 61 74 65 6d 65 6e 74 20 68 61 6e 64 6c 65 2e  tatement handle.
6fd0: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
6fe0: 70 72 65 70 61 72 65 28 0a 20 20 73 71 6c 69 74  prepare(.  sqlit
6ff0: 65 33 20 2a 64 62 2c 20 20 20 20 20 20 20 20 20  e3 *db,         
7000: 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65       /* Database
7010: 20 68 61 6e 64 6c 65 2e 20 2a 2f 0a 20 20 63 6f   handle. */.  co
7020: 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 2c 20  nst char *zSql, 
7030: 20 20 20 20 20 20 20 20 2f 2a 20 55 54 46 2d 38          /* UTF-8
7040: 20 65 6e 63 6f 64 65 64 20 53 51 4c 20 73 74 61   encoded SQL sta
7050: 74 65 6d 65 6e 74 2e 20 2a 2f 0a 20 20 69 6e 74  tement. */.  int
7060: 20 6e 42 79 74 65 73 2c 20 20 20 20 20 20 20 20   nBytes,        
7070: 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68         /* Length
7080: 20 6f 66 20 7a 53 71 6c 20 69 6e 20 62 79 74 65   of zSql in byte
7090: 73 2e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  s. */.  sqlite3_
70a0: 73 74 6d 74 20 2a 2a 70 70 53 74 6d 74 2c 20 20  stmt **ppStmt,  
70b0: 20 20 2f 2a 20 4f 55 54 3a 20 41 20 70 6f 69 6e    /* OUT: A poin
70c0: 74 65 72 20 74 6f 20 74 68 65 20 70 72 65 70 61  ter to the prepa
70d0: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f  red statement */
70e0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2a 20  .  const char** 
70f0: 70 7a 54 61 69 6c 20 20 20 20 20 20 20 2f 2a 20  pzTail       /* 
7100: 4f 55 54 3a 20 45 6e 64 20 6f 66 20 70 61 72 73  OUT: End of pars
7110: 65 64 20 73 74 72 69 6e 67 20 2a 2f 0a 29 7b 0a  ed string */.){.
7120: 20 20 50 61 72 73 65 20 73 50 61 72 73 65 3b 0a    Parse sParse;.
7130: 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 20    char *zErrMsg 
7140: 3d 20 30 3b 0a 20 20 69 6e 74 20 72 63 20 3d 20  = 0;.  int rc = 
7150: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 0a 20 20 69 66  SQLITE_OK;..  if
7160: 28 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  ( sqlite3_malloc
7170: 5f 66 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 72  _failed ){.    r
7180: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d  eturn SQLITE_NOM
7190: 45 4d 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72  EM;.  }..  asser
71a0: 74 28 20 70 70 53 74 6d 74 20 29 3b 0a 20 20 2a  t( ppStmt );.  *
71b0: 70 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20 69 66  ppStmt = 0;.  if
71c0: 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
71d0: 6e 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74  n(db) ){.    ret
71e0: 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  urn SQLITE_MISUS
71f0: 45 3b 0a 20 20 7d 0a 0a 20 20 6d 65 6d 73 65 74  E;.  }..  memset
7200: 28 26 73 50 61 72 73 65 2c 20 30 2c 20 73 69 7a  (&sParse, 0, siz
7210: 65 6f 66 28 73 50 61 72 73 65 29 29 3b 0a 20 20  eof(sParse));.  
7220: 73 50 61 72 73 65 2e 64 62 20 3d 20 64 62 3b 0a  sParse.db = db;.
7230: 20 20 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73    sqlite3RunPars
7240: 65 72 28 26 73 50 61 72 73 65 2c 20 7a 53 71 6c  er(&sParse, zSql
7250: 2c 20 26 7a 45 72 72 4d 73 67 29 3b 0a 0a 20 20  , &zErrMsg);..  
7260: 69 66 28 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  if( sqlite3_mall
7270: 6f 63 5f 66 61 69 6c 65 64 20 29 7b 0a 20 20 20  oc_failed ){.   
7280: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d   rc = SQLITE_NOM
7290: 45 4d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 52  EM;.    sqlite3R
72a0: 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 29 3b 0a  ollbackAll(db);.
72b0: 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
72c0: 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64  InternalSchema(d
72d0: 62 2c 20 30 29 3b 0a 20 20 20 20 64 62 2d 3e 66  b, 0);.    db->f
72e0: 6c 61 67 73 20 26 3d 20 7e 53 51 4c 49 54 45 5f  lags &= ~SQLITE_
72f0: 49 6e 54 72 61 6e 73 3b 0a 20 20 20 20 67 6f 74  InTrans;.    got
7300: 6f 20 70 72 65 70 61 72 65 5f 6f 75 74 3b 0a 20  o prepare_out;. 
7310: 20 7d 0a 20 20 69 66 28 20 73 50 61 72 73 65 2e   }.  if( sParse.
7320: 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20  rc==SQLITE_DONE 
7330: 29 20 73 50 61 72 73 65 2e 72 63 20 3d 20 53 51  ) sParse.rc = SQ
7340: 4c 49 54 45 5f 4f 4b 3b 0a 20 20 69 66 28 20 73  LITE_OK;.  if( s
7350: 50 61 72 73 65 2e 72 63 21 3d 53 51 4c 49 54 45  Parse.rc!=SQLITE
7360: 5f 4f 4b 20 26 26 20 73 50 61 72 73 65 2e 63 68  _OK && sParse.ch
7370: 65 63 6b 53 63 68 65 6d 61 20 26 26 20 21 73 63  eckSchema && !sc
7380: 68 65 6d 61 49 73 56 61 6c 69 64 28 64 62 29 20  hemaIsValid(db) 
7390: 29 7b 0a 20 20 20 20 73 50 61 72 73 65 2e 72 63  ){.    sParse.rc
73a0: 20 3d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41   = SQLITE_SCHEMA
73b0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 50 61 72  ;.  }.  if( sPar
73c0: 73 65 2e 72 63 3d 3d 53 51 4c 49 54 45 5f 53 43  se.rc==SQLITE_SC
73d0: 48 45 4d 41 20 29 7b 0a 20 20 20 20 73 71 6c 69  HEMA ){.    sqli
73e0: 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c  te3ResetInternal
73f0: 53 63 68 65 6d 61 28 64 62 2c 20 30 29 3b 0a 20  Schema(db, 0);. 
7400: 20 7d 0a 20 20 69 66 28 20 70 7a 54 61 69 6c 20   }.  if( pzTail 
7410: 29 20 2a 70 7a 54 61 69 6c 20 3d 20 73 50 61 72  ) *pzTail = sPar
7420: 73 65 2e 7a 54 61 69 6c 3b 0a 20 20 72 63 20 3d  se.zTail;.  rc =
7430: 20 73 50 61 72 73 65 2e 72 63 3b 0a 0a 20 20 69   sParse.rc;..  i
7440: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
7450: 20 26 26 20 73 50 61 72 73 65 2e 70 56 64 62 65   && sParse.pVdbe
7460: 20 26 26 20 73 50 61 72 73 65 2e 65 78 70 6c 61   && sParse.expla
7470: 69 6e 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  in ){.    sqlite
7480: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
7490: 73 50 61 72 73 65 2e 70 56 64 62 65 2c 20 35 29  sParse.pVdbe, 5)
74a0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
74b0: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 73 50 61 72  eSetColName(sPar
74c0: 73 65 2e 70 56 64 62 65 2c 20 30 2c 20 22 61 64  se.pVdbe, 0, "ad
74d0: 64 72 22 2c 20 50 33 5f 53 54 41 54 49 43 29 3b  dr", P3_STATIC);
74e0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
74f0: 53 65 74 43 6f 6c 4e 61 6d 65 28 73 50 61 72 73  SetColName(sPars
7500: 65 2e 70 56 64 62 65 2c 20 31 2c 20 22 6f 70 63  e.pVdbe, 1, "opc
7510: 6f 64 65 22 2c 20 50 33 5f 53 54 41 54 49 43 29  ode", P3_STATIC)
7520: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
7530: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 73 50 61 72  eSetColName(sPar
7540: 73 65 2e 70 56 64 62 65 2c 20 32 2c 20 22 70 31  se.pVdbe, 2, "p1
7550: 22 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20  ", P3_STATIC);. 
7560: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
7570: 74 43 6f 6c 4e 61 6d 65 28 73 50 61 72 73 65 2e  tColName(sParse.
7580: 70 56 64 62 65 2c 20 33 2c 20 22 70 32 22 2c 20  pVdbe, 3, "p2", 
7590: 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  P3_STATIC);.    
75a0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
75b0: 6c 4e 61 6d 65 28 73 50 61 72 73 65 2e 70 56 64  lName(sParse.pVd
75c0: 62 65 2c 20 34 2c 20 22 70 33 22 2c 20 50 33 5f  be, 4, "p3", P3_
75d0: 53 54 41 54 49 43 29 3b 0a 20 20 7d 20 0a 0a 70  STATIC);.  } ..p
75e0: 72 65 70 61 72 65 5f 6f 75 74 3a 0a 20 20 69 66  repare_out:.  if
75f0: 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f  ( sqlite3SafetyO
7600: 66 66 28 64 62 29 20 29 7b 0a 20 20 20 20 72 63  ff(db) ){.    rc
7610: 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45   = SQLITE_MISUSE
7620: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d  ;.  }.  if( rc==
7630: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
7640: 20 2a 70 70 53 74 6d 74 20 3d 20 28 73 71 6c 69   *ppStmt = (sqli
7650: 74 65 33 5f 73 74 6d 74 2a 29 73 50 61 72 73 65  te3_stmt*)sParse
7660: 2e 70 56 64 62 65 3b 0a 20 20 7d 65 6c 73 65 20  .pVdbe;.  }else 
7670: 69 66 28 20 73 50 61 72 73 65 2e 70 56 64 62 65  if( sParse.pVdbe
7680: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   ){.    sqlite3_
7690: 66 69 6e 61 6c 69 7a 65 28 28 73 71 6c 69 74 65  finalize((sqlite
76a0: 33 5f 73 74 6d 74 2a 29 73 50 61 72 73 65 2e 70  3_stmt*)sParse.p
76b0: 56 64 62 65 29 3b 0a 20 20 7d 0a 0a 20 20 69 66  Vdbe);.  }..  if
76c0: 28 20 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20  ( zErrMsg ){.   
76d0: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62   sqlite3Error(db
76e0: 2c 20 72 63 2c 20 22 25 73 22 2c 20 7a 45 72 72  , rc, "%s", zErr
76f0: 4d 73 67 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Msg);.    sqlite
7700: 46 72 65 65 28 7a 45 72 72 4d 73 67 29 3b 0a 20  Free(zErrMsg);. 
7710: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
7720: 74 65 33 45 72 72 6f 72 28 64 62 2c 20 72 63 2c  te3Error(db, rc,
7730: 20 30 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72   0);.  }.  retur
7740: 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43  n rc;.}../*.** C
7750: 6f 6d 70 69 6c 65 20 74 68 65 20 55 54 46 2d 31  ompile the UTF-1
7760: 36 20 65 6e 63 6f 64 65 64 20 53 51 4c 20 73 74  6 encoded SQL st
7770: 61 74 65 6d 65 6e 74 20 7a 53 71 6c 20 69 6e 74  atement zSql int
7780: 6f 20 61 20 73 74 61 74 65 6d 65 6e 74 20 68 61  o a statement ha
7790: 6e 64 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  ndle..*/.int sql
77a0: 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 28 0a  ite3_prepare16(.
77b0: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20    sqlite3 *db,  
77c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
77d0: 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20  atabase handle. 
77e0: 2a 2f 20 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64  */ .  const void
77f0: 20 2a 7a 53 71 6c 2c 20 20 20 20 20 20 20 20 20   *zSql,         
7800: 2f 2a 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64  /* UTF-8 encoded
7810: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20   SQL statement. 
7820: 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 73 2c  */.  int nBytes,
7830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7840: 2a 20 4c 65 6e 67 74 68 20 6f 66 20 7a 53 71 6c  * Length of zSql
7850: 20 69 6e 20 62 79 74 65 73 2e 20 2a 2f 0a 20 20   in bytes. */.  
7860: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2a 70  sqlite3_stmt **p
7870: 70 53 74 6d 74 2c 20 20 20 20 2f 2a 20 4f 55 54  pStmt,    /* OUT
7880: 3a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  : A pointer to t
7890: 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74  he prepared stat
78a0: 65 6d 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73 74  ement */.  const
78b0: 20 76 6f 69 64 20 2a 2a 70 7a 54 61 69 6c 20 20   void **pzTail  
78c0: 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20 45 6e 64       /* OUT: End
78d0: 20 6f 66 20 70 61 72 73 65 64 20 73 74 72 69 6e   of parsed strin
78e0: 67 20 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 54 68 69  g */.){.  /* Thi
78f0: 73 20 66 75 6e 63 74 69 6f 6e 20 63 75 72 72 65  s function curre
7900: 6e 74 6c 79 20 77 6f 72 6b 73 20 62 79 20 66 69  ntly works by fi
7910: 72 73 74 20 74 72 61 6e 73 66 6f 72 6d 69 6e 67  rst transforming
7920: 20 74 68 65 20 55 54 46 2d 31 36 0a 20 20 2a 2a   the UTF-16.  **
7930: 20 65 6e 63 6f 64 65 64 20 73 74 72 69 6e 67 20   encoded string 
7940: 74 6f 20 55 54 46 2d 38 2c 20 74 68 65 6e 20 69  to UTF-8, then i
7950: 6e 76 6f 6b 69 6e 67 20 73 71 6c 69 74 65 33 5f  nvoking sqlite3_
7960: 70 72 65 70 61 72 65 28 29 2e 20 54 68 65 0a 20  prepare(). The. 
7970: 20 2a 2a 20 74 72 69 63 6b 79 20 62 69 74 20 69   ** tricky bit i
7980: 73 20 66 69 67 75 72 69 6e 67 20 6f 75 74 20 74  s figuring out t
7990: 68 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 72 65  he pointer to re
79a0: 74 75 72 6e 20 69 6e 20 2a 70 7a 54 61 69 6c 2e  turn in *pzTail.
79b0: 0a 20 20 2a 2f 0a 20 20 63 68 61 72 20 63 6f 6e  .  */.  char con
79c0: 73 74 20 2a 7a 53 71 6c 38 20 3d 20 30 3b 0a 20  st *zSql8 = 0;. 
79d0: 20 63 68 61 72 20 63 6f 6e 73 74 20 2a 7a 54 61   char const *zTa
79e0: 69 6c 38 20 3d 20 30 3b 0a 20 20 69 6e 74 20 72  il8 = 0;.  int r
79f0: 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  c;.  sqlite3_val
7a00: 75 65 20 2a 70 54 6d 70 3b 0a 0a 20 20 69 66 28  ue *pTmp;..  if(
7a10: 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
7a20: 65 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 72  eck(db) ){.    r
7a30: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53  eturn SQLITE_MIS
7a40: 55 53 45 3b 0a 20 20 7d 0a 20 20 70 54 6d 70 20  USE;.  }.  pTmp 
7a50: 3d 20 73 71 6c 69 74 65 33 47 65 74 54 72 61 6e  = sqlite3GetTran
7a60: 73 69 65 6e 74 56 61 6c 75 65 28 64 62 29 3b 0a  sientValue(db);.
7a70: 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65    sqlite3ValueSe
7a80: 74 53 74 72 28 70 54 6d 70 2c 20 2d 31 2c 20 7a  tStr(pTmp, -1, z
7a90: 53 71 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  Sql, SQLITE_UTF1
7aa0: 36 4e 41 54 49 56 45 2c 20 53 51 4c 49 54 45 5f  6NATIVE, SQLITE_
7ab0: 53 54 41 54 49 43 29 3b 0a 20 20 7a 53 71 6c 38  STATIC);.  zSql8
7ac0: 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65 54   = sqlite3ValueT
7ad0: 65 78 74 28 70 54 6d 70 2c 20 53 51 4c 49 54 45  ext(pTmp, SQLITE
7ae0: 5f 55 54 46 38 29 3b 0a 20 20 69 66 28 20 21 7a  _UTF8);.  if( !z
7af0: 53 71 6c 38 20 29 7b 0a 20 20 20 20 73 71 6c 69  Sql8 ){.    sqli
7b00: 74 65 33 45 72 72 6f 72 28 64 62 2c 20 53 51 4c  te3Error(db, SQL
7b10: 49 54 45 5f 4e 4f 4d 45 4d 2c 20 30 29 3b 0a 20  ITE_NOMEM, 0);. 
7b20: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
7b30: 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d 0a 20 20 72 63  _NOMEM;.  }.  rc
7b40: 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61   = sqlite3_prepa
7b50: 72 65 28 64 62 2c 20 7a 53 71 6c 38 2c 20 2d 31  re(db, zSql8, -1
7b60: 2c 20 70 70 53 74 6d 74 2c 20 26 7a 54 61 69 6c  , ppStmt, &zTail
7b70: 38 29 3b 0a 0a 20 20 69 66 28 20 7a 54 61 69 6c  8);..  if( zTail
7b80: 38 20 26 26 20 70 7a 54 61 69 6c 20 29 7b 0a 20  8 && pzTail ){. 
7b90: 20 20 20 2f 2a 20 49 66 20 73 71 6c 69 74 65 33     /* If sqlite3
7ba0: 5f 70 72 65 70 61 72 65 20 72 65 74 75 72 6e 73  _prepare returns
7bb0: 20 61 20 74 61 69 6c 20 70 6f 69 6e 74 65 72 2c   a tail pointer,
7bc0: 20 77 65 20 63 61 6c 63 75 6c 61 74 65 20 74 68   we calculate th
7bd0: 65 0a 20 20 20 20 2a 2a 20 65 71 75 69 76 61 6c  e.    ** equival
7be0: 65 6e 74 20 70 6f 69 6e 74 65 72 20 69 6e 74 6f  ent pointer into
7bf0: 20 74 68 65 20 55 54 46 2d 31 36 20 73 74 72 69   the UTF-16 stri
7c00: 6e 67 20 62 79 20 63 6f 75 6e 74 69 6e 67 20 74  ng by counting t
7c10: 68 65 20 75 6e 69 63 6f 64 65 0a 20 20 20 20 2a  he unicode.    *
7c20: 2a 20 63 68 61 72 61 63 74 65 72 73 20 62 65 74  * characters bet
7c30: 77 65 65 6e 20 7a 53 71 6c 38 20 61 6e 64 20 7a  ween zSql8 and z
7c40: 54 61 69 6c 38 2c 20 61 6e 64 20 74 68 65 6e 20  Tail8, and then 
7c50: 72 65 74 75 72 6e 69 6e 67 20 61 20 70 6f 69 6e  returning a poin
7c60: 74 65 72 0a 20 20 20 20 2a 2a 20 74 68 65 20 73  ter.    ** the s
7c70: 61 6d 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 68  ame number of ch
7c80: 61 72 61 63 74 65 72 73 20 69 6e 74 6f 20 74 68  aracters into th
7c90: 65 20 55 54 46 2d 31 36 20 73 74 72 69 6e 67 2e  e UTF-16 string.
7ca0: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 6e 74 20  .    */.    int 
7cb0: 63 68 61 72 73 5f 70 61 72 73 65 64 20 3d 20 73  chars_parsed = s
7cc0: 71 6c 69 74 65 33 75 74 66 38 43 68 61 72 4c 65  qlite3utf8CharLe
7cd0: 6e 28 7a 53 71 6c 38 2c 20 7a 54 61 69 6c 38 2d  n(zSql8, zTail8-
7ce0: 7a 53 71 6c 38 29 3b 0a 20 20 20 20 2a 70 7a 54  zSql8);.    *pzT
7cf0: 61 69 6c 20 3d 20 28 75 38 20 2a 29 7a 53 71 6c  ail = (u8 *)zSql
7d00: 20 2b 20 73 71 6c 69 74 65 33 75 74 66 31 36 42   + sqlite3utf16B
7d10: 79 74 65 4c 65 6e 28 7a 53 71 6c 2c 20 63 68 61  yteLen(zSql, cha
7d20: 72 73 5f 70 61 72 73 65 64 29 3b 0a 20 20 7d 0a  rs_parsed);.  }.
7d30: 20 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d   .  return rc;.}
7d40: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ../*.** This rou
7d50: 74 69 6e 65 20 64 6f 65 73 20 74 68 65 20 77 6f  tine does the wo
7d60: 72 6b 20 6f 66 20 6f 70 65 6e 69 6e 67 20 61 20  rk of opening a 
7d70: 64 61 74 61 62 61 73 65 20 6f 6e 20 62 65 68 61  database on beha
7d80: 6c 66 20 6f 66 0a 2a 2a 20 73 71 6c 69 74 65 33  lf of.** sqlite3
7d90: 5f 6f 70 65 6e 28 29 20 61 6e 64 20 73 71 6c 69  _open() and sqli
7da0: 74 65 33 5f 6f 70 65 6e 31 36 28 29 2e 20 54 68  te3_open16(). Th
7db0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 6e  e database filen
7dc0: 61 6d 65 20 22 7a 46 69 6c 65 6e 61 6d 65 22 20  ame "zFilename" 
7dd0: 20 0a 2a 2a 20 69 73 20 55 54 46 2d 38 20 65 6e   .** is UTF-8 en
7de0: 63 6f 64 65 64 2e 20 54 68 65 20 66 6f 75 72 74  coded. The fourt
7df0: 68 20 61 72 67 75 6d 65 6e 74 2c 20 22 64 65 66  h argument, "def
7e00: 5f 65 6e 63 22 20 69 73 20 6f 6e 65 20 6f 66 20  _enc" is one of 
7e10: 74 68 65 20 54 45 58 54 5f 2a 0a 2a 2a 20 6d 61  the TEXT_*.** ma
7e20: 63 72 6f 73 20 66 72 6f 6d 20 73 71 6c 69 74 65  cros from sqlite
7e30: 49 6e 74 2e 68 2e 20 49 66 20 77 65 20 65 6e 64  Int.h. If we end
7e40: 20 75 70 20 63 72 65 61 74 69 6e 67 20 61 20 6e   up creating a n
7e50: 65 77 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ew database file
7e60: 0a 2a 2a 20 28 6e 6f 74 20 6f 70 65 6e 69 6e 67  .** (not opening
7e70: 20 61 6e 20 65 78 69 73 74 69 6e 67 20 6f 6e 65   an existing one
7e80: 29 2c 20 74 68 65 20 74 65 78 74 20 65 6e 63 6f  ), the text enco
7e90: 64 69 6e 67 20 6f 66 20 74 68 65 20 64 61 74 61  ding of the data
7ea0: 62 61 73 65 0a 2a 2a 20 77 69 6c 6c 20 62 65 20  base.** will be 
7eb0: 73 65 74 20 74 6f 20 74 68 69 73 20 76 61 6c 75  set to this valu
7ec0: 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  e..*/.static int
7ed0: 20 6f 70 65 6e 44 61 74 61 62 61 73 65 28 0a 20   openDatabase(. 
7ee0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69   const char *zFi
7ef0: 6c 65 6e 61 6d 65 2c 20 2f 2a 20 44 61 74 61 62  lename, /* Datab
7f00: 61 73 65 20 66 69 6c 65 6e 61 6d 65 20 55 54 46  ase filename UTF
7f10: 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20  -8 encoded */.  
7f20: 73 71 6c 69 74 65 33 20 2a 2a 70 70 44 62 20 20  sqlite3 **ppDb  
7f30: 20 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20 52         /* OUT: R
7f40: 65 74 75 72 6e 65 64 20 64 61 74 61 62 61 73 65  eturned database
7f50: 20 68 61 6e 64 6c 65 20 2a 2f 0a 29 7b 0a 20 20   handle */.){.  
7f60: 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69  sqlite3 *db;.  i
7f70: 6e 74 20 72 63 2c 20 69 3b 0a 20 20 63 68 61 72  nt rc, i;.  char
7f80: 20 2a 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 0a   *zErrMsg = 0;..
7f90: 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 20 74 68    /* Allocate th
7fa0: 65 20 73 71 6c 69 74 65 20 64 61 74 61 20 73 74  e sqlite data st
7fb0: 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 64 62 20  ructure */.  db 
7fc0: 3d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 20  = sqliteMalloc( 
7fd0: 73 69 7a 65 6f 66 28 73 71 6c 69 74 65 33 29 20  sizeof(sqlite3) 
7fe0: 29 3b 0a 20 20 69 66 28 20 64 62 3d 3d 30 20 29  );.  if( db==0 )
7ff0: 20 67 6f 74 6f 20 6f 70 65 6e 64 62 5f 6f 75 74   goto opendb_out
8000: 3b 0a 20 20 64 62 2d 3e 70 72 69 6f 72 4e 65 77  ;.  db->priorNew
8010: 52 6f 77 69 64 20 3d 20 30 3b 0a 20 20 64 62 2d  Rowid = 0;.  db-
8020: 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f  >magic = SQLITE_
8030: 4d 41 47 49 43 5f 42 55 53 59 3b 0a 20 20 64 62  MAGIC_BUSY;.  db
8040: 2d 3e 6e 44 62 20 3d 20 32 3b 0a 20 20 64 62 2d  ->nDb = 2;.  db-
8050: 3e 61 44 62 20 3d 20 64 62 2d 3e 61 44 62 53 74  >aDb = db->aDbSt
8060: 61 74 69 63 3b 0a 20 20 64 62 2d 3e 65 6e 63 20  atic;.  db->enc 
8070: 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 0a 20  = SQLITE_UTF8;. 
8080: 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
8090: 3d 20 31 3b 0a 20 20 2f 2a 20 64 62 2d 3e 66 6c  = 1;.  /* db->fl
80a0: 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 53 68  ags |= SQLITE_Sh
80b0: 6f 72 74 43 6f 6c 4e 61 6d 65 73 3b 20 2a 2f 0a  ortColNames; */.
80c0: 20 20 73 71 6c 69 74 65 33 48 61 73 68 49 6e 69    sqlite3HashIni
80d0: 74 28 26 64 62 2d 3e 61 46 75 6e 63 2c 20 53 51  t(&db->aFunc, SQ
80e0: 4c 49 54 45 5f 48 41 53 48 5f 53 54 52 49 4e 47  LITE_HASH_STRING
80f0: 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 48  , 0);.  sqlite3H
8100: 61 73 68 49 6e 69 74 28 26 64 62 2d 3e 61 43 6f  ashInit(&db->aCo
8110: 6c 6c 53 65 71 2c 20 53 51 4c 49 54 45 5f 48 41  llSeq, SQLITE_HA
8120: 53 48 5f 53 54 52 49 4e 47 2c 20 30 29 3b 0a 20  SH_STRING, 0);. 
8130: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e   for(i=0; i<db->
8140: 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73  nDb; i++){.    s
8150: 71 6c 69 74 65 33 48 61 73 68 49 6e 69 74 28 26  qlite3HashInit(&
8160: 64 62 2d 3e 61 44 62 5b 69 5d 2e 74 62 6c 48 61  db->aDb[i].tblHa
8170: 73 68 2c 20 53 51 4c 49 54 45 5f 48 41 53 48 5f  sh, SQLITE_HASH_
8180: 53 54 52 49 4e 47 2c 20 30 29 3b 0a 20 20 20 20  STRING, 0);.    
8190: 73 71 6c 69 74 65 33 48 61 73 68 49 6e 69 74 28  sqlite3HashInit(
81a0: 26 64 62 2d 3e 61 44 62 5b 69 5d 2e 69 64 78 48  &db->aDb[i].idxH
81b0: 61 73 68 2c 20 53 51 4c 49 54 45 5f 48 41 53 48  ash, SQLITE_HASH
81c0: 5f 53 54 52 49 4e 47 2c 20 30 29 3b 0a 20 20 20  _STRING, 0);.   
81d0: 20 73 71 6c 69 74 65 33 48 61 73 68 49 6e 69 74   sqlite3HashInit
81e0: 28 26 64 62 2d 3e 61 44 62 5b 69 5d 2e 74 72 69  (&db->aDb[i].tri
81f0: 67 48 61 73 68 2c 20 53 51 4c 49 54 45 5f 48 41  gHash, SQLITE_HA
8200: 53 48 5f 53 54 52 49 4e 47 2c 20 30 29 3b 0a 20  SH_STRING, 0);. 
8210: 20 20 20 73 71 6c 69 74 65 33 48 61 73 68 49 6e     sqlite3HashIn
8220: 69 74 28 26 64 62 2d 3e 61 44 62 5b 69 5d 2e 61  it(&db->aDb[i].a
8230: 46 4b 65 79 2c 20 53 51 4c 49 54 45 5f 48 41 53  FKey, SQLITE_HAS
8240: 48 5f 53 54 52 49 4e 47 2c 20 31 29 3b 0a 20 20  H_STRING, 1);.  
8250: 7d 0a 20 20 0a 20 20 2f 2a 20 41 64 64 20 74 68  }.  .  /* Add th
8260: 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74  e default collat
8270: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 42 49 4e  ion sequence BIN
8280: 41 52 59 2e 20 42 49 4e 41 52 59 20 77 6f 72 6b  ARY. BINARY work
8290: 73 20 66 6f 72 20 62 6f 74 68 20 55 54 46 2d 38  s for both UTF-8
82a0: 0a 20 20 2a 2a 20 61 6e 64 20 55 54 46 2d 31 36  .  ** and UTF-16
82b0: 2c 20 73 6f 20 61 64 64 20 61 20 76 65 72 73 69  , so add a versi
82c0: 6f 6e 20 66 6f 72 20 65 61 63 68 20 74 6f 20 61  on for each to a
82d0: 76 6f 69 64 20 61 6e 79 20 75 6e 6e 65 63 65 73  void any unneces
82e0: 73 61 72 79 0a 20 20 2a 2a 20 63 6f 6e 76 65 72  sary.  ** conver
82f0: 73 69 6f 6e 73 2e 20 54 68 65 20 6f 6e 6c 79 20  sions. The only 
8300: 65 72 72 6f 72 20 74 68 61 74 20 63 61 6e 20 6f  error that can o
8310: 63 63 75 72 20 68 65 72 65 20 69 73 20 61 20 6d  ccur here is a m
8320: 61 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65 2e  alloc() failure.
8330: 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  .  */.  sqlite3_
8340: 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e  create_collation
8350: 28 64 62 2c 20 22 42 49 4e 41 52 59 22 2c 20 53  (db, "BINARY", S
8360: 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 62 69  QLITE_UTF8, 0,bi
8370: 6e 61 72 79 43 6f 6c 6c 61 74 69 6e 67 46 75 6e  naryCollatingFun
8380: 63 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 72  c);.  sqlite3_cr
8390: 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64  eate_collation(d
83a0: 62 2c 20 22 42 49 4e 41 52 59 22 2c 20 53 51 4c  b, "BINARY", SQL
83b0: 49 54 45 5f 55 54 46 31 36 4c 45 2c 20 30 2c 62  ITE_UTF16LE, 0,b
83c0: 69 6e 61 72 79 43 6f 6c 6c 61 74 69 6e 67 46 75  inaryCollatingFu
83d0: 6e 63 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63  nc);.  sqlite3_c
83e0: 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28  reate_collation(
83f0: 64 62 2c 20 22 42 49 4e 41 52 59 22 2c 20 53 51  db, "BINARY", SQ
8400: 4c 49 54 45 5f 55 54 46 31 36 42 45 2c 20 30 2c  LITE_UTF16BE, 0,
8410: 62 69 6e 61 72 79 43 6f 6c 6c 61 74 69 6e 67 46  binaryCollatingF
8420: 75 6e 63 29 3b 0a 20 20 64 62 2d 3e 70 44 66 6c  unc);.  db->pDfl
8430: 74 43 6f 6c 6c 20 3d 20 73 71 6c 69 74 65 33 46  tColl = sqlite3F
8440: 69 6e 64 43 6f 6c 6c 53 65 71 28 64 62 2c 20 64  indCollSeq(db, d
8450: 62 2d 3e 65 6e 63 2c 20 22 42 49 4e 41 52 59 22  b->enc, "BINARY"
8460: 2c 20 36 2c 20 30 29 3b 0a 20 20 69 66 28 20 21  , 6, 0);.  if( !
8470: 64 62 2d 3e 70 44 66 6c 74 43 6f 6c 6c 20 29 7b  db->pDfltColl ){
8480: 0a 20 20 20 20 72 63 20 3d 20 64 62 2d 3e 65 72  .    rc = db->er
8490: 72 43 6f 64 65 3b 0a 20 20 20 20 61 73 73 65 72  rCode;.    asser
84a0: 74 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc!=SQLITE_OK
84b0: 20 29 3b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69   );.    db->magi
84c0: 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  c = SQLITE_MAGIC
84d0: 5f 43 4c 4f 53 45 44 3b 0a 20 20 20 20 67 6f 74  _CLOSED;.    got
84e0: 6f 20 6f 70 65 6e 64 62 5f 6f 75 74 3b 0a 20 20  o opendb_out;.  
84f0: 7d 0a 0a 20 20 2f 2a 20 41 6c 73 6f 20 61 64 64  }..  /* Also add
8500: 20 61 20 55 54 46 2d 38 20 63 61 73 65 2d 69 6e   a UTF-8 case-in
8510: 73 65 6e 73 69 74 69 76 65 20 63 6f 6c 6c 61 74  sensitive collat
8520: 69 6f 6e 20 73 65 71 75 65 6e 63 65 2e 20 2a 2f  ion sequence. */
8530: 0a 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  .  sqlite3_creat
8540: 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20  e_collation(db, 
8550: 22 4e 4f 43 41 53 45 22 2c 20 53 51 4c 49 54 45  "NOCASE", SQLITE
8560: 5f 55 54 46 38 2c 20 30 2c 20 6e 6f 63 61 73 65  _UTF8, 0, nocase
8570: 43 6f 6c 6c 61 74 69 6e 67 46 75 6e 63 29 3b 0a  CollatingFunc);.
8580: 0a 20 20 2f 2a 20 4f 70 65 6e 20 74 68 65 20 62  .  /* Open the b
8590: 61 63 6b 65 6e 64 20 64 61 74 61 62 61 73 65 20  ackend database 
85a0: 64 72 69 76 65 72 20 2a 2f 0a 20 20 72 63 20 3d  driver */.  rc =
85b0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 61 63   sqlite3BtreeFac
85c0: 74 6f 72 79 28 64 62 2c 20 7a 46 69 6c 65 6e 61  tory(db, zFilena
85d0: 6d 65 2c 20 30 2c 20 4d 41 58 5f 50 41 47 45 53  me, 0, MAX_PAGES
85e0: 2c 20 26 64 62 2d 3e 61 44 62 5b 30 5d 2e 70 42  , &db->aDb[0].pB
85f0: 74 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51  t);.  if( rc!=SQ
8600: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73  LITE_OK ){.    s
8610: 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20  qlite3Error(db, 
8620: 72 63 2c 20 30 29 3b 0a 20 20 20 20 64 62 2d 3e  rc, 0);.    db->
8630: 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d  magic = SQLITE_M
8640: 41 47 49 43 5f 43 4c 4f 53 45 44 3b 0a 20 20 20  AGIC_CLOSED;.   
8650: 20 67 6f 74 6f 20 6f 70 65 6e 64 62 5f 6f 75 74   goto opendb_out
8660: 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 61 44 62 5b  ;.  }.  db->aDb[
8670: 30 5d 2e 7a 4e 61 6d 65 20 3d 20 22 6d 61 69 6e  0].zName = "main
8680: 22 3b 0a 20 20 64 62 2d 3e 61 44 62 5b 31 5d 2e  ";.  db->aDb[1].
8690: 7a 4e 61 6d 65 20 3d 20 22 74 65 6d 70 22 3b 0a  zName = "temp";.
86a0: 0a 20 20 2f 2a 20 54 68 65 20 64 65 66 61 75 6c  .  /* The defaul
86b0: 74 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 66  t safety_level f
86c0: 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  or the main data
86d0: 62 61 73 65 20 69 73 20 27 66 75 6c 6c 27 20 66  base is 'full' f
86e0: 6f 72 20 74 68 65 20 74 65 6d 70 0a 20 20 2a 2a  or the temp.  **
86f0: 20 64 61 74 61 62 61 73 65 20 69 74 20 69 73 20   database it is 
8700: 27 4e 4f 4e 45 27 2e 20 54 68 69 73 20 6d 61 74  'NONE'. This mat
8710: 63 68 65 73 20 74 68 65 20 70 61 67 65 72 20 6c  ches the pager l
8720: 61 79 65 72 20 64 65 66 61 75 6c 74 73 2e 20 20  ayer defaults.  
8730: 2a 2f 0a 20 20 64 62 2d 3e 61 44 62 5b 30 5d 2e  */.  db->aDb[0].
8740: 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d 20 33  safety_level = 3
8750: 3b 0a 20 20 64 62 2d 3e 61 44 62 5b 31 5d 2e 73  ;.  db->aDb[1].s
8760: 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d 20 31 3b  afety_level = 1;
8770: 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20  ..  /* Register 
8780: 61 6c 6c 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e  all built-in fun
8790: 63 74 69 6f 6e 73 2c 20 62 75 74 20 64 6f 20 6e  ctions, but do n
87a0: 6f 74 20 61 74 74 65 6d 70 74 20 74 6f 20 72 65  ot attempt to re
87b0: 61 64 20 74 68 65 0a 20 20 2a 2a 20 64 61 74 61  ad the.  ** data
87c0: 62 61 73 65 20 73 63 68 65 6d 61 20 79 65 74 2e  base schema yet.
87d0: 20 54 68 69 73 20 69 73 20 64 65 6c 61 79 65 64   This is delayed
87e0: 20 75 6e 74 69 6c 20 74 68 65 20 66 69 72 73 74   until the first
87f0: 20 74 69 6d 65 20 74 68 65 20 64 61 74 61 62 61   time the databa
8800: 73 65 0a 20 20 2a 2a 20 69 73 20 61 63 63 65 73  se.  ** is acces
8810: 73 65 64 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69  sed..  */.  sqli
8820: 74 65 33 52 65 67 69 73 74 65 72 42 75 69 6c 74  te3RegisterBuilt
8830: 69 6e 46 75 6e 63 74 69 6f 6e 73 28 64 62 29 3b  inFunctions(db);
8840: 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
8850: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69  E_OK ){.    sqli
8860: 74 65 33 45 72 72 6f 72 28 64 62 2c 20 53 51 4c  te3Error(db, SQL
8870: 49 54 45 5f 4f 4b 2c 20 30 29 3b 0a 20 20 20 20  ITE_OK, 0);.    
8880: 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49  db->magic = SQLI
8890: 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 3b 0a 20  TE_MAGIC_OPEN;. 
88a0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
88b0: 74 65 33 45 72 72 6f 72 28 64 62 2c 20 72 63 2c  te3Error(db, rc,
88c0: 20 22 25 73 22 2c 20 7a 45 72 72 4d 73 67 2c 20   "%s", zErrMsg, 
88d0: 30 29 3b 0a 20 20 20 20 69 66 28 20 7a 45 72 72  0);.    if( zErr
88e0: 4d 73 67 20 29 20 73 71 6c 69 74 65 46 72 65 65  Msg ) sqliteFree
88f0: 28 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 64  (zErrMsg);.    d
8900: 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54  b->magic = SQLIT
8910: 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 3b 0a  E_MAGIC_CLOSED;.
8920: 20 20 7d 0a 0a 6f 70 65 6e 64 62 5f 6f 75 74 3a    }..opendb_out:
8930: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 65  .  if( sqlite3_e
8940: 72 72 63 6f 64 65 28 64 62 29 3d 3d 53 51 4c 49  rrcode(db)==SQLI
8950: 54 45 5f 4f 4b 20 26 26 20 73 71 6c 69 74 65 33  TE_OK && sqlite3
8960: 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 20 29  _malloc_failed )
8970: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45 72 72  {.    sqlite3Err
8980: 6f 72 28 64 62 2c 20 53 51 4c 49 54 45 5f 4e 4f  or(db, SQLITE_NO
8990: 4d 45 4d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 2a  MEM, 0);.  }.  *
89a0: 70 70 44 62 20 3d 20 64 62 3b 0a 20 20 72 65 74  ppDb = db;.  ret
89b0: 75 72 6e 20 73 71 6c 69 74 65 33 5f 65 72 72 63  urn sqlite3_errc
89c0: 6f 64 65 28 64 62 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  ode(db);.}../*.*
89d0: 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 64 61 74  * Open a new dat
89e0: 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 0a 2a 2f  abase handle..*/
89f0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 6f 70 65  .int sqlite3_ope
8a00: 6e 28 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  n(.  const char 
8a10: 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20 0a 20 20 73  *zFilename, .  s
8a20: 71 6c 69 74 65 33 20 2a 2a 70 70 44 62 20 0a 29  qlite3 **ppDb .)
8a30: 7b 0a 20 20 72 65 74 75 72 6e 20 6f 70 65 6e 44  {.  return openD
8a40: 61 74 61 62 61 73 65 28 7a 46 69 6c 65 6e 61 6d  atabase(zFilenam
8a50: 65 2c 20 70 70 44 62 29 3b 0a 7d 0a 0a 2f 2a 0a  e, ppDb);.}../*.
8a60: 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 64 61  ** Open a new da
8a70: 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 0a 2a  tabase handle..*
8a80: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 6f 70  /.int sqlite3_op
8a90: 65 6e 31 36 28 0a 20 20 63 6f 6e 73 74 20 76 6f  en16(.  const vo
8aa0: 69 64 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20 0a  id *zFilename, .
8ab0: 20 20 73 71 6c 69 74 65 33 20 2a 2a 70 70 44 62    sqlite3 **ppDb
8ac0: 0a 29 7b 0a 20 20 63 68 61 72 20 63 6f 6e 73 74  .){.  char const
8ad0: 20 2a 7a 46 69 6c 65 6e 61 6d 65 38 3b 20 20 20   *zFilename8;   
8ae0: 2f 2a 20 7a 46 69 6c 65 6e 61 6d 65 20 65 6e 63  /* zFilename enc
8af0: 6f 64 65 64 20 69 6e 20 55 54 46 2d 38 20 69 6e  oded in UTF-8 in
8b00: 73 74 65 61 64 20 6f 66 20 55 54 46 2d 31 36 20  stead of UTF-16 
8b10: 2a 2f 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51  */.  int rc = SQ
8b20: 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 73 71  LITE_NOMEM;.  sq
8b30: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
8b40: 6c 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 70  l;..  assert( pp
8b50: 44 62 20 29 3b 0a 20 20 2a 70 70 44 62 20 3d 20  Db );.  *ppDb = 
8b60: 30 3b 0a 20 20 70 56 61 6c 20 3d 20 73 71 6c 69  0;.  pVal = sqli
8b70: 74 65 33 56 61 6c 75 65 4e 65 77 28 29 3b 0a 20  te3ValueNew();. 
8b80: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74   sqlite3ValueSet
8b90: 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c 20 7a 46  Str(pVal, -1, zF
8ba0: 69 6c 65 6e 61 6d 65 2c 20 53 51 4c 49 54 45 5f  ilename, SQLITE_
8bb0: 55 54 46 31 36 4e 41 54 49 56 45 2c 20 53 51 4c  UTF16NATIVE, SQL
8bc0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 7a  ITE_STATIC);.  z
8bd0: 46 69 6c 65 6e 61 6d 65 38 20 3d 20 73 71 6c 69  Filename8 = sqli
8be0: 74 65 33 56 61 6c 75 65 54 65 78 74 28 70 56 61  te3ValueText(pVa
8bf0: 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3b  l, SQLITE_UTF8);
8c00: 0a 20 20 69 66 28 20 7a 46 69 6c 65 6e 61 6d 65  .  if( zFilename
8c10: 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 6f 70  8 ){.    rc = op
8c20: 65 6e 44 61 74 61 62 61 73 65 28 7a 46 69 6c 65  enDatabase(zFile
8c30: 6e 61 6d 65 38 2c 20 70 70 44 62 29 3b 0a 20 20  name8, ppDb);.  
8c40: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
8c50: 5f 4f 4b 20 26 26 20 2a 70 70 44 62 20 29 7b 0a  _OK && *ppDb ){.
8c60: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78        sqlite3_ex
8c70: 65 63 28 2a 70 70 44 62 2c 20 22 50 52 41 47 4d  ec(*ppDb, "PRAGM
8c80: 41 20 65 6e 63 6f 64 69 6e 67 20 3d 20 27 55 54  A encoding = 'UT
8c90: 46 2d 31 36 27 22 2c 20 30 2c 20 30 2c 20 30 29  F-16'", 0, 0, 0)
8ca0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
8cb0: 28 20 70 56 61 6c 20 29 7b 0a 20 20 20 20 73 71  ( pVal ){.    sq
8cc0: 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 70  lite3ValueFree(p
8cd0: 56 61 6c 29 3b 0a 20 20 7d 0a 0a 20 20 72 65 74  Val);.  }..  ret
8ce0: 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  urn rc;.}../*.**
8cf0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72   The following r
8d00: 6f 75 74 69 6e 65 20 64 65 73 74 72 6f 79 73 20  outine destroys 
8d10: 61 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  a virtual machin
8d20: 65 20 74 68 61 74 20 69 73 20 63 72 65 61 74 65  e that is create
8d30: 64 20 62 79 0a 2a 2a 20 74 68 65 20 73 71 6c 69  d by.** the sqli
8d40: 74 65 33 5f 63 6f 6d 70 69 6c 65 28 29 20 72 6f  te3_compile() ro
8d50: 75 74 69 6e 65 2e 20 54 68 65 20 69 6e 74 65 67  utine. The integ
8d60: 65 72 20 72 65 74 75 72 6e 65 64 20 69 73 20 61  er returned is a
8d70: 6e 20 53 51 4c 49 54 45 5f 0a 2a 2a 20 73 75 63  n SQLITE_.** suc
8d80: 63 65 73 73 2f 66 61 69 6c 75 72 65 20 63 6f 64  cess/failure cod
8d90: 65 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73  e that describes
8da0: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 65   the result of e
8db0: 78 65 63 75 74 69 6e 67 20 74 68 65 20 76 69 72  xecuting the vir
8dc0: 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65 2e  tual.** machine.
8dd0: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  .**.** This rout
8de0: 69 6e 65 20 73 65 74 73 20 74 68 65 20 65 72 72  ine sets the err
8df0: 6f 72 20 63 6f 64 65 20 61 6e 64 20 73 74 72 69  or code and stri
8e00: 6e 67 20 72 65 74 75 72 6e 65 64 20 62 79 0a 2a  ng returned by.*
8e10: 2a 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64  * sqlite3_errcod
8e20: 65 28 29 2c 20 73 71 6c 69 74 65 33 5f 65 72 72  e(), sqlite3_err
8e30: 6d 73 67 28 29 20 61 6e 64 20 73 71 6c 69 74 65  msg() and sqlite
8e40: 33 5f 65 72 72 6d 73 67 31 36 28 29 2e 0a 2a 2f  3_errmsg16()..*/
8e50: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 66 69 6e  .int sqlite3_fin
8e60: 61 6c 69 7a 65 28 73 71 6c 69 74 65 33 5f 73 74  alize(sqlite3_st
8e70: 6d 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20 69 6e  mt *pStmt){.  in
8e80: 74 20 72 63 3b 0a 20 20 69 66 28 20 70 53 74 6d  t rc;.  if( pStm
8e90: 74 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d  t==0 ){.    rc =
8ea0: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 65   SQLITE_OK;.  }e
8eb0: 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  lse{.    rc = sq
8ec0: 6c 69 74 65 33 56 64 62 65 46 69 6e 61 6c 69 7a  lite3VdbeFinaliz
8ed0: 65 28 28 56 64 62 65 2a 29 70 53 74 6d 74 29 3b  e((Vdbe*)pStmt);
8ee0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63  .  }.  return rc
8ef0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 65 72 6d 69  ;.}../*.** Termi
8f00: 6e 61 74 65 20 74 68 65 20 63 75 72 72 65 6e 74  nate the current
8f10: 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 61 6e   execution of an
8f20: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 61   SQL statement a
8f30: 6e 64 20 72 65 73 65 74 20 69 74 0a 2a 2a 20 62  nd reset it.** b
8f40: 61 63 6b 20 74 6f 20 69 74 73 20 73 74 61 72 74  ack to its start
8f50: 69 6e 67 20 73 74 61 74 65 20 73 6f 20 74 68 61  ing state so tha
8f60: 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 75 73  t it can be reus
8f70: 65 64 2e 20 41 20 73 75 63 63 65 73 73 20 63 6f  ed. A success co
8f80: 64 65 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 70  de from.** the p
8f90: 72 69 6f 72 20 65 78 65 63 75 74 69 6f 6e 20 69  rior execution i
8fa0: 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2a 0a 2a  s returned..**.*
8fb0: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73  * This routine s
8fc0: 65 74 73 20 74 68 65 20 65 72 72 6f 72 20 63 6f  ets the error co
8fd0: 64 65 20 61 6e 64 20 73 74 72 69 6e 67 20 72 65  de and string re
8fe0: 74 75 72 6e 65 64 20 62 79 0a 2a 2a 20 73 71 6c  turned by.** sql
8ff0: 69 74 65 33 5f 65 72 72 63 6f 64 65 28 29 2c 20  ite3_errcode(), 
9000: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 29  sqlite3_errmsg()
9010: 20 61 6e 64 20 73 71 6c 69 74 65 33 5f 65 72 72   and sqlite3_err
9020: 6d 73 67 31 36 28 29 2e 0a 2a 2f 0a 69 6e 74 20  msg16()..*/.int 
9030: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 73 71  sqlite3_reset(sq
9040: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
9050: 74 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  t){.  int rc;.  
9060: 69 66 28 20 70 53 74 6d 74 3d 3d 30 20 29 7b 0a  if( pStmt==0 ){.
9070: 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
9080: 4f 4b 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  OK;.  }else{.   
9090: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
90a0: 65 52 65 73 65 74 28 28 56 64 62 65 2a 29 70 53  eReset((Vdbe*)pS
90b0: 74 6d 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  tmt);.    sqlite
90c0: 33 56 64 62 65 4d 61 6b 65 52 65 61 64 79 28 28  3VdbeMakeReady((
90d0: 56 64 62 65 2a 29 70 53 74 6d 74 2c 20 2d 31 2c  Vdbe*)pStmt, -1,
90e0: 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 20   0, 0, 0);.  }. 
90f0: 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f   return rc;.}../
9100: 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 61 20  *.** Register a 
9110: 6e 65 77 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  new collation se
9120: 71 75 65 6e 63 65 20 77 69 74 68 20 74 68 65 20  quence with the 
9130: 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20  database handle 
9140: 64 62 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  db..*/.int sqlit
9150: 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74  e3_create_collat
9160: 69 6f 6e 28 0a 20 20 73 71 6c 69 74 65 33 2a 20  ion(.  sqlite3* 
9170: 64 62 2c 20 0a 20 20 63 6f 6e 73 74 20 63 68 61  db, .  const cha
9180: 72 20 2a 7a 4e 61 6d 65 2c 20 0a 20 20 69 6e 74  r *zName, .  int
9190: 20 65 6e 63 2c 20 0a 20 20 76 6f 69 64 2a 20 70   enc, .  void* p
91a0: 43 74 78 2c 0a 20 20 69 6e 74 28 2a 78 43 6f 6d  Ctx,.  int(*xCom
91b0: 70 61 72 65 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  pare)(void*,int,
91c0: 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 69 6e 74 2c  const void*,int,
91d0: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 0a 29 7b 0a  const void*).){.
91e0: 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c    CollSeq *pColl
91f0: 3b 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c  ;.  int rc = SQL
9200: 49 54 45 5f 4f 4b 3b 0a 20 20 0a 20 20 69 66 28  ITE_OK;.  .  if(
9210: 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
9220: 65 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 72  eck(db) ){.    r
9230: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53  eturn SQLITE_MIS
9240: 55 53 45 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49  USE;.  }..  /* I
9250: 66 20 53 51 4c 49 54 45 5f 55 54 46 31 36 20 69  f SQLITE_UTF16 i
9260: 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74  s specified as t
9270: 68 65 20 65 6e 63 6f 64 69 6e 67 20 74 79 70 65  he encoding type
9280: 2c 20 74 72 61 6e 73 66 6f 72 6d 20 74 68 69 73  , transform this
9290: 0a 20 20 2a 2a 20 74 6f 20 6f 6e 65 20 6f 66 20  .  ** to one of 
92a0: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 6f  SQLITE_UTF16LE o
92b0: 72 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  r SQLITE_UTF16BE
92c0: 20 75 73 69 6e 67 20 74 68 65 0a 20 20 2a 2a 20   using the.  ** 
92d0: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
92e0: 56 45 20 6d 61 63 72 6f 2e 20 53 51 4c 49 54 45  VE macro. SQLITE
92f0: 5f 55 54 46 31 36 20 69 73 20 6e 6f 74 20 75 73  _UTF16 is not us
9300: 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 0a 20  ed internally.. 
9310: 20 2a 2f 0a 20 20 69 66 28 20 65 6e 63 3d 3d 53   */.  if( enc==S
9320: 51 4c 49 54 45 5f 55 54 46 31 36 20 29 7b 0a 20  QLITE_UTF16 ){. 
9330: 20 20 20 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f     enc = SQLITE_
9340: 55 54 46 31 36 4e 41 54 49 56 45 3b 0a 20 20 7d  UTF16NATIVE;.  }
9350: 0a 0a 20 20 69 66 28 20 65 6e 63 21 3d 53 51 4c  ..  if( enc!=SQL
9360: 49 54 45 5f 55 54 46 38 20 26 26 20 65 6e 63 21  ITE_UTF8 && enc!
9370: 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20  =SQLITE_UTF16LE 
9380: 26 26 20 65 6e 63 21 3d 53 51 4c 49 54 45 5f 55  && enc!=SQLITE_U
9390: 54 46 31 36 42 45 20 29 7b 0a 20 20 20 20 73 71  TF16BE ){.    sq
93a0: 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20 53  lite3Error(db, S
93b0: 51 4c 49 54 45 5f 45 52 52 4f 52 2c 20 0a 20 20  QLITE_ERROR, .  
93c0: 20 20 20 20 20 20 22 50 61 72 61 6d 20 33 20 74        "Param 3 t
93d0: 6f 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  o sqlite3_create
93e0: 5f 63 6f 6c 6c 61 74 69 6f 6e 28 29 20 6d 75 73  _collation() mus
93f0: 74 20 62 65 20 6f 6e 65 20 6f 66 20 22 0a 20 20  t be one of ".  
9400: 20 20 20 20 20 20 22 53 51 4c 49 54 45 5f 55 54        "SQLITE_UT
9410: 46 38 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36  F8, SQLITE_UTF16
9420: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  , SQLITE_UTF16LE
9430: 20 6f 72 20 53 51 4c 49 54 45 5f 55 54 46 31 36   or SQLITE_UTF16
9440: 42 45 22 0a 20 20 20 20 29 3b 0a 20 20 20 20 72  BE".    );.    r
9450: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52  eturn SQLITE_ERR
9460: 4f 52 3b 0a 20 20 7d 0a 20 20 70 43 6f 6c 6c 20  OR;.  }.  pColl 
9470: 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c  = sqlite3FindCol
9480: 6c 53 65 71 28 64 62 2c 20 28 75 38 29 65 6e 63  lSeq(db, (u8)enc
9490: 2c 20 7a 4e 61 6d 65 2c 20 73 74 72 6c 65 6e 28  , zName, strlen(
94a0: 7a 4e 61 6d 65 29 2c 20 31 29 3b 0a 20 20 69 66  zName), 1);.  if
94b0: 28 20 30 3d 3d 70 43 6f 6c 6c 20 29 7b 0a 20 20  ( 0==pColl ){.  
94c0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d   rc = SQLITE_NOM
94d0: 45 4d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  EM;.  }else{.   
94e0: 20 70 43 6f 6c 6c 2d 3e 78 43 6d 70 20 3d 20 78   pColl->xCmp = x
94f0: 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20 70 43 6f  Compare;.    pCo
9500: 6c 6c 2d 3e 70 55 73 65 72 20 3d 20 70 43 74 78  ll->pUser = pCtx
9510: 3b 0a 20 20 20 20 70 43 6f 6c 6c 2d 3e 65 6e 63  ;.    pColl->enc
9520: 20 3d 20 65 6e 63 3b 0a 20 20 7d 0a 20 20 73 71   = enc;.  }.  sq
9530: 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20 72  lite3Error(db, r
9540: 63 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20  c, 0);.  return 
9550: 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 67  rc;.}../*.** Reg
9560: 69 73 74 65 72 20 61 20 6e 65 77 20 63 6f 6c 6c  ister a new coll
9570: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77  ation sequence w
9580: 69 74 68 20 74 68 65 20 64 61 74 61 62 61 73 65  ith the database
9590: 20 68 61 6e 64 6c 65 20 64 62 2e 0a 2a 2f 0a 69   handle db..*/.i
95a0: 6e 74 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  nt sqlite3_creat
95b0: 65 5f 63 6f 6c 6c 61 74 69 6f 6e 31 36 28 0a 20  e_collation16(. 
95c0: 20 73 71 6c 69 74 65 33 2a 20 64 62 2c 20 0a 20   sqlite3* db, . 
95d0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61   const char *zNa
95e0: 6d 65 2c 20 0a 20 20 69 6e 74 20 65 6e 63 2c 20  me, .  int enc, 
95f0: 0a 20 20 76 6f 69 64 2a 20 70 43 74 78 2c 0a 20  .  void* pCtx,. 
9600: 20 69 6e 74 28 2a 78 43 6f 6d 70 61 72 65 29 28   int(*xCompare)(
9610: 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
9620: 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
9630: 76 6f 69 64 2a 29 0a 29 7b 0a 20 20 63 68 61 72  void*).){.  char
9640: 20 63 6f 6e 73 74 20 2a 7a 4e 61 6d 65 38 3b 0a   const *zName8;.
9650: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
9660: 2a 70 54 6d 70 3b 0a 20 20 69 66 28 20 73 71 6c  *pTmp;.  if( sql
9670: 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 28  ite3SafetyCheck(
9680: 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72  db) ){.    retur
9690: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b  n SQLITE_MISUSE;
96a0: 0a 20 20 7d 0a 20 20 70 54 6d 70 20 3d 20 73 71  .  }.  pTmp = sq
96b0: 6c 69 74 65 33 47 65 74 54 72 61 6e 73 69 65 6e  lite3GetTransien
96c0: 74 56 61 6c 75 65 28 64 62 29 3b 0a 20 20 73 71  tValue(db);.  sq
96d0: 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72  lite3ValueSetStr
96e0: 28 70 54 6d 70 2c 20 2d 31 2c 20 7a 4e 61 6d 65  (pTmp, -1, zName
96f0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  , SQLITE_UTF16NA
9700: 54 49 56 45 2c 20 53 51 4c 49 54 45 5f 53 54 41  TIVE, SQLITE_STA
9710: 54 49 43 29 3b 0a 20 20 7a 4e 61 6d 65 38 20 3d  TIC);.  zName8 =
9720: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78   sqlite3ValueTex
9730: 74 28 70 54 6d 70 2c 20 53 51 4c 49 54 45 5f 55  t(pTmp, SQLITE_U
9740: 54 46 38 29 3b 0a 20 20 72 65 74 75 72 6e 20 73  TF8);.  return s
9750: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f  qlite3_create_co
9760: 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 7a 4e 61 6d  llation(db, zNam
9770: 65 38 2c 20 65 6e 63 2c 20 70 43 74 78 2c 20 78  e8, enc, pCtx, x
9780: 43 6f 6d 70 61 72 65 29 3b 0a 7d 0a 0a 2f 2a 0a  Compare);.}../*.
9790: 2a 2a 20 52 65 67 69 73 74 65 72 20 61 20 63 6f  ** Register a co
97a0: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
97b0: 20 66 61 63 74 6f 72 79 20 63 61 6c 6c 62 61 63   factory callbac
97c0: 6b 20 77 69 74 68 20 74 68 65 20 64 61 74 61 62  k with the datab
97d0: 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 64 62  ase handle.** db
97e0: 2e 20 52 65 70 6c 61 63 65 20 61 6e 79 20 70 72  . Replace any pr
97f0: 65 76 69 6f 75 73 6c 79 20 69 6e 73 74 61 6c 6c  eviously install
9800: 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  ed collation seq
9810: 75 65 6e 63 65 20 66 61 63 74 6f 72 79 2e 0a 2a  uence factory..*
9820: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 6f  /.int sqlite3_co
9830: 6c 6c 61 74 69 6f 6e 5f 6e 65 65 64 65 64 28 0a  llation_needed(.
9840: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 0a    sqlite3 *db, .
9850: 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65    void *pCollNee
9860: 64 65 64 41 72 67 2c 20 0a 20 20 76 6f 69 64 28  dedArg, .  void(
9870: 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f  *xCollNeeded)(vo
9880: 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74  id*,sqlite3*,int
9890: 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20   eTextRep,const 
98a0: 63 68 61 72 2a 29 0a 29 7b 0a 20 20 69 66 28 20  char*).){.  if( 
98b0: 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
98c0: 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65  ck(db) ){.    re
98d0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  turn SQLITE_MISU
98e0: 53 45 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 78 43  SE;.  }.  db->xC
98f0: 6f 6c 6c 4e 65 65 64 65 64 20 3d 20 78 43 6f 6c  ollNeeded = xCol
9900: 6c 4e 65 65 64 65 64 3b 0a 20 20 64 62 2d 3e 78  lNeeded;.  db->x
9910: 43 6f 6c 6c 4e 65 65 64 65 64 31 36 20 3d 20 30  CollNeeded16 = 0
9920: 3b 0a 20 20 64 62 2d 3e 70 43 6f 6c 6c 4e 65 65  ;.  db->pCollNee
9930: 64 65 64 41 72 67 20 3d 20 70 43 6f 6c 6c 4e 65  dedArg = pCollNe
9940: 65 64 65 64 41 72 67 3b 0a 20 20 72 65 74 75 72  ededArg;.  retur
9950: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a  n SQLITE_OK;.}..
9960: 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 61  /*.** Register a
9970: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
9980: 6e 63 65 20 66 61 63 74 6f 72 79 20 63 61 6c 6c  nce factory call
9990: 62 61 63 6b 20 77 69 74 68 20 74 68 65 20 64 61  back with the da
99a0: 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a  tabase handle.**
99b0: 20 64 62 2e 20 52 65 70 6c 61 63 65 20 61 6e 79   db. Replace any
99c0: 20 70 72 65 76 69 6f 75 73 6c 79 20 69 6e 73 74   previously inst
99d0: 61 6c 6c 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 20  alled collation 
99e0: 73 65 71 75 65 6e 63 65 20 66 61 63 74 6f 72 79  sequence factory
99f0: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
9a00: 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 6e 65 65 64 65  _collation_neede
9a10: 64 31 36 28 0a 20 20 73 71 6c 69 74 65 33 20 2a  d16(.  sqlite3 *
9a20: 64 62 2c 20 0a 20 20 76 6f 69 64 20 2a 70 43 6f  db, .  void *pCo
9a30: 6c 6c 4e 65 65 64 65 64 41 72 67 2c 20 0a 20 20  llNeededArg, .  
9a40: 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65  void(*xCollNeede
9a50: 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  d16)(void*,sqlit
9a60: 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70  e3*,int eTextRep
9a70: 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 0a 29 7b  ,const void*).){
9a80: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
9a90: 66 65 74 79 43 68 65 63 6b 28 64 62 29 20 29 7b  fetyCheck(db) ){
9aa0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
9ab0: 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 20  TE_MISUSE;.  }. 
9ac0: 20 64 62 2d 3e 78 43 6f 6c 6c 4e 65 65 64 65 64   db->xCollNeeded
9ad0: 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 78 43 6f 6c   = 0;.  db->xCol
9ae0: 6c 4e 65 65 64 65 64 31 36 20 3d 20 78 43 6f 6c  lNeeded16 = xCol
9af0: 6c 4e 65 65 64 65 64 31 36 3b 0a 20 20 64 62 2d  lNeeded16;.  db-
9b00: 3e 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 20  >pCollNeededArg 
9b10: 3d 20 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67  = pCollNeededArg
9b20: 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ;.  return SQLIT
9b30: 45 5f 4f 4b 3b 0a 7d 0a                          E_OK;.}.