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

Artifact 9f0716fcee245c275a04b42c778c921483dcf868:


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 38 31 20 32 30 30 35 2f 30 32  ,v 1.281 2005/02
0280: 2f 31 39 20 30 38 3a 31 38 3a 30 36 20 64 61 6e  /19 08:18:06 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 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 66  }..    if( db->f
1fd0: 69 6c 65 5f 66 6f 72 6d 61 74 3d 3d 32 20 29 7b  ile_format==2 ){
1fe0: 0a 20 20 20 20 20 20 2f 2a 20 46 69 6c 65 20 66  .      /* File f
1ff0: 6f 72 6d 61 74 20 32 20 69 73 20 74 72 65 61 74  ormat 2 is treat
2000: 65 64 20 65 78 61 63 74 6c 79 20 61 73 20 66 69  ed exactly as fi
2010: 6c 65 20 66 6f 72 6d 61 74 20 31 2e 20 4e 65 77  le format 1. New
2020: 20 0a 20 20 20 20 20 20 2a 2a 20 64 61 74 61 62   .      ** datab
2030: 61 73 65 73 20 61 72 65 20 63 72 65 61 74 65 64  ases are created
2040: 20 77 69 74 68 20 66 69 6c 65 20 66 6f 72 6d 61   with file forma
2050: 74 20 31 2e 0a 20 20 20 20 20 20 2a 2f 20 0a 20  t 1..      */ . 
2060: 20 20 20 20 20 64 62 2d 3e 66 69 6c 65 5f 66 6f       db->file_fo
2070: 72 6d 61 74 20 3d 20 31 3b 0a 20 20 20 20 7d 0a  rmat = 1;.    }.
2080: 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 66    }..  /*.  ** f
2090: 69 6c 65 5f 66 6f 72 6d 61 74 3d 3d 31 20 20 20  ile_format==1   
20a0: 20 56 65 72 73 69 6f 6e 20 33 2e 30 2e 30 2e 0a   Version 3.0.0..
20b0: 20 20 2a 2a 20 66 69 6c 65 5f 66 6f 72 6d 61 74    ** file_format
20c0: 3d 3d 32 20 20 20 20 56 65 72 73 69 6f 6e 20 33  ==2    Version 3
20d0: 2e 31 2e 33 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  .1.3..  **.  ** 
20e0: 56 65 72 73 69 6f 6e 20 33 2e 30 20 63 61 6e 20  Version 3.0 can 
20f0: 6f 6e 6c 79 20 75 73 65 20 66 69 6c 65 73 20 77  only use files w
2100: 69 74 68 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3d  ith file_format=
2110: 3d 31 2e 20 56 65 72 73 69 6f 6e 20 33 2e 31 2e  =1. Version 3.1.
2120: 33 0a 20 20 2a 2a 20 63 61 6e 20 72 65 61 64 20  3.  ** can read 
2130: 61 6e 64 20 77 72 69 74 65 20 66 69 6c 65 73 20  and write files 
2140: 77 69 74 68 20 66 69 6c 65 5f 66 6f 72 6d 61 74  with file_format
2150: 3d 3d 31 20 6f 72 20 66 69 6c 65 5f 66 6f 72 6d  ==1 or file_form
2160: 61 74 3d 3d 32 2e 0a 20 20 2a 2f 0a 20 20 69 66  at==2..  */.  if
2170: 28 20 6d 65 74 61 5b 31 5d 3e 32 20 29 7b 0a 20  ( meta[1]>2 ){. 
2180: 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43     sqlite3BtreeC
2190: 6c 6f 73 65 43 75 72 73 6f 72 28 63 75 72 4d 61  loseCursor(curMa
21a0: 69 6e 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  in);.    sqlite3
21b0: 53 65 74 53 74 72 69 6e 67 28 70 7a 45 72 72 4d  SetString(pzErrM
21c0: 73 67 2c 20 22 75 6e 73 75 70 70 6f 72 74 65 64  sg, "unsupported
21d0: 20 66 69 6c 65 20 66 6f 72 6d 61 74 22 2c 20 28   file format", (
21e0: 63 68 61 72 2a 29 30 29 3b 0a 20 20 20 20 72 65  char*)0);.    re
21f0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f  turn SQLITE_ERRO
2200: 52 3b 0a 20 20 7d 0a 0a 20 20 73 71 6c 69 74 65  R;.  }..  sqlite
2210: 33 42 74 72 65 65 53 65 74 43 61 63 68 65 53 69  3BtreeSetCacheSi
2220: 7a 65 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  ze(db->aDb[iDb].
2230: 70 42 74 2c 20 64 62 2d 3e 61 44 62 5b 69 44 62  pBt, db->aDb[iDb
2240: 5d 2e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 0a  ].cache_size);..
2250: 20 20 2f 2a 20 52 65 61 64 20 74 68 65 20 73 63    /* Read the sc
2260: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
2270: 20 6f 75 74 20 6f 66 20 74 68 65 20 73 63 68 65   out of the sche
2280: 6d 61 20 74 61 62 6c 65 73 0a 20 20 2a 2f 0a 20  ma tables.  */. 
2290: 20 61 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69   assert( db->ini
22a0: 74 2e 62 75 73 79 20 29 3b 0a 20 20 69 66 28 20  t.busy );.  if( 
22b0: 72 63 3d 3d 53 51 4c 49 54 45 5f 45 4d 50 54 59  rc==SQLITE_EMPTY
22c0: 20 29 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20 61   ){.    /* For a
22d0: 6e 20 65 6d 70 74 79 20 64 61 74 61 62 61 73 65  n empty database
22e0: 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 74 68 69  , there is nothi
22f0: 6e 67 20 74 6f 20 72 65 61 64 20 2a 2f 0a 20 20  ng to read */.  
2300: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
2310: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63  ;.  }else{.    c
2320: 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 20 20 7a  har *zSql;.    z
2330: 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50 72  Sql = sqlite3MPr
2340: 69 6e 74 66 28 0a 20 20 20 20 20 20 20 20 22 53  intf(.        "S
2350: 45 4c 45 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74  ELECT name, root
2360: 70 61 67 65 2c 20 73 71 6c 2c 20 27 25 73 27 20  page, sql, '%s' 
2370: 46 52 4f 4d 20 27 25 71 27 2e 25 73 22 2c 0a 20  FROM '%q'.%s",. 
2380: 20 20 20 20 20 20 20 7a 44 62 4e 75 6d 2c 20 64         zDbNum, d
2390: 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d  b->aDb[iDb].zNam
23a0: 65 2c 20 7a 4d 61 73 74 65 72 4e 61 6d 65 29 3b  e, zMasterName);
23b0: 0a 20 20 20 20 73 71 6c 69 74 65 33 53 61 66 65  .    sqlite3Safe
23c0: 74 79 4f 66 66 28 64 62 29 3b 0a 20 20 20 20 72  tyOff(db);.    r
23d0: 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63  c = sqlite3_exec
23e0: 28 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74  (db, zSql, sqlit
23f0: 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20  e3InitCallback, 
2400: 26 69 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a 20  &initData, 0);. 
2410: 20 20 20 73 71 6c 69 74 65 33 53 61 66 65 74 79     sqlite3Safety
2420: 4f 6e 28 64 62 29 3b 0a 20 20 20 20 73 71 6c 69  On(db);.    sqli
2430: 74 65 46 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20  teFree(zSql);.  
2440: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c    sqlite3BtreeCl
2450: 6f 73 65 43 75 72 73 6f 72 28 63 75 72 4d 61 69  oseCursor(curMai
2460: 6e 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71  n);.  }.  if( sq
2470: 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69  lite3_malloc_fai
2480: 6c 65 64 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  led ){.    sqlit
2490: 65 33 53 65 74 53 74 72 69 6e 67 28 70 7a 45 72  e3SetString(pzEr
24a0: 72 4d 73 67 2c 20 22 6f 75 74 20 6f 66 20 6d 65  rMsg, "out of me
24b0: 6d 6f 72 79 22 2c 20 28 63 68 61 72 2a 29 30 29  mory", (char*)0)
24c0: 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
24d0: 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 73 71 6c  E_NOMEM;.    sql
24e0: 69 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61  ite3ResetInterna
24f0: 6c 53 63 68 65 6d 61 28 64 62 2c 20 30 29 3b 0a  lSchema(db, 0);.
2500: 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51    }.  if( rc==SQ
2510: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 44  LITE_OK ){.    D
2520: 62 53 65 74 50 72 6f 70 65 72 74 79 28 64 62 2c  bSetProperty(db,
2530: 20 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c   iDb, DB_SchemaL
2540: 6f 61 64 65 64 29 3b 0a 20 20 7d 65 6c 73 65 7b  oaded);.  }else{
2550: 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65  .    sqlite3Rese
2560: 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28  tInternalSchema(
2570: 64 62 2c 20 69 44 62 29 3b 0a 20 20 7d 0a 20 20  db, iDb);.  }.  
2580: 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a  return rc;.}../*
2590: 0a 2a 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 61  .** Initialize a
25a0: 6c 6c 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ll database file
25b0: 73 20 2d 20 74 68 65 20 6d 61 69 6e 20 64 61 74  s - the main dat
25c0: 61 62 61 73 65 20 66 69 6c 65 2c 20 74 68 65 20  abase file, the 
25d0: 66 69 6c 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20  file.** used to 
25e0: 73 74 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20  store temporary 
25f0: 74 61 62 6c 65 73 2c 20 61 6e 64 20 61 6e 79 20  tables, and any 
2600: 61 64 64 69 74 69 6f 6e 61 6c 20 64 61 74 61 62  additional datab
2610: 61 73 65 20 66 69 6c 65 73 0a 2a 2a 20 63 72 65  ase files.** cre
2620: 61 74 65 64 20 75 73 69 6e 67 20 41 54 54 41 43  ated using ATTAC
2630: 48 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 52  H statements.  R
2640: 65 74 75 72 6e 20 61 20 73 75 63 63 65 73 73 20  eturn a success 
2650: 63 6f 64 65 2e 20 20 49 66 20 61 6e 0a 2a 2a 20  code.  If an.** 
2660: 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 77 72  error occurs, wr
2670: 69 74 65 20 61 6e 20 65 72 72 6f 72 20 6d 65 73  ite an error mes
2680: 73 61 67 65 20 69 6e 74 6f 20 2a 70 7a 45 72 72  sage into *pzErr
2690: 4d 73 67 2e 0a 2a 2a 0a 2a 2a 20 41 66 74 65 72  Msg..**.** After
26a0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
26b0: 20 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20 74 68   initialized, th
26c0: 65 20 53 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c  e SQLITE_Initial
26d0: 69 7a 65 64 0a 2a 2a 20 62 69 74 20 69 73 20 73  ized.** bit is s
26e0: 65 74 20 69 6e 20 74 68 65 20 66 6c 61 67 73 20  et in the flags 
26f0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
2700: 69 74 65 20 73 74 72 75 63 74 75 72 65 2e 20 0a  ite structure. .
2710: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  */.int sqlite3In
2720: 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  it(sqlite3 *db, 
2730: 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 29  char **pzErrMsg)
2740: 7b 0a 20 20 69 6e 74 20 69 2c 20 72 63 3b 0a 20  {.  int i, rc;. 
2750: 20 0a 20 20 69 66 28 20 64 62 2d 3e 69 6e 69 74   .  if( db->init
2760: 2e 62 75 73 79 20 29 20 72 65 74 75 72 6e 20 53  .busy ) return S
2770: 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 61 73 73 65  QLITE_OK;.  asse
2780: 72 74 28 20 28 64 62 2d 3e 66 6c 61 67 73 20 26  rt( (db->flags &
2790: 20 53 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c 69   SQLITE_Initiali
27a0: 7a 65 64 29 3d 3d 30 20 29 3b 0a 20 20 72 63 20  zed)==0 );.  rc 
27b0: 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 64  = SQLITE_OK;.  d
27c0: 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 31  b->init.busy = 1
27d0: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 72 63 3d  ;.  for(i=0; rc=
27e0: 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69 3c  =SQLITE_OK && i<
27f0: 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20  db->nDb; i++){. 
2800: 20 20 20 69 66 28 20 44 62 48 61 73 50 72 6f 70     if( DbHasProp
2810: 65 72 74 79 28 64 62 2c 20 69 2c 20 44 42 5f 53  erty(db, i, DB_S
2820: 63 68 65 6d 61 4c 6f 61 64 65 64 29 20 7c 7c 20  chemaLoaded) || 
2830: 69 3d 3d 31 20 29 20 63 6f 6e 74 69 6e 75 65 3b  i==1 ) continue;
2840: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
2850: 33 49 6e 69 74 4f 6e 65 28 64 62 2c 20 69 2c 20  3InitOne(db, i, 
2860: 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 69  pzErrMsg);.    i
2870: 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 73  f( rc ){.      s
2880: 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65 72  qlite3ResetInter
2890: 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 69 29  nalSchema(db, i)
28a0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f  ;.    }.  }..  /
28b0: 2a 20 4f 6e 63 65 20 61 6c 6c 20 74 68 65 20 6f  * Once all the o
28c0: 74 68 65 72 20 64 61 74 61 62 61 73 65 73 20 68  ther databases h
28d0: 61 76 65 20 62 65 65 6e 20 69 6e 69 74 69 61 6c  ave been initial
28e0: 69 73 65 64 2c 20 6c 6f 61 64 20 74 68 65 20 73  ised, load the s
28f0: 63 68 65 6d 61 0a 20 20 2a 2a 20 66 6f 72 20 74  chema.  ** for t
2900: 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65  he TEMP database
2910: 2e 20 54 68 69 73 20 69 73 20 6c 6f 61 64 65 64  . This is loaded
2920: 20 6c 61 73 74 2c 20 61 73 20 74 68 65 20 54 45   last, as the TE
2930: 4d 50 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a  MP database.  **
2940: 20 73 63 68 65 6d 61 20 6d 61 79 20 63 6f 6e 74   schema may cont
2950: 61 69 6e 20 72 65 66 65 72 65 6e 63 65 73 20 74  ain references t
2960: 6f 20 6f 62 6a 65 63 74 73 20 69 6e 20 6f 74 68  o objects in oth
2970: 65 72 20 64 61 74 61 62 61 73 65 73 2e 0a 20 20  er databases..  
2980: 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  */.  if( rc==SQL
2990: 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 6e 44  ITE_OK && db->nD
29a0: 62 3e 31 20 26 26 20 21 44 62 48 61 73 50 72 6f  b>1 && !DbHasPro
29b0: 70 65 72 74 79 28 64 62 2c 20 31 2c 20 44 42 5f  perty(db, 1, DB_
29c0: 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 20 29 7b  SchemaLoaded) ){
29d0: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
29e0: 33 49 6e 69 74 4f 6e 65 28 64 62 2c 20 31 2c 20  3InitOne(db, 1, 
29f0: 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 69  pzErrMsg);.    i
2a00: 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 73  f( rc ){.      s
2a10: 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65 72  qlite3ResetInter
2a20: 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 31 29  nalSchema(db, 1)
2a30: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 64  ;.    }.  }..  d
2a40: 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 30  b->init.busy = 0
2a50: 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
2a60: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 64 62 2d  TE_OK ){.    db-
2a70: 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45  >flags |= SQLITE
2a80: 5f 49 6e 69 74 69 61 6c 69 7a 65 64 3b 0a 20 20  _Initialized;.  
2a90: 20 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49    sqlite3CommitI
2aa0: 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 64  nternalChanges(d
2ab0: 62 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 72  b);.  }..  if( r
2ac0: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
2ad0: 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d      db->flags &=
2ae0: 20 7e 53 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c   ~SQLITE_Initial
2af0: 69 7a 65 64 3b 0a 20 20 7d 0a 20 20 72 65 74 75  ized;.  }.  retu
2b00: 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  rn rc;.}../*.** 
2b10: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20  This routine is 
2b20: 61 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20 64  a no-op if the d
2b30: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
2b40: 73 20 61 6c 72 65 61 64 79 20 69 6e 69 74 69 61  s already initia
2b50: 6c 69 73 65 64 2e 0a 2a 2a 20 4f 74 68 65 72 77  lised..** Otherw
2b60: 69 73 65 2c 20 74 68 65 20 73 63 68 65 6d 61 20  ise, the schema 
2b70: 69 73 20 6c 6f 61 64 65 64 2e 20 41 6e 20 65 72  is loaded. An er
2b80: 72 6f 72 20 63 6f 64 65 20 69 73 20 72 65 74 75  ror code is retu
2b90: 72 6e 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  rned..*/.int sql
2ba0: 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28 50  ite3ReadSchema(P
2bb0: 61 72 73 65 20 2a 70 50 61 72 73 65 29 7b 0a 20  arse *pParse){. 
2bc0: 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45   int rc = SQLITE
2bd0: 5f 4f 4b 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a  _OK;.  sqlite3 *
2be0: 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b  db = pParse->db;
2bf0: 0a 20 20 69 66 28 20 21 64 62 2d 3e 69 6e 69 74  .  if( !db->init
2c00: 2e 62 75 73 79 20 29 7b 0a 20 20 20 20 69 66 28  .busy ){.    if(
2c10: 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51   (db->flags & SQ
2c20: 4c 49 54 45 5f 49 6e 69 74 69 61 6c 69 7a 65 64  LITE_Initialized
2c30: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63  )==0 ){.      rc
2c40: 20 3d 20 73 71 6c 69 74 65 33 49 6e 69 74 28 64   = sqlite3Init(d
2c50: 62 2c 20 26 70 50 61 72 73 65 2d 3e 7a 45 72 72  b, &pParse->zErr
2c60: 4d 73 67 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  Msg);.    }.  }.
2c70: 20 20 61 73 73 65 72 74 28 20 72 63 21 3d 53 51    assert( rc!=SQ
2c80: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 64 62 2d 3e  LITE_OK || (db->
2c90: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 49  flags & SQLITE_I
2ca0: 6e 69 74 69 61 6c 69 7a 65 64 29 7c 7c 64 62 2d  nitialized)||db-
2cb0: 3e 69 6e 69 74 2e 62 75 73 79 20 29 3b 0a 20 20  >init.busy );.  
2cc0: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
2cd0: 4b 20 29 7b 0a 20 20 20 20 70 50 61 72 73 65 2d  K ){.    pParse-
2ce0: 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20 20 70 50  >rc = rc;.    pP
2cf0: 61 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20  arse->nErr++;.  
2d00: 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d  }.  return rc;.}
2d10: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 76 65 72 73  ../*.** The vers
2d20: 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62 72 61  ion of the libra
2d30: 72 79 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72  ry.*/.const char
2d40: 20 72 63 73 69 64 33 5b 5d 20 3d 20 22 40 28 23   rcsid3[] = "@(#
2d50: 29 20 5c 30 34 34 49 64 3a 20 53 51 4c 69 74 65  ) \044Id: SQLite
2d60: 20 76 65 72 73 69 6f 6e 20 22 20 53 51 4c 49 54   version " SQLIT
2d70: 45 5f 56 45 52 53 49 4f 4e 20 22 20 24 22 3b 0a  E_VERSION " $";.
2d80: 63 6f 6e 73 74 20 63 68 61 72 20 73 71 6c 69 74  const char sqlit
2d90: 65 33 5f 76 65 72 73 69 6f 6e 5b 5d 20 3d 20 53  e3_version[] = S
2da0: 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 3b 0a 63  QLITE_VERSION;.c
2db0: 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
2dc0: 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 76 6f  e3_libversion(vo
2dd0: 69 64 29 7b 20 72 65 74 75 72 6e 20 73 71 6c 69  id){ return sqli
2de0: 74 65 33 5f 76 65 72 73 69 6f 6e 3b 20 7d 0a 69  te3_version; }.i
2df0: 6e 74 20 73 71 6c 69 74 65 33 5f 6c 69 62 76 65  nt sqlite3_libve
2e00: 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 76 6f 69  rsion_number(voi
2e10: 64 29 7b 20 72 65 74 75 72 6e 20 53 51 4c 49 54  d){ return SQLIT
2e20: 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52  E_VERSION_NUMBER
2e30: 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  ; }../*.** This 
2e40: 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 63  is the default c
2e50: 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
2e60: 6e 20 6e 61 6d 65 64 20 22 42 49 4e 41 52 59 22  n named "BINARY"
2e70: 20 77 68 69 63 68 20 69 73 20 61 6c 77 61 79 73   which is always
2e80: 0a 2a 2a 20 61 76 61 69 6c 61 62 6c 65 2e 0a 2a  .** available..*
2e90: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 62 69 6e  /.static int bin
2ea0: 43 6f 6c 6c 46 75 6e 63 28 0a 20 20 76 6f 69 64  CollFunc(.  void
2eb0: 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 69 6e 74   *NotUsed,.  int
2ec0: 20 6e 4b 65 79 31 2c 20 63 6f 6e 73 74 20 76 6f   nKey1, const vo
2ed0: 69 64 20 2a 70 4b 65 79 31 2c 0a 20 20 69 6e 74  id *pKey1,.  int
2ee0: 20 6e 4b 65 79 32 2c 20 63 6f 6e 73 74 20 76 6f   nKey2, const vo
2ef0: 69 64 20 2a 70 4b 65 79 32 0a 29 7b 0a 20 20 69  id *pKey2.){.  i
2f00: 6e 74 20 72 63 2c 20 6e 3b 0a 20 20 6e 20 3d 20  nt rc, n;.  n = 
2f10: 6e 4b 65 79 31 3c 6e 4b 65 79 32 20 3f 20 6e 4b  nKey1<nKey2 ? nK
2f20: 65 79 31 20 3a 20 6e 4b 65 79 32 3b 0a 20 20 72  ey1 : nKey2;.  r
2f30: 63 20 3d 20 6d 65 6d 63 6d 70 28 70 4b 65 79 31  c = memcmp(pKey1
2f40: 2c 20 70 4b 65 79 32 2c 20 6e 29 3b 0a 20 20 69  , pKey2, n);.  i
2f50: 66 28 20 72 63 3d 3d 30 20 29 7b 0a 20 20 20 20  f( rc==0 ){.    
2f60: 72 63 20 3d 20 6e 4b 65 79 31 20 2d 20 6e 4b 65  rc = nKey1 - nKe
2f70: 79 32 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  y2;.  }.  return
2f80: 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e   rc;.}../*.** An
2f90: 6f 74 68 65 72 20 62 75 69 6c 74 2d 69 6e 20 63  other built-in c
2fa0: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
2fb0: 65 3a 20 4e 4f 43 41 53 45 2e 20 0a 2a 2a 0a 2a  e: NOCASE. .**.*
2fc0: 2a 20 54 68 69 73 20 63 6f 6c 6c 61 74 69 6e 67  * This collating
2fd0: 20 73 65 71 75 65 6e 63 65 20 69 73 20 69 6e 74   sequence is int
2fe0: 65 6e 64 65 64 20 74 6f 20 62 65 20 75 73 65 64  ended to be used
2ff0: 20 66 6f 72 20 22 63 61 73 65 20 69 6e 64 65 70   for "case indep
3000: 65 6e 64 61 6e 74 0a 2a 2a 20 63 6f 6d 70 61 72  endant.** compar
3010: 69 73 6f 6e 22 2e 20 53 51 4c 69 74 65 27 73 20  ison". SQLite's 
3020: 6b 6e 6f 77 6c 65 64 67 65 20 6f 66 20 75 70 70  knowledge of upp
3030: 65 72 20 61 6e 64 20 6c 6f 77 65 72 20 63 61 73  er and lower cas
3040: 65 20 65 71 75 69 76 61 6c 65 6e 74 73 0a 2a 2a  e equivalents.**
3050: 20 65 78 74 65 6e 64 73 20 6f 6e 6c 79 20 74 6f   extends only to
3060: 20 74 68 65 20 32 36 20 63 68 61 72 61 63 74 65   the 26 characte
3070: 72 73 20 75 73 65 64 20 69 6e 20 74 68 65 20 45  rs used in the E
3080: 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 2e  nglish language.
3090: 0a 2a 2a 0a 2a 2a 20 41 74 20 74 68 65 20 6d 6f  .**.** At the mo
30a0: 6d 65 6e 74 20 74 68 65 72 65 20 69 73 20 6f 6e  ment there is on
30b0: 6c 79 20 61 20 55 54 46 2d 38 20 69 6d 70 6c 65  ly a UTF-8 imple
30c0: 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  mentation..*/.st
30d0: 61 74 69 63 20 69 6e 74 20 6e 6f 63 61 73 65 43  atic int nocaseC
30e0: 6f 6c 6c 61 74 69 6e 67 46 75 6e 63 28 0a 20 20  ollatingFunc(.  
30f0: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
3100: 20 69 6e 74 20 6e 4b 65 79 31 2c 20 63 6f 6e 73   int nKey1, cons
3110: 74 20 76 6f 69 64 20 2a 70 4b 65 79 31 2c 0a 20  t void *pKey1,. 
3120: 20 69 6e 74 20 6e 4b 65 79 32 2c 20 63 6f 6e 73   int nKey2, cons
3130: 74 20 76 6f 69 64 20 2a 70 4b 65 79 32 0a 29 7b  t void *pKey2.){
3140: 0a 20 20 69 6e 74 20 72 20 3d 20 73 71 6c 69 74  .  int r = sqlit
3150: 65 33 53 74 72 4e 49 43 6d 70 28 0a 20 20 20 20  e3StrNICmp(.    
3160: 20 20 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 29    (const char *)
3170: 70 4b 65 79 31 2c 20 28 63 6f 6e 73 74 20 63 68  pKey1, (const ch
3180: 61 72 20 2a 29 70 4b 65 79 32 2c 20 28 6e 4b 65  ar *)pKey2, (nKe
3190: 79 31 3c 6e 4b 65 79 32 29 3f 6e 4b 65 79 31 3a  y1<nKey2)?nKey1:
31a0: 6e 4b 65 79 32 29 3b 0a 20 20 69 66 28 20 30 3d  nKey2);.  if( 0=
31b0: 3d 72 20 29 7b 0a 20 20 20 20 72 20 3d 20 6e 4b  =r ){.    r = nK
31c0: 65 79 31 2d 6e 4b 65 79 32 3b 0a 20 20 7d 0a 20  ey1-nKey2;.  }. 
31d0: 20 72 65 74 75 72 6e 20 72 3b 0a 7d 0a 0a 2f 2a   return r;.}../*
31e0: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 52  .** Return the R
31f0: 4f 57 49 44 20 6f 66 20 74 68 65 20 6d 6f 73 74  OWID of the most
3200: 20 72 65 63 65 6e 74 20 69 6e 73 65 72 74 0a 2a   recent insert.*
3210: 2f 0a 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 73  /.sqlite_int64 s
3220: 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65  qlite3_last_inse
3230: 72 74 5f 72 6f 77 69 64 28 73 71 6c 69 74 65 33  rt_rowid(sqlite3
3240: 20 2a 64 62 29 7b 0a 20 20 72 65 74 75 72 6e 20   *db){.  return 
3250: 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 7d  db->lastRowid;.}
3260: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
3270: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61  he number of cha
3280: 6e 67 65 73 20 69 6e 20 74 68 65 20 6d 6f 73 74  nges in the most
3290: 20 72 65 63 65 6e 74 20 63 61 6c 6c 20 74 6f 20   recent call to 
32a0: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2e 0a  sqlite3_exec()..
32b0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63  */.int sqlite3_c
32c0: 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a  hanges(sqlite3 *
32d0: 64 62 29 7b 0a 20 20 72 65 74 75 72 6e 20 64 62  db){.  return db
32e0: 2d 3e 6e 43 68 61 6e 67 65 3b 0a 7d 0a 0a 2f 2a  ->nChange;.}../*
32f0: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e  .** Return the n
3300: 75 6d 62 65 72 20 6f 66 20 63 68 61 6e 67 65 73  umber of changes
3310: 20 73 69 6e 63 65 20 74 68 65 20 64 61 74 61 62   since the datab
3320: 61 73 65 20 68 61 6e 64 6c 65 20 77 61 73 20 6f  ase handle was o
3330: 70 65 6e 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71  pened..*/.int sq
3340: 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e  lite3_total_chan
3350: 67 65 73 28 73 71 6c 69 74 65 33 20 2a 64 62 29  ges(sqlite3 *db)
3360: 7b 0a 20 20 72 65 74 75 72 6e 20 64 62 2d 3e 6e  {.  return db->n
3370: 54 6f 74 61 6c 43 68 61 6e 67 65 3b 0a 7d 0a 0a  TotalChange;.}..
3380: 2f 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 6e 20 65  /*.** Close an e
3390: 78 69 73 74 69 6e 67 20 53 51 4c 69 74 65 20 64  xisting SQLite d
33a0: 61 74 61 62 61 73 65 0a 2a 2f 0a 69 6e 74 20 73  atabase.*/.int s
33b0: 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 73 71 6c  qlite3_close(sql
33c0: 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 48 61 73  ite3 *db){.  Has
33d0: 68 45 6c 65 6d 20 2a 69 3b 0a 20 20 69 6e 74 20  hElem *i;.  int 
33e0: 6a 3b 0a 0a 20 20 69 66 28 20 21 64 62 20 29 7b  j;..  if( !db ){
33f0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
3400: 54 45 5f 4f 4b 3b 0a 20 20 7d 0a 20 20 69 66 28  TE_OK;.  }.  if(
3410: 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
3420: 65 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 72  eck(db) ){.    r
3430: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53  eturn SQLITE_MIS
3440: 55 53 45 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49  USE;.  }..  /* I
3450: 66 20 74 68 65 72 65 20 61 72 65 20 61 6e 79 20  f there are any 
3460: 6f 75 74 73 74 61 6e 64 69 6e 67 20 56 4d 73 2c  outstanding VMs,
3470: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 42   return SQLITE_B
3480: 55 53 59 2e 20 2a 2f 0a 20 20 69 66 28 20 64 62  USY. */.  if( db
3490: 2d 3e 70 56 64 62 65 20 29 7b 0a 20 20 20 20 73  ->pVdbe ){.    s
34a0: 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20  qlite3Error(db, 
34b0: 53 51 4c 49 54 45 5f 42 55 53 59 2c 20 0a 20 20  SQLITE_BUSY, .  
34c0: 20 20 20 20 20 20 22 55 6e 61 62 6c 65 20 74 6f        "Unable to
34d0: 20 63 6c 6f 73 65 20 64 75 65 20 74 6f 20 75 6e   close due to un
34e0: 66 69 6e 61 6c 69 73 65 64 20 73 74 61 74 65 6d  finalised statem
34f0: 65 6e 74 73 22 29 3b 0a 20 20 20 20 72 65 74 75  ents");.    retu
3500: 72 6e 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a  rn SQLITE_BUSY;.
3510: 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 21 73    }.  assert( !s
3520: 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
3530: 6b 28 64 62 29 20 29 3b 0a 0a 20 20 2f 2a 20 46  k(db) );..  /* F
3540: 49 58 20 4d 45 3a 20 64 62 2d 3e 6d 61 67 69 63  IX ME: db->magic
3550: 20 6d 61 79 20 62 65 20 73 65 74 20 74 6f 20 53   may be set to S
3560: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53  QLITE_MAGIC_CLOS
3570: 45 44 20 69 66 20 74 68 65 20 64 61 74 61 62 61  ED if the databa
3580: 73 65 0a 20 20 2a 2a 20 63 61 6e 6e 6f 74 20 62  se.  ** cannot b
3590: 65 20 6f 70 65 6e 65 64 20 66 6f 72 20 73 6f 6d  e opened for som
35a0: 65 20 72 65 61 73 6f 6e 2e 20 53 6f 20 74 68 69  e reason. So thi
35b0: 73 20 72 6f 75 74 69 6e 65 20 6e 65 65 64 73 20  s routine needs 
35c0: 74 6f 20 72 75 6e 20 69 6e 0a 20 20 2a 2a 20 74  to run in.  ** t
35d0: 68 61 74 20 63 61 73 65 2e 20 42 75 74 20 6d 61  hat case. But ma
35e0: 79 62 65 20 74 68 65 72 65 20 73 68 6f 75 6c 64  ybe there should
35f0: 20 62 65 20 61 6e 20 65 78 74 72 61 20 6d 61 67   be an extra mag
3600: 69 63 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65  ic value for the
3610: 0a 20 20 2a 2a 20 22 66 61 69 6c 65 64 20 74 6f  .  ** "failed to
3620: 20 6f 70 65 6e 22 20 73 74 61 74 65 2e 0a 20 20   open" state..  
3630: 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 67  */.  if( db->mag
3640: 69 63 21 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43  ic!=SQLITE_MAGIC
3650: 5f 43 4c 4f 53 45 44 20 26 26 20 73 71 6c 69 74  _CLOSED && sqlit
3660: 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29  e3SafetyOn(db) )
3670: 7b 0a 20 20 20 20 2f 2a 20 70 72 69 6e 74 66 28  {.    /* printf(
3680: 22 44 49 44 20 4e 4f 54 20 43 4c 4f 53 45 5c 6e  "DID NOT CLOSE\n
3690: 22 29 3b 20 66 66 6c 75 73 68 28 73 74 64 6f 75  "); fflush(stdou
36a0: 74 29 3b 20 2a 2f 0a 20 20 20 20 72 65 74 75 72  t); */.    retur
36b0: 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  n SQLITE_ERROR;.
36c0: 20 20 7d 0a 0a 20 20 66 6f 72 28 6a 3d 30 3b 20    }..  for(j=0; 
36d0: 6a 3c 64 62 2d 3e 6e 44 62 3b 20 6a 2b 2b 29 7b  j<db->nDb; j++){
36e0: 0a 20 20 20 20 73 74 72 75 63 74 20 44 62 20 2a  .    struct Db *
36f0: 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 6a  pDb = &db->aDb[j
3700: 5d 3b 0a 20 20 20 20 69 66 28 20 70 44 62 2d 3e  ];.    if( pDb->
3710: 70 42 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  pBt ){.      sql
3720: 69 74 65 33 42 74 72 65 65 43 6c 6f 73 65 28 70  ite3BtreeClose(p
3730: 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20  Db->pBt);.      
3740: 70 44 62 2d 3e 70 42 74 20 3d 20 30 3b 0a 20 20  pDb->pBt = 0;.  
3750: 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65    }.  }.  sqlite
3760: 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63  3ResetInternalSc
3770: 68 65 6d 61 28 64 62 2c 20 30 29 3b 0a 20 20 61  hema(db, 0);.  a
3780: 73 73 65 72 74 28 20 64 62 2d 3e 6e 44 62 3c 3d  ssert( db->nDb<=
3790: 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  2 );.  assert( d
37a0: 62 2d 3e 61 44 62 3d 3d 64 62 2d 3e 61 44 62 53  b->aDb==db->aDbS
37b0: 74 61 74 69 63 20 29 3b 0a 20 20 66 6f 72 28 69  tatic );.  for(i
37c0: 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74  =sqliteHashFirst
37d0: 28 26 64 62 2d 3e 61 46 75 6e 63 29 3b 20 69 3b  (&db->aFunc); i;
37e0: 20 69 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78   i=sqliteHashNex
37f0: 74 28 69 29 29 7b 0a 20 20 20 20 46 75 6e 63 44  t(i)){.    FuncD
3800: 65 66 20 2a 70 46 75 6e 63 2c 20 2a 70 4e 65 78  ef *pFunc, *pNex
3810: 74 3b 0a 20 20 20 20 66 6f 72 28 70 46 75 6e 63  t;.    for(pFunc
3820: 20 3d 20 28 46 75 6e 63 44 65 66 2a 29 73 71 6c   = (FuncDef*)sql
3830: 69 74 65 48 61 73 68 44 61 74 61 28 69 29 3b 20  iteHashData(i); 
3840: 70 46 75 6e 63 3b 20 70 46 75 6e 63 3d 70 4e 65  pFunc; pFunc=pNe
3850: 78 74 29 7b 0a 20 20 20 20 20 20 70 4e 65 78 74  xt){.      pNext
3860: 20 3d 20 70 46 75 6e 63 2d 3e 70 4e 65 78 74 3b   = pFunc->pNext;
3870: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 46 72 65  .      sqliteFre
3880: 65 28 70 46 75 6e 63 29 3b 0a 20 20 20 20 7d 0a  e(pFunc);.    }.
3890: 20 20 7d 0a 0a 20 20 66 6f 72 28 69 3d 73 71 6c    }..  for(i=sql
38a0: 69 74 65 48 61 73 68 46 69 72 73 74 28 26 64 62  iteHashFirst(&db
38b0: 2d 3e 61 43 6f 6c 6c 53 65 71 29 3b 20 69 3b 20  ->aCollSeq); i; 
38c0: 69 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74  i=sqliteHashNext
38d0: 28 69 29 29 7b 0a 20 20 20 20 43 6f 6c 6c 53 65  (i)){.    CollSe
38e0: 71 20 2a 70 43 6f 6c 6c 20 3d 20 28 43 6f 6c 6c  q *pColl = (Coll
38f0: 53 65 71 20 2a 29 73 71 6c 69 74 65 48 61 73 68  Seq *)sqliteHash
3900: 44 61 74 61 28 69 29 3b 0a 20 20 20 20 73 71 6c  Data(i);.    sql
3910: 69 74 65 46 72 65 65 28 70 43 6f 6c 6c 29 3b 0a  iteFree(pColl);.
3920: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 48 61 73    }.  sqlite3Has
3930: 68 43 6c 65 61 72 28 26 64 62 2d 3e 61 43 6f 6c  hClear(&db->aCol
3940: 6c 53 65 71 29 3b 0a 0a 20 20 73 71 6c 69 74 65  lSeq);..  sqlite
3950: 33 48 61 73 68 43 6c 65 61 72 28 26 64 62 2d 3e  3HashClear(&db->
3960: 61 46 75 6e 63 29 3b 0a 20 20 73 71 6c 69 74 65  aFunc);.  sqlite
3970: 33 45 72 72 6f 72 28 64 62 2c 20 53 51 4c 49 54  3Error(db, SQLIT
3980: 45 5f 4f 4b 2c 20 30 29 3b 20 2f 2a 20 44 65 61  E_OK, 0); /* Dea
3990: 6c 6c 6f 63 61 74 65 73 20 61 6e 79 20 63 61 63  llocates any cac
39a0: 68 65 64 20 65 72 72 6f 72 20 73 74 72 69 6e 67  hed error string
39b0: 73 2e 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e  s. */.  if( db->
39c0: 70 56 61 6c 75 65 20 29 7b 0a 20 20 20 20 73 71  pValue ){.    sq
39d0: 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 64  lite3ValueFree(d
39e0: 62 2d 3e 70 56 61 6c 75 65 29 3b 0a 20 20 7d 0a  b->pValue);.  }.
39f0: 20 20 69 66 28 20 64 62 2d 3e 70 45 72 72 20 29    if( db->pErr )
3a00: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c  {.    sqlite3Val
3a10: 75 65 46 72 65 65 28 64 62 2d 3e 70 45 72 72 29  ueFree(db->pErr)
3a20: 3b 0a 20 20 7d 0a 0a 20 20 64 62 2d 3e 6d 61 67  ;.  }..  db->mag
3a30: 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49  ic = SQLITE_MAGI
3a40: 43 5f 45 52 52 4f 52 3b 0a 20 20 73 71 6c 69 74  C_ERROR;.  sqlit
3a50: 65 46 72 65 65 28 64 62 29 3b 0a 20 20 72 65 74  eFree(db);.  ret
3a60: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d  urn SQLITE_OK;.}
3a70: 0a 0a 2f 2a 0a 2a 2a 20 52 6f 6c 6c 62 61 63 6b  ../*.** Rollback
3a80: 20 61 6c 6c 20 64 61 74 61 62 61 73 65 20 66 69   all database fi
3a90: 6c 65 73 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  les..*/.void sql
3aa0: 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28  ite3RollbackAll(
3ab0: 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20  sqlite3 *db){.  
3ac0: 69 6e 74 20 69 3b 0a 20 20 66 6f 72 28 69 3d 30  int i;.  for(i=0
3ad0: 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b  ; i<db->nDb; i++
3ae0: 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 61  ){.    if( db->a
3af0: 44 62 5b 69 5d 2e 70 42 74 20 29 7b 0a 20 20 20  Db[i].pBt ){.   
3b00: 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 52     sqlite3BtreeR
3b10: 6f 6c 6c 62 61 63 6b 28 64 62 2d 3e 61 44 62 5b  ollback(db->aDb[
3b20: 69 5d 2e 70 42 74 29 3b 0a 20 20 20 20 20 20 64  i].pBt);.      d
3b30: 62 2d 3e 61 44 62 5b 69 5d 2e 69 6e 54 72 61 6e  b->aDb[i].inTran
3b40: 73 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d  s = 0;.    }.  }
3b50: 0a 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 49  .  sqlite3ResetI
3b60: 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62  nternalSchema(db
3b70: 2c 20 30 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  , 0);.}../*.** R
3b80: 65 74 75 72 6e 20 61 20 73 74 61 74 69 63 20 73  eturn a static s
3b90: 74 72 69 6e 67 20 74 68 61 74 20 64 65 73 63 72  tring that descr
3ba0: 69 62 65 73 20 74 68 65 20 6b 69 6e 64 20 6f 66  ibes the kind of
3bb0: 20 65 72 72 6f 72 20 73 70 65 63 69 66 69 65 64   error specified
3bc0: 20 69 6e 20 74 68 65 0a 2a 2a 20 61 72 67 75 6d   in the.** argum
3bd0: 65 6e 74 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68  ent..*/.const ch
3be0: 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 53 74  ar *sqlite3ErrSt
3bf0: 72 28 69 6e 74 20 72 63 29 7b 0a 20 20 63 6f 6e  r(int rc){.  con
3c00: 73 74 20 63 68 61 72 20 2a 7a 3b 0a 20 20 73 77  st char *z;.  sw
3c10: 69 74 63 68 28 20 72 63 20 29 7b 0a 20 20 20 20  itch( rc ){.    
3c20: 63 61 73 65 20 53 51 4c 49 54 45 5f 52 4f 57 3a  case SQLITE_ROW:
3c30: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
3c40: 5f 44 4f 4e 45 3a 0a 20 20 20 20 63 61 73 65 20  _DONE:.    case 
3c50: 53 51 4c 49 54 45 5f 4f 4b 3a 20 20 20 20 20 20  SQLITE_OK:      
3c60: 20 20 20 7a 20 3d 20 22 6e 6f 74 20 61 6e 20 65     z = "not an e
3c70: 72 72 6f 72 22 3b 20 20 20 20 20 20 20 20 20 20  rror";          
3c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c90: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
3ca0: 53 51 4c 49 54 45 5f 45 52 52 4f 52 3a 20 20 20  SQLITE_ERROR:   
3cb0: 20 20 20 7a 20 3d 20 22 53 51 4c 20 6c 6f 67 69     z = "SQL logi
3cc0: 63 20 65 72 72 6f 72 20 6f 72 20 6d 69 73 73 69  c error or missi
3cd0: 6e 67 20 64 61 74 61 62 61 73 65 22 3b 20 20 20  ng database";   
3ce0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
3cf0: 53 51 4c 49 54 45 5f 49 4e 54 45 52 4e 41 4c 3a  SQLITE_INTERNAL:
3d00: 20 20 20 7a 20 3d 20 22 69 6e 74 65 72 6e 61 6c     z = "internal
3d10: 20 53 51 4c 69 74 65 20 69 6d 70 6c 65 6d 65 6e   SQLite implemen
3d20: 74 61 74 69 6f 6e 20 66 6c 61 77 22 3b 20 20 20  tation flaw";   
3d30: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
3d40: 53 51 4c 49 54 45 5f 50 45 52 4d 3a 20 20 20 20  SQLITE_PERM:    
3d50: 20 20 20 7a 20 3d 20 22 61 63 63 65 73 73 20 70     z = "access p
3d60: 65 72 6d 69 73 73 69 6f 6e 20 64 65 6e 69 65 64  ermission denied
3d70: 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ";              
3d80: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
3d90: 53 51 4c 49 54 45 5f 41 42 4f 52 54 3a 20 20 20  SQLITE_ABORT:   
3da0: 20 20 20 7a 20 3d 20 22 63 61 6c 6c 62 61 63 6b     z = "callback
3db0: 20 72 65 71 75 65 73 74 65 64 20 71 75 65 72 79   requested query
3dc0: 20 61 62 6f 72 74 22 3b 20 20 20 20 20 20 20 20   abort";        
3dd0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
3de0: 53 51 4c 49 54 45 5f 42 55 53 59 3a 20 20 20 20  SQLITE_BUSY:    
3df0: 20 20 20 7a 20 3d 20 22 64 61 74 61 62 61 73 65     z = "database
3e00: 20 69 73 20 6c 6f 63 6b 65 64 22 3b 20 20 20 20   is locked";    
3e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e20: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
3e30: 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3a 20 20  SQLITE_LOCKED:  
3e40: 20 20 20 7a 20 3d 20 22 64 61 74 61 62 61 73 65     z = "database
3e50: 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64   table is locked
3e60: 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ";              
3e70: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
3e80: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3a 20 20 20  SQLITE_NOMEM:   
3e90: 20 20 20 7a 20 3d 20 22 6f 75 74 20 6f 66 20 6d     z = "out of m
3ea0: 65 6d 6f 72 79 22 3b 20 20 20 20 20 20 20 20 20  emory";         
3eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ec0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
3ed0: 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3a  SQLITE_READONLY:
3ee0: 20 20 20 7a 20 3d 20 22 61 74 74 65 6d 70 74 20     z = "attempt 
3ef0: 74 6f 20 77 72 69 74 65 20 61 20 72 65 61 64 6f  to write a reado
3f00: 6e 6c 79 20 64 61 74 61 62 61 73 65 22 3b 20 20  nly database";  
3f10: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
3f20: 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54  SQLITE_INTERRUPT
3f30: 3a 20 20 7a 20 3d 20 22 69 6e 74 65 72 72 75 70  :  z = "interrup
3f40: 74 65 64 22 3b 20 20 20 20 20 20 20 20 20 20 20  ted";           
3f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f60: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
3f70: 53 51 4c 49 54 45 5f 49 4f 45 52 52 3a 20 20 20  SQLITE_IOERR:   
3f80: 20 20 20 7a 20 3d 20 22 64 69 73 6b 20 49 2f 4f     z = "disk I/O
3f90: 20 65 72 72 6f 72 22 3b 20 20 20 20 20 20 20 20   error";        
3fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3fb0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
3fc0: 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 3a 20  SQLITE_CORRUPT: 
3fd0: 20 20 20 7a 20 3d 20 22 64 61 74 61 62 61 73 65     z = "database
3fe0: 20 64 69 73 6b 20 69 6d 61 67 65 20 69 73 20 6d   disk image is m
3ff0: 61 6c 66 6f 72 6d 65 64 22 3b 20 20 20 20 20 20  alformed";      
4000: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
4010: 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e 44 3a  SQLITE_NOTFOUND:
4020: 20 20 20 7a 20 3d 20 22 74 61 62 6c 65 20 6f 72     z = "table or
4030: 20 72 65 63 6f 72 64 20 6e 6f 74 20 66 6f 75 6e   record not foun
4040: 64 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  d";             
4050: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
4060: 53 51 4c 49 54 45 5f 46 55 4c 4c 3a 20 20 20 20  SQLITE_FULL:    
4070: 20 20 20 7a 20 3d 20 22 64 61 74 61 62 61 73 65     z = "database
4080: 20 69 73 20 66 75 6c 6c 22 3b 20 20 20 20 20 20   is full";      
4090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40a0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
40b0: 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 3a  SQLITE_CANTOPEN:
40c0: 20 20 20 7a 20 3d 20 22 75 6e 61 62 6c 65 20 74     z = "unable t
40d0: 6f 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 20  o open database 
40e0: 66 69 6c 65 22 3b 20 20 20 20 20 20 20 20 20 20  file";          
40f0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
4100: 53 51 4c 49 54 45 5f 50 52 4f 54 4f 43 4f 4c 3a  SQLITE_PROTOCOL:
4110: 20 20 20 7a 20 3d 20 22 64 61 74 61 62 61 73 65     z = "database
4120: 20 6c 6f 63 6b 69 6e 67 20 70 72 6f 74 6f 63 6f   locking protoco
4130: 6c 20 66 61 69 6c 75 72 65 22 3b 20 20 20 20 20  l failure";     
4140: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
4150: 53 51 4c 49 54 45 5f 45 4d 50 54 59 3a 20 20 20  SQLITE_EMPTY:   
4160: 20 20 20 7a 20 3d 20 22 74 61 62 6c 65 20 63 6f     z = "table co
4170: 6e 74 61 69 6e 73 20 6e 6f 20 64 61 74 61 22 3b  ntains no data";
4180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4190: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
41a0: 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3a 20 20  SQLITE_SCHEMA:  
41b0: 20 20 20 7a 20 3d 20 22 64 61 74 61 62 61 73 65     z = "database
41c0: 20 73 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e   schema has chan
41d0: 67 65 64 22 3b 20 20 20 20 20 20 20 20 20 20 20  ged";           
41e0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
41f0: 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3a 20 20  SQLITE_TOOBIG:  
4200: 20 20 20 7a 20 3d 20 22 74 6f 6f 20 6d 75 63 68     z = "too much
4210: 20 64 61 74 61 20 66 6f 72 20 6f 6e 65 20 74 61   data for one ta
4220: 62 6c 65 20 72 6f 77 22 3b 20 20 20 20 20 20 20  ble row";       
4230: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
4240: 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
4250: 54 3a 20 7a 20 3d 20 22 63 6f 6e 73 74 72 61 69  T: z = "constrai
4260: 6e 74 20 66 61 69 6c 65 64 22 3b 20 20 20 20 20  nt failed";     
4270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4280: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
4290: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3a  SQLITE_MISMATCH:
42a0: 20 20 20 7a 20 3d 20 22 64 61 74 61 74 79 70 65     z = "datatype
42b0: 20 6d 69 73 6d 61 74 63 68 22 3b 20 20 20 20 20   mismatch";     
42c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
42d0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
42e0: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3a 20 20  SQLITE_MISUSE:  
42f0: 20 20 20 7a 20 3d 20 22 6c 69 62 72 61 72 79 20     z = "library 
4300: 72 6f 75 74 69 6e 65 20 63 61 6c 6c 65 64 20 6f  routine called o
4310: 75 74 20 6f 66 20 73 65 71 75 65 6e 63 65 22 3b  ut of sequence";
4320: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
4330: 53 51 4c 49 54 45 5f 4e 4f 4c 46 53 3a 20 20 20  SQLITE_NOLFS:   
4340: 20 20 20 7a 20 3d 20 22 6b 65 72 6e 65 6c 20 6c     z = "kernel l
4350: 61 63 6b 73 20 6c 61 72 67 65 20 66 69 6c 65 20  acks large file 
4360: 73 75 70 70 6f 72 74 22 3b 20 20 20 20 20 20 20  support";       
4370: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
4380: 53 51 4c 49 54 45 5f 41 55 54 48 3a 20 20 20 20  SQLITE_AUTH:    
4390: 20 20 20 7a 20 3d 20 22 61 75 74 68 6f 72 69 7a     z = "authoriz
43a0: 61 74 69 6f 6e 20 64 65 6e 69 65 64 22 3b 20 20  ation denied";  
43b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43c0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
43d0: 53 51 4c 49 54 45 5f 46 4f 52 4d 41 54 3a 20 20  SQLITE_FORMAT:  
43e0: 20 20 20 7a 20 3d 20 22 61 75 78 69 6c 69 61 72     z = "auxiliar
43f0: 79 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61  y database forma
4400: 74 20 65 72 72 6f 72 22 3b 20 20 20 20 20 20 20  t error";       
4410: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
4420: 53 51 4c 49 54 45 5f 52 41 4e 47 45 3a 20 20 20  SQLITE_RANGE:   
4430: 20 20 20 7a 20 3d 20 22 62 69 6e 64 20 6f 72 20     z = "bind or 
4440: 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 20 6f 75 74  column index out
4450: 20 6f 66 20 72 61 6e 67 65 22 3b 20 20 20 20 20   of range";     
4460: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
4470: 53 51 4c 49 54 45 5f 4e 4f 54 41 44 42 3a 20 20  SQLITE_NOTADB:  
4480: 20 20 20 7a 20 3d 20 22 66 69 6c 65 20 69 73 20     z = "file is 
4490: 65 6e 63 72 79 70 74 65 64 20 6f 72 20 69 73 20  encrypted or is 
44a0: 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65 22 3b  not a database";
44b0: 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75  break;.    defau
44c0: 6c 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  lt:             
44d0: 20 20 20 7a 20 3d 20 22 75 6e 6b 6e 6f 77 6e 20     z = "unknown 
44e0: 65 72 72 6f 72 22 3b 20 20 20 20 20 20 20 20 20  error";         
44f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4500: 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 72 65 74  break;.  }.  ret
4510: 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn z;.}../*.** 
4520: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69 6d 70  This routine imp
4530: 6c 65 6d 65 6e 74 73 20 61 20 62 75 73 79 20 63  lements a busy c
4540: 61 6c 6c 62 61 63 6b 20 74 68 61 74 20 73 6c 65  allback that sle
4550: 65 70 73 20 61 6e 64 20 74 72 69 65 73 0a 2a 2a  eps and tries.**
4560: 20 61 67 61 69 6e 20 75 6e 74 69 6c 20 61 20 74   again until a t
4570: 69 6d 65 6f 75 74 20 76 61 6c 75 65 20 69 73 20  imeout value is 
4580: 72 65 61 63 68 65 64 2e 20 20 54 68 65 20 74 69  reached.  The ti
4590: 6d 65 6f 75 74 20 76 61 6c 75 65 20 69 73 0a 2a  meout value is.*
45a0: 2a 20 61 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d  * an integer num
45b0: 62 65 72 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f  ber of milliseco
45c0: 6e 64 73 20 70 61 73 73 65 64 20 69 6e 20 61 73  nds passed in as
45d0: 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72   the first.** ar
45e0: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69  gument..*/.stati
45f0: 63 20 69 6e 74 20 73 71 6c 69 74 65 44 65 66 61  c int sqliteDefa
4600: 75 6c 74 42 75 73 79 43 61 6c 6c 62 61 63 6b 28  ultBusyCallback(
4610: 0a 20 76 6f 69 64 20 2a 54 69 6d 65 6f 75 74 2c  . void *Timeout,
4620: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
4630: 78 69 6d 75 6d 20 61 6d 6f 75 6e 74 20 6f 66 20  ximum amount of 
4640: 74 69 6d 65 20 74 6f 20 77 61 69 74 20 2a 2f 0a  time to wait */.
4650: 20 69 6e 74 20 63 6f 75 6e 74 20 20 20 20 20 20   int count      
4660: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
4670: 62 65 72 20 6f 66 20 74 69 6d 65 73 20 74 61 62  ber of times tab
4680: 6c 65 20 68 61 73 20 62 65 65 6e 20 62 75 73 79  le has been busy
4690: 20 2a 2f 0a 29 7b 0a 23 69 66 20 53 51 4c 49 54   */.){.#if SQLIT
46a0: 45 5f 4d 49 4e 5f 53 4c 45 45 50 5f 4d 53 3d 3d  E_MIN_SLEEP_MS==
46b0: 31 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74  1.  static const
46c0: 20 63 68 61 72 20 64 65 6c 61 79 73 5b 5d 20 3d   char delays[] =
46d0: 0a 20 20 20 20 20 7b 20 31 2c 20 32 2c 20 35 2c  .     { 1, 2, 5,
46e0: 20 31 30 2c 20 31 35 2c 20 32 30 2c 20 32 35 2c   10, 15, 20, 25,
46f0: 20 32 35 2c 20 20 32 35 2c 20 20 35 30 2c 20 20   25,  25,  50,  
4700: 35 30 2c 20 20 35 30 2c 20 31 30 30 7d 3b 0a 20  50,  50, 100};. 
4710: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 73 68   static const sh
4720: 6f 72 74 20 69 6e 74 20 74 6f 74 61 6c 73 5b 5d  ort int totals[]
4730: 20 3d 0a 20 20 20 20 20 7b 20 30 2c 20 31 2c 20   =.     { 0, 1, 
4740: 33 2c 20 20 38 2c 20 31 38 2c 20 33 33 2c 20 35  3,  8, 18, 33, 5
4750: 33 2c 20 37 38 2c 20 31 30 33 2c 20 31 32 38 2c  3, 78, 103, 128,
4760: 20 31 37 38 2c 20 32 32 38 2c 20 32 38 37 7d 3b   178, 228, 287};
4770: 0a 23 20 64 65 66 69 6e 65 20 4e 44 45 4c 41 59  .# define NDELAY
4780: 20 28 73 69 7a 65 6f 66 28 64 65 6c 61 79 73 29   (sizeof(delays)
4790: 2f 73 69 7a 65 6f 66 28 64 65 6c 61 79 73 5b 30  /sizeof(delays[0
47a0: 5d 29 29 0a 20 20 70 74 72 20 74 69 6d 65 6f 75  ])).  ptr timeou
47b0: 74 20 3d 20 28 70 74 72 29 54 69 6d 65 6f 75 74  t = (ptr)Timeout
47c0: 3b 0a 20 20 70 74 72 20 64 65 6c 61 79 2c 20 70  ;.  ptr delay, p
47d0: 72 69 6f 72 3b 0a 0a 20 20 69 66 28 20 63 6f 75  rior;..  if( cou
47e0: 6e 74 20 3c 3d 20 4e 44 45 4c 41 59 20 29 7b 0a  nt <= NDELAY ){.
47f0: 20 20 20 20 64 65 6c 61 79 20 3d 20 64 65 6c 61      delay = dela
4800: 79 73 5b 63 6f 75 6e 74 2d 31 5d 3b 0a 20 20 20  ys[count-1];.   
4810: 20 70 72 69 6f 72 20 3d 20 74 6f 74 61 6c 73 5b   prior = totals[
4820: 63 6f 75 6e 74 2d 31 5d 3b 0a 20 20 7d 65 6c 73  count-1];.  }els
4830: 65 7b 0a 20 20 20 20 64 65 6c 61 79 20 3d 20 64  e{.    delay = d
4840: 65 6c 61 79 73 5b 4e 44 45 4c 41 59 2d 31 5d 3b  elays[NDELAY-1];
4850: 0a 20 20 20 20 70 72 69 6f 72 20 3d 20 74 6f 74  .    prior = tot
4860: 61 6c 73 5b 4e 44 45 4c 41 59 2d 31 5d 20 2b 20  als[NDELAY-1] + 
4870: 64 65 6c 61 79 2a 28 63 6f 75 6e 74 2d 4e 44 45  delay*(count-NDE
4880: 4c 41 59 2d 31 29 3b 0a 20 20 7d 0a 20 20 69 66  LAY-1);.  }.  if
4890: 28 20 70 72 69 6f 72 20 2b 20 64 65 6c 61 79 20  ( prior + delay 
48a0: 3e 20 74 69 6d 65 6f 75 74 20 29 7b 0a 20 20 20  > timeout ){.   
48b0: 20 64 65 6c 61 79 20 3d 20 74 69 6d 65 6f 75 74   delay = timeout
48c0: 20 2d 20 70 72 69 6f 72 3b 0a 20 20 20 20 69 66   - prior;.    if
48d0: 28 20 64 65 6c 61 79 3c 3d 30 20 29 20 72 65 74  ( delay<=0 ) ret
48e0: 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c  urn 0;.  }.  sql
48f0: 69 74 65 33 4f 73 53 6c 65 65 70 28 64 65 6c 61  ite3OsSleep(dela
4900: 79 29 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a  y);.  return 1;.
4910: 23 65 6c 73 65 0a 20 20 69 6e 74 20 74 69 6d 65  #else.  int time
4920: 6f 75 74 20 3d 20 28 69 6e 74 29 54 69 6d 65 6f  out = (int)Timeo
4930: 75 74 3b 0a 20 20 69 66 28 20 28 63 6f 75 6e 74  ut;.  if( (count
4940: 2b 31 29 2a 31 30 30 30 20 3e 20 74 69 6d 65 6f  +1)*1000 > timeo
4950: 75 74 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  ut ){.    return
4960: 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65   0;.  }.  sqlite
4970: 33 4f 73 53 6c 65 65 70 28 31 30 30 30 29 3b 0a  3OsSleep(1000);.
4980: 20 20 72 65 74 75 72 6e 20 31 3b 0a 23 65 6e 64    return 1;.#end
4990: 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  if.}../*.** This
49a0: 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74 68   routine sets th
49b0: 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  e busy callback 
49c0: 66 6f 72 20 61 6e 20 53 71 6c 69 74 65 20 64 61  for an Sqlite da
49d0: 74 61 62 61 73 65 20 74 6f 20 74 68 65 0a 2a 2a  tabase to the.**
49e0: 20 67 69 76 65 6e 20 63 61 6c 6c 62 61 63 6b 20   given callback 
49f0: 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 74 68  function with th
4a00: 65 20 67 69 76 65 6e 20 61 72 67 75 6d 65 6e 74  e given argument
4a10: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
4a20: 5f 62 75 73 79 5f 68 61 6e 64 6c 65 72 28 0a 20  _busy_handler(. 
4a30: 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a 20 20   sqlite3 *db,.  
4a40: 69 6e 74 20 28 2a 78 42 75 73 79 29 28 76 6f 69  int (*xBusy)(voi
4a50: 64 2a 2c 69 6e 74 29 2c 0a 20 20 76 6f 69 64 20  d*,int),.  void 
4a60: 2a 70 41 72 67 0a 29 7b 0a 20 20 69 66 28 20 73  *pArg.){.  if( s
4a70: 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
4a80: 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74  k(db) ){.    ret
4a90: 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  urn SQLITE_MISUS
4aa0: 45 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 62 75 73  E;.  }.  db->bus
4ab0: 79 48 61 6e 64 6c 65 72 2e 78 46 75 6e 63 20 3d  yHandler.xFunc =
4ac0: 20 78 42 75 73 79 3b 0a 20 20 64 62 2d 3e 62 75   xBusy;.  db->bu
4ad0: 73 79 48 61 6e 64 6c 65 72 2e 70 41 72 67 20 3d  syHandler.pArg =
4ae0: 20 70 41 72 67 3b 0a 20 20 72 65 74 75 72 6e 20   pArg;.  return 
4af0: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 23 69  SQLITE_OK;.}..#i
4b00: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
4b10: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
4b20: 41 43 4b 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72  ACK./*.** This r
4b30: 6f 75 74 69 6e 65 20 73 65 74 73 20 74 68 65 20  outine sets the 
4b40: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
4b50: 6b 20 66 6f 72 20 61 6e 20 53 71 6c 69 74 65 20  k for an Sqlite 
4b60: 64 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 0a  database to the.
4b70: 2a 2a 20 67 69 76 65 6e 20 63 61 6c 6c 62 61 63  ** given callbac
4b80: 6b 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  k function with 
4b90: 74 68 65 20 67 69 76 65 6e 20 61 72 67 75 6d 65  the given argume
4ba0: 6e 74 2e 20 54 68 65 20 70 72 6f 67 72 65 73 73  nt. The progress
4bb0: 20 63 61 6c 6c 62 61 63 6b 20 77 69 6c 6c 0a 2a   callback will.*
4bc0: 2a 20 62 65 20 69 6e 76 6f 6b 65 64 20 65 76 65  * be invoked eve
4bd0: 72 79 20 6e 4f 70 73 20 6f 70 63 6f 64 65 73 2e  ry nOps opcodes.
4be0: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
4bf0: 5f 70 72 6f 67 72 65 73 73 5f 68 61 6e 64 6c 65  _progress_handle
4c00: 72 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  r(.  sqlite3 *db
4c10: 2c 20 0a 20 20 69 6e 74 20 6e 4f 70 73 2c 0a 20  , .  int nOps,. 
4c20: 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73   int (*xProgress
4c30: 29 28 76 6f 69 64 2a 29 2c 20 0a 20 20 76 6f 69  )(void*), .  voi
4c40: 64 20 2a 70 41 72 67 0a 29 7b 0a 20 20 69 66 28  d *pArg.){.  if(
4c50: 20 21 73 71 6c 69 74 65 33 53 61 66 65 74 79 43   !sqlite3SafetyC
4c60: 68 65 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20  heck(db) ){.    
4c70: 69 66 28 20 6e 4f 70 73 3e 30 20 29 7b 0a 20 20  if( nOps>0 ){.  
4c80: 20 20 20 20 64 62 2d 3e 78 50 72 6f 67 72 65 73      db->xProgres
4c90: 73 20 3d 20 78 50 72 6f 67 72 65 73 73 3b 0a 20  s = xProgress;. 
4ca0: 20 20 20 20 20 64 62 2d 3e 6e 50 72 6f 67 72 65       db->nProgre
4cb0: 73 73 4f 70 73 20 3d 20 6e 4f 70 73 3b 0a 20 20  ssOps = nOps;.  
4cc0: 20 20 20 20 64 62 2d 3e 70 50 72 6f 67 72 65 73      db->pProgres
4cd0: 73 41 72 67 20 3d 20 70 41 72 67 3b 0a 20 20 20  sArg = pArg;.   
4ce0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62   }else{.      db
4cf0: 2d 3e 78 50 72 6f 67 72 65 73 73 20 3d 20 30 3b  ->xProgress = 0;
4d00: 0a 20 20 20 20 20 20 64 62 2d 3e 6e 50 72 6f 67  .      db->nProg
4d10: 72 65 73 73 4f 70 73 20 3d 20 30 3b 0a 20 20 20  ressOps = 0;.   
4d20: 20 20 20 64 62 2d 3e 70 50 72 6f 67 72 65 73 73     db->pProgress
4d30: 41 72 67 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  Arg = 0;.    }. 
4d40: 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a   }.}.#endif.../*
4d50: 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65  .** This routine
4d60: 20 69 6e 73 74 61 6c 6c 73 20 61 20 64 65 66 61   installs a defa
4d70: 75 6c 74 20 62 75 73 79 20 68 61 6e 64 6c 65 72  ult busy handler
4d80: 20 74 68 61 74 20 77 61 69 74 73 20 66 6f 72 20   that waits for 
4d90: 74 68 65 0a 2a 2a 20 73 70 65 63 69 66 69 65 64  the.** specified
4da0: 20 6e 75 6d 62 65 72 20 6f 66 20 6d 69 6c 6c 69   number of milli
4db0: 73 65 63 6f 6e 64 73 20 62 65 66 6f 72 65 20 72  seconds before r
4dc0: 65 74 75 72 6e 69 6e 67 20 30 2e 0a 2a 2f 0a 69  eturning 0..*/.i
4dd0: 6e 74 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f  nt sqlite3_busy_
4de0: 74 69 6d 65 6f 75 74 28 73 71 6c 69 74 65 33 20  timeout(sqlite3 
4df0: 2a 64 62 2c 20 69 6e 74 20 6d 73 29 7b 0a 20 20  *db, int ms){.  
4e00: 69 66 28 20 6d 73 3e 30 20 29 7b 0a 20 20 20 20  if( ms>0 ){.    
4e10: 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 68 61 6e  sqlite3_busy_han
4e20: 64 6c 65 72 28 64 62 2c 20 73 71 6c 69 74 65 44  dler(db, sqliteD
4e30: 65 66 61 75 6c 74 42 75 73 79 43 61 6c 6c 62 61  efaultBusyCallba
4e40: 63 6b 2c 20 28 76 6f 69 64 2a 29 28 70 74 72 29  ck, (void*)(ptr)
4e50: 6d 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ms);.  }else{.  
4e60: 20 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 68    sqlite3_busy_h
4e70: 61 6e 64 6c 65 72 28 64 62 2c 20 30 2c 20 30 29  andler(db, 0, 0)
4e80: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 53  ;.  }.  return S
4e90: 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  QLITE_OK;.}../*.
4ea0: 2a 2a 20 43 61 75 73 65 20 61 6e 79 20 70 65 6e  ** Cause any pen
4eb0: 64 69 6e 67 20 6f 70 65 72 61 74 69 6f 6e 20 74  ding operation t
4ec0: 6f 20 73 74 6f 70 20 61 74 20 69 74 73 20 65 61  o stop at its ea
4ed0: 72 6c 69 65 73 74 20 6f 70 70 6f 72 74 75 6e 69  rliest opportuni
4ee0: 74 79 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  ty..*/.void sqli
4ef0: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 73 71  te3_interrupt(sq
4f00: 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 66  lite3 *db){.  if
4f10: 28 20 21 73 71 6c 69 74 65 33 53 61 66 65 74 79  ( !sqlite3Safety
4f20: 43 68 65 63 6b 28 64 62 29 20 29 7b 0a 20 20 20  Check(db) ){.   
4f30: 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51   db->flags |= SQ
4f40: 4c 49 54 45 5f 49 6e 74 65 72 72 75 70 74 3b 0a  LITE_Interrupt;.
4f50: 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 69 6e    }.}../*.** Win
4f60: 64 6f 77 73 20 73 79 73 74 65 6d 73 20 73 68 6f  dows systems sho
4f70: 75 6c 64 20 63 61 6c 6c 20 74 68 69 73 20 72 6f  uld call this ro
4f80: 75 74 69 6e 65 20 74 6f 20 66 72 65 65 20 6d 65  utine to free me
4f90: 6d 6f 72 79 20 74 68 61 74 0a 2a 2a 20 69 73 20  mory that.** is 
4fa0: 72 65 74 75 72 6e 65 64 20 69 6e 20 74 68 65 20  returned in the 
4fb0: 69 6e 20 74 68 65 20 65 72 72 6d 73 67 20 70 61  in the errmsg pa
4fc0: 72 61 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74  rameter of sqlit
4fd0: 65 33 5f 6f 70 65 6e 28 29 20 77 68 65 6e 0a 2a  e3_open() when.*
4fe0: 2a 20 53 51 4c 69 74 65 20 69 73 20 61 20 44 4c  * SQLite is a DL
4ff0: 4c 2e 20 20 46 6f 72 20 73 6f 6d 65 20 72 65 61  L.  For some rea
5000: 73 6f 6e 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74  son, it does not
5010: 20 77 6f 72 6b 20 74 6f 20 63 61 6c 6c 20 66 72   work to call fr
5020: 65 65 28 29 0a 2a 2a 20 64 69 72 65 63 74 6c 79  ee().** directly
5030: 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61  ..**.** Note tha
5040: 74 20 77 65 20 6e 65 65 64 20 74 6f 20 63 61 6c  t we need to cal
5050: 6c 20 66 72 65 65 28 29 20 6e 6f 74 20 73 71 6c  l free() not sql
5060: 69 74 65 46 72 65 65 28 29 20 68 65 72 65 2e 0a  iteFree() here..
5070: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f  */.void sqlite3_
5080: 66 72 65 65 28 63 68 61 72 20 2a 70 29 7b 20 66  free(char *p){ f
5090: 72 65 65 28 70 29 3b 20 7d 0a 0a 2f 2a 0a 2a 2a  ree(p); }../*.**
50a0: 20 43 72 65 61 74 65 20 6e 65 77 20 75 73 65 72   Create new user
50b0: 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2f 0a 69   functions..*/.i
50c0: 6e 74 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  nt sqlite3_creat
50d0: 65 5f 66 75 6e 63 74 69 6f 6e 28 0a 20 20 73 71  e_function(.  sq
50e0: 6c 69 74 65 33 20 2a 64 62 2c 0a 20 20 63 6f 6e  lite3 *db,.  con
50f0: 73 74 20 63 68 61 72 20 2a 7a 46 75 6e 63 74 69  st char *zFuncti
5100: 6f 6e 4e 61 6d 65 2c 0a 20 20 69 6e 74 20 6e 41  onName,.  int nA
5110: 72 67 2c 0a 20 20 69 6e 74 20 65 6e 63 2c 0a 20  rg,.  int enc,. 
5120: 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61   void *pUserData
5130: 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46 75 6e 63  ,.  void (*xFunc
5140: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
5150: 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
5160: 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64  alue **),.  void
5170: 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69 74 65   (*xStep)(sqlite
5180: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
5190: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29  qlite3_value **)
51a0: 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61  ,.  void (*xFina
51b0: 6c 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  l)(sqlite3_conte
51c0: 78 74 2a 29 0a 29 7b 0a 20 20 46 75 6e 63 44 65  xt*).){.  FuncDe
51d0: 66 20 2a 70 3b 0a 20 20 69 6e 74 20 6e 4e 61 6d  f *p;.  int nNam
51e0: 65 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65  e;..  if( sqlite
51f0: 33 53 61 66 65 74 79 43 68 65 63 6b 28 64 62 29  3SafetyCheck(db)
5200: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
5210: 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20  QLITE_MISUSE;.  
5220: 7d 0a 20 20 69 66 28 20 7a 46 75 6e 63 74 69 6f  }.  if( zFunctio
5230: 6e 4e 61 6d 65 3d 3d 30 20 7c 7c 0a 20 20 20 20  nName==0 ||.    
5240: 20 20 28 78 46 75 6e 63 20 26 26 20 28 78 46 69    (xFunc && (xFi
5250: 6e 61 6c 20 7c 7c 20 78 53 74 65 70 29 29 20 7c  nal || xStep)) |
5260: 7c 20 0a 20 20 20 20 20 20 28 21 78 46 75 6e 63  | .      (!xFunc
5270: 20 26 26 20 28 78 46 69 6e 61 6c 20 26 26 20 21   && (xFinal && !
5280: 78 53 74 65 70 29 29 20 7c 7c 0a 20 20 20 20 20  xStep)) ||.     
5290: 20 28 21 78 46 75 6e 63 20 26 26 20 28 21 78 46   (!xFunc && (!xF
52a0: 69 6e 61 6c 20 26 26 20 78 53 74 65 70 29 29 20  inal && xStep)) 
52b0: 7c 7c 0a 20 20 20 20 20 20 28 6e 41 72 67 3c 2d  ||.      (nArg<-
52c0: 31 20 7c 7c 20 6e 41 72 67 3e 31 32 37 29 20 7c  1 || nArg>127) |
52d0: 7c 0a 20 20 20 20 20 20 28 32 35 35 3c 28 6e 4e  |.      (255<(nN
52e0: 61 6d 65 20 3d 20 73 74 72 6c 65 6e 28 7a 46 75  ame = strlen(zFu
52f0: 6e 63 74 69 6f 6e 4e 61 6d 65 29 29 29 20 29 7b  nctionName))) ){
5300: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
5310: 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  TE_ERROR;.  }.  
5320: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
5330: 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 2f 2a 20  OMIT_UTF16.  /* 
5340: 49 66 20 53 51 4c 49 54 45 5f 55 54 46 31 36 20  If SQLITE_UTF16 
5350: 69 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20  is specified as 
5360: 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 74 79 70  the encoding typ
5370: 65 2c 20 74 72 61 6e 73 66 6f 72 6d 20 74 68 69  e, transform thi
5380: 73 0a 20 20 2a 2a 20 74 6f 20 6f 6e 65 20 6f 66  s.  ** to one of
5390: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20   SQLITE_UTF16LE 
53a0: 6f 72 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42  or SQLITE_UTF16B
53b0: 45 20 75 73 69 6e 67 20 74 68 65 0a 20 20 2a 2a  E using the.  **
53c0: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
53d0: 49 56 45 20 6d 61 63 72 6f 2e 20 53 51 4c 49 54  IVE macro. SQLIT
53e0: 45 5f 55 54 46 31 36 20 69 73 20 6e 6f 74 20 75  E_UTF16 is not u
53f0: 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 0a  sed internally..
5400: 20 20 2a 2a 0a 20 20 2a 2a 20 49 66 20 53 51 4c    **.  ** If SQL
5410: 49 54 45 5f 41 4e 59 20 69 73 20 73 70 65 63 69  ITE_ANY is speci
5420: 66 69 65 64 2c 20 61 64 64 20 74 68 72 65 65 20  fied, add three 
5430: 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 65 20  versions of the 
5440: 66 75 6e 63 74 69 6f 6e 0a 20 20 2a 2a 20 74 6f  function.  ** to
5450: 20 74 68 65 20 68 61 73 68 20 74 61 62 6c 65 2e   the hash table.
5460: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 65 6e 63 3d  .  */.  if( enc=
5470: 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 20 29 7b  =SQLITE_UTF16 ){
5480: 0a 20 20 20 20 65 6e 63 20 3d 20 53 51 4c 49 54  .    enc = SQLIT
5490: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 3b 0a 20  E_UTF16NATIVE;. 
54a0: 20 7d 65 6c 73 65 20 69 66 28 20 65 6e 63 3d 3d   }else if( enc==
54b0: 53 51 4c 49 54 45 5f 41 4e 59 20 29 7b 0a 20 20  SQLITE_ANY ){.  
54c0: 20 20 69 6e 74 20 72 63 3b 0a 20 20 20 20 72 63    int rc;.    rc
54d0: 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74   = sqlite3_creat
54e0: 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 7a  e_function(db, z
54f0: 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 6e 41  FunctionName, nA
5500: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  rg, SQLITE_UTF8,
5510: 0a 20 20 20 20 20 20 20 20 20 70 55 73 65 72 44  .         pUserD
5520: 61 74 61 2c 20 78 46 75 6e 63 2c 20 78 53 74 65  ata, xFunc, xSte
5530: 70 2c 20 78 46 69 6e 61 6c 29 3b 0a 20 20 20 20  p, xFinal);.    
5540: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
5550: 4b 20 29 20 72 65 74 75 72 6e 20 72 63 3b 0a 20  K ) return rc;. 
5560: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
5570: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
5580: 64 62 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d  db, zFunctionNam
5590: 65 2c 20 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f  e, nArg, SQLITE_
55a0: 55 54 46 31 36 4c 45 2c 0a 20 20 20 20 20 20 20  UTF16LE,.       
55b0: 20 70 55 73 65 72 44 61 74 61 2c 20 78 46 75 6e   pUserData, xFun
55c0: 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c  c, xStep, xFinal
55d0: 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53  );.    if( rc!=S
55e0: 51 4c 49 54 45 5f 4f 4b 20 29 20 72 65 74 75 72  QLITE_OK ) retur
55f0: 6e 20 72 63 3b 0a 20 20 20 20 65 6e 63 20 3d 20  n rc;.    enc = 
5600: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3b 0a  SQLITE_UTF16BE;.
5610: 20 20 7d 0a 23 65 6c 73 65 0a 20 20 65 6e 63 20    }.#else.  enc 
5620: 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 0a 23  = SQLITE_UTF8;.#
5630: 65 6e 64 69 66 0a 20 20 0a 20 20 2f 2a 20 43 68  endif.  .  /* Ch
5640: 65 63 6b 20 69 66 20 61 6e 20 65 78 69 73 74 69  eck if an existi
5650: 6e 67 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 62  ng function is b
5660: 65 69 6e 67 20 6f 76 65 72 72 69 64 64 65 6e 20  eing overridden 
5670: 6f 72 20 64 65 6c 65 74 65 64 2e 20 49 66 20 73  or deleted. If s
5680: 6f 2c 0a 20 20 2a 2a 20 61 6e 64 20 74 68 65 72  o,.  ** and ther
5690: 65 20 61 72 65 20 61 63 74 69 76 65 20 56 4d 73  e are active VMs
56a0: 2c 20 74 68 65 6e 20 72 65 74 75 72 6e 20 53 51  , then return SQ
56b0: 4c 49 54 45 5f 42 55 53 59 2e 20 49 66 20 61 20  LITE_BUSY. If a 
56c0: 66 75 6e 63 74 69 6f 6e 0a 20 20 2a 2a 20 69 73  function.  ** is
56d0: 20 62 65 69 6e 67 20 6f 76 65 72 72 69 64 64 65   being overridde
56e0: 6e 2f 64 65 6c 65 74 65 64 20 62 75 74 20 74 68  n/deleted but th
56f0: 65 72 65 20 61 72 65 20 6e 6f 20 61 63 74 69 76  ere are no activ
5700: 65 20 56 4d 73 2c 20 61 6c 6c 6f 77 20 74 68 65  e VMs, allow the
5710: 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20  .  ** operation 
5720: 74 6f 20 63 6f 6e 74 69 6e 75 65 20 62 75 74 20  to continue but 
5730: 69 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 70  invalidate all p
5740: 72 65 63 6f 6d 70 69 6c 65 64 20 73 74 61 74 65  recompiled state
5750: 6d 65 6e 74 73 2e 0a 20 20 2a 2f 0a 20 20 70 20  ments..  */.  p 
5760: 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 46 75 6e  = sqlite3FindFun
5770: 63 74 69 6f 6e 28 64 62 2c 20 7a 46 75 6e 63 74  ction(db, zFunct
5780: 69 6f 6e 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2c 20  ionName, nName, 
5790: 6e 41 72 67 2c 20 65 6e 63 2c 20 30 29 3b 0a 20  nArg, enc, 0);. 
57a0: 20 69 66 28 20 70 20 26 26 20 70 2d 3e 69 50 72   if( p && p->iPr
57b0: 65 66 45 6e 63 3d 3d 65 6e 63 20 26 26 20 70 2d  efEnc==enc && p-
57c0: 3e 6e 41 72 67 3d 3d 6e 41 72 67 20 29 7b 0a 20  >nArg==nArg ){. 
57d0: 20 20 20 69 66 28 20 64 62 2d 3e 61 63 74 69 76     if( db->activ
57e0: 65 56 64 62 65 43 6e 74 20 29 7b 0a 20 20 20 20  eVdbeCnt ){.    
57f0: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64    sqlite3Error(d
5800: 62 2c 20 53 51 4c 49 54 45 5f 42 55 53 59 2c 20  b, SQLITE_BUSY, 
5810: 0a 20 20 20 20 20 20 20 20 22 55 6e 61 62 6c 65  .        "Unable
5820: 20 74 6f 20 64 65 6c 65 74 65 2f 6d 6f 64 69 66   to delete/modif
5830: 79 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20  y user-function 
5840: 64 75 65 20 74 6f 20 61 63 74 69 76 65 20 73 74  due to active st
5850: 61 74 65 6d 65 6e 74 73 22 29 3b 0a 20 20 20 20  atements");.    
5860: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
5870: 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  BUSY;.    }else{
5880: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78  .      sqlite3Ex
5890: 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
58a0: 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20  ements(db);.    
58b0: 7d 0a 20 20 7d 0a 0a 20 20 70 20 3d 20 73 71 6c  }.  }..  p = sql
58c0: 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e  ite3FindFunction
58d0: 28 64 62 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61  (db, zFunctionNa
58e0: 6d 65 2c 20 6e 4e 61 6d 65 2c 20 6e 41 72 67 2c  me, nName, nArg,
58f0: 20 65 6e 63 2c 20 31 29 3b 0a 20 20 69 66 28 20   enc, 1);.  if( 
5900: 70 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 53 51  p==0 ) return SQ
5910: 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 70 2d  LITE_NOMEM;.  p-
5920: 3e 78 46 75 6e 63 20 3d 20 78 46 75 6e 63 3b 0a  >xFunc = xFunc;.
5930: 20 20 70 2d 3e 78 53 74 65 70 20 3d 20 78 53 74    p->xStep = xSt
5940: 65 70 3b 0a 20 20 70 2d 3e 78 46 69 6e 61 6c 69  ep;.  p->xFinali
5950: 7a 65 20 3d 20 78 46 69 6e 61 6c 3b 0a 20 20 70  ze = xFinal;.  p
5960: 2d 3e 70 55 73 65 72 44 61 74 61 20 3d 20 70 55  ->pUserData = pU
5970: 73 65 72 44 61 74 61 3b 0a 20 20 72 65 74 75 72  serData;.  retur
5980: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 23  n SQLITE_OK;.}.#
5990: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
59a0: 49 54 5f 55 54 46 31 36 0a 69 6e 74 20 73 71 6c  IT_UTF16.int sql
59b0: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
59c0: 74 69 6f 6e 31 36 28 0a 20 20 73 71 6c 69 74 65  tion16(.  sqlite
59d0: 33 20 2a 64 62 2c 0a 20 20 63 6f 6e 73 74 20 76  3 *db,.  const v
59e0: 6f 69 64 20 2a 7a 46 75 6e 63 74 69 6f 6e 4e 61  oid *zFunctionNa
59f0: 6d 65 2c 0a 20 20 69 6e 74 20 6e 41 72 67 2c 0a  me,.  int nArg,.
5a00: 20 20 69 6e 74 20 65 54 65 78 74 52 65 70 2c 0a    int eTextRep,.
5a10: 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74    void *pUserDat
5a20: 61 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46 75 6e  a,.  void (*xFun
5a30: 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  c)(sqlite3_conte
5a40: 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
5a50: 76 61 6c 75 65 2a 2a 29 2c 0a 20 20 76 6f 69 64  value**),.  void
5a60: 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69 74 65   (*xStep)(sqlite
5a70: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
5a80: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 2c  qlite3_value**),
5a90: 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c  .  void (*xFinal
5aa0: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
5ab0: 74 2a 29 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b  t*).){.  int rc;
5ac0: 0a 20 20 63 68 61 72 20 63 6f 6e 73 74 20 2a 7a  .  char const *z
5ad0: 46 75 6e 63 38 3b 0a 20 20 73 71 6c 69 74 65 33  Func8;.  sqlite3
5ae0: 5f 76 61 6c 75 65 20 2a 70 54 6d 70 3b 0a 0a 20  _value *pTmp;.. 
5af0: 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
5b00: 74 79 43 68 65 63 6b 28 64 62 29 20 29 7b 0a 20  tyCheck(db) ){. 
5b10: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
5b20: 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 20 20 70  _MISUSE;.  }.  p
5b30: 54 6d 70 20 3d 20 73 71 6c 69 74 65 33 47 65 74  Tmp = sqlite3Get
5b40: 54 72 61 6e 73 69 65 6e 74 56 61 6c 75 65 28 64  TransientValue(d
5b50: 62 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c  b);.  sqlite3Val
5b60: 75 65 53 65 74 53 74 72 28 70 54 6d 70 2c 20 2d  ueSetStr(pTmp, -
5b70: 31 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65  1, zFunctionName
5b80: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  , SQLITE_UTF16NA
5b90: 54 49 56 45 2c 53 51 4c 49 54 45 5f 53 54 41 54  TIVE,SQLITE_STAT
5ba0: 49 43 29 3b 0a 20 20 7a 46 75 6e 63 38 20 3d 20  IC);.  zFunc8 = 
5bb0: 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74  sqlite3ValueText
5bc0: 28 70 54 6d 70 2c 20 53 51 4c 49 54 45 5f 55 54  (pTmp, SQLITE_UT
5bd0: 46 38 29 3b 0a 0a 20 20 69 66 28 20 21 7a 46 75  F8);..  if( !zFu
5be0: 6e 63 38 20 29 7b 0a 20 20 20 20 72 65 74 75 72  nc8 ){.    retur
5bf0: 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  n SQLITE_NOMEM;.
5c00: 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
5c10: 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
5c20: 6f 6e 28 64 62 2c 20 7a 46 75 6e 63 38 2c 20 6e  on(db, zFunc8, n
5c30: 41 72 67 2c 20 65 54 65 78 74 52 65 70 2c 20 0a  Arg, eTextRep, .
5c40: 20 20 20 20 20 20 70 55 73 65 72 44 61 74 61 2c        pUserData,
5c50: 20 78 46 75 6e 63 2c 20 78 53 74 65 70 2c 20 78   xFunc, xStep, x
5c60: 46 69 6e 61 6c 29 3b 0a 20 20 72 65 74 75 72 6e  Final);.  return
5c70: 20 72 63 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f   rc;.}.#endif../
5c80: 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 61 20  *.** Register a 
5c90: 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 2e 20  trace function. 
5ca0: 20 54 68 65 20 70 41 72 67 20 66 72 6f 6d 20 74   The pArg from t
5cb0: 68 65 20 70 72 65 76 69 6f 75 73 6c 79 20 72 65  he previously re
5cc0: 67 69 73 74 65 72 65 64 20 74 72 61 63 65 0a 2a  gistered trace.*
5cd0: 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20  * is returned.  
5ce0: 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 74 72  .**.** A NULL tr
5cf0: 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 6d 65 61  ace function mea
5d00: 6e 73 20 74 68 61 74 20 6e 6f 20 74 72 61 63 69  ns that no traci
5d10: 6e 67 20 69 73 20 65 78 65 63 75 74 65 73 2e 20  ng is executes. 
5d20: 20 41 20 6e 6f 6e 2d 4e 55 4c 4c 0a 2a 2a 20 74   A non-NULL.** t
5d30: 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65  race is a pointe
5d40: 72 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 20  r to a function 
5d50: 74 68 61 74 20 69 73 20 69 6e 76 6f 6b 65 64 20  that is invoked 
5d60: 61 74 20 74 68 65 20 73 74 61 72 74 20 6f 66 20  at the start of 
5d70: 65 61 63 68 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  each.** sqlite3_
5d80: 65 78 65 63 28 29 2e 0a 2a 2f 0a 76 6f 69 64 20  exec()..*/.void 
5d90: 2a 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 73  *sqlite3_trace(s
5da0: 71 6c 69 74 65 33 20 2a 64 62 2c 20 76 6f 69 64  qlite3 *db, void
5db0: 20 28 2a 78 54 72 61 63 65 29 28 76 6f 69 64 2a   (*xTrace)(void*
5dc0: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 2c 20 76  ,const char*), v
5dd0: 6f 69 64 20 2a 70 41 72 67 29 7b 0a 20 20 76 6f  oid *pArg){.  vo
5de0: 69 64 20 2a 70 4f 6c 64 20 3d 20 64 62 2d 3e 70  id *pOld = db->p
5df0: 54 72 61 63 65 41 72 67 3b 0a 20 20 64 62 2d 3e  TraceArg;.  db->
5e00: 78 54 72 61 63 65 20 3d 20 78 54 72 61 63 65 3b  xTrace = xTrace;
5e10: 0a 20 20 64 62 2d 3e 70 54 72 61 63 65 41 72 67  .  db->pTraceArg
5e20: 20 3d 20 70 41 72 67 3b 0a 20 20 72 65 74 75 72   = pArg;.  retur
5e30: 6e 20 70 4f 6c 64 3b 0a 7d 0a 0a 2f 2a 2a 2a 20  n pOld;.}../*** 
5e40: 45 58 50 45 52 49 4d 45 4e 54 41 4c 20 2a 2a 2a  EXPERIMENTAL ***
5e50: 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
5e60: 61 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65  a function to be
5e70: 20 69 6e 76 6f 6b 65 64 20 77 68 65 6e 20 61 20   invoked when a 
5e80: 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 6d  transaction comm
5e90: 65 6e 74 73 2e 0a 2a 2a 20 49 66 20 65 69 74 68  ents..** If eith
5ea0: 65 72 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  er function retu
5eb0: 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68  rns non-zero, th
5ec0: 65 6e 20 74 68 65 20 63 6f 6d 6d 69 74 20 62 65  en the commit be
5ed0: 63 6f 6d 65 73 20 61 0a 2a 2a 20 72 6f 6c 6c 62  comes a.** rollb
5ee0: 61 63 6b 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71  ack..*/.void *sq
5ef0: 6c 69 74 65 33 5f 63 6f 6d 6d 69 74 5f 68 6f 6f  lite3_commit_hoo
5f00: 6b 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  k(.  sqlite3 *db
5f10: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
5f20: 2a 20 41 74 74 61 63 68 20 74 68 65 20 68 6f 6f  * Attach the hoo
5f30: 6b 20 74 6f 20 74 68 69 73 20 64 61 74 61 62 61  k to this databa
5f40: 73 65 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43  se */.  int (*xC
5f50: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 2c  allback)(void*),
5f60: 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 74 6f    /* Function to
5f70: 20 69 6e 76 6f 6b 65 20 6f 6e 20 65 61 63 68 20   invoke on each 
5f80: 63 6f 6d 6d 69 74 20 2a 2f 0a 20 20 76 6f 69 64  commit */.  void
5f90: 20 2a 70 41 72 67 20 20 20 20 20 20 20 20 20 20   *pArg          
5fa0: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
5fb0: 74 20 74 6f 20 74 68 65 20 66 75 6e 63 74 69 6f  t to the functio
5fc0: 6e 20 2a 2f 0a 29 7b 0a 20 20 76 6f 69 64 20 2a  n */.){.  void *
5fd0: 70 4f 6c 64 20 3d 20 64 62 2d 3e 70 43 6f 6d 6d  pOld = db->pComm
5fe0: 69 74 41 72 67 3b 0a 20 20 64 62 2d 3e 78 43 6f  itArg;.  db->xCo
5ff0: 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 20 3d 20 78  mmitCallback = x
6000: 43 61 6c 6c 62 61 63 6b 3b 0a 20 20 64 62 2d 3e  Callback;.  db->
6010: 70 43 6f 6d 6d 69 74 41 72 67 20 3d 20 70 41 72  pCommitArg = pAr
6020: 67 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f 6c 64  g;.  return pOld
6030: 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  ;.}.../*.** This
6040: 20 72 6f 75 74 69 6e 65 20 69 73 20 63 61 6c 6c   routine is call
6050: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 63  ed to create a c
6060: 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61 20 64  onnection to a d
6070: 61 74 61 62 61 73 65 20 42 54 72 65 65 0a 2a 2a  atabase BTree.**
6080: 20 64 72 69 76 65 72 2e 20 20 49 66 20 7a 46 69   driver.  If zFi
6090: 6c 65 6e 61 6d 65 20 69 73 20 74 68 65 20 6e 61  lename is the na
60a0: 6d 65 20 6f 66 20 61 20 66 69 6c 65 2c 20 74 68  me of a file, th
60b0: 65 6e 20 74 68 61 74 20 66 69 6c 65 20 69 73 0a  en that file is.
60c0: 2a 2a 20 6f 70 65 6e 65 64 20 61 6e 64 20 75 73  ** opened and us
60d0: 65 64 2e 20 20 49 66 20 7a 46 69 6c 65 6e 61 6d  ed.  If zFilenam
60e0: 65 20 69 73 20 74 68 65 20 6d 61 67 69 63 20 6e  e is the magic n
60f0: 61 6d 65 20 22 3a 6d 65 6d 6f 72 79 3a 22 20 74  ame ":memory:" t
6100: 68 65 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 62  hen.** the datab
6110: 61 73 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ase is stored in
6120: 20 6d 65 6d 6f 72 79 20 28 61 6e 64 20 69 73 20   memory (and is 
6130: 74 68 75 73 20 66 6f 72 67 6f 74 74 65 6e 20 61  thus forgotten a
6140: 73 20 73 6f 6f 6e 20 61 73 0a 2a 2a 20 74 68 65  s soon as.** the
6150: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63   connection is c
6160: 6c 6f 73 65 64 2e 29 20 20 49 66 20 7a 46 69 6c  losed.)  If zFil
6170: 65 6e 61 6d 65 20 69 73 20 4e 55 4c 4c 20 74 68  ename is NULL th
6180: 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  en the database.
6190: 2a 2a 20 69 73 20 66 6f 72 20 74 65 6d 70 6f 72  ** is for tempor
61a0: 61 72 79 20 75 73 65 20 6f 6e 6c 79 20 61 6e 64  ary use only and
61b0: 20 69 73 20 64 65 6c 65 74 65 64 20 61 73 20 73   is deleted as s
61c0: 6f 6f 6e 20 61 73 20 74 68 65 20 63 6f 6e 6e 65  oon as the conne
61d0: 63 74 69 6f 6e 0a 2a 2a 20 69 73 20 63 6c 6f 73  ction.** is clos
61e0: 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 65 6d 70  ed..**.** A temp
61f0: 6f 72 61 72 79 20 64 61 74 61 62 61 73 65 20 63  orary database c
6200: 61 6e 20 62 65 20 65 69 74 68 65 72 20 61 20 64  an be either a d
6210: 69 73 6b 20 66 69 6c 65 20 28 74 68 61 74 20 69  isk file (that i
6220: 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a  s automatically.
6230: 2a 2a 20 64 65 6c 65 74 65 64 20 77 68 65 6e 20  ** deleted when 
6240: 74 68 65 20 66 69 6c 65 20 69 73 20 63 6c 6f 73  the file is clos
6250: 65 64 29 20 6f 72 20 61 20 73 65 74 20 6f 66 20  ed) or a set of 
6260: 72 65 64 2d 62 6c 61 63 6b 20 74 72 65 65 73 20  red-black trees 
6270: 68 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 2c 0a  held in memory,.
6280: 2a 2a 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ** depending on 
6290: 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 74 68  the values of th
62a0: 65 20 54 45 4d 50 5f 53 54 4f 52 45 20 63 6f 6d  e TEMP_STORE com
62b0: 70 69 6c 65 2d 74 69 6d 65 20 6d 61 63 72 6f 20  pile-time macro 
62c0: 61 6e 64 20 74 68 65 0a 2a 2a 20 64 62 2d 3e 74  and the.** db->t
62d0: 65 6d 70 5f 73 74 6f 72 65 20 76 61 72 69 61 62  emp_store variab
62e0: 6c 65 2c 20 61 63 63 6f 72 64 69 6e 67 20 74 6f  le, according to
62f0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   the following c
6300: 68 61 72 74 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  hart:.**.**     
6310: 20 20 54 45 4d 50 5f 53 54 4f 52 45 20 20 20 20    TEMP_STORE    
6320: 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 20   db->temp_store 
6330: 20 20 20 20 4c 6f 63 61 74 69 6f 6e 20 6f 66 20      Location of 
6340: 74 65 6d 70 6f 72 61 72 79 20 64 61 74 61 62 61  temporary databa
6350: 73 65 0a 2a 2a 20 20 20 20 20 20 20 2d 2d 2d 2d  se.**       ----
6360: 2d 2d 2d 2d 2d 2d 20 20 20 20 20 2d 2d 2d 2d 2d  ------     -----
6370: 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 20 20 20 20 2d 2d  ---------     --
6380: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6390: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2a 2a 20  ------------.** 
63a0: 20 20 20 20 20 20 20 20 20 20 30 20 20 20 20 20            0     
63b0: 20 20 20 20 20 20 20 20 20 20 61 6e 79 20 20 20            any   
63c0: 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 0a 2a            file.*
63d0: 2a 20 20 20 20 20 20 20 20 20 20 20 31 20 20 20  *           1   
63e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 31 20 20               1  
63f0: 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
6400: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 31 20  .**           1 
6410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32                 2
6420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 65                me
6430: 6d 6f 72 79 0a 2a 2a 20 20 20 20 20 20 20 20 20  mory.**         
6440: 20 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20    1             
6450: 20 20 20 30 20 20 20 20 20 20 20 20 20 20 20 20     0            
6460: 20 20 66 69 6c 65 0a 2a 2a 20 20 20 20 20 20 20    file.**       
6470: 20 20 20 20 32 20 20 20 20 20 20 20 20 20 20 20      2           
6480: 20 20 20 20 20 31 20 20 20 20 20 20 20 20 20 20       1          
6490: 20 20 20 20 66 69 6c 65 0a 2a 2a 20 20 20 20 20      file.**     
64a0: 20 20 20 20 20 20 32 20 20 20 20 20 20 20 20 20        2         
64b0: 20 20 20 20 20 20 20 32 20 20 20 20 20 20 20 20         2        
64c0: 20 20 20 20 20 20 6d 65 6d 6f 72 79 0a 2a 2a 20        memory.** 
64d0: 20 20 20 20 20 20 20 20 20 20 32 20 20 20 20 20            2     
64e0: 20 20 20 20 20 20 20 20 20 20 20 30 20 20 20 20             0    
64f0: 20 20 20 20 20 20 20 20 20 20 6d 65 6d 6f 72 79            memory
6500: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 33 20  .**           3 
6510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e                an
6520: 79 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 65  y             me
6530: 6d 6f 72 79 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  mory.*/.int sqli
6540: 74 65 33 42 74 72 65 65 46 61 63 74 6f 72 79 28  te3BtreeFactory(
6550: 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
6560: 20 2a 64 62 2c 20 20 20 20 20 20 20 20 2f 2a 20   *db,        /* 
6570: 4d 61 69 6e 20 64 61 74 61 62 61 73 65 20 77 68  Main database wh
6580: 65 6e 20 6f 70 65 6e 69 6e 67 20 61 75 78 20 6f  en opening aux o
6590: 74 68 65 72 77 69 73 65 20 30 20 2a 2f 0a 20 20  therwise 0 */.  
65a0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c  const char *zFil
65b0: 65 6e 61 6d 65 2c 20 20 20 20 2f 2a 20 4e 61 6d  ename,    /* Nam
65c0: 65 20 6f 66 20 74 68 65 20 66 69 6c 65 20 63 6f  e of the file co
65d0: 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 42 54 72  ntaining the BTr
65e0: 65 65 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  ee database */. 
65f0: 20 69 6e 74 20 6f 6d 69 74 4a 6f 75 72 6e 61 6c   int omitJournal
6600: 2c 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 66  ,          /* if
6610: 20 54 52 55 45 20 74 68 65 6e 20 64 6f 20 6e 6f   TRUE then do no
6620: 74 20 6a 6f 75 72 6e 61 6c 20 74 68 69 73 20 66  t journal this f
6630: 69 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 61  ile */.  int nCa
6640: 63 68 65 2c 20 20 20 20 20 20 20 20 20 20 20 20  che,            
6650: 20 20 20 2f 2a 20 48 6f 77 20 6d 61 6e 79 20 70     /* How many p
6660: 61 67 65 73 20 69 6e 20 74 68 65 20 70 61 67 65  ages in the page
6670: 20 63 61 63 68 65 20 2a 2f 0a 20 20 42 74 72 65   cache */.  Btre
6680: 65 20 2a 2a 70 70 42 74 72 65 65 20 20 20 20 20  e **ppBtree     
6690: 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
66a0: 20 74 6f 20 6e 65 77 20 42 74 72 65 65 20 6f 62   to new Btree ob
66b0: 6a 65 63 74 20 77 72 69 74 74 65 6e 20 68 65 72  ject written her
66c0: 65 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 62 74  e */.){.  int bt
66d0: 72 65 65 5f 66 6c 61 67 73 20 3d 20 30 3b 0a 20  ree_flags = 0;. 
66e0: 20 69 6e 74 20 72 63 3b 0a 20 20 0a 20 20 61 73   int rc;.  .  as
66f0: 73 65 72 74 28 20 70 70 42 74 72 65 65 20 21 3d  sert( ppBtree !=
6700: 20 30 29 3b 0a 20 20 69 66 28 20 6f 6d 69 74 4a   0);.  if( omitJ
6710: 6f 75 72 6e 61 6c 20 29 7b 0a 20 20 20 20 62 74  ournal ){.    bt
6720: 72 65 65 5f 66 6c 61 67 73 20 7c 3d 20 42 54 52  ree_flags |= BTR
6730: 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 3b  EE_OMIT_JOURNAL;
6740: 0a 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 66  .  }.  if( db->f
6750: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 4e 6f  lags & SQLITE_No
6760: 52 65 61 64 6c 6f 63 6b 20 29 7b 0a 20 20 20 20  Readlock ){.    
6770: 62 74 72 65 65 5f 66 6c 61 67 73 20 7c 3d 20 42  btree_flags |= B
6780: 54 52 45 45 5f 4e 4f 5f 52 45 41 44 4c 4f 43 4b  TREE_NO_READLOCK
6790: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 7a 46 69 6c  ;.  }.  if( zFil
67a0: 65 6e 61 6d 65 3d 3d 30 20 29 7b 0a 23 69 66 20  ename==0 ){.#if 
67b0: 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 30 0a 20 20  TEMP_STORE==0.  
67c0: 20 20 2f 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 20    /* Do nothing 
67d0: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
67e0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4d 45  f SQLITE_OMIT_ME
67f0: 4d 4f 52 59 44 42 0a 23 69 66 20 54 45 4d 50 5f  MORYDB.#if TEMP_
6800: 53 54 4f 52 45 3d 3d 31 0a 20 20 20 20 69 66 28  STORE==1.    if(
6810: 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 3d   db->temp_store=
6820: 3d 32 20 29 20 7a 46 69 6c 65 6e 61 6d 65 20 3d  =2 ) zFilename =
6830: 20 22 3a 6d 65 6d 6f 72 79 3a 22 3b 0a 23 65 6e   ":memory:";.#en
6840: 64 69 66 0a 23 69 66 20 54 45 4d 50 5f 53 54 4f  dif.#if TEMP_STO
6850: 52 45 3d 3d 32 0a 20 20 20 20 69 66 28 20 64 62  RE==2.    if( db
6860: 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 21 3d 31 20  ->temp_store!=1 
6870: 29 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 22 3a  ) zFilename = ":
6880: 6d 65 6d 6f 72 79 3a 22 3b 0a 23 65 6e 64 69 66  memory:";.#endif
6890: 0a 23 69 66 20 54 45 4d 50 5f 53 54 4f 52 45 3d  .#if TEMP_STORE=
68a0: 3d 33 0a 20 20 20 20 7a 46 69 6c 65 6e 61 6d 65  =3.    zFilename
68b0: 20 3d 20 22 3a 6d 65 6d 6f 72 79 3a 22 3b 0a 23   = ":memory:";.#
68c0: 65 6e 64 69 66 0a 23 65 6e 64 69 66 20 2f 2a 20  endif.#endif /* 
68d0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4d 45 4d 4f  SQLITE_OMIT_MEMO
68e0: 52 59 44 42 20 2a 2f 0a 20 20 7d 0a 0a 20 20 72  RYDB */.  }..  r
68f0: 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
6900: 4f 70 65 6e 28 7a 46 69 6c 65 6e 61 6d 65 2c 20  Open(zFilename, 
6910: 70 70 42 74 72 65 65 2c 20 62 74 72 65 65 5f 66  ppBtree, btree_f
6920: 6c 61 67 73 29 3b 0a 20 20 69 66 28 20 72 63 3d  lags);.  if( rc=
6930: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
6940: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65    sqlite3BtreeSe
6950: 74 42 75 73 79 48 61 6e 64 6c 65 72 28 2a 70 70  tBusyHandler(*pp
6960: 42 74 72 65 65 2c 20 28 76 6f 69 64 2a 29 26 64  Btree, (void*)&d
6970: 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 29 3b  b->busyHandler);
6980: 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
6990: 65 53 65 74 43 61 63 68 65 53 69 7a 65 28 2a 70  eSetCacheSize(*p
69a0: 70 42 74 72 65 65 2c 20 6e 43 61 63 68 65 29 3b  pBtree, nCache);
69b0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63  .  }.  return rc
69c0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  ;.}../*.** Retur
69d0: 6e 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20  n UTF-8 encoded 
69e0: 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65  English language
69f0: 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 6f 66 20   explanation of 
6a00: 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 0a  the most recent.
6a10: 2a 2a 20 65 72 72 6f 72 2e 0a 2a 2f 0a 63 6f 6e  ** error..*/.con
6a20: 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
6a30: 5f 65 72 72 6d 73 67 28 73 71 6c 69 74 65 33 20  _errmsg(sqlite3 
6a40: 2a 64 62 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68  *db){.  const ch
6a50: 61 72 20 2a 7a 3b 0a 20 20 69 66 28 20 73 71 6c  ar *z;.  if( sql
6a60: 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c  ite3_malloc_fail
6a70: 65 64 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  ed ){.    return
6a80: 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 53   sqlite3ErrStr(S
6a90: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 29 3b 0a 20 20  QLITE_NOMEM);.  
6aa0: 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  }.  if( sqlite3S
6ab0: 61 66 65 74 79 43 68 65 63 6b 28 64 62 29 20 7c  afetyCheck(db) |
6ac0: 7c 20 64 62 2d 3e 65 72 72 43 6f 64 65 3d 3d 53  | db->errCode==S
6ad0: 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 29 7b 0a  QLITE_MISUSE ){.
6ae0: 20 20 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74      return sqlit
6af0: 65 33 45 72 72 53 74 72 28 53 51 4c 49 54 45 5f  e3ErrStr(SQLITE_
6b00: 4d 49 53 55 53 45 29 3b 0a 20 20 7d 0a 20 20 7a  MISUSE);.  }.  z
6b10: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
6b20: 5f 74 65 78 74 28 64 62 2d 3e 70 45 72 72 29 3b  _text(db->pErr);
6b30: 0a 20 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20  .  if( z==0 ){. 
6b40: 20 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 45 72     z = sqlite3Er
6b50: 72 53 74 72 28 64 62 2d 3e 65 72 72 43 6f 64 65  rStr(db->errCode
6b60: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
6b70: 7a 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  z;.}..#ifndef SQ
6b80: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
6b90: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 55 54 46  /*.** Return UTF
6ba0: 2d 31 36 20 65 6e 63 6f 64 65 64 20 45 6e 67 6c  -16 encoded Engl
6bb0: 69 73 68 20 6c 61 6e 67 75 61 67 65 20 65 78 70  ish language exp
6bc0: 6c 61 6e 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  lanation of the 
6bd0: 6d 6f 73 74 20 72 65 63 65 6e 74 0a 2a 2a 20 65  most recent.** e
6be0: 72 72 6f 72 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 76  rror..*/.const v
6bf0: 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 65 72 72  oid *sqlite3_err
6c00: 6d 73 67 31 36 28 73 71 6c 69 74 65 33 20 2a 64  msg16(sqlite3 *d
6c10: 62 29 7b 0a 20 20 2f 2a 20 42 65 63 61 75 73 65  b){.  /* Because
6c20: 20 61 6c 6c 20 74 68 65 20 63 68 61 72 61 63 74   all the charact
6c30: 65 72 73 20 69 6e 20 74 68 65 20 73 74 72 69 6e  ers in the strin
6c40: 67 20 61 72 65 20 69 6e 20 74 68 65 20 75 6e 69  g are in the uni
6c50: 63 6f 64 65 0a 20 20 2a 2a 20 72 61 6e 67 65 20  code.  ** range 
6c60: 30 78 30 30 2d 30 78 46 46 2c 20 69 66 20 77 65  0x00-0xFF, if we
6c70: 20 70 61 64 20 74 68 65 20 62 69 67 2d 65 6e 64   pad the big-end
6c80: 69 61 6e 20 73 74 72 69 6e 67 20 77 69 74 68 20  ian string with 
6c90: 61 20 0a 20 20 2a 2a 20 7a 65 72 6f 20 62 79 74  a .  ** zero byt
6ca0: 65 2c 20 77 65 20 63 61 6e 20 6f 62 74 61 69 6e  e, we can obtain
6cb0: 20 74 68 65 20 6c 69 74 74 6c 65 2d 65 6e 64 69   the little-endi
6cc0: 61 6e 20 73 74 72 69 6e 67 20 77 69 74 68 0a 20  an string with. 
6cd0: 20 2a 2a 20 26 62 69 67 5f 65 6e 64 69 61 6e 5b   ** &big_endian[
6ce0: 31 5d 2e 0a 20 20 2a 2f 0a 20 20 73 74 61 74 69  1]..  */.  stati
6cf0: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 6f 75 74  c const char out
6d00: 4f 66 4d 65 6d 42 65 5b 5d 20 3d 20 7b 0a 20 20  OfMemBe[] = {.  
6d10: 20 20 30 2c 20 27 6f 27 2c 20 30 2c 20 27 75 27    0, 'o', 0, 'u'
6d20: 2c 20 30 2c 20 27 74 27 2c 20 30 2c 20 27 20 27  , 0, 't', 0, ' '
6d30: 2c 20 0a 20 20 20 20 30 2c 20 27 6f 27 2c 20 30  , .    0, 'o', 0
6d40: 2c 20 27 66 27 2c 20 30 2c 20 27 20 27 2c 20 0a  , 'f', 0, ' ', .
6d50: 20 20 20 20 30 2c 20 27 6d 27 2c 20 30 2c 20 27      0, 'm', 0, '
6d60: 65 27 2c 20 30 2c 20 27 6d 27 2c 20 30 2c 20 27  e', 0, 'm', 0, '
6d70: 6f 27 2c 20 30 2c 20 27 72 27 2c 20 30 2c 20 27  o', 0, 'r', 0, '
6d80: 79 27 2c 20 30 2c 20 30 2c 20 30 0a 20 20 7d 3b  y', 0, 0, 0.  };
6d90: 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
6da0: 63 68 61 72 20 6d 69 73 75 73 65 42 65 20 5b 5d  char misuseBe []
6db0: 20 3d 20 7b 0a 20 20 20 20 30 2c 20 27 6c 27 2c   = {.    0, 'l',
6dc0: 20 30 2c 20 27 69 27 2c 20 30 2c 20 27 62 27 2c   0, 'i', 0, 'b',
6dd0: 20 30 2c 20 27 72 27 2c 20 30 2c 20 27 61 27 2c   0, 'r', 0, 'a',
6de0: 20 30 2c 20 27 72 27 2c 20 30 2c 20 27 79 27 2c   0, 'r', 0, 'y',
6df0: 20 30 2c 20 27 20 27 2c 20 0a 20 20 20 20 30 2c   0, ' ', .    0,
6e00: 20 27 72 27 2c 20 30 2c 20 27 6f 27 2c 20 30 2c   'r', 0, 'o', 0,
6e10: 20 27 75 27 2c 20 30 2c 20 27 74 27 2c 20 30 2c   'u', 0, 't', 0,
6e20: 20 27 69 27 2c 20 30 2c 20 27 6e 27 2c 20 30 2c   'i', 0, 'n', 0,
6e30: 20 27 65 27 2c 20 30 2c 20 27 20 27 2c 20 0a 20   'e', 0, ' ', . 
6e40: 20 20 20 30 2c 20 27 63 27 2c 20 30 2c 20 27 61     0, 'c', 0, 'a
6e50: 27 2c 20 30 2c 20 27 6c 27 2c 20 30 2c 20 27 6c  ', 0, 'l', 0, 'l
6e60: 27 2c 20 30 2c 20 27 65 27 2c 20 30 2c 20 27 64  ', 0, 'e', 0, 'd
6e70: 27 2c 20 30 2c 20 27 20 27 2c 20 0a 20 20 20 20  ', 0, ' ', .    
6e80: 30 2c 20 27 6f 27 2c 20 30 2c 20 27 75 27 2c 20  0, 'o', 0, 'u', 
6e90: 30 2c 20 27 74 27 2c 20 30 2c 20 27 20 27 2c 20  0, 't', 0, ' ', 
6ea0: 0a 20 20 20 20 30 2c 20 27 6f 27 2c 20 30 2c 20  .    0, 'o', 0, 
6eb0: 27 66 27 2c 20 30 2c 20 27 20 27 2c 20 0a 20 20  'f', 0, ' ', .  
6ec0: 20 20 30 2c 20 27 73 27 2c 20 30 2c 20 27 65 27    0, 's', 0, 'e'
6ed0: 2c 20 30 2c 20 27 71 27 2c 20 30 2c 20 27 75 27  , 0, 'q', 0, 'u'
6ee0: 2c 20 30 2c 20 27 65 27 2c 20 30 2c 20 27 6e 27  , 0, 'e', 0, 'n'
6ef0: 2c 20 30 2c 20 27 63 27 2c 20 30 2c 20 27 65 27  , 0, 'c', 0, 'e'
6f00: 2c 20 30 2c 20 30 2c 20 30 0a 20 20 7d 3b 0a 0a  , 0, 0, 0.  };..
6f10: 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 3b    const void *z;
6f20: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 6d  .  if( sqlite3_m
6f30: 61 6c 6c 6f 63 5f 66 61 69 6c 65 64 20 29 7b 0a  alloc_failed ){.
6f40: 20 20 20 20 72 65 74 75 72 6e 20 28 76 6f 69 64      return (void
6f50: 20 2a 29 28 26 6f 75 74 4f 66 4d 65 6d 42 65 5b   *)(&outOfMemBe[
6f60: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
6f70: 56 45 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36  VE==SQLITE_UTF16
6f80: 4c 45 3f 31 3a 30 5d 29 3b 0a 20 20 7d 0a 20 20  LE?1:0]);.  }.  
6f90: 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
6fa0: 79 43 68 65 63 6b 28 64 62 29 20 7c 7c 20 64 62  yCheck(db) || db
6fb0: 2d 3e 65 72 72 43 6f 64 65 3d 3d 53 51 4c 49 54  ->errCode==SQLIT
6fc0: 45 5f 4d 49 53 55 53 45 20 29 7b 0a 20 20 20 20  E_MISUSE ){.    
6fd0: 72 65 74 75 72 6e 20 28 76 6f 69 64 20 2a 29 28  return (void *)(
6fe0: 26 6d 69 73 75 73 65 42 65 5b 53 51 4c 49 54 45  &misuseBe[SQLITE
6ff0: 5f 55 54 46 31 36 4e 41 54 49 56 45 3d 3d 53 51  _UTF16NATIVE==SQ
7000: 4c 49 54 45 5f 55 54 46 31 36 4c 45 3f 31 3a 30  LITE_UTF16LE?1:0
7010: 5d 29 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71  ]);.  }.  z = sq
7020: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
7030: 31 36 28 64 62 2d 3e 70 45 72 72 29 3b 0a 20 20  16(db->pErr);.  
7040: 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20  if( z==0 ){.    
7050: 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53  sqlite3ValueSetS
7060: 74 72 28 64 62 2d 3e 70 45 72 72 2c 20 2d 31 2c  tr(db->pErr, -1,
7070: 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 64   sqlite3ErrStr(d
7080: 62 2d 3e 65 72 72 43 6f 64 65 29 2c 0a 20 20 20  b->errCode),.   
7090: 20 20 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46        SQLITE_UTF
70a0: 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  8, SQLITE_STATIC
70b0: 29 3b 0a 20 20 20 20 7a 20 3d 20 73 71 6c 69 74  );.    z = sqlit
70c0: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 28  e3_value_text16(
70d0: 64 62 2d 3e 70 45 72 72 29 3b 0a 20 20 7d 0a 20  db->pErr);.  }. 
70e0: 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 23 65 6e   return z;.}.#en
70f0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
7100: 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 2f 2a 0a  IT_UTF16 */../*.
7110: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6d 6f  ** Return the mo
7120: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
7130: 63 6f 64 65 20 67 65 6e 65 72 61 74 65 64 20 62  code generated b
7140: 79 20 61 6e 20 53 51 4c 69 74 65 20 72 6f 75 74  y an SQLite rout
7150: 69 6e 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ine..*/.int sqli
7160: 74 65 33 5f 65 72 72 63 6f 64 65 28 73 71 6c 69  te3_errcode(sqli
7170: 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 66 28 20  te3 *db){.  if( 
7180: 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66  sqlite3_malloc_f
7190: 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 72 65 74  ailed ){.    ret
71a0: 75 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  urn SQLITE_NOMEM
71b0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69  ;.  }.  if( sqli
71c0: 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 28 64  te3SafetyCheck(d
71d0: 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  b) ){.    return
71e0: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a   SQLITE_MISUSE;.
71f0: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 64 62 2d    }.  return db-
7200: 3e 65 72 72 43 6f 64 65 3b 0a 7d 0a 0a 2f 2a 0a  >errCode;.}../*.
7210: 2a 2a 20 43 68 65 63 6b 20 73 63 68 65 6d 61 20  ** Check schema 
7220: 63 6f 6f 6b 69 65 73 20 69 6e 20 61 6c 6c 20 64  cookies in all d
7230: 61 74 61 62 61 73 65 73 2e 20 20 49 66 20 61 6e  atabases.  If an
7240: 79 20 63 6f 6f 6b 69 65 20 69 73 20 6f 75 74 0a  y cookie is out.
7250: 2a 2a 20 6f 66 20 64 61 74 65 2c 20 72 65 74 75  ** of date, retu
7260: 72 6e 20 30 2e 20 20 49 66 20 61 6c 6c 20 73 63  rn 0.  If all sc
7270: 68 65 6d 61 20 63 6f 6f 6b 69 65 73 20 61 72 65  hema cookies are
7280: 20 63 75 72 72 65 6e 74 2c 20 72 65 74 75 72 6e   current, return
7290: 20 31 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e   1..*/.static in
72a0: 74 20 73 63 68 65 6d 61 49 73 56 61 6c 69 64 28  t schemaIsValid(
72b0: 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20  sqlite3 *db){.  
72c0: 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 72  int iDb;.  int r
72d0: 63 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 63  c;.  BtCursor *c
72e0: 75 72 54 65 6d 70 3b 0a 20 20 69 6e 74 20 63 6f  urTemp;.  int co
72f0: 6f 6b 69 65 3b 0a 20 20 69 6e 74 20 61 6c 6c 4f  okie;.  int allO
7300: 6b 20 3d 20 31 3b 0a 0a 20 20 66 6f 72 28 69 44  k = 1;..  for(iD
7310: 62 3d 30 3b 20 61 6c 6c 4f 6b 20 26 26 20 69 44  b=0; allOk && iD
7320: 62 3c 64 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b  b<db->nDb; iDb++
7330: 29 7b 0a 20 20 20 20 42 74 72 65 65 20 2a 70 42  ){.    Btree *pB
7340: 74 3b 0a 20 20 20 20 70 42 74 20 3d 20 64 62 2d  t;.    pBt = db-
7350: 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 3b 0a 20  >aDb[iDb].pBt;. 
7360: 20 20 20 69 66 28 20 70 42 74 3d 3d 30 20 29 20     if( pBt==0 ) 
7370: 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 72 63  continue;.    rc
7380: 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
7390: 75 72 73 6f 72 28 70 42 74 2c 20 4d 41 53 54 45  ursor(pBt, MASTE
73a0: 52 5f 52 4f 4f 54 2c 20 30 2c 20 30 2c 20 30 2c  R_ROOT, 0, 0, 0,
73b0: 20 26 63 75 72 54 65 6d 70 29 3b 0a 20 20 20 20   &curTemp);.    
73c0: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
73d0: 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  K ){.      rc = 
73e0: 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d  sqlite3BtreeGetM
73f0: 65 74 61 28 70 42 74 2c 20 31 2c 20 28 75 33 32  eta(pBt, 1, (u32
7400: 20 2a 29 26 63 6f 6f 6b 69 65 29 3b 0a 20 20 20   *)&cookie);.   
7410: 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
7420: 45 5f 4f 4b 20 26 26 20 63 6f 6f 6b 69 65 21 3d  E_OK && cookie!=
7430: 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 73 63 68  db->aDb[iDb].sch
7440: 65 6d 61 5f 63 6f 6f 6b 69 65 20 29 7b 0a 20 20  ema_cookie ){.  
7450: 20 20 20 20 20 20 61 6c 6c 4f 6b 20 3d 20 30 3b        allOk = 0;
7460: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
7470: 71 6c 69 74 65 33 42 74 72 65 65 43 6c 6f 73 65  qlite3BtreeClose
7480: 43 75 72 73 6f 72 28 63 75 72 54 65 6d 70 29 3b  Cursor(curTemp);
7490: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
74a0: 75 72 6e 20 61 6c 6c 4f 6b 3b 0a 7d 0a 0a 2f 2a  urn allOk;.}../*
74b0: 0a 2a 2a 20 43 6f 6d 70 69 6c 65 20 74 68 65 20  .** Compile the 
74c0: 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 53 51  UTF-8 encoded SQ
74d0: 4c 20 73 74 61 74 65 6d 65 6e 74 20 7a 53 71 6c  L statement zSql
74e0: 20 69 6e 74 6f 20 61 20 73 74 61 74 65 6d 65 6e   into a statemen
74f0: 74 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 69 6e 74  t handle..*/.int
7500: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
7510: 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c  (.  sqlite3 *db,
7520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7530: 20 44 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   Database handle
7540: 2e 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  . */.  const cha
7550: 72 20 2a 7a 53 71 6c 2c 20 20 20 20 20 20 20 20  r *zSql,        
7560: 20 2f 2a 20 55 54 46 2d 38 20 65 6e 63 6f 64 65   /* UTF-8 encode
7570: 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e  d SQL statement.
7580: 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 73   */.  int nBytes
7590: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
75a0: 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 7a 53 71  /* Length of zSq
75b0: 6c 20 69 6e 20 62 79 74 65 73 2e 20 2a 2f 0a 20  l in bytes. */. 
75c0: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2a   sqlite3_stmt **
75d0: 70 70 53 74 6d 74 2c 20 20 20 20 2f 2a 20 4f 55  ppStmt,    /* OU
75e0: 54 3a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  T: A pointer to 
75f0: 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
7600: 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73  tement */.  cons
7610: 74 20 63 68 61 72 2a 2a 20 70 7a 54 61 69 6c 20  t char** pzTail 
7620: 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20 45 6e        /* OUT: En
7630: 64 20 6f 66 20 70 61 72 73 65 64 20 73 74 72 69  d of parsed stri
7640: 6e 67 20 2a 2f 0a 29 7b 0a 20 20 50 61 72 73 65  ng */.){.  Parse
7650: 20 73 50 61 72 73 65 3b 0a 20 20 63 68 61 72 20   sParse;.  char 
7660: 2a 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20  *zErrMsg = 0;.  
7670: 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  int rc = SQLITE_
7680: 4f 4b 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74  OK;..  if( sqlit
7690: 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64  e3_malloc_failed
76a0: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
76b0: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d  QLITE_NOMEM;.  }
76c0: 0a 0a 20 20 61 73 73 65 72 74 28 20 70 70 53 74  ..  assert( ppSt
76d0: 6d 74 20 29 3b 0a 20 20 2a 70 70 53 74 6d 74 20  mt );.  *ppStmt 
76e0: 3d 20 30 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  = 0;.  if( sqlit
76f0: 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 20 29  e3SafetyOn(db) )
7700: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  {.    return SQL
7710: 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a  ITE_MISUSE;.  }.
7720: 0a 20 20 6d 65 6d 73 65 74 28 26 73 50 61 72 73  .  memset(&sPars
7730: 65 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 50 61  e, 0, sizeof(sPa
7740: 72 73 65 29 29 3b 0a 20 20 73 50 61 72 73 65 2e  rse));.  sParse.
7750: 64 62 20 3d 20 64 62 3b 0a 20 20 73 71 6c 69 74  db = db;.  sqlit
7760: 65 33 52 75 6e 50 61 72 73 65 72 28 26 73 50 61  e3RunParser(&sPa
7770: 72 73 65 2c 20 7a 53 71 6c 2c 20 26 7a 45 72 72  rse, zSql, &zErr
7780: 4d 73 67 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c  Msg);..  if( sql
7790: 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c  ite3_malloc_fail
77a0: 65 64 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  ed ){.    rc = S
77b0: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20  QLITE_NOMEM;.   
77c0: 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b   sqlite3Rollback
77d0: 41 6c 6c 28 64 62 29 3b 0a 20 20 20 20 73 71 6c  All(db);.    sql
77e0: 69 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61  ite3ResetInterna
77f0: 6c 53 63 68 65 6d 61 28 64 62 2c 20 30 29 3b 0a  lSchema(db, 0);.
7800: 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d      db->flags &=
7810: 20 7e 53 51 4c 49 54 45 5f 49 6e 54 72 61 6e 73   ~SQLITE_InTrans
7820: 3b 0a 20 20 20 20 67 6f 74 6f 20 70 72 65 70 61  ;.    goto prepa
7830: 72 65 5f 6f 75 74 3b 0a 20 20 7d 0a 20 20 69 66  re_out;.  }.  if
7840: 28 20 73 50 61 72 73 65 2e 72 63 3d 3d 53 51 4c  ( sParse.rc==SQL
7850: 49 54 45 5f 44 4f 4e 45 20 29 20 73 50 61 72 73  ITE_DONE ) sPars
7860: 65 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  e.rc = SQLITE_OK
7870: 3b 0a 20 20 69 66 28 20 73 50 61 72 73 65 2e 72  ;.  if( sParse.r
7880: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c!=SQLITE_OK && 
7890: 73 50 61 72 73 65 2e 63 68 65 63 6b 53 63 68 65  sParse.checkSche
78a0: 6d 61 20 26 26 20 21 73 63 68 65 6d 61 49 73 56  ma && !schemaIsV
78b0: 61 6c 69 64 28 64 62 29 20 29 7b 0a 20 20 20 20  alid(db) ){.    
78c0: 73 50 61 72 73 65 2e 72 63 20 3d 20 53 51 4c 49  sParse.rc = SQLI
78d0: 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20  TE_SCHEMA;.  }. 
78e0: 20 69 66 28 20 73 50 61 72 73 65 2e 72 63 3d 3d   if( sParse.rc==
78f0: 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 29 7b  SQLITE_SCHEMA ){
7900: 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65  .    sqlite3Rese
7910: 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28  tInternalSchema(
7920: 64 62 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66  db, 0);.  }.  if
7930: 28 20 70 7a 54 61 69 6c 20 29 20 2a 70 7a 54 61  ( pzTail ) *pzTa
7940: 69 6c 20 3d 20 73 50 61 72 73 65 2e 7a 54 61 69  il = sParse.zTai
7950: 6c 3b 0a 20 20 72 63 20 3d 20 73 50 61 72 73 65  l;.  rc = sParse
7960: 2e 72 63 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  .rc;..#ifndef SQ
7970: 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49  LITE_OMIT_EXPLAI
7980: 4e 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  N.  if( rc==SQLI
7990: 54 45 5f 4f 4b 20 26 26 20 73 50 61 72 73 65 2e  TE_OK && sParse.
79a0: 70 56 64 62 65 20 26 26 20 73 50 61 72 73 65 2e  pVdbe && sParse.
79b0: 65 78 70 6c 61 69 6e 20 29 7b 0a 20 20 20 20 73  explain ){.    s
79c0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
79d0: 43 6f 6c 73 28 73 50 61 72 73 65 2e 70 56 64 62  Cols(sParse.pVdb
79e0: 65 2c 20 35 29 3b 0a 20 20 20 20 73 71 6c 69 74  e, 5);.    sqlit
79f0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
7a00: 28 73 50 61 72 73 65 2e 70 56 64 62 65 2c 20 30  (sParse.pVdbe, 0
7a10: 2c 20 22 61 64 64 72 22 2c 20 50 33 5f 53 54 41  , "addr", P3_STA
7a20: 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  TIC);.    sqlite
7a30: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
7a40: 73 50 61 72 73 65 2e 70 56 64 62 65 2c 20 31 2c  sParse.pVdbe, 1,
7a50: 20 22 6f 70 63 6f 64 65 22 2c 20 50 33 5f 53 54   "opcode", P3_ST
7a60: 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74  ATIC);.    sqlit
7a70: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
7a80: 28 73 50 61 72 73 65 2e 70 56 64 62 65 2c 20 32  (sParse.pVdbe, 2
7a90: 2c 20 22 70 31 22 2c 20 50 33 5f 53 54 41 54 49  , "p1", P3_STATI
7aa0: 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  C);.    sqlite3V
7ab0: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 73 50  dbeSetColName(sP
7ac0: 61 72 73 65 2e 70 56 64 62 65 2c 20 33 2c 20 22  arse.pVdbe, 3, "
7ad0: 70 32 22 2c 20 50 33 5f 53 54 41 54 49 43 29 3b  p2", P3_STATIC);
7ae0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
7af0: 53 65 74 43 6f 6c 4e 61 6d 65 28 73 50 61 72 73  SetColName(sPars
7b00: 65 2e 70 56 64 62 65 2c 20 34 2c 20 22 70 33 22  e.pVdbe, 4, "p3"
7b10: 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20  , P3_STATIC);.  
7b20: 7d 20 0a 23 65 6e 64 69 66 0a 0a 70 72 65 70 61  } .#endif..prepa
7b30: 72 65 5f 6f 75 74 3a 0a 20 20 69 66 28 20 73 71  re_out:.  if( sq
7b40: 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64  lite3SafetyOff(d
7b50: 62 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  b) ){.    rc = S
7b60: 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20  QLITE_MISUSE;.  
7b70: 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  }.  if( rc==SQLI
7b80: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2a 70 70  TE_OK ){.    *pp
7b90: 53 74 6d 74 20 3d 20 28 73 71 6c 69 74 65 33 5f  Stmt = (sqlite3_
7ba0: 73 74 6d 74 2a 29 73 50 61 72 73 65 2e 70 56 64  stmt*)sParse.pVd
7bb0: 62 65 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  be;.  }else if( 
7bc0: 73 50 61 72 73 65 2e 70 56 64 62 65 20 29 7b 0a  sParse.pVdbe ){.
7bd0: 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61      sqlite3_fina
7be0: 6c 69 7a 65 28 28 73 71 6c 69 74 65 33 5f 73 74  lize((sqlite3_st
7bf0: 6d 74 2a 29 73 50 61 72 73 65 2e 70 56 64 62 65  mt*)sParse.pVdbe
7c00: 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 7a 45  );.  }..  if( zE
7c10: 72 72 4d 73 67 20 29 7b 0a 20 20 20 20 73 71 6c  rrMsg ){.    sql
7c20: 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20 72 63  ite3Error(db, rc
7c30: 2c 20 22 25 73 22 2c 20 7a 45 72 72 4d 73 67 29  , "%s", zErrMsg)
7c40: 3b 0a 20 20 20 20 73 71 6c 69 74 65 46 72 65 65  ;.    sqliteFree
7c50: 28 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 65 6c  (zErrMsg);.  }el
7c60: 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45  se{.    sqlite3E
7c70: 72 72 6f 72 28 64 62 2c 20 72 63 2c 20 30 29 3b  rror(db, rc, 0);
7c80: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63  .  }.  return rc
7c90: 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
7ca0: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 2f  ITE_OMIT_UTF16./
7cb0: 2a 0a 2a 2a 20 43 6f 6d 70 69 6c 65 20 74 68 65  *.** Compile the
7cc0: 20 55 54 46 2d 31 36 20 65 6e 63 6f 64 65 64 20   UTF-16 encoded 
7cd0: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 7a 53  SQL statement zS
7ce0: 71 6c 20 69 6e 74 6f 20 61 20 73 74 61 74 65 6d  ql into a statem
7cf0: 65 6e 74 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 69  ent handle..*/.i
7d00: 6e 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  nt sqlite3_prepa
7d10: 72 65 31 36 28 0a 20 20 73 71 6c 69 74 65 33 20  re16(.  sqlite3 
7d20: 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20 20 20  *db,            
7d30: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 68 61    /* Database ha
7d40: 6e 64 6c 65 2e 20 2a 2f 20 0a 20 20 63 6f 6e 73  ndle. */ .  cons
7d50: 74 20 76 6f 69 64 20 2a 7a 53 71 6c 2c 20 20 20  t void *zSql,   
7d60: 20 20 20 20 20 20 2f 2a 20 55 54 46 2d 38 20 65        /* UTF-8 e
7d70: 6e 63 6f 64 65 64 20 53 51 4c 20 73 74 61 74 65  ncoded SQL state
7d80: 6d 65 6e 74 2e 20 2a 2f 0a 20 20 69 6e 74 20 6e  ment. */.  int n
7d90: 42 79 74 65 73 2c 20 20 20 20 20 20 20 20 20 20  Bytes,          
7da0: 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f       /* Length o
7db0: 66 20 7a 53 71 6c 20 69 6e 20 62 79 74 65 73 2e  f zSql in bytes.
7dc0: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 73 74   */.  sqlite3_st
7dd0: 6d 74 20 2a 2a 70 70 53 74 6d 74 2c 20 20 20 20  mt **ppStmt,    
7de0: 2f 2a 20 4f 55 54 3a 20 41 20 70 6f 69 6e 74 65  /* OUT: A pointe
7df0: 72 20 74 6f 20 74 68 65 20 70 72 65 70 61 72 65  r to the prepare
7e00: 64 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20  d statement */. 
7e10: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2a 70 7a   const void **pz
7e20: 54 61 69 6c 20 20 20 20 20 20 20 2f 2a 20 4f 55  Tail       /* OU
7e30: 54 3a 20 45 6e 64 20 6f 66 20 70 61 72 73 65 64  T: End of parsed
7e40: 20 73 74 72 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20   string */.){.  
7e50: 2f 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  /* This function
7e60: 20 63 75 72 72 65 6e 74 6c 79 20 77 6f 72 6b 73   currently works
7e70: 20 62 79 20 66 69 72 73 74 20 74 72 61 6e 73 66   by first transf
7e80: 6f 72 6d 69 6e 67 20 74 68 65 20 55 54 46 2d 31  orming the UTF-1
7e90: 36 0a 20 20 2a 2a 20 65 6e 63 6f 64 65 64 20 73  6.  ** encoded s
7ea0: 74 72 69 6e 67 20 74 6f 20 55 54 46 2d 38 2c 20  tring to UTF-8, 
7eb0: 74 68 65 6e 20 69 6e 76 6f 6b 69 6e 67 20 73 71  then invoking sq
7ec0: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 2e  lite3_prepare().
7ed0: 20 54 68 65 0a 20 20 2a 2a 20 74 72 69 63 6b 79   The.  ** tricky
7ee0: 20 62 69 74 20 69 73 20 66 69 67 75 72 69 6e 67   bit is figuring
7ef0: 20 6f 75 74 20 74 68 65 20 70 6f 69 6e 74 65 72   out the pointer
7f00: 20 74 6f 20 72 65 74 75 72 6e 20 69 6e 20 2a 70   to return in *p
7f10: 7a 54 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 63 68  zTail..  */.  ch
7f20: 61 72 20 63 6f 6e 73 74 20 2a 7a 53 71 6c 38 20  ar const *zSql8 
7f30: 3d 20 30 3b 0a 20 20 63 68 61 72 20 63 6f 6e 73  = 0;.  char cons
7f40: 74 20 2a 7a 54 61 69 6c 38 20 3d 20 30 3b 0a 20  t *zTail8 = 0;. 
7f50: 20 69 6e 74 20 72 63 3b 0a 20 20 73 71 6c 69 74   int rc;.  sqlit
7f60: 65 33 5f 76 61 6c 75 65 20 2a 70 54 6d 70 3b 0a  e3_value *pTmp;.
7f70: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61  .  if( sqlite3Sa
7f80: 66 65 74 79 43 68 65 63 6b 28 64 62 29 20 29 7b  fetyCheck(db) ){
7f90: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
7fa0: 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 20  TE_MISUSE;.  }. 
7fb0: 20 70 54 6d 70 20 3d 20 73 71 6c 69 74 65 33 47   pTmp = sqlite3G
7fc0: 65 74 54 72 61 6e 73 69 65 6e 74 56 61 6c 75 65  etTransientValue
7fd0: 28 64 62 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  (db);.  sqlite3V
7fe0: 61 6c 75 65 53 65 74 53 74 72 28 70 54 6d 70 2c  alueSetStr(pTmp,
7ff0: 20 2d 31 2c 20 7a 53 71 6c 2c 20 53 51 4c 49 54   -1, zSql, SQLIT
8000: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 2c 20 53  E_UTF16NATIVE, S
8010: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
8020: 20 7a 53 71 6c 38 20 3d 20 73 71 6c 69 74 65 33   zSql8 = sqlite3
8030: 56 61 6c 75 65 54 65 78 74 28 70 54 6d 70 2c 20  ValueText(pTmp, 
8040: 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20 20  SQLITE_UTF8);.  
8050: 69 66 28 20 21 7a 53 71 6c 38 20 29 7b 0a 20 20  if( !zSql8 ){.  
8060: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64    sqlite3Error(d
8070: 62 2c 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 2c  b, SQLITE_NOMEM,
8080: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
8090: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20  SQLITE_NOMEM;.  
80a0: 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
80b0: 5f 70 72 65 70 61 72 65 28 64 62 2c 20 7a 53 71  _prepare(db, zSq
80c0: 6c 38 2c 20 2d 31 2c 20 70 70 53 74 6d 74 2c 20  l8, -1, ppStmt, 
80d0: 26 7a 54 61 69 6c 38 29 3b 0a 0a 20 20 69 66 28  &zTail8);..  if(
80e0: 20 7a 54 61 69 6c 38 20 26 26 20 70 7a 54 61 69   zTail8 && pzTai
80f0: 6c 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 73  l ){.    /* If s
8100: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 72  qlite3_prepare r
8110: 65 74 75 72 6e 73 20 61 20 74 61 69 6c 20 70 6f  eturns a tail po
8120: 69 6e 74 65 72 2c 20 77 65 20 63 61 6c 63 75 6c  inter, we calcul
8130: 61 74 65 20 74 68 65 0a 20 20 20 20 2a 2a 20 65  ate the.    ** e
8140: 71 75 69 76 61 6c 65 6e 74 20 70 6f 69 6e 74 65  quivalent pointe
8150: 72 20 69 6e 74 6f 20 74 68 65 20 55 54 46 2d 31  r into the UTF-1
8160: 36 20 73 74 72 69 6e 67 20 62 79 20 63 6f 75 6e  6 string by coun
8170: 74 69 6e 67 20 74 68 65 20 75 6e 69 63 6f 64 65  ting the unicode
8180: 0a 20 20 20 20 2a 2a 20 63 68 61 72 61 63 74 65  .    ** characte
8190: 72 73 20 62 65 74 77 65 65 6e 20 7a 53 71 6c 38  rs between zSql8
81a0: 20 61 6e 64 20 7a 54 61 69 6c 38 2c 20 61 6e 64   and zTail8, and
81b0: 20 74 68 65 6e 20 72 65 74 75 72 6e 69 6e 67 20   then returning 
81c0: 61 20 70 6f 69 6e 74 65 72 0a 20 20 20 20 2a 2a  a pointer.    **
81d0: 20 74 68 65 20 73 61 6d 65 20 6e 75 6d 62 65 72   the same number
81e0: 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20 69   of characters i
81f0: 6e 74 6f 20 74 68 65 20 55 54 46 2d 31 36 20 73  nto the UTF-16 s
8200: 74 72 69 6e 67 2e 0a 20 20 20 20 2a 2f 0a 20 20  tring..    */.  
8210: 20 20 69 6e 74 20 63 68 61 72 73 5f 70 61 72 73    int chars_pars
8220: 65 64 20 3d 20 73 71 6c 69 74 65 33 75 74 66 38  ed = sqlite3utf8
8230: 43 68 61 72 4c 65 6e 28 7a 53 71 6c 38 2c 20 7a  CharLen(zSql8, z
8240: 54 61 69 6c 38 2d 7a 53 71 6c 38 29 3b 0a 20 20  Tail8-zSql8);.  
8250: 20 20 2a 70 7a 54 61 69 6c 20 3d 20 28 75 38 20    *pzTail = (u8 
8260: 2a 29 7a 53 71 6c 20 2b 20 73 71 6c 69 74 65 33  *)zSql + sqlite3
8270: 75 74 66 31 36 42 79 74 65 4c 65 6e 28 7a 53 71  utf16ByteLen(zSq
8280: 6c 2c 20 63 68 61 72 73 5f 70 61 72 73 65 64 29  l, chars_parsed)
8290: 3b 0a 20 20 7d 0a 20 0a 20 20 72 65 74 75 72 6e  ;.  }. .  return
82a0: 20 72 63 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a   rc;.}.#endif /*
82b0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
82c0: 31 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  16 */../*.** Thi
82d0: 73 20 72 6f 75 74 69 6e 65 20 64 6f 65 73 20 74  s routine does t
82e0: 68 65 20 77 6f 72 6b 20 6f 66 20 6f 70 65 6e 69  he work of openi
82f0: 6e 67 20 61 20 64 61 74 61 62 61 73 65 20 6f 6e  ng a database on
8300: 20 62 65 68 61 6c 66 20 6f 66 0a 2a 2a 20 73 71   behalf of.** sq
8310: 6c 69 74 65 33 5f 6f 70 65 6e 28 29 20 61 6e 64  lite3_open() and
8320: 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 28   sqlite3_open16(
8330: 29 2e 20 54 68 65 20 64 61 74 61 62 61 73 65 20  ). The database 
8340: 66 69 6c 65 6e 61 6d 65 20 22 7a 46 69 6c 65 6e  filename "zFilen
8350: 61 6d 65 22 20 20 0a 2a 2a 20 69 73 20 55 54 46  ame"  .** is UTF
8360: 2d 38 20 65 6e 63 6f 64 65 64 2e 20 54 68 65 20  -8 encoded. The 
8370: 66 6f 75 72 74 68 20 61 72 67 75 6d 65 6e 74 2c  fourth argument,
8380: 20 22 64 65 66 5f 65 6e 63 22 20 69 73 20 6f 6e   "def_enc" is on
8390: 65 20 6f 66 20 74 68 65 20 54 45 58 54 5f 2a 0a  e of the TEXT_*.
83a0: 2a 2a 20 6d 61 63 72 6f 73 20 66 72 6f 6d 20 73  ** macros from s
83b0: 71 6c 69 74 65 49 6e 74 2e 68 2e 20 49 66 20 77  qliteInt.h. If w
83c0: 65 20 65 6e 64 20 75 70 20 63 72 65 61 74 69 6e  e end up creatin
83d0: 67 20 61 20 6e 65 77 20 64 61 74 61 62 61 73 65  g a new database
83e0: 20 66 69 6c 65 0a 2a 2a 20 28 6e 6f 74 20 6f 70   file.** (not op
83f0: 65 6e 69 6e 67 20 61 6e 20 65 78 69 73 74 69 6e  ening an existin
8400: 67 20 6f 6e 65 29 2c 20 74 68 65 20 74 65 78 74  g one), the text
8410: 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 74 68 65   encoding of the
8420: 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 77 69 6c   database.** wil
8430: 6c 20 62 65 20 73 65 74 20 74 6f 20 74 68 69 73  l be set to this
8440: 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69   value..*/.stati
8450: 63 20 69 6e 74 20 6f 70 65 6e 44 61 74 61 62 61  c int openDataba
8460: 73 65 28 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  se(.  const char
8470: 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20 2f 2a 20   *zFilename, /* 
8480: 44 61 74 61 62 61 73 65 20 66 69 6c 65 6e 61 6d  Database filenam
8490: 65 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20  e UTF-8 encoded 
84a0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 2a 70  */.  sqlite3 **p
84b0: 70 44 62 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  pDb         /* O
84c0: 55 54 3a 20 52 65 74 75 72 6e 65 64 20 64 61 74  UT: Returned dat
84d0: 61 62 61 73 65 20 68 61 6e 64 6c 65 20 2a 2f 0a  abase handle */.
84e0: 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
84f0: 3b 0a 20 20 69 6e 74 20 72 63 2c 20 69 3b 0a 0a  ;.  int rc, i;..
8500: 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 20 74 68    /* Allocate th
8510: 65 20 73 71 6c 69 74 65 20 64 61 74 61 20 73 74  e sqlite data st
8520: 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 64 62 20  ructure */.  db 
8530: 3d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 20  = sqliteMalloc( 
8540: 73 69 7a 65 6f 66 28 73 71 6c 69 74 65 33 29 20  sizeof(sqlite3) 
8550: 29 3b 0a 20 20 69 66 28 20 64 62 3d 3d 30 20 29  );.  if( db==0 )
8560: 20 67 6f 74 6f 20 6f 70 65 6e 64 62 5f 6f 75 74   goto opendb_out
8570: 3b 0a 20 20 64 62 2d 3e 70 72 69 6f 72 4e 65 77  ;.  db->priorNew
8580: 52 6f 77 69 64 20 3d 20 30 3b 0a 20 20 64 62 2d  Rowid = 0;.  db-
8590: 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f  >magic = SQLITE_
85a0: 4d 41 47 49 43 5f 42 55 53 59 3b 0a 20 20 64 62  MAGIC_BUSY;.  db
85b0: 2d 3e 6e 44 62 20 3d 20 32 3b 0a 20 20 64 62 2d  ->nDb = 2;.  db-
85c0: 3e 61 44 62 20 3d 20 64 62 2d 3e 61 44 62 53 74  >aDb = db->aDbSt
85d0: 61 74 69 63 3b 0a 20 20 64 62 2d 3e 65 6e 63 20  atic;.  db->enc 
85e0: 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 0a 20  = SQLITE_UTF8;. 
85f0: 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
8600: 3d 20 31 3b 0a 20 20 64 62 2d 3e 66 6c 61 67 73  = 1;.  db->flags
8610: 20 7c 3d 20 53 51 4c 49 54 45 5f 53 68 6f 72 74   |= SQLITE_Short
8620: 43 6f 6c 4e 61 6d 65 73 3b 0a 20 20 73 71 6c 69  ColNames;.  sqli
8630: 74 65 33 48 61 73 68 49 6e 69 74 28 26 64 62 2d  te3HashInit(&db-
8640: 3e 61 46 75 6e 63 2c 20 53 51 4c 49 54 45 5f 48  >aFunc, SQLITE_H
8650: 41 53 48 5f 53 54 52 49 4e 47 2c 20 30 29 3b 0a  ASH_STRING, 0);.
8660: 20 20 73 71 6c 69 74 65 33 48 61 73 68 49 6e 69    sqlite3HashIni
8670: 74 28 26 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 2c  t(&db->aCollSeq,
8680: 20 53 51 4c 49 54 45 5f 48 41 53 48 5f 53 54 52   SQLITE_HASH_STR
8690: 49 4e 47 2c 20 30 29 3b 0a 20 20 66 6f 72 28 69  ING, 0);.  for(i
86a0: 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  =0; i<db->nDb; i
86b0: 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  ++){.    sqlite3
86c0: 48 61 73 68 49 6e 69 74 28 26 64 62 2d 3e 61 44  HashInit(&db->aD
86d0: 62 5b 69 5d 2e 74 62 6c 48 61 73 68 2c 20 53 51  b[i].tblHash, SQ
86e0: 4c 49 54 45 5f 48 41 53 48 5f 53 54 52 49 4e 47  LITE_HASH_STRING
86f0: 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 0);.    sqlite
8700: 33 48 61 73 68 49 6e 69 74 28 26 64 62 2d 3e 61  3HashInit(&db->a
8710: 44 62 5b 69 5d 2e 69 64 78 48 61 73 68 2c 20 53  Db[i].idxHash, S
8720: 51 4c 49 54 45 5f 48 41 53 48 5f 53 54 52 49 4e  QLITE_HASH_STRIN
8730: 47 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74  G, 0);.    sqlit
8740: 65 33 48 61 73 68 49 6e 69 74 28 26 64 62 2d 3e  e3HashInit(&db->
8750: 61 44 62 5b 69 5d 2e 74 72 69 67 48 61 73 68 2c  aDb[i].trigHash,
8760: 20 53 51 4c 49 54 45 5f 48 41 53 48 5f 53 54 52   SQLITE_HASH_STR
8770: 49 4e 47 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c  ING, 0);.    sql
8780: 69 74 65 33 48 61 73 68 49 6e 69 74 28 26 64 62  ite3HashInit(&db
8790: 2d 3e 61 44 62 5b 69 5d 2e 61 46 4b 65 79 2c 20  ->aDb[i].aFKey, 
87a0: 53 51 4c 49 54 45 5f 48 41 53 48 5f 53 54 52 49  SQLITE_HASH_STRI
87b0: 4e 47 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 0a 20  NG, 1);.  }.  . 
87c0: 20 2f 2a 20 41 64 64 20 74 68 65 20 64 65 66 61   /* Add the defa
87d0: 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  ult collation se
87e0: 71 75 65 6e 63 65 20 42 49 4e 41 52 59 2e 20 42  quence BINARY. B
87f0: 49 4e 41 52 59 20 77 6f 72 6b 73 20 66 6f 72 20  INARY works for 
8800: 62 6f 74 68 20 55 54 46 2d 38 0a 20 20 2a 2a 20  both UTF-8.  ** 
8810: 61 6e 64 20 55 54 46 2d 31 36 2c 20 73 6f 20 61  and UTF-16, so a
8820: 64 64 20 61 20 76 65 72 73 69 6f 6e 20 66 6f 72  dd a version for
8830: 20 65 61 63 68 20 74 6f 20 61 76 6f 69 64 20 61   each to avoid a
8840: 6e 79 20 75 6e 6e 65 63 65 73 73 61 72 79 0a 20  ny unnecessary. 
8850: 20 2a 2a 20 63 6f 6e 76 65 72 73 69 6f 6e 73 2e   ** conversions.
8860: 20 54 68 65 20 6f 6e 6c 79 20 65 72 72 6f 72 20   The only error 
8870: 74 68 61 74 20 63 61 6e 20 6f 63 63 75 72 20 68  that can occur h
8880: 65 72 65 20 69 73 20 61 20 6d 61 6c 6c 6f 63 28  ere is a malloc(
8890: 29 20 66 61 69 6c 75 72 65 2e 0a 20 20 2a 2f 0a  ) failure..  */.
88a0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 63 72    if( sqlite3_cr
88b0: 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64  eate_collation(d
88c0: 62 2c 20 22 42 49 4e 41 52 59 22 2c 20 53 51 4c  b, "BINARY", SQL
88d0: 49 54 45 5f 55 54 46 38 2c 20 30 2c 62 69 6e 43  ITE_UTF8, 0,binC
88e0: 6f 6c 6c 46 75 6e 63 29 20 7c 7c 0a 20 20 20 20  ollFunc) ||.    
88f0: 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65    sqlite3_create
8900: 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 22  _collation(db, "
8910: 42 49 4e 41 52 59 22 2c 20 53 51 4c 49 54 45 5f  BINARY", SQLITE_
8920: 55 54 46 31 36 2c 20 30 2c 62 69 6e 43 6f 6c 6c  UTF16, 0,binColl
8930: 46 75 6e 63 29 20 7c 7c 0a 20 20 20 20 20 20 21  Func) ||.      !
8940: 28 64 62 2d 3e 70 44 66 6c 74 43 6f 6c 6c 20 3d  (db->pDfltColl =
8950: 20 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c   sqlite3FindColl
8960: 53 65 71 28 64 62 2c 20 64 62 2d 3e 65 6e 63 2c  Seq(db, db->enc,
8970: 20 22 42 49 4e 41 52 59 22 2c 20 36 2c 20 30 29   "BINARY", 6, 0)
8980: 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 64 62  ) ){.    rc = db
8990: 2d 3e 65 72 72 43 6f 64 65 3b 0a 20 20 20 20 61  ->errCode;.    a
89a0: 73 73 65 72 74 28 20 72 63 21 3d 53 51 4c 49 54  ssert( rc!=SQLIT
89b0: 45 5f 4f 4b 20 29 3b 0a 20 20 20 20 64 62 2d 3e  E_OK );.    db->
89c0: 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d  magic = SQLITE_M
89d0: 41 47 49 43 5f 43 4c 4f 53 45 44 3b 0a 20 20 20  AGIC_CLOSED;.   
89e0: 20 67 6f 74 6f 20 6f 70 65 6e 64 62 5f 6f 75 74   goto opendb_out
89f0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 41 6c 73 6f  ;.  }..  /* Also
8a00: 20 61 64 64 20 61 20 55 54 46 2d 38 20 63 61 73   add a UTF-8 cas
8a10: 65 2d 69 6e 73 65 6e 73 69 74 69 76 65 20 63 6f  e-insensitive co
8a20: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
8a30: 2e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 63  . */.  sqlite3_c
8a40: 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28  reate_collation(
8a50: 64 62 2c 20 22 4e 4f 43 41 53 45 22 2c 20 53 51  db, "NOCASE", SQ
8a60: 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 20 6e 6f  LITE_UTF8, 0, no
8a70: 63 61 73 65 43 6f 6c 6c 61 74 69 6e 67 46 75 6e  caseCollatingFun
8a80: 63 29 3b 0a 0a 20 20 2f 2a 20 4f 70 65 6e 20 74  c);..  /* Open t
8a90: 68 65 20 62 61 63 6b 65 6e 64 20 64 61 74 61 62  he backend datab
8aa0: 61 73 65 20 64 72 69 76 65 72 20 2a 2f 0a 20 20  ase driver */.  
8ab0: 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
8ac0: 65 46 61 63 74 6f 72 79 28 64 62 2c 20 7a 46 69  eFactory(db, zFi
8ad0: 6c 65 6e 61 6d 65 2c 20 30 2c 20 4d 41 58 5f 50  lename, 0, MAX_P
8ae0: 41 47 45 53 2c 20 26 64 62 2d 3e 61 44 62 5b 30  AGES, &db->aDb[0
8af0: 5d 2e 70 42 74 29 3b 0a 20 20 69 66 28 20 72 63  ].pBt);.  if( rc
8b00: 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
8b10: 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28     sqlite3Error(
8b20: 64 62 2c 20 72 63 2c 20 30 29 3b 0a 20 20 20 20  db, rc, 0);.    
8b30: 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49  db->magic = SQLI
8b40: 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 3b  TE_MAGIC_CLOSED;
8b50: 0a 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e 64 62  .    goto opendb
8b60: 5f 6f 75 74 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e  _out;.  }.  db->
8b70: 61 44 62 5b 30 5d 2e 7a 4e 61 6d 65 20 3d 20 22  aDb[0].zName = "
8b80: 6d 61 69 6e 22 3b 0a 20 20 64 62 2d 3e 61 44 62  main";.  db->aDb
8b90: 5b 31 5d 2e 7a 4e 61 6d 65 20 3d 20 22 74 65 6d  [1].zName = "tem
8ba0: 70 22 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 64 65  p";..  /* The de
8bb0: 66 61 75 6c 74 20 73 61 66 65 74 79 5f 6c 65 76  fault safety_lev
8bc0: 65 6c 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20  el for the main 
8bd0: 64 61 74 61 62 61 73 65 20 69 73 20 27 66 75 6c  database is 'ful
8be0: 6c 27 20 66 6f 72 20 74 68 65 20 74 65 6d 70 0a  l' for the temp.
8bf0: 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 69 74    ** database it
8c00: 20 69 73 20 27 4e 4f 4e 45 27 2e 20 54 68 69 73   is 'NONE'. This
8c10: 20 6d 61 74 63 68 65 73 20 74 68 65 20 70 61 67   matches the pag
8c20: 65 72 20 6c 61 79 65 72 20 64 65 66 61 75 6c 74  er layer default
8c30: 73 2e 20 20 2a 2f 0a 20 20 64 62 2d 3e 61 44 62  s.  */.  db->aDb
8c40: 5b 30 5d 2e 73 61 66 65 74 79 5f 6c 65 76 65 6c  [0].safety_level
8c50: 20 3d 20 33 3b 0a 20 20 64 62 2d 3e 61 44 62 5b   = 3;.  db->aDb[
8c60: 31 5d 2e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20  1].safety_level 
8c70: 3d 20 31 3b 0a 0a 20 20 2f 2a 20 52 65 67 69 73  = 1;..  /* Regis
8c80: 74 65 72 20 61 6c 6c 20 62 75 69 6c 74 2d 69 6e  ter all built-in
8c90: 20 66 75 6e 63 74 69 6f 6e 73 2c 20 62 75 74 20   functions, but 
8ca0: 64 6f 20 6e 6f 74 20 61 74 74 65 6d 70 74 20 74  do not attempt t
8cb0: 6f 20 72 65 61 64 20 74 68 65 0a 20 20 2a 2a 20  o read the.  ** 
8cc0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
8cd0: 79 65 74 2e 20 54 68 69 73 20 69 73 20 64 65 6c  yet. This is del
8ce0: 61 79 65 64 20 75 6e 74 69 6c 20 74 68 65 20 66  ayed until the f
8cf0: 69 72 73 74 20 74 69 6d 65 20 74 68 65 20 64 61  irst time the da
8d00: 74 61 62 61 73 65 0a 20 20 2a 2a 20 69 73 20 61  tabase.  ** is a
8d10: 63 63 65 73 73 65 64 2e 0a 20 20 2a 2f 0a 20 20  ccessed..  */.  
8d20: 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 42  sqlite3RegisterB
8d30: 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28  uiltinFunctions(
8d40: 64 62 29 3b 0a 20 20 73 71 6c 69 74 65 33 45 72  db);.  sqlite3Er
8d50: 72 6f 72 28 64 62 2c 20 53 51 4c 49 54 45 5f 4f  ror(db, SQLITE_O
8d60: 4b 2c 20 30 29 3b 0a 20 20 64 62 2d 3e 6d 61 67  K, 0);.  db->mag
8d70: 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49  ic = SQLITE_MAGI
8d80: 43 5f 4f 50 45 4e 3b 0a 0a 6f 70 65 6e 64 62 5f  C_OPEN;..opendb_
8d90: 6f 75 74 3a 0a 20 20 69 66 28 20 73 71 6c 69 74  out:.  if( sqlit
8da0: 65 33 5f 65 72 72 63 6f 64 65 28 64 62 29 3d 3d  e3_errcode(db)==
8db0: 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 73 71 6c  SQLITE_OK && sql
8dc0: 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c  ite3_malloc_fail
8dd0: 65 64 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ed ){.    sqlite
8de0: 33 45 72 72 6f 72 28 64 62 2c 20 53 51 4c 49 54  3Error(db, SQLIT
8df0: 45 5f 4e 4f 4d 45 4d 2c 20 30 29 3b 0a 20 20 7d  E_NOMEM, 0);.  }
8e00: 0a 20 20 2a 70 70 44 62 20 3d 20 64 62 3b 0a 20  .  *ppDb = db;. 
8e10: 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f   return sqlite3_
8e20: 65 72 72 63 6f 64 65 28 64 62 29 3b 0a 7d 0a 0a  errcode(db);.}..
8e30: 2f 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77  /*.** Open a new
8e40: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
8e50: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
8e60: 5f 6f 70 65 6e 28 0a 20 20 63 6f 6e 73 74 20 63  _open(.  const c
8e70: 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20  har *zFilename, 
8e80: 0a 20 20 73 71 6c 69 74 65 33 20 2a 2a 70 70 44  .  sqlite3 **ppD
8e90: 62 20 0a 29 7b 0a 20 20 72 65 74 75 72 6e 20 6f  b .){.  return o
8ea0: 70 65 6e 44 61 74 61 62 61 73 65 28 7a 46 69 6c  penDatabase(zFil
8eb0: 65 6e 61 6d 65 2c 20 70 70 44 62 29 3b 0a 7d 0a  ename, ppDb);.}.
8ec0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
8ed0: 4f 4d 49 54 5f 55 54 46 31 36 0a 2f 2a 0a 2a 2a  OMIT_UTF16./*.**
8ee0: 20 4f 70 65 6e 20 61 20 6e 65 77 20 64 61 74 61   Open a new data
8ef0: 62 61 73 65 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a  base handle..*/.
8f00: 69 6e 74 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e  int sqlite3_open
8f10: 31 36 28 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64  16(.  const void
8f20: 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20 0a 20 20   *zFilename, .  
8f30: 73 71 6c 69 74 65 33 20 2a 2a 70 70 44 62 0a 29  sqlite3 **ppDb.)
8f40: 7b 0a 20 20 63 68 61 72 20 63 6f 6e 73 74 20 2a  {.  char const *
8f50: 7a 46 69 6c 65 6e 61 6d 65 38 3b 20 20 20 2f 2a  zFilename8;   /*
8f60: 20 7a 46 69 6c 65 6e 61 6d 65 20 65 6e 63 6f 64   zFilename encod
8f70: 65 64 20 69 6e 20 55 54 46 2d 38 20 69 6e 73 74  ed in UTF-8 inst
8f80: 65 61 64 20 6f 66 20 55 54 46 2d 31 36 20 2a 2f  ead of UTF-16 */
8f90: 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49  .  int rc = SQLI
8fa0: 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 73 71 6c 69  TE_NOMEM;.  sqli
8fb0: 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 3b  te3_value *pVal;
8fc0: 0a 0a 20 20 61 73 73 65 72 74 28 20 70 70 44 62  ..  assert( ppDb
8fd0: 20 29 3b 0a 20 20 2a 70 70 44 62 20 3d 20 30 3b   );.  *ppDb = 0;
8fe0: 0a 20 20 70 56 61 6c 20 3d 20 73 71 6c 69 74 65  .  pVal = sqlite
8ff0: 33 56 61 6c 75 65 4e 65 77 28 29 3b 0a 20 20 73  3ValueNew();.  s
9000: 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74  qlite3ValueSetSt
9010: 72 28 70 56 61 6c 2c 20 2d 31 2c 20 7a 46 69 6c  r(pVal, -1, zFil
9020: 65 6e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55 54  ename, SQLITE_UT
9030: 46 31 36 4e 41 54 49 56 45 2c 20 53 51 4c 49 54  F16NATIVE, SQLIT
9040: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 7a 46 69  E_STATIC);.  zFi
9050: 6c 65 6e 61 6d 65 38 20 3d 20 73 71 6c 69 74 65  lename8 = sqlite
9060: 33 56 61 6c 75 65 54 65 78 74 28 70 56 61 6c 2c  3ValueText(pVal,
9070: 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20   SQLITE_UTF8);. 
9080: 20 69 66 28 20 7a 46 69 6c 65 6e 61 6d 65 38 20   if( zFilename8 
9090: 29 7b 0a 20 20 20 20 72 63 20 3d 20 6f 70 65 6e  ){.    rc = open
90a0: 44 61 74 61 62 61 73 65 28 7a 46 69 6c 65 6e 61  Database(zFilena
90b0: 6d 65 38 2c 20 70 70 44 62 29 3b 0a 20 20 20 20  me8, ppDb);.    
90c0: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
90d0: 4b 20 26 26 20 2a 70 70 44 62 20 29 7b 0a 20 20  K && *ppDb ){.  
90e0: 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63      sqlite3_exec
90f0: 28 2a 70 70 44 62 2c 20 22 50 52 41 47 4d 41 20  (*ppDb, "PRAGMA 
9100: 65 6e 63 6f 64 69 6e 67 20 3d 20 27 55 54 46 2d  encoding = 'UTF-
9110: 31 36 27 22 2c 20 30 2c 20 30 2c 20 30 29 3b 0a  16'", 0, 0, 0);.
9120: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
9130: 70 56 61 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69  pVal ){.    sqli
9140: 74 65 33 56 61 6c 75 65 46 72 65 65 28 70 56 61  te3ValueFree(pVa
9150: 6c 29 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72  l);.  }..  retur
9160: 6e 20 72 63 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  n rc;.}.#endif /
9170: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  * SQLITE_OMIT_UT
9180: 46 31 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  F16 */../*.** Th
9190: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 6f 75 74  e following rout
91a0: 69 6e 65 20 64 65 73 74 72 6f 79 73 20 61 20 76  ine destroys a v
91b0: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 74  irtual machine t
91c0: 68 61 74 20 69 73 20 63 72 65 61 74 65 64 20 62  hat is created b
91d0: 79 0a 2a 2a 20 74 68 65 20 73 71 6c 69 74 65 33  y.** the sqlite3
91e0: 5f 63 6f 6d 70 69 6c 65 28 29 20 72 6f 75 74 69  _compile() routi
91f0: 6e 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20  ne. The integer 
9200: 72 65 74 75 72 6e 65 64 20 69 73 20 61 6e 20 53  returned is an S
9210: 51 4c 49 54 45 5f 0a 2a 2a 20 73 75 63 63 65 73  QLITE_.** succes
9220: 73 2f 66 61 69 6c 75 72 65 20 63 6f 64 65 20 74  s/failure code t
9230: 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68  hat describes th
9240: 65 20 72 65 73 75 6c 74 20 6f 66 20 65 78 65 63  e result of exec
9250: 75 74 69 6e 67 20 74 68 65 20 76 69 72 74 75 61  uting the virtua
9260: 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65 2e 0a 2a 2a  l.** machine..**
9270: 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65  .** This routine
9280: 20 73 65 74 73 20 74 68 65 20 65 72 72 6f 72 20   sets the error 
9290: 63 6f 64 65 20 61 6e 64 20 73 74 72 69 6e 67 20  code and string 
92a0: 72 65 74 75 72 6e 65 64 20 62 79 0a 2a 2a 20 73  returned by.** s
92b0: 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28 29  qlite3_errcode()
92c0: 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67  , sqlite3_errmsg
92d0: 28 29 20 61 6e 64 20 73 71 6c 69 74 65 33 5f 65  () and sqlite3_e
92e0: 72 72 6d 73 67 31 36 28 29 2e 0a 2a 2f 0a 69 6e  rrmsg16()..*/.in
92f0: 74 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69  t sqlite3_finali
9300: 7a 65 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  ze(sqlite3_stmt 
9310: 2a 70 53 74 6d 74 29 7b 0a 20 20 69 6e 74 20 72  *pStmt){.  int r
9320: 63 3b 0a 20 20 69 66 28 20 70 53 74 6d 74 3d 3d  c;.  if( pStmt==
9330: 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  0 ){.    rc = SQ
9340: 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 65 6c 73 65  LITE_OK;.  }else
9350: 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
9360: 65 33 56 64 62 65 46 69 6e 61 6c 69 7a 65 28 28  e3VdbeFinalize((
9370: 56 64 62 65 2a 29 70 53 74 6d 74 29 3b 0a 20 20  Vdbe*)pStmt);.  
9380: 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d  }.  return rc;.}
9390: 0a 0a 2f 2a 0a 2a 2a 20 54 65 72 6d 69 6e 61 74  ../*.** Terminat
93a0: 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 65 78  e the current ex
93b0: 65 63 75 74 69 6f 6e 20 6f 66 20 61 6e 20 53 51  ecution of an SQ
93c0: 4c 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20  L statement and 
93d0: 72 65 73 65 74 20 69 74 0a 2a 2a 20 62 61 63 6b  reset it.** back
93e0: 20 74 6f 20 69 74 73 20 73 74 61 72 74 69 6e 67   to its starting
93f0: 20 73 74 61 74 65 20 73 6f 20 74 68 61 74 20 69   state so that i
9400: 74 20 63 61 6e 20 62 65 20 72 65 75 73 65 64 2e  t can be reused.
9410: 20 41 20 73 75 63 63 65 73 73 20 63 6f 64 65 20   A success code 
9420: 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 70 72 69 6f  from.** the prio
9430: 72 20 65 78 65 63 75 74 69 6f 6e 20 69 73 20 72  r execution is r
9440: 65 74 75 72 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  eturned..**.** T
9450: 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73  his routine sets
9460: 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20   the error code 
9470: 61 6e 64 20 73 74 72 69 6e 67 20 72 65 74 75 72  and string retur
9480: 6e 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65  ned by.** sqlite
9490: 33 5f 65 72 72 63 6f 64 65 28 29 2c 20 73 71 6c  3_errcode(), sql
94a0: 69 74 65 33 5f 65 72 72 6d 73 67 28 29 20 61 6e  ite3_errmsg() an
94b0: 64 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67  d sqlite3_errmsg
94c0: 31 36 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  16()..*/.int sql
94d0: 69 74 65 33 5f 72 65 73 65 74 28 73 71 6c 69 74  ite3_reset(sqlit
94e0: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 29 7b  e3_stmt *pStmt){
94f0: 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 66 28  .  int rc;.  if(
9500: 20 70 53 74 6d 74 3d 3d 30 20 29 7b 0a 20 20 20   pStmt==0 ){.   
9510: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
9520: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63  .  }else{.    rc
9530: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65   = sqlite3VdbeRe
9540: 73 65 74 28 28 56 64 62 65 2a 29 70 53 74 6d 74  set((Vdbe*)pStmt
9550: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
9560: 62 65 4d 61 6b 65 52 65 61 64 79 28 28 56 64 62  beMakeReady((Vdb
9570: 65 2a 29 70 53 74 6d 74 2c 20 2d 31 2c 20 30 2c  e*)pStmt, -1, 0,
9580: 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 20   0, 0, 0);.  }. 
9590: 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f   return rc;.}../
95a0: 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 61 20  *.** Register a 
95b0: 6e 65 77 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  new collation se
95c0: 71 75 65 6e 63 65 20 77 69 74 68 20 74 68 65 20  quence with the 
95d0: 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20  database handle 
95e0: 64 62 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  db..*/.int sqlit
95f0: 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74  e3_create_collat
9600: 69 6f 6e 28 0a 20 20 73 71 6c 69 74 65 33 2a 20  ion(.  sqlite3* 
9610: 64 62 2c 20 0a 20 20 63 6f 6e 73 74 20 63 68 61  db, .  const cha
9620: 72 20 2a 7a 4e 61 6d 65 2c 20 0a 20 20 69 6e 74  r *zName, .  int
9630: 20 65 6e 63 2c 20 0a 20 20 76 6f 69 64 2a 20 70   enc, .  void* p
9640: 43 74 78 2c 0a 20 20 69 6e 74 28 2a 78 43 6f 6d  Ctx,.  int(*xCom
9650: 70 61 72 65 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  pare)(void*,int,
9660: 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 69 6e 74 2c  const void*,int,
9670: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 0a 29 7b 0a  const void*).){.
9680: 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c    CollSeq *pColl
9690: 3b 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c  ;.  int rc = SQL
96a0: 49 54 45 5f 4f 4b 3b 0a 20 20 0a 20 20 69 66 28  ITE_OK;.  .  if(
96b0: 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
96c0: 65 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 72  eck(db) ){.    r
96d0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53  eturn SQLITE_MIS
96e0: 55 53 45 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49  USE;.  }..  /* I
96f0: 66 20 53 51 4c 49 54 45 5f 55 54 46 31 36 20 69  f SQLITE_UTF16 i
9700: 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74  s specified as t
9710: 68 65 20 65 6e 63 6f 64 69 6e 67 20 74 79 70 65  he encoding type
9720: 2c 20 74 72 61 6e 73 66 6f 72 6d 20 74 68 69 73  , transform this
9730: 0a 20 20 2a 2a 20 74 6f 20 6f 6e 65 20 6f 66 20  .  ** to one of 
9740: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 6f  SQLITE_UTF16LE o
9750: 72 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  r SQLITE_UTF16BE
9760: 20 75 73 69 6e 67 20 74 68 65 0a 20 20 2a 2a 20   using the.  ** 
9770: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
9780: 56 45 20 6d 61 63 72 6f 2e 20 53 51 4c 49 54 45  VE macro. SQLITE
9790: 5f 55 54 46 31 36 20 69 73 20 6e 6f 74 20 75 73  _UTF16 is not us
97a0: 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 0a 20  ed internally.. 
97b0: 20 2a 2f 0a 20 20 69 66 28 20 65 6e 63 3d 3d 53   */.  if( enc==S
97c0: 51 4c 49 54 45 5f 55 54 46 31 36 20 29 7b 0a 20  QLITE_UTF16 ){. 
97d0: 20 20 20 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f     enc = SQLITE_
97e0: 55 54 46 31 36 4e 41 54 49 56 45 3b 0a 20 20 7d  UTF16NATIVE;.  }
97f0: 0a 0a 20 20 69 66 28 20 65 6e 63 21 3d 53 51 4c  ..  if( enc!=SQL
9800: 49 54 45 5f 55 54 46 38 20 26 26 20 65 6e 63 21  ITE_UTF8 && enc!
9810: 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20  =SQLITE_UTF16LE 
9820: 26 26 20 65 6e 63 21 3d 53 51 4c 49 54 45 5f 55  && enc!=SQLITE_U
9830: 54 46 31 36 42 45 20 29 7b 0a 20 20 20 20 73 71  TF16BE ){.    sq
9840: 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20 53  lite3Error(db, S
9850: 51 4c 49 54 45 5f 45 52 52 4f 52 2c 20 0a 20 20  QLITE_ERROR, .  
9860: 20 20 20 20 20 20 22 50 61 72 61 6d 20 33 20 74        "Param 3 t
9870: 6f 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  o sqlite3_create
9880: 5f 63 6f 6c 6c 61 74 69 6f 6e 28 29 20 6d 75 73  _collation() mus
9890: 74 20 62 65 20 6f 6e 65 20 6f 66 20 22 0a 20 20  t be one of ".  
98a0: 20 20 20 20 20 20 22 53 51 4c 49 54 45 5f 55 54        "SQLITE_UT
98b0: 46 38 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36  F8, SQLITE_UTF16
98c0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  , SQLITE_UTF16LE
98d0: 20 6f 72 20 53 51 4c 49 54 45 5f 55 54 46 31 36   or SQLITE_UTF16
98e0: 42 45 22 0a 20 20 20 20 29 3b 0a 20 20 20 20 72  BE".    );.    r
98f0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52  eturn SQLITE_ERR
9900: 4f 52 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 68  OR;.  }..  /* Ch
9910: 65 63 6b 20 69 66 20 74 68 69 73 20 63 61 6c 6c  eck if this call
9920: 20 69 73 20 72 65 6d 6f 76 69 6e 67 20 6f 72 20   is removing or 
9930: 72 65 70 6c 61 63 69 6e 67 20 61 6e 20 65 78 69  replacing an exi
9940: 73 74 69 6e 67 20 63 6f 6c 6c 61 74 69 6f 6e 20  sting collation 
9950: 0a 20 20 2a 2a 20 73 65 71 75 65 6e 63 65 2e 20  .  ** sequence. 
9960: 49 66 20 73 6f 2c 20 61 6e 64 20 74 68 65 72 65  If so, and there
9970: 20 61 72 65 20 61 63 74 69 76 65 20 56 4d 73 2c   are active VMs,
9980: 20 72 65 74 75 72 6e 20 62 75 73 79 2e 20 49 66   return busy. If
9990: 20 74 68 65 72 65 0a 20 20 2a 2a 20 61 72 65 20   there.  ** are 
99a0: 6e 6f 20 61 63 74 69 76 65 20 56 4d 73 2c 20 69  no active VMs, i
99b0: 6e 76 61 6c 69 64 61 74 65 20 61 6e 79 20 70 72  nvalidate any pr
99c0: 65 2d 63 6f 6d 70 69 6c 65 64 20 73 74 61 74 65  e-compiled state
99d0: 6d 65 6e 74 73 2e 0a 20 20 2a 2f 0a 20 20 70 43  ments..  */.  pC
99e0: 6f 6c 6c 20 3d 20 73 71 6c 69 74 65 33 46 69 6e  oll = sqlite3Fin
99f0: 64 43 6f 6c 6c 53 65 71 28 64 62 2c 20 28 75 38  dCollSeq(db, (u8
9a00: 29 65 6e 63 2c 20 7a 4e 61 6d 65 2c 20 73 74 72  )enc, zName, str
9a10: 6c 65 6e 28 7a 4e 61 6d 65 29 2c 20 30 29 3b 0a  len(zName), 0);.
9a20: 20 20 69 66 28 20 70 43 6f 6c 6c 20 26 26 20 70    if( pColl && p
9a30: 43 6f 6c 6c 2d 3e 78 43 6d 70 20 29 7b 0a 20 20  Coll->xCmp ){.  
9a40: 20 20 69 66 28 20 64 62 2d 3e 61 63 74 69 76 65    if( db->active
9a50: 56 64 62 65 43 6e 74 20 29 7b 0a 20 20 20 20 20  VdbeCnt ){.     
9a60: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62   sqlite3Error(db
9a70: 2c 20 53 51 4c 49 54 45 5f 42 55 53 59 2c 20 0a  , SQLITE_BUSY, .
9a80: 20 20 20 20 20 20 20 20 22 55 6e 61 62 6c 65 20          "Unable 
9a90: 74 6f 20 64 65 6c 65 74 65 2f 6d 6f 64 69 66 79  to delete/modify
9aa0: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
9ab0: 6e 63 65 20 64 75 65 20 74 6f 20 61 63 74 69 76  nce due to activ
9ac0: 65 20 73 74 61 74 65 6d 65 6e 74 73 22 29 3b 0a  e statements");.
9ad0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
9ae0: 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 0a  ITE_BUSY;.    }.
9af0: 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72      sqlite3Expir
9b00: 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
9b10: 6e 74 73 28 64 62 29 3b 0a 20 20 7d 0a 0a 20 20  nts(db);.  }..  
9b20: 70 43 6f 6c 6c 20 3d 20 73 71 6c 69 74 65 33 46  pColl = sqlite3F
9b30: 69 6e 64 43 6f 6c 6c 53 65 71 28 64 62 2c 20 28  indCollSeq(db, (
9b40: 75 38 29 65 6e 63 2c 20 7a 4e 61 6d 65 2c 20 73  u8)enc, zName, s
9b50: 74 72 6c 65 6e 28 7a 4e 61 6d 65 29 2c 20 31 29  trlen(zName), 1)
9b60: 3b 0a 20 20 69 66 28 20 30 3d 3d 70 43 6f 6c 6c  ;.  if( 0==pColl
9b70: 20 29 7b 0a 20 20 20 72 63 20 3d 20 53 51 4c 49   ){.   rc = SQLI
9b80: 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d 65 6c 73  TE_NOMEM;.  }els
9b90: 65 7b 0a 20 20 20 20 70 43 6f 6c 6c 2d 3e 78 43  e{.    pColl->xC
9ba0: 6d 70 20 3d 20 78 43 6f 6d 70 61 72 65 3b 0a 20  mp = xCompare;. 
9bb0: 20 20 20 70 43 6f 6c 6c 2d 3e 70 55 73 65 72 20     pColl->pUser 
9bc0: 3d 20 70 43 74 78 3b 0a 20 20 20 20 70 43 6f 6c  = pCtx;.    pCol
9bd0: 6c 2d 3e 65 6e 63 20 3d 20 65 6e 63 3b 0a 20 20  l->enc = enc;.  
9be0: 7d 0a 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72  }.  sqlite3Error
9bf0: 28 64 62 2c 20 72 63 2c 20 30 29 3b 0a 20 20 72  (db, rc, 0);.  r
9c00: 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 23 69 66  eturn rc;.}..#if
9c10: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
9c20: 5f 55 54 46 31 36 0a 2f 2a 0a 2a 2a 20 52 65 67  _UTF16./*.** Reg
9c30: 69 73 74 65 72 20 61 20 6e 65 77 20 63 6f 6c 6c  ister a new coll
9c40: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77  ation sequence w
9c50: 69 74 68 20 74 68 65 20 64 61 74 61 62 61 73 65  ith the database
9c60: 20 68 61 6e 64 6c 65 20 64 62 2e 0a 2a 2f 0a 69   handle db..*/.i
9c70: 6e 74 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  nt sqlite3_creat
9c80: 65 5f 63 6f 6c 6c 61 74 69 6f 6e 31 36 28 0a 20  e_collation16(. 
9c90: 20 73 71 6c 69 74 65 33 2a 20 64 62 2c 20 0a 20   sqlite3* db, . 
9ca0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61   const char *zNa
9cb0: 6d 65 2c 20 0a 20 20 69 6e 74 20 65 6e 63 2c 20  me, .  int enc, 
9cc0: 0a 20 20 76 6f 69 64 2a 20 70 43 74 78 2c 0a 20  .  void* pCtx,. 
9cd0: 20 69 6e 74 28 2a 78 43 6f 6d 70 61 72 65 29 28   int(*xCompare)(
9ce0: 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
9cf0: 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
9d00: 76 6f 69 64 2a 29 0a 29 7b 0a 20 20 63 68 61 72  void*).){.  char
9d10: 20 63 6f 6e 73 74 20 2a 7a 4e 61 6d 65 38 3b 0a   const *zName8;.
9d20: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
9d30: 2a 70 54 6d 70 3b 0a 20 20 69 66 28 20 73 71 6c  *pTmp;.  if( sql
9d40: 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 28  ite3SafetyCheck(
9d50: 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72  db) ){.    retur
9d60: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b  n SQLITE_MISUSE;
9d70: 0a 20 20 7d 0a 20 20 70 54 6d 70 20 3d 20 73 71  .  }.  pTmp = sq
9d80: 6c 69 74 65 33 47 65 74 54 72 61 6e 73 69 65 6e  lite3GetTransien
9d90: 74 56 61 6c 75 65 28 64 62 29 3b 0a 20 20 73 71  tValue(db);.  sq
9da0: 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72  lite3ValueSetStr
9db0: 28 70 54 6d 70 2c 20 2d 31 2c 20 7a 4e 61 6d 65  (pTmp, -1, zName
9dc0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  , SQLITE_UTF16NA
9dd0: 54 49 56 45 2c 20 53 51 4c 49 54 45 5f 53 54 41  TIVE, SQLITE_STA
9de0: 54 49 43 29 3b 0a 20 20 7a 4e 61 6d 65 38 20 3d  TIC);.  zName8 =
9df0: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78   sqlite3ValueTex
9e00: 74 28 70 54 6d 70 2c 20 53 51 4c 49 54 45 5f 55  t(pTmp, SQLITE_U
9e10: 54 46 38 29 3b 0a 20 20 72 65 74 75 72 6e 20 73  TF8);.  return s
9e20: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f  qlite3_create_co
9e30: 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 7a 4e 61 6d  llation(db, zNam
9e40: 65 38 2c 20 65 6e 63 2c 20 70 43 74 78 2c 20 78  e8, enc, pCtx, x
9e50: 43 6f 6d 70 61 72 65 29 3b 0a 7d 0a 23 65 6e 64  Compare);.}.#end
9e60: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
9e70: 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 2f 2a 0a 2a  T_UTF16 */../*.*
9e80: 2a 20 52 65 67 69 73 74 65 72 20 61 20 63 6f 6c  * Register a col
9e90: 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
9ea0: 66 61 63 74 6f 72 79 20 63 61 6c 6c 62 61 63 6b  factory callback
9eb0: 20 77 69 74 68 20 74 68 65 20 64 61 74 61 62 61   with the databa
9ec0: 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 64 62 2e  se handle.** db.
9ed0: 20 52 65 70 6c 61 63 65 20 61 6e 79 20 70 72 65   Replace any pre
9ee0: 76 69 6f 75 73 6c 79 20 69 6e 73 74 61 6c 6c 65  viously installe
9ef0: 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  d collation sequ
9f00: 65 6e 63 65 20 66 61 63 74 6f 72 79 2e 0a 2a 2f  ence factory..*/
9f10: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 6f 6c  .int sqlite3_col
9f20: 6c 61 74 69 6f 6e 5f 6e 65 65 64 65 64 28 0a 20  lation_needed(. 
9f30: 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 0a 20   sqlite3 *db, . 
9f40: 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64   void *pCollNeed
9f50: 65 64 41 72 67 2c 20 0a 20 20 76 6f 69 64 28 2a  edArg, .  void(*
9f60: 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69  xCollNeeded)(voi
9f70: 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  d*,sqlite3*,int 
9f80: 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 63  eTextRep,const c
9f90: 68 61 72 2a 29 0a 29 7b 0a 20 20 69 66 28 20 73  har*).){.  if( s
9fa0: 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
9fb0: 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74  k(db) ){.    ret
9fc0: 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  urn SQLITE_MISUS
9fd0: 45 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 78 43 6f  E;.  }.  db->xCo
9fe0: 6c 6c 4e 65 65 64 65 64 20 3d 20 78 43 6f 6c 6c  llNeeded = xColl
9ff0: 4e 65 65 64 65 64 3b 0a 20 20 64 62 2d 3e 78 43  Needed;.  db->xC
a000: 6f 6c 6c 4e 65 65 64 65 64 31 36 20 3d 20 30 3b  ollNeeded16 = 0;
a010: 0a 20 20 64 62 2d 3e 70 43 6f 6c 6c 4e 65 65 64  .  db->pCollNeed
a020: 65 64 41 72 67 20 3d 20 70 43 6f 6c 6c 4e 65 65  edArg = pCollNee
a030: 64 65 64 41 72 67 3b 0a 20 20 72 65 74 75 72 6e  dedArg;.  return
a040: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 23   SQLITE_OK;.}..#
a050: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
a060: 49 54 5f 55 54 46 31 36 0a 2f 2a 0a 2a 2a 20 52  IT_UTF16./*.** R
a070: 65 67 69 73 74 65 72 20 61 20 63 6f 6c 6c 61 74  egister a collat
a080: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 61 63  ion sequence fac
a090: 74 6f 72 79 20 63 61 6c 6c 62 61 63 6b 20 77 69  tory callback wi
a0a0: 74 68 20 74 68 65 20 64 61 74 61 62 61 73 65 20  th the database 
a0b0: 68 61 6e 64 6c 65 0a 2a 2a 20 64 62 2e 20 52 65  handle.** db. Re
a0c0: 70 6c 61 63 65 20 61 6e 79 20 70 72 65 76 69 6f  place any previo
a0d0: 75 73 6c 79 20 69 6e 73 74 61 6c 6c 65 64 20 63  usly installed c
a0e0: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
a0f0: 65 20 66 61 63 74 6f 72 79 2e 0a 2a 2f 0a 69 6e  e factory..*/.in
a100: 74 20 73 71 6c 69 74 65 33 5f 63 6f 6c 6c 61 74  t sqlite3_collat
a110: 69 6f 6e 5f 6e 65 65 64 65 64 31 36 28 0a 20 20  ion_needed16(.  
a120: 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 0a 20 20  sqlite3 *db, .  
a130: 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65  void *pCollNeede
a140: 64 41 72 67 2c 20 0a 20 20 76 6f 69 64 28 2a 78  dArg, .  void(*x
a150: 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28 76 6f  CollNeeded16)(vo
a160: 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74  id*,sqlite3*,int
a170: 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20   eTextRep,const 
a180: 76 6f 69 64 2a 29 0a 29 7b 0a 20 20 69 66 28 20  void*).){.  if( 
a190: 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
a1a0: 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65  ck(db) ){.    re
a1b0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  turn SQLITE_MISU
a1c0: 53 45 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 78 43  SE;.  }.  db->xC
a1d0: 6f 6c 6c 4e 65 65 64 65 64 20 3d 20 30 3b 0a 20  ollNeeded = 0;. 
a1e0: 20 64 62 2d 3e 78 43 6f 6c 6c 4e 65 65 64 65 64   db->xCollNeeded
a1f0: 31 36 20 3d 20 78 43 6f 6c 6c 4e 65 65 64 65 64  16 = xCollNeeded
a200: 31 36 3b 0a 20 20 64 62 2d 3e 70 43 6f 6c 6c 4e  16;.  db->pCollN
a210: 65 65 64 65 64 41 72 67 20 3d 20 70 43 6f 6c 6c  eededArg = pColl
a220: 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 72 65 74  NeededArg;.  ret
a230: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d  urn SQLITE_OK;.}
a240: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
a250: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a  E_OMIT_UTF16 */.