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

Artifact b489aae242a6123b111f125633799e37c0bab2a8:


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 37 32 20 32 30 30 35 2f 30 31  ,v 1.272 2005/01
0280: 2f 31 38 20 31 36 3a 30 32 3a 34 30 20 64 72 68  /18 16:02:40 drh
0290: 20 45 78 70 20 24 0a 2a 2f 0a 23 69 6e 63 6c 75   Exp $.*/.#inclu
02a0: 64 65 20 22 73 71 6c 69 74 65 49 6e 74 2e 68 22  de "sqliteInt.h"
02b0: 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22  .#include "os.h"
02c0: 0a 23 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65  .#include <ctype
02d0: 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .h>../*.** The f
02e0: 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e  ollowing constan
02f0: 74 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20  t value is used 
0300: 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f 42 49  by the SQLITE_BI
0310: 47 45 4e 44 49 41 4e 20 61 6e 64 0a 2a 2a 20 53  GENDIAN and.** S
0320: 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49  QLITE_LITTLEENDI
0330: 41 4e 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 63 6f  AN macros..*/.co
0340: 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f  nst int sqlite3o
0350: 6e 65 20 3d 20 31 3b 0a 0a 2f 2a 0a 2a 2a 20 46  ne = 1;../*.** F
0360: 69 6c 6c 20 74 68 65 20 49 6e 69 74 44 61 74 61  ill the InitData
0370: 20 73 74 72 75 63 74 75 72 65 20 77 69 74 68 20   structure with 
0380: 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an error message
0390: 20 74 68 61 74 20 69 6e 64 69 63 61 74 65 73 0a   that indicates.
03a0: 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61 74 61  ** that the data
03b0: 62 61 73 65 20 69 73 20 63 6f 72 72 75 70 74 2e  base is corrupt.
03c0: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
03d0: 63 6f 72 72 75 70 74 53 63 68 65 6d 61 28 49 6e  corruptSchema(In
03e0: 69 74 44 61 74 61 20 2a 70 44 61 74 61 2c 20 63  itData *pData, c
03f0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 78 74 72  onst char *zExtr
0400: 61 29 7b 0a 20 20 69 66 28 20 21 73 71 6c 69 74  a){.  if( !sqlit
0410: 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65 64  e3_malloc_failed
0420: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53   ){.    sqlite3S
0430: 65 74 53 74 72 69 6e 67 28 70 44 61 74 61 2d 3e  etString(pData->
0440: 70 7a 45 72 72 4d 73 67 2c 20 22 6d 61 6c 66 6f  pzErrMsg, "malfo
0450: 72 6d 65 64 20 64 61 74 61 62 61 73 65 20 73 63  rmed database sc
0460: 68 65 6d 61 22 2c 0a 20 20 20 20 20 20 20 7a 45  hema",.       zE
0470: 78 74 72 61 21 3d 30 20 26 26 20 7a 45 78 74 72  xtra!=0 && zExtr
0480: 61 5b 30 5d 21 3d 30 20 3f 20 22 20 2d 20 22 20  a[0]!=0 ? " - " 
0490: 3a 20 28 63 68 61 72 2a 29 30 2c 20 7a 45 78 74  : (char*)0, zExt
04a0: 72 61 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a 20  ra, (char*)0);. 
04b0: 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73   }.}../*.** This
04c0: 20 69 73 20 74 68 65 20 63 61 6c 6c 62 61 63 6b   is the callback
04d0: 20 72 6f 75 74 69 6e 65 20 66 6f 72 20 74 68 65   routine for the
04e0: 20 63 6f 64 65 20 74 68 61 74 20 69 6e 69 74 69   code that initi
04f0: 61 6c 69 7a 65 73 20 74 68 65 0a 2a 2a 20 64 61  alizes the.** da
0500: 74 61 62 61 73 65 2e 20 20 53 65 65 20 73 71 6c  tabase.  See sql
0510: 69 74 65 33 49 6e 69 74 28 29 20 62 65 6c 6f 77  ite3Init() below
0520: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
0530: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 20  information..** 
0540: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20  This routine is 
0550: 61 6c 73 6f 20 63 61 6c 6c 65 64 20 66 72 6f 6d  also called from
0560: 20 74 68 65 20 4f 50 5f 50 61 72 73 65 53 63 68   the OP_ParseSch
0570: 65 6d 61 20 6f 70 63 6f 64 65 20 6f 66 20 74 68  ema opcode of th
0580: 65 20 56 44 42 45 2e 0a 2a 2a 0a 2a 2a 20 45 61  e VDBE..**.** Ea
0590: 63 68 20 63 61 6c 6c 62 61 63 6b 20 63 6f 6e 74  ch callback cont
05a0: 61 69 6e 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69  ains the followi
05b0: 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 3a 0a  ng information:.
05c0: 2a 2a 0a 2a 2a 20 20 20 20 20 61 72 67 76 5b 30  **.**     argv[0
05d0: 5d 20 3d 20 6e 61 6d 65 20 6f 66 20 74 68 69 6e  ] = name of thin
05e0: 67 20 62 65 69 6e 67 20 63 72 65 61 74 65 64 0a  g being created.
05f0: 2a 2a 20 20 20 20 20 61 72 67 76 5b 31 5d 20 3d  **     argv[1] =
0600: 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65   root page numbe
0610: 72 20 66 6f 72 20 74 61 62 6c 65 20 6f 72 20 69  r for table or i
0620: 6e 64 65 78 2e 20 20 4e 55 4c 4c 20 66 6f 72 20  ndex.  NULL for 
0630: 74 72 69 67 67 65 72 20 6f 72 20 76 69 65 77 2e  trigger or view.
0640: 0a 2a 2a 20 20 20 20 20 61 72 67 76 5b 32 5d 20  .**     argv[2] 
0650: 3d 20 53 51 4c 20 74 65 78 74 20 66 6f 72 20 74  = SQL text for t
0660: 68 65 20 43 52 45 41 54 45 20 73 74 61 74 65 6d  he CREATE statem
0670: 65 6e 74 2e 0a 2a 2a 20 20 20 20 20 61 72 67 76  ent..**     argv
0680: 5b 33 5d 20 3d 20 22 31 22 20 66 6f 72 20 74 65  [3] = "1" for te
0690: 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 2c 20 22  mporary files, "
06a0: 30 22 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61  0" for main data
06b0: 62 61 73 65 2c 20 22 32 22 20 6f 72 20 6d 6f 72  base, "2" or mor
06c0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
06d0: 20 20 20 66 6f 72 20 61 75 78 69 6c 69 61 72 79     for auxiliary
06e0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 2e   database files.
06f0: 0a 2a 2a 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  .**.*/.int sqlit
0700: 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76  e3InitCallback(v
0710: 6f 69 64 20 2a 70 49 6e 69 74 2c 20 69 6e 74 20  oid *pInit, int 
0720: 61 72 67 63 2c 20 63 68 61 72 20 2a 2a 61 72 67  argc, char **arg
0730: 76 2c 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 4e  v, char **azColN
0740: 61 6d 65 29 7b 0a 20 20 49 6e 69 74 44 61 74 61  ame){.  InitData
0750: 20 2a 70 44 61 74 61 20 3d 20 28 49 6e 69 74 44   *pData = (InitD
0760: 61 74 61 2a 29 70 49 6e 69 74 3b 0a 20 20 73 71  ata*)pInit;.  sq
0770: 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 44 61 74  lite3 *db = pDat
0780: 61 2d 3e 64 62 3b 0a 20 20 69 6e 74 20 69 44 62  a->db;.  int iDb
0790: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 61 72 67  ;..  assert( arg
07a0: 63 3d 3d 34 20 29 3b 0a 20 20 69 66 28 20 61 72  c==4 );.  if( ar
07b0: 67 76 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30  gv==0 ) return 0
07c0: 3b 20 20 20 2f 2a 20 4d 69 67 68 74 20 68 61 70  ;   /* Might hap
07d0: 70 65 6e 20 69 66 20 45 4d 50 54 59 5f 52 45 53  pen if EMPTY_RES
07e0: 55 4c 54 5f 43 41 4c 4c 42 41 43 4b 53 20 61 72  ULT_CALLBACKS ar
07f0: 65 20 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 61 72  e on */.  if( ar
0800: 67 76 5b 31 5d 3d 3d 30 20 7c 7c 20 61 72 67 76  gv[1]==0 || argv
0810: 5b 33 5d 3d 3d 30 20 29 7b 0a 20 20 20 20 63 6f  [3]==0 ){.    co
0820: 72 72 75 70 74 53 63 68 65 6d 61 28 70 44 61 74  rruptSchema(pDat
0830: 61 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  a, 0);.    retur
0840: 6e 20 31 3b 0a 20 20 7d 0a 20 20 69 44 62 20 3d  n 1;.  }.  iDb =
0850: 20 61 74 6f 69 28 61 72 67 76 5b 33 5d 29 3b 0a   atoi(argv[3]);.
0860: 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30    assert( iDb>=0
0870: 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20   && iDb<db->nDb 
0880: 29 3b 0a 20 20 69 66 28 20 61 72 67 76 5b 32 5d  );.  if( argv[2]
0890: 20 26 26 20 61 72 67 76 5b 32 5d 5b 30 5d 20 29   && argv[2][0] )
08a0: 7b 0a 20 20 20 20 2f 2a 20 43 61 6c 6c 20 74 68  {.    /* Call th
08b0: 65 20 70 61 72 73 65 72 20 74 6f 20 70 72 6f 63  e parser to proc
08c0: 65 73 73 20 61 20 43 52 45 41 54 45 20 54 41 42  ess a CREATE TAB
08d0: 4c 45 2c 20 49 4e 44 45 58 20 6f 72 20 56 49 45  LE, INDEX or VIE
08e0: 57 2e 0a 20 20 20 20 2a 2a 20 42 75 74 20 62 65  W..    ** But be
08f0: 63 61 75 73 65 20 64 62 2d 3e 69 6e 69 74 2e 62  cause db->init.b
0900: 75 73 79 20 69 73 20 73 65 74 20 74 6f 20 31 2c  usy is set to 1,
0910: 20 6e 6f 20 56 44 42 45 20 63 6f 64 65 20 69 73   no VDBE code is
0920: 20 67 65 6e 65 72 61 74 65 64 0a 20 20 20 20 2a   generated.    *
0930: 2a 20 6f 72 20 65 78 65 63 75 74 65 64 2e 20 20  * or executed.  
0940: 41 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20 64  All the parser d
0950: 6f 65 73 20 69 73 20 62 75 69 6c 64 20 74 68 65  oes is build the
0960: 20 69 6e 74 65 72 6e 61 6c 20 64 61 74 61 0a 20   internal data. 
0970: 20 20 20 2a 2a 20 73 74 72 75 63 74 75 72 65 73     ** structures
0980: 20 74 68 61 74 20 64 65 73 63 72 69 62 65 20 74   that describe t
0990: 68 65 20 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c  he table, index,
09a0: 20 6f 72 20 76 69 65 77 2e 0a 20 20 20 20 2a 2f   or view..    */
09b0: 0a 20 20 20 20 63 68 61 72 20 2a 7a 45 72 72 3b  .    char *zErr;
09c0: 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a 20 20 20  .    int rc;.   
09d0: 20 61 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69   assert( db->ini
09e0: 74 2e 62 75 73 79 20 29 3b 0a 20 20 20 20 64 62  t.busy );.    db
09f0: 2d 3e 69 6e 69 74 2e 69 44 62 20 3d 20 69 44 62  ->init.iDb = iDb
0a00: 3b 0a 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 6e  ;.    db->init.n
0a10: 65 77 54 6e 75 6d 20 3d 20 61 74 6f 69 28 61 72  ewTnum = atoi(ar
0a20: 67 76 5b 31 5d 29 3b 0a 20 20 20 20 72 63 20 3d  gv[1]);.    rc =
0a30: 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62   sqlite3_exec(db
0a40: 2c 20 61 72 67 76 5b 32 5d 2c 20 30 2c 20 30 2c  , argv[2], 0, 0,
0a50: 20 26 7a 45 72 72 29 3b 0a 20 20 20 20 64 62 2d   &zErr);.    db-
0a60: 3e 69 6e 69 74 2e 69 44 62 20 3d 20 30 3b 0a 20  >init.iDb = 0;. 
0a70: 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b     if( SQLITE_OK
0a80: 21 3d 72 63 20 29 7b 0a 20 20 20 20 20 20 63 6f  !=rc ){.      co
0a90: 72 72 75 70 74 53 63 68 65 6d 61 28 70 44 61 74  rruptSchema(pDat
0aa0: 61 2c 20 7a 45 72 72 29 3b 0a 20 20 20 20 20 20  a, zErr);.      
0ab0: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72  sqlite3_free(zEr
0ac0: 72 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  r);.      return
0ad0: 20 72 63 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c   rc;.    }.  }el
0ae0: 73 65 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68  se{.    /* If th
0af0: 65 20 53 51 4c 20 63 6f 6c 75 6d 6e 20 69 73 20  e SQL column is 
0b00: 62 6c 61 6e 6b 20 69 74 20 6d 65 61 6e 73 20 74  blank it means t
0b10: 68 69 73 20 69 73 20 61 6e 20 69 6e 64 65 78 20  his is an index 
0b20: 74 68 61 74 0a 20 20 20 20 2a 2a 20 77 61 73 20  that.    ** was 
0b30: 63 72 65 61 74 65 64 20 74 6f 20 62 65 20 74 68  created to be th
0b40: 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72  e PRIMARY KEY or
0b50: 20 74 6f 20 66 75 6c 66 69 6c 6c 20 61 20 55 4e   to fulfill a UN
0b60: 49 51 55 45 0a 20 20 20 20 2a 2a 20 63 6f 6e 73  IQUE.    ** cons
0b70: 74 72 61 69 6e 74 20 66 6f 72 20 61 20 43 52 45  traint for a CRE
0b80: 41 54 45 20 54 41 42 4c 45 2e 20 20 54 68 65 20  ATE TABLE.  The 
0b90: 69 6e 64 65 78 20 73 68 6f 75 6c 64 20 68 61 76  index should hav
0ba0: 65 20 61 6c 72 65 61 64 79 0a 20 20 20 20 2a 2a  e already.    **
0bb0: 20 62 65 65 6e 20 63 72 65 61 74 65 64 20 77 68   been created wh
0bc0: 65 6e 20 77 65 20 70 72 6f 63 65 73 73 65 64 20  en we processed 
0bd0: 74 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45  the CREATE TABLE
0be0: 2e 20 20 41 6c 6c 20 77 65 20 68 61 76 65 0a 20  .  All we have. 
0bf0: 20 20 20 2a 2a 20 74 6f 20 64 6f 20 68 65 72 65     ** to do here
0c00: 20 69 73 20 72 65 63 6f 72 64 20 74 68 65 20 72   is record the r
0c10: 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20  oot page number 
0c20: 66 6f 72 20 74 68 61 74 20 69 6e 64 65 78 2e 0a  for that index..
0c30: 20 20 20 20 2a 2f 0a 20 20 20 20 49 6e 64 65 78      */.    Index
0c40: 20 2a 70 49 6e 64 65 78 3b 0a 20 20 20 20 70 49   *pIndex;.    pI
0c50: 6e 64 65 78 20 3d 20 73 71 6c 69 74 65 33 46 69  ndex = sqlite3Fi
0c60: 6e 64 49 6e 64 65 78 28 64 62 2c 20 61 72 67 76  ndIndex(db, argv
0c70: 5b 30 5d 2c 20 64 62 2d 3e 61 44 62 5b 69 44 62  [0], db->aDb[iDb
0c80: 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 69 66  ].zName);.    if
0c90: 28 20 70 49 6e 64 65 78 3d 3d 30 20 7c 7c 20 70  ( pIndex==0 || p
0ca0: 49 6e 64 65 78 2d 3e 74 6e 75 6d 21 3d 30 20 29  Index->tnum!=0 )
0cb0: 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20  {.      /* This 
0cc0: 63 61 6e 20 6f 63 63 75 72 20 69 66 20 74 68 65  can occur if the
0cd0: 72 65 20 65 78 69 73 74 73 20 61 6e 20 69 6e 64  re exists an ind
0ce0: 65 78 20 6f 6e 20 61 20 54 45 4d 50 20 74 61 62  ex on a TEMP tab
0cf0: 6c 65 20 77 68 69 63 68 0a 20 20 20 20 20 20 2a  le which.      *
0d00: 2a 20 68 61 73 20 74 68 65 20 73 61 6d 65 20 6e  * has the same n
0d10: 61 6d 65 20 61 73 20 61 6e 6f 74 68 65 72 20 69  ame as another i
0d20: 6e 64 65 78 20 6f 6e 20 61 20 70 65 72 6d 61 6e  ndex on a perman
0d30: 65 6e 74 20 69 6e 64 65 78 2e 20 20 53 69 6e 63  ent index.  Sinc
0d40: 65 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 70  e.      ** the p
0d50: 65 72 6d 61 6e 65 6e 74 20 74 61 62 6c 65 20 69  ermanent table i
0d60: 73 20 68 69 64 64 65 6e 20 62 79 20 74 68 65 20  s hidden by the 
0d70: 54 45 4d 50 20 74 61 62 6c 65 2c 20 77 65 20 63  TEMP table, we c
0d80: 61 6e 20 61 6c 73 6f 0a 20 20 20 20 20 20 2a 2a  an also.      **
0d90: 20 73 61 66 65 6c 79 20 69 67 6e 6f 72 65 20 74   safely ignore t
0da0: 68 65 20 69 6e 64 65 78 20 6f 6e 20 74 68 65 20  he index on the 
0db0: 70 65 72 6d 61 6e 65 6e 74 20 74 61 62 6c 65 2e  permanent table.
0dc0: 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
0dd0: 2f 2a 20 44 6f 20 4e 6f 74 68 69 6e 67 20 2a 2f  /* Do Nothing */
0de0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
0df0: 20 20 20 70 49 6e 64 65 78 2d 3e 74 6e 75 6d 20     pIndex->tnum 
0e00: 3d 20 61 74 6f 69 28 61 72 67 76 5b 31 5d 29 3b  = atoi(argv[1]);
0e10: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
0e20: 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn 0;.}../*.** 
0e30: 41 74 74 65 6d 70 74 20 74 6f 20 72 65 61 64 20  Attempt to read 
0e40: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
0e50: 65 6d 61 20 61 6e 64 20 69 6e 69 74 69 61 6c 69  ema and initiali
0e60: 7a 65 20 69 6e 74 65 72 6e 61 6c 0a 2a 2a 20 64  ze internal.** d
0e70: 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20 66  ata structures f
0e80: 6f 72 20 61 20 73 69 6e 67 6c 65 20 64 61 74 61  or a single data
0e90: 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65 20  base file.  The 
0ea0: 69 6e 64 65 78 20 6f 66 20 74 68 65 0a 2a 2a 20  index of the.** 
0eb0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73  database file is
0ec0: 20 67 69 76 65 6e 20 62 79 20 69 44 62 2e 20 20   given by iDb.  
0ed0: 69 44 62 3d 3d 30 20 69 73 20 75 73 65 64 20 66  iDb==0 is used f
0ee0: 6f 72 20 74 68 65 20 6d 61 69 6e 0a 2a 2a 20 64  or the main.** d
0ef0: 61 74 61 62 61 73 65 2e 20 20 69 44 62 3d 3d 31  atabase.  iDb==1
0f00: 20 73 68 6f 75 6c 64 20 6e 65 76 65 72 20 62 65   should never be
0f10: 20 75 73 65 64 2e 20 20 69 44 62 3e 3d 32 20 69   used.  iDb>=2 i
0f20: 73 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61 75  s used for.** au
0f30: 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
0f40: 73 2e 20 20 52 65 74 75 72 6e 20 6f 6e 65 20 6f  s.  Return one o
0f50: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 20 65 72  f the SQLITE_ er
0f60: 72 6f 72 20 63 6f 64 65 73 20 74 6f 0a 2a 2a 20  ror codes to.** 
0f70: 69 6e 64 69 63 61 74 65 20 73 75 63 63 65 73 73  indicate success
0f80: 20 6f 72 20 66 61 69 6c 75 72 65 2e 0a 2a 2f 0a   or failure..*/.
0f90: 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74  static int sqlit
0fa0: 65 33 49 6e 69 74 4f 6e 65 28 73 71 6c 69 74 65  e3InitOne(sqlite
0fb0: 33 20 2a 64 62 2c 20 69 6e 74 20 69 44 62 2c 20  3 *db, int iDb, 
0fc0: 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 29  char **pzErrMsg)
0fd0: 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 42 74  {.  int rc;.  Bt
0fe0: 43 75 72 73 6f 72 20 2a 63 75 72 4d 61 69 6e 3b  Cursor *curMain;
0ff0: 0a 20 20 69 6e 74 20 73 69 7a 65 3b 0a 20 20 54  .  int size;.  T
1000: 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 63 68  able *pTab;.  ch
1010: 61 72 20 63 6f 6e 73 74 20 2a 61 7a 41 72 67 5b  ar const *azArg[
1020: 35 5d 3b 0a 20 20 63 68 61 72 20 7a 44 62 4e 75  5];.  char zDbNu
1030: 6d 5b 33 30 5d 3b 0a 20 20 69 6e 74 20 6d 65 74  m[30];.  int met
1040: 61 5b 31 30 5d 3b 0a 20 20 49 6e 69 74 44 61 74  a[10];.  InitDat
1050: 61 20 69 6e 69 74 44 61 74 61 3b 0a 20 20 63 68  a initData;.  ch
1060: 61 72 20 63 6f 6e 73 74 20 2a 7a 4d 61 73 74 65  ar const *zMaste
1070: 72 53 63 68 65 6d 61 3b 0a 20 20 63 68 61 72 20  rSchema;.  char 
1080: 63 6f 6e 73 74 20 2a 7a 4d 61 73 74 65 72 4e 61  const *zMasterNa
1090: 6d 65 3b 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 54  me;..  /*.  ** T
10a0: 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61  he master databa
10b0: 73 65 20 74 61 62 6c 65 20 68 61 73 20 61 20 73  se table has a s
10c0: 74 72 75 63 74 75 72 65 20 6c 69 6b 65 20 74 68  tructure like th
10d0: 69 73 0a 20 20 2a 2f 0a 20 20 73 74 61 74 69 63  is.  */.  static
10e0: 20 63 6f 6e 73 74 20 63 68 61 72 20 6d 61 73 74   const char mast
10f0: 65 72 5f 73 63 68 65 6d 61 5b 5d 20 3d 20 0a 20  er_schema[] = . 
1100: 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c      "CREATE TABL
1110: 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 28  E sqlite_master(
1120: 5c 6e 22 0a 20 20 20 20 20 22 20 20 74 79 70 65  \n".     "  type
1130: 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22   text,\n".     "
1140: 20 20 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a    name text,\n".
1150: 20 20 20 20 20 22 20 20 74 62 6c 5f 6e 61 6d 65       "  tbl_name
1160: 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22   text,\n".     "
1170: 20 20 72 6f 6f 74 70 61 67 65 20 69 6e 74 65 67    rootpage integ
1180: 65 72 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20 73  er,\n".     "  s
1190: 71 6c 20 74 65 78 74 5c 6e 22 0a 20 20 20 20 20  ql text\n".     
11a0: 22 29 22 0a 20 20 3b 0a 20 20 73 74 61 74 69 63  ")".  ;.  static
11b0: 20 63 6f 6e 73 74 20 63 68 61 72 20 74 65 6d 70   const char temp
11c0: 5f 6d 61 73 74 65 72 5f 73 63 68 65 6d 61 5b 5d  _master_schema[]
11d0: 20 3d 20 0a 20 20 20 20 20 22 43 52 45 41 54 45   = .     "CREATE
11e0: 20 54 45 4d 50 20 54 41 42 4c 45 20 73 71 6c 69   TEMP TABLE sqli
11f0: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 28 5c  te_temp_master(\
1200: 6e 22 0a 20 20 20 20 20 22 20 20 74 79 70 65 20  n".     "  type 
1210: 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22 20  text,\n".     " 
1220: 20 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a 20   name text,\n". 
1230: 20 20 20 20 22 20 20 74 62 6c 5f 6e 61 6d 65 20      "  tbl_name 
1240: 74 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22 20  text,\n".     " 
1250: 20 72 6f 6f 74 70 61 67 65 20 69 6e 74 65 67 65   rootpage intege
1260: 72 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20 73 71  r,\n".     "  sq
1270: 6c 20 74 65 78 74 5c 6e 22 0a 20 20 20 20 20 22  l text\n".     "
1280: 29 22 0a 20 20 3b 0a 0a 20 20 61 73 73 65 72 74  )".  ;..  assert
1290: 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c  ( iDb>=0 && iDb<
12a0: 64 62 2d 3e 6e 44 62 20 29 3b 0a 0a 20 20 2f 2a  db->nDb );..  /*
12b0: 20 7a 4d 61 73 74 65 72 53 63 68 65 6d 61 20 61   zMasterSchema a
12c0: 6e 64 20 7a 49 6e 69 74 53 63 72 69 70 74 20 61  nd zInitScript a
12d0: 72 65 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20  re set to point 
12e0: 61 74 20 74 68 65 20 6d 61 73 74 65 72 20 73 63  at the master sc
12f0: 68 65 6d 61 0a 20 20 2a 2a 20 61 6e 64 20 69 6e  hema.  ** and in
1300: 69 74 69 61 6c 69 73 61 74 69 6f 6e 20 73 63 72  itialisation scr
1310: 69 70 74 20 61 70 70 72 6f 70 72 69 61 74 65 20  ipt appropriate 
1320: 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65  for the database
1330: 20 62 65 69 6e 67 0a 20 20 2a 2a 20 69 6e 69 74   being.  ** init
1340: 69 61 6c 69 73 65 64 2e 20 7a 4d 61 73 74 65 72  ialised. zMaster
1350: 4e 61 6d 65 20 69 73 20 74 68 65 20 6e 61 6d 65  Name is the name
1360: 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 74   of the master t
1370: 61 62 6c 65 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  able..  */.  if(
1380: 20 69 44 62 3d 3d 31 20 29 7b 0a 20 20 20 20 7a   iDb==1 ){.    z
1390: 4d 61 73 74 65 72 53 63 68 65 6d 61 20 3d 20 74  MasterSchema = t
13a0: 65 6d 70 5f 6d 61 73 74 65 72 5f 73 63 68 65 6d  emp_master_schem
13b0: 61 3b 0a 20 20 20 20 7a 4d 61 73 74 65 72 4e 61  a;.    zMasterNa
13c0: 6d 65 20 3d 20 54 45 4d 50 5f 4d 41 53 54 45 52  me = TEMP_MASTER
13d0: 5f 4e 41 4d 45 3b 0a 20 20 7d 65 6c 73 65 7b 0a  _NAME;.  }else{.
13e0: 20 20 20 20 7a 4d 61 73 74 65 72 53 63 68 65 6d      zMasterSchem
13f0: 61 20 3d 20 6d 61 73 74 65 72 5f 73 63 68 65 6d  a = master_schem
1400: 61 3b 0a 20 20 20 20 7a 4d 61 73 74 65 72 4e 61  a;.    zMasterNa
1410: 6d 65 20 3d 20 4d 41 53 54 45 52 5f 4e 41 4d 45  me = MASTER_NAME
1420: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 6e 73  ;.  }..  /* Cons
1430: 74 72 75 63 74 20 74 68 65 20 73 63 68 65 6d 61  truct the schema
1440: 20 74 61 62 6c 65 73 2e 20 20 2a 2f 0a 20 20 73   tables.  */.  s
1450: 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28  qlite3SafetyOff(
1460: 64 62 29 3b 0a 20 20 61 7a 41 72 67 5b 30 5d 20  db);.  azArg[0] 
1470: 3d 20 7a 4d 61 73 74 65 72 4e 61 6d 65 3b 0a 20  = zMasterName;. 
1480: 20 61 7a 41 72 67 5b 31 5d 20 3d 20 22 31 22 3b   azArg[1] = "1";
1490: 0a 20 20 61 7a 41 72 67 5b 32 5d 20 3d 20 7a 4d  .  azArg[2] = zM
14a0: 61 73 74 65 72 53 63 68 65 6d 61 3b 0a 20 20 73  asterSchema;.  s
14b0: 70 72 69 6e 74 66 28 7a 44 62 4e 75 6d 2c 20 22  printf(zDbNum, "
14c0: 25 64 22 2c 20 69 44 62 29 3b 0a 20 20 61 7a 41  %d", iDb);.  azA
14d0: 72 67 5b 33 5d 20 3d 20 7a 44 62 4e 75 6d 3b 0a  rg[3] = zDbNum;.
14e0: 20 20 61 7a 41 72 67 5b 34 5d 20 3d 20 30 3b 0a    azArg[4] = 0;.
14f0: 20 20 69 6e 69 74 44 61 74 61 2e 64 62 20 3d 20    initData.db = 
1500: 64 62 3b 0a 20 20 69 6e 69 74 44 61 74 61 2e 70  db;.  initData.p
1510: 7a 45 72 72 4d 73 67 20 3d 20 70 7a 45 72 72 4d  zErrMsg = pzErrM
1520: 73 67 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  sg;.  rc = sqlit
1530: 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 26  e3InitCallback(&
1540: 69 6e 69 74 44 61 74 61 2c 20 34 2c 20 28 63 68  initData, 4, (ch
1550: 61 72 20 2a 2a 29 61 7a 41 72 67 2c 20 30 29 3b  ar **)azArg, 0);
1560: 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
1570: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69  E_OK ){.    sqli
1580: 74 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 3b  te3SafetyOn(db);
1590: 0a 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0a  .    return rc;.
15a0: 20 20 7d 0a 20 20 70 54 61 62 20 3d 20 73 71 6c    }.  pTab = sql
15b0: 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62  ite3FindTable(db
15c0: 2c 20 7a 4d 61 73 74 65 72 4e 61 6d 65 2c 20 64  , zMasterName, d
15d0: 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d  b->aDb[iDb].zNam
15e0: 65 29 3b 0a 20 20 69 66 28 20 70 54 61 62 20 29  e);.  if( pTab )
15f0: 7b 0a 20 20 20 20 70 54 61 62 2d 3e 72 65 61 64  {.    pTab->read
1600: 4f 6e 6c 79 20 3d 20 31 3b 0a 20 20 7d 0a 20 20  Only = 1;.  }.  
1610: 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28  sqlite3SafetyOn(
1620: 64 62 29 3b 0a 0a 20 20 2f 2a 20 43 72 65 61 74  db);..  /* Creat
1630: 65 20 61 20 63 75 72 73 6f 72 20 74 6f 20 68 6f  e a cursor to ho
1640: 6c 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ld the database 
1650: 6f 70 65 6e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  open.  */.  if( 
1660: 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
1670: 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 69  ==0 ){.    if( i
1680: 44 62 3d 3d 31 20 29 20 44 62 53 65 74 50 72 6f  Db==1 ) DbSetPro
1690: 70 65 72 74 79 28 64 62 2c 20 31 2c 20 44 42 5f  perty(db, 1, DB_
16a0: 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 3b 0a 20  SchemaLoaded);. 
16b0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
16c0: 5f 4f 4b 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20  _OK;.  }.  rc = 
16d0: 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
16e0: 6f 72 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  or(db->aDb[iDb].
16f0: 70 42 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54  pBt, MASTER_ROOT
1700: 2c 20 30 2c 20 30 2c 20 30 2c 20 26 63 75 72 4d  , 0, 0, 0, &curM
1710: 61 69 6e 29 3b 0a 20 20 69 66 28 20 72 63 21 3d  ain);.  if( rc!=
1720: 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 63 21  SQLITE_OK && rc!
1730: 3d 53 51 4c 49 54 45 5f 45 4d 50 54 59 20 29 7b  =SQLITE_EMPTY ){
1740: 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
1750: 74 72 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20  tring(pzErrMsg, 
1760: 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63  sqlite3ErrStr(rc
1770: 29 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a 20 20  ), (char*)0);.  
1780: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20 7d    return rc;.  }
1790: 0a 0a 20 20 2f 2a 20 47 65 74 20 74 68 65 20 64  ..  /* Get the d
17a0: 61 74 61 62 61 73 65 20 6d 65 74 61 20 69 6e 66  atabase meta inf
17b0: 6f 72 6d 61 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20  ormation..  **. 
17c0: 20 2a 2a 20 4d 65 74 61 20 76 61 6c 75 65 73 20   ** Meta values 
17d0: 61 72 65 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  are as follows:.
17e0: 20 20 2a 2a 20 20 20 20 6d 65 74 61 5b 30 5d 20    **    meta[0] 
17f0: 20 20 53 63 68 65 6d 61 20 63 6f 6f 6b 69 65 2e    Schema cookie.
1800: 20 20 43 68 61 6e 67 65 73 20 77 69 74 68 20 65    Changes with e
1810: 61 63 68 20 73 63 68 65 6d 61 20 63 68 61 6e 67  ach schema chang
1820: 65 2e 0a 20 20 2a 2a 20 20 20 20 6d 65 74 61 5b  e..  **    meta[
1830: 31 5d 20 20 20 46 69 6c 65 20 66 6f 72 6d 61 74  1]   File format
1840: 20 6f 66 20 73 63 68 65 6d 61 20 6c 61 79 65 72   of schema layer
1850: 2e 0a 20 20 2a 2a 20 20 20 20 6d 65 74 61 5b 32  ..  **    meta[2
1860: 5d 20 20 20 53 69 7a 65 20 6f 66 20 74 68 65 20  ]   Size of the 
1870: 70 61 67 65 20 63 61 63 68 65 2e 0a 20 20 2a 2a  page cache..  **
1880: 20 20 20 20 6d 65 74 61 5b 33 5d 20 20 20 55 73      meta[3]   Us
1890: 65 20 66 72 65 65 6c 69 73 74 20 69 66 20 30 2e  e freelist if 0.
18a0: 20 20 41 75 74 6f 76 61 63 75 75 6d 20 69 66 20    Autovacuum if 
18b0: 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72  greater than zer
18c0: 6f 2e 0a 20 20 2a 2a 20 20 20 20 6d 65 74 61 5b  o..  **    meta[
18d0: 34 5d 20 20 20 44 62 20 74 65 78 74 20 65 6e 63  4]   Db text enc
18e0: 6f 64 69 6e 67 2e 20 31 3a 55 54 46 2d 38 20 33  oding. 1:UTF-8 3
18f0: 3a 55 54 46 2d 31 36 20 4c 45 20 34 3a 55 54 46  :UTF-16 LE 4:UTF
1900: 2d 31 36 20 42 45 0a 20 20 2a 2a 20 20 20 20 6d  -16 BE.  **    m
1910: 65 74 61 5b 35 5d 20 20 20 54 68 65 20 75 73 65  eta[5]   The use
1920: 72 20 63 6f 6f 6b 69 65 2e 20 55 73 65 64 20 62  r cookie. Used b
1930: 79 20 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f  y the applicatio
1940: 6e 2e 0a 20 20 2a 2a 20 20 20 20 6d 65 74 61 5b  n..  **    meta[
1950: 36 5d 20 20 20 0a 20 20 2a 2a 20 20 20 20 6d 65  6]   .  **    me
1960: 74 61 5b 37 5d 0a 20 20 2a 2a 20 20 20 20 6d 65  ta[7].  **    me
1970: 74 61 5b 38 5d 0a 20 20 2a 2a 20 20 20 20 6d 65  ta[8].  **    me
1980: 74 61 5b 39 5d 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ta[9].  **.  ** 
1990: 4e 6f 74 65 3a 20 54 68 65 20 68 61 73 68 20 64  Note: The hash d
19a0: 65 66 69 6e 65 64 20 53 51 4c 49 54 45 5f 55 54  efined SQLITE_UT
19b0: 46 2a 20 73 79 6d 62 6f 6c 73 20 69 6e 20 73 71  F* symbols in sq
19c0: 6c 69 74 65 49 6e 74 2e 68 20 63 6f 72 72 65 73  liteInt.h corres
19d0: 70 6f 6e 64 20 74 6f 0a 20 20 2a 2a 20 74 68 65  pond to.  ** the
19e0: 20 70 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   possible values
19f0: 20 6f 66 20 6d 65 74 61 5b 34 5d 2e 0a 20 20 2a   of meta[4]..  *
1a00: 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  /.  if( rc==SQLI
1a10: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 6e 74  TE_OK ){.    int
1a20: 20 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b   i;.    for(i=0;
1a30: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
1a40: 26 20 69 3c 73 69 7a 65 6f 66 28 6d 65 74 61 29  & i<sizeof(meta)
1a50: 2f 73 69 7a 65 6f 66 28 6d 65 74 61 5b 30 5d 29  /sizeof(meta[0])
1a60: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 72 63  ; i++){.      rc
1a70: 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 47   = sqlite3BtreeG
1a80: 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b 69  etMeta(db->aDb[i
1a90: 44 62 5d 2e 70 42 74 2c 20 69 2b 31 2c 20 28 75  Db].pBt, i+1, (u
1aa0: 33 32 20 2a 29 26 6d 65 74 61 5b 69 5d 29 3b 0a  32 *)&meta[i]);.
1ab0: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72 63      }.    if( rc
1ac0: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
1ad0: 33 53 65 74 53 74 72 69 6e 67 28 70 7a 45 72 72  3SetString(pzErr
1ae0: 4d 73 67 2c 20 73 71 6c 69 74 65 33 45 72 72 53  Msg, sqlite3ErrS
1af0: 74 72 28 72 63 29 2c 20 28 63 68 61 72 2a 29 30  tr(rc), (char*)0
1b00: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
1b10: 42 74 72 65 65 43 6c 6f 73 65 43 75 72 73 6f 72  BtreeCloseCursor
1b20: 28 63 75 72 4d 61 69 6e 29 3b 0a 20 20 20 20 20  (curMain);.     
1b30: 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20 20 20   return rc;.    
1b40: 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6d  }.  }else{.    m
1b50: 65 6d 73 65 74 28 6d 65 74 61 2c 20 30 2c 20 73  emset(meta, 0, s
1b60: 69 7a 65 6f 66 28 6d 65 74 61 29 29 3b 0a 20 20  izeof(meta));.  
1b70: 7d 0a 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d  }.  db->aDb[iDb]
1b80: 2e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d  .schema_cookie =
1b90: 20 6d 65 74 61 5b 30 5d 3b 0a 0a 20 20 2f 2a 20   meta[0];..  /* 
1ba0: 49 66 20 6f 70 65 6e 69 6e 67 20 61 20 6e 6f 6e  If opening a non
1bb0: 2d 65 6d 70 74 79 20 64 61 74 61 62 61 73 65 2c  -empty database,
1bc0: 20 63 68 65 63 6b 20 74 68 65 20 74 65 78 74 20   check the text 
1bd0: 65 6e 63 6f 64 69 6e 67 2e 20 46 6f 72 20 74 68  encoding. For th
1be0: 65 0a 20 20 2a 2a 20 6d 61 69 6e 20 64 61 74 61  e.  ** main data
1bf0: 62 61 73 65 2c 20 73 65 74 20 73 71 6c 69 74 65  base, set sqlite
1c00: 33 2e 65 6e 63 20 74 6f 20 74 68 65 20 65 6e 63  3.enc to the enc
1c10: 6f 64 69 6e 67 20 6f 66 20 74 68 65 20 6d 61 69  oding of the mai
1c20: 6e 20 64 61 74 61 62 61 73 65 2e 0a 20 20 2a 2a  n database..  **
1c30: 20 46 6f 72 20 61 6e 20 61 74 74 61 63 68 65 64   For an attached
1c40: 20 64 62 2c 20 69 74 20 69 73 20 61 6e 20 65 72   db, it is an er
1c50: 72 6f 72 20 69 66 20 74 68 65 20 65 6e 63 6f 64  ror if the encod
1c60: 69 6e 67 20 69 73 20 6e 6f 74 20 74 68 65 20 73  ing is not the s
1c70: 61 6d 65 0a 20 20 2a 2a 20 61 73 20 73 71 6c 69  ame.  ** as sqli
1c80: 74 65 33 2e 65 6e 63 2e 0a 20 20 2a 2f 0a 20 20  te3.enc..  */.  
1c90: 69 66 28 20 6d 65 74 61 5b 34 5d 20 29 7b 20 20  if( meta[4] ){  
1ca0: 2f 2a 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67  /* text encoding
1cb0: 20 2a 2f 0a 20 20 20 20 69 66 28 20 69 44 62 3d   */.    if( iDb=
1cc0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  =0 ){.      /* I
1cd0: 66 20 6f 70 65 6e 69 6e 67 20 74 68 65 20 6d 61  f opening the ma
1ce0: 69 6e 20 64 61 74 61 62 61 73 65 2c 20 73 65 74  in database, set
1cf0: 20 64 62 2d 3e 65 6e 63 2e 20 2a 2f 0a 20 20 20   db->enc. */.   
1d00: 20 20 20 64 62 2d 3e 65 6e 63 20 3d 20 28 75 38     db->enc = (u8
1d10: 29 6d 65 74 61 5b 34 5d 3b 0a 20 20 20 20 20 20  )meta[4];.      
1d20: 64 62 2d 3e 70 44 66 6c 74 43 6f 6c 6c 20 3d 20  db->pDfltColl = 
1d30: 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53  sqlite3FindCollS
1d40: 65 71 28 64 62 2c 20 64 62 2d 3e 65 6e 63 2c 20  eq(db, db->enc, 
1d50: 22 42 49 4e 41 52 59 22 2c 20 36 2c 20 30 29 3b  "BINARY", 6, 0);
1d60: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
1d70: 20 20 2f 2a 20 49 66 20 6f 70 65 6e 69 6e 67 20    /* If opening 
1d80: 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61  an attached data
1d90: 62 61 73 65 2c 20 74 68 65 20 65 6e 63 6f 64 69  base, the encodi
1da0: 6e 67 20 6d 75 63 68 20 6d 61 74 63 68 20 64 62  ng much match db
1db0: 2d 3e 65 6e 63 20 2a 2f 0a 20 20 20 20 20 20 69  ->enc */.      i
1dc0: 66 28 20 6d 65 74 61 5b 34 5d 21 3d 64 62 2d 3e  f( meta[4]!=db->
1dd0: 65 6e 63 20 29 7b 0a 20 20 20 20 20 20 20 20 73  enc ){.        s
1de0: 71 6c 69 74 65 33 42 74 72 65 65 43 6c 6f 73 65  qlite3BtreeClose
1df0: 43 75 72 73 6f 72 28 63 75 72 4d 61 69 6e 29 3b  Cursor(curMain);
1e00: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
1e10: 53 65 74 53 74 72 69 6e 67 28 70 7a 45 72 72 4d  SetString(pzErrM
1e20: 73 67 2c 20 22 61 74 74 61 63 68 65 64 20 64 61  sg, "attached da
1e30: 74 61 62 61 73 65 73 20 6d 75 73 74 20 75 73 65  tabases must use
1e40: 20 74 68 65 20 73 61 6d 65 22 0a 20 20 20 20 20   the same".     
1e50: 20 20 20 20 20 20 20 22 20 74 65 78 74 20 65 6e         " text en
1e60: 63 6f 64 69 6e 67 20 61 73 20 6d 61 69 6e 20 64  coding as main d
1e70: 61 74 61 62 61 73 65 22 2c 20 28 63 68 61 72 2a  atabase", (char*
1e80: 29 30 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74  )0);.        ret
1e90: 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  urn SQLITE_ERROR
1ea0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
1eb0: 20 20 7d 0a 0a 20 20 73 69 7a 65 20 3d 20 6d 65    }..  size = me
1ec0: 74 61 5b 32 5d 3b 0a 20 20 69 66 28 20 73 69 7a  ta[2];.  if( siz
1ed0: 65 3d 3d 30 20 29 7b 20 73 69 7a 65 20 3d 20 4d  e==0 ){ size = M
1ee0: 41 58 5f 50 41 47 45 53 3b 20 7d 0a 20 20 64 62  AX_PAGES; }.  db
1ef0: 2d 3e 61 44 62 5b 69 44 62 5d 2e 63 61 63 68 65  ->aDb[iDb].cache
1f00: 5f 73 69 7a 65 20 3d 20 73 69 7a 65 3b 0a 0a 20  _size = size;.. 
1f10: 20 69 66 28 20 69 44 62 3d 3d 30 20 29 7b 0a 20   if( iDb==0 ){. 
1f20: 20 20 20 64 62 2d 3e 66 69 6c 65 5f 66 6f 72 6d     db->file_form
1f30: 61 74 20 3d 20 6d 65 74 61 5b 31 5d 3b 0a 20 20  at = meta[1];.  
1f40: 20 20 69 66 28 20 64 62 2d 3e 66 69 6c 65 5f 66    if( db->file_f
1f50: 6f 72 6d 61 74 3d 3d 30 20 29 7b 0a 20 20 20 20  ormat==0 ){.    
1f60: 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e    /* This happen
1f70: 73 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73  s if the databas
1f80: 65 20 77 61 73 20 69 6e 69 74 69 61 6c 6c 79 20  e was initially 
1f90: 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20 20 20 64  empty */.      d
1fa0: 62 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d  b->file_format =
1fb0: 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20   1;.    }.  }.. 
1fc0: 20 2f 2a 0a 20 20 2a 2a 20 20 66 69 6c 65 5f 66   /*.  **  file_f
1fd0: 6f 72 6d 61 74 3d 3d 31 20 20 20 20 56 65 72 73  ormat==1    Vers
1fe0: 69 6f 6e 20 33 2e 30 2e 30 2e 0a 20 20 2a 2f 0a  ion 3.0.0..  */.
1ff0: 20 20 69 66 28 20 6d 65 74 61 5b 31 5d 3e 31 20    if( meta[1]>1 
2000: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74  ){.    sqlite3Bt
2010: 72 65 65 43 6c 6f 73 65 43 75 72 73 6f 72 28 63  reeCloseCursor(c
2020: 75 72 4d 61 69 6e 29 3b 0a 20 20 20 20 73 71 6c  urMain);.    sql
2030: 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 70 7a  ite3SetString(pz
2040: 45 72 72 4d 73 67 2c 20 22 75 6e 73 75 70 70 6f  ErrMsg, "unsuppo
2050: 72 74 65 64 20 66 69 6c 65 20 66 6f 72 6d 61 74  rted file format
2060: 22 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a 20 20  ", (char*)0);.  
2070: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
2080: 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 73 71  ERROR;.  }..  sq
2090: 6c 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63  lite3BtreeSetCac
20a0: 68 65 53 69 7a 65 28 64 62 2d 3e 61 44 62 5b 69  heSize(db->aDb[i
20b0: 44 62 5d 2e 70 42 74 2c 20 64 62 2d 3e 61 44 62  Db].pBt, db->aDb
20c0: 5b 69 44 62 5d 2e 63 61 63 68 65 5f 73 69 7a 65  [iDb].cache_size
20d0: 29 3b 0a 0a 20 20 2f 2a 20 52 65 61 64 20 74 68  );..  /* Read th
20e0: 65 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61  e schema informa
20f0: 74 69 6f 6e 20 6f 75 74 20 6f 66 20 74 68 65 20  tion out of the 
2100: 73 63 68 65 6d 61 20 74 61 62 6c 65 73 0a 20 20  schema tables.  
2110: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  */.  assert( db-
2120: 3e 69 6e 69 74 2e 62 75 73 79 20 29 3b 0a 20 20  >init.busy );.  
2130: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45  if( rc==SQLITE_E
2140: 4d 50 54 59 20 29 7b 0a 20 20 20 20 2f 2a 20 46  MPTY ){.    /* F
2150: 6f 72 20 61 6e 20 65 6d 70 74 79 20 64 61 74 61  or an empty data
2160: 62 61 73 65 2c 20 74 68 65 72 65 20 69 73 20 6e  base, there is n
2170: 6f 74 68 69 6e 67 20 74 6f 20 72 65 61 64 20 2a  othing to read *
2180: 2f 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  /.    rc = SQLIT
2190: 45 5f 4f 4b 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  E_OK;.  }else{. 
21a0: 20 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20     char *zSql;. 
21b0: 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65     zSql = sqlite
21c0: 33 4d 50 72 69 6e 74 66 28 0a 20 20 20 20 20 20  3MPrintf(.      
21d0: 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20    "SELECT name, 
21e0: 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c 2c 20 25  rootpage, sql, %
21f0: 73 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 22 2c  s FROM '%q'.%s",
2200: 0a 20 20 20 20 20 20 20 20 7a 44 62 4e 75 6d 2c  .        zDbNum,
2210: 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e   db->aDb[iDb].zN
2220: 61 6d 65 2c 20 7a 4d 61 73 74 65 72 4e 61 6d 65  ame, zMasterName
2230: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 61  );.    sqlite3Sa
2240: 66 65 74 79 4f 66 66 28 64 62 29 3b 0a 20 20 20  fetyOff(db);.   
2250: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78   rc = sqlite3_ex
2260: 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c  ec(db, zSql, sql
2270: 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b  ite3InitCallback
2280: 2c 20 26 69 6e 69 74 44 61 74 61 2c 20 30 29 3b  , &initData, 0);
2290: 0a 20 20 20 20 73 71 6c 69 74 65 33 53 61 66 65  .    sqlite3Safe
22a0: 74 79 4f 6e 28 64 62 29 3b 0a 20 20 20 20 73 71  tyOn(db);.    sq
22b0: 6c 69 74 65 46 72 65 65 28 7a 53 71 6c 29 3b 0a  liteFree(zSql);.
22c0: 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
22d0: 43 6c 6f 73 65 43 75 72 73 6f 72 28 63 75 72 4d  CloseCursor(curM
22e0: 61 69 6e 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  ain);.  }.  if( 
22f0: 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66  sqlite3_malloc_f
2300: 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 73 71 6c  ailed ){.    sql
2310: 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 70 7a  ite3SetString(pz
2320: 45 72 72 4d 73 67 2c 20 22 6f 75 74 20 6f 66 20  ErrMsg, "out of 
2330: 6d 65 6d 6f 72 79 22 2c 20 28 63 68 61 72 2a 29  memory", (char*)
2340: 30 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c  0);.    rc = SQL
2350: 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 73  ITE_NOMEM;.    s
2360: 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65 72  qlite3ResetInter
2370: 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 30 29  nalSchema(db, 0)
2380: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d  ;.  }.  if( rc==
2390: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
23a0: 20 44 62 53 65 74 50 72 6f 70 65 72 74 79 28 64   DbSetProperty(d
23b0: 62 2c 20 69 44 62 2c 20 44 42 5f 53 63 68 65 6d  b, iDb, DB_Schem
23c0: 61 4c 6f 61 64 65 64 29 3b 0a 20 20 7d 65 6c 73  aLoaded);.  }els
23d0: 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65  e{.    sqlite3Re
23e0: 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d  setInternalSchem
23f0: 61 28 64 62 2c 20 69 44 62 29 3b 0a 20 20 7d 0a  a(db, iDb);.  }.
2400: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a    return rc;.}..
2410: 2f 2a 0a 2a 2a 20 49 6e 69 74 69 61 6c 69 7a 65  /*.** Initialize
2420: 20 61 6c 6c 20 64 61 74 61 62 61 73 65 20 66 69   all database fi
2430: 6c 65 73 20 2d 20 74 68 65 20 6d 61 69 6e 20 64  les - the main d
2440: 61 74 61 62 61 73 65 20 66 69 6c 65 2c 20 74 68  atabase file, th
2450: 65 20 66 69 6c 65 0a 2a 2a 20 75 73 65 64 20 74  e file.** used t
2460: 6f 20 73 74 6f 72 65 20 74 65 6d 70 6f 72 61 72  o store temporar
2470: 79 20 74 61 62 6c 65 73 2c 20 61 6e 64 20 61 6e  y tables, and an
2480: 79 20 61 64 64 69 74 69 6f 6e 61 6c 20 64 61 74  y additional dat
2490: 61 62 61 73 65 20 66 69 6c 65 73 0a 2a 2a 20 63  abase files.** c
24a0: 72 65 61 74 65 64 20 75 73 69 6e 67 20 41 54 54  reated using ATT
24b0: 41 43 48 20 73 74 61 74 65 6d 65 6e 74 73 2e 20  ACH statements. 
24c0: 20 52 65 74 75 72 6e 20 61 20 73 75 63 63 65 73   Return a succes
24d0: 73 20 63 6f 64 65 2e 20 20 49 66 20 61 6e 0a 2a  s code.  If an.*
24e0: 2a 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20  * error occurs, 
24f0: 77 72 69 74 65 20 61 6e 20 65 72 72 6f 72 20 6d  write an error m
2500: 65 73 73 61 67 65 20 69 6e 74 6f 20 2a 70 7a 45  essage into *pzE
2510: 72 72 4d 73 67 2e 0a 2a 2a 0a 2a 2a 20 41 66 74  rrMsg..**.** Aft
2520: 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  er the database 
2530: 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20  is initialized, 
2540: 74 68 65 20 53 51 4c 49 54 45 5f 49 6e 69 74 69  the SQLITE_Initi
2550: 61 6c 69 7a 65 64 0a 2a 2a 20 62 69 74 20 69 73  alized.** bit is
2560: 20 73 65 74 20 69 6e 20 74 68 65 20 66 6c 61 67   set in the flag
2570: 73 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73  s field of the s
2580: 71 6c 69 74 65 20 73 74 72 75 63 74 75 72 65 2e  qlite structure.
2590: 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33   .*/.int sqlite3
25a0: 49 6e 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62  Init(sqlite3 *db
25b0: 2c 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73  , char **pzErrMs
25c0: 67 29 7b 0a 20 20 69 6e 74 20 69 2c 20 72 63 3b  g){.  int i, rc;
25d0: 0a 20 20 0a 20 20 69 66 28 20 64 62 2d 3e 69 6e  .  .  if( db->in
25e0: 69 74 2e 62 75 73 79 20 29 20 72 65 74 75 72 6e  it.busy ) return
25f0: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 61 73   SQLITE_OK;.  as
2600: 73 65 72 74 28 20 28 64 62 2d 3e 66 6c 61 67 73  sert( (db->flags
2610: 20 26 20 53 51 4c 49 54 45 5f 49 6e 69 74 69 61   & SQLITE_Initia
2620: 6c 69 7a 65 64 29 3d 3d 30 20 29 3b 0a 20 20 72  lized)==0 );.  r
2630: 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
2640: 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d   db->init.busy =
2650: 20 31 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 72   1;.  for(i=0; r
2660: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
2670: 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b  i<db->nDb; i++){
2680: 0a 20 20 20 20 69 66 28 20 44 62 48 61 73 50 72  .    if( DbHasPr
2690: 6f 70 65 72 74 79 28 64 62 2c 20 69 2c 20 44 42  operty(db, i, DB
26a0: 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 20 7c  _SchemaLoaded) |
26b0: 7c 20 69 3d 3d 31 20 29 20 63 6f 6e 74 69 6e 75  | i==1 ) continu
26c0: 65 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  e;.    rc = sqli
26d0: 74 65 33 49 6e 69 74 4f 6e 65 28 64 62 2c 20 69  te3InitOne(db, i
26e0: 2c 20 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20  , pzErrMsg);.   
26f0: 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20   if( rc ){.     
2700: 20 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74   sqlite3ResetInt
2710: 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20  ernalSchema(db, 
2720: 69 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20  i);.    }.  }.. 
2730: 20 2f 2a 20 4f 6e 63 65 20 61 6c 6c 20 74 68 65   /* Once all the
2740: 20 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 73   other databases
2750: 20 68 61 76 65 20 62 65 65 6e 20 69 6e 69 74 69   have been initi
2760: 61 6c 69 73 65 64 2c 20 6c 6f 61 64 20 74 68 65  alised, load the
2770: 20 73 63 68 65 6d 61 0a 20 20 2a 2a 20 66 6f 72   schema.  ** for
2780: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
2790: 73 65 2e 20 54 68 69 73 20 69 73 20 6c 6f 61 64  se. This is load
27a0: 65 64 20 6c 61 73 74 2c 20 61 73 20 74 68 65 20  ed last, as the 
27b0: 54 45 4d 50 20 64 61 74 61 62 61 73 65 0a 20 20  TEMP database.  
27c0: 2a 2a 20 73 63 68 65 6d 61 20 6d 61 79 20 63 6f  ** schema may co
27d0: 6e 74 61 69 6e 20 72 65 66 65 72 65 6e 63 65 73  ntain references
27e0: 20 74 6f 20 6f 62 6a 65 63 74 73 20 69 6e 20 6f   to objects in o
27f0: 74 68 65 72 20 64 61 74 61 62 61 73 65 73 2e 0a  ther databases..
2800: 20 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53    */.  if( rc==S
2810: 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e  QLITE_OK && db->
2820: 6e 44 62 3e 31 20 26 26 20 21 44 62 48 61 73 50  nDb>1 && !DbHasP
2830: 72 6f 70 65 72 74 79 28 64 62 2c 20 31 2c 20 44  roperty(db, 1, D
2840: 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 20  B_SchemaLoaded) 
2850: 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
2860: 74 65 33 49 6e 69 74 4f 6e 65 28 64 62 2c 20 31  te3InitOne(db, 1
2870: 2c 20 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20  , pzErrMsg);.   
2880: 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20   if( rc ){.     
2890: 20 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74   sqlite3ResetInt
28a0: 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20  ernalSchema(db, 
28b0: 31 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20  1);.    }.  }.. 
28c0: 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d   db->init.busy =
28d0: 20 30 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   0;.  if( rc==SQ
28e0: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 64  LITE_OK ){.    d
28f0: 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49  b->flags |= SQLI
2900: 54 45 5f 49 6e 69 74 69 61 6c 69 7a 65 64 3b 0a  TE_Initialized;.
2910: 20 20 20 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69      sqlite3Commi
2920: 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73  tInternalChanges
2930: 28 64 62 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  (db);.  }..  if(
2940: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
2950: 7b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20  {.    db->flags 
2960: 26 3d 20 7e 53 51 4c 49 54 45 5f 49 6e 69 74 69  &= ~SQLITE_Initi
2970: 61 6c 69 7a 65 64 3b 0a 20 20 7d 0a 20 20 72 65  alized;.  }.  re
2980: 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a  turn rc;.}../*.*
2990: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69  * This routine i
29a0: 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65  s a no-op if the
29b0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
29c0: 20 69 73 20 61 6c 72 65 61 64 79 20 69 6e 69 74   is already init
29d0: 69 61 6c 69 73 65 64 2e 0a 2a 2a 20 4f 74 68 65  ialised..** Othe
29e0: 72 77 69 73 65 2c 20 74 68 65 20 73 63 68 65 6d  rwise, the schem
29f0: 61 20 69 73 20 6c 6f 61 64 65 64 2e 20 41 6e 20  a is loaded. An 
2a00: 65 72 72 6f 72 20 63 6f 64 65 20 69 73 20 72 65  error code is re
2a10: 74 75 72 6e 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73  turned..*/.int s
2a20: 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61  qlite3ReadSchema
2a30: 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 7b  (Parse *pParse){
2a40: 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49  .  int rc = SQLI
2a50: 54 45 5f 4f 4b 3b 0a 20 20 73 71 6c 69 74 65 33  TE_OK;.  sqlite3
2a60: 20 2a 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64   *db = pParse->d
2a70: 62 3b 0a 20 20 69 66 28 20 21 64 62 2d 3e 69 6e  b;.  if( !db->in
2a80: 69 74 2e 62 75 73 79 20 29 7b 0a 20 20 20 20 69  it.busy ){.    i
2a90: 66 28 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20  f( (db->flags & 
2aa0: 53 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c 69 7a  SQLITE_Initializ
2ab0: 65 64 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ed)==0 ){.      
2ac0: 72 63 20 3d 20 73 71 6c 69 74 65 33 49 6e 69 74  rc = sqlite3Init
2ad0: 28 64 62 2c 20 26 70 50 61 72 73 65 2d 3e 7a 45  (db, &pParse->zE
2ae0: 72 72 4d 73 67 29 3b 0a 20 20 20 20 7d 0a 20 20  rrMsg);.    }.  
2af0: 7d 0a 20 20 61 73 73 65 72 74 28 20 72 63 21 3d  }.  assert( rc!=
2b00: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 64 62  SQLITE_OK || (db
2b10: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
2b20: 5f 49 6e 69 74 69 61 6c 69 7a 65 64 29 7c 7c 64  _Initialized)||d
2b30: 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 29 3b 0a  b->init.busy );.
2b40: 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
2b50: 5f 4f 4b 20 29 7b 0a 20 20 20 20 70 50 61 72 73  _OK ){.    pPars
2b60: 65 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20 20  e->rc = rc;.    
2b70: 70 50 61 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a  pParse->nErr++;.
2b80: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b    }.  return rc;
2b90: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 76 65  .}../*.** The ve
2ba0: 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  rsion of the lib
2bb0: 72 61 72 79 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68  rary.*/.const ch
2bc0: 61 72 20 72 63 73 69 64 33 5b 5d 20 3d 20 22 40  ar rcsid3[] = "@
2bd0: 28 23 29 20 5c 30 34 34 49 64 3a 20 53 51 4c 69  (#) \044Id: SQLi
2be0: 74 65 20 76 65 72 73 69 6f 6e 20 22 20 53 51 4c  te version " SQL
2bf0: 49 54 45 5f 56 45 52 53 49 4f 4e 20 22 20 24 22  ITE_VERSION " $"
2c00: 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 73 71 6c  ;.const char sql
2c10: 69 74 65 33 5f 76 65 72 73 69 6f 6e 5b 5d 20 3d  ite3_version[] =
2c20: 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 3b   SQLITE_VERSION;
2c30: 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
2c40: 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28  ite3_libversion(
2c50: 76 6f 69 64 29 7b 20 72 65 74 75 72 6e 20 73 71  void){ return sq
2c60: 6c 69 74 65 33 5f 76 65 72 73 69 6f 6e 3b 20 7d  lite3_version; }
2c70: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20  ../*.** This is 
2c80: 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c  the default coll
2c90: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 6e  ating function n
2ca0: 61 6d 65 64 20 22 42 49 4e 41 52 59 22 20 77 68  amed "BINARY" wh
2cb0: 69 63 68 20 69 73 20 61 6c 77 61 79 73 0a 2a 2a  ich is always.**
2cc0: 20 61 76 61 69 6c 61 62 6c 65 2e 0a 2a 2f 0a 73   available..*/.s
2cd0: 74 61 74 69 63 20 69 6e 74 20 62 69 6e 43 6f 6c  tatic int binCol
2ce0: 6c 46 75 6e 63 28 0a 20 20 76 6f 69 64 20 2a 4e  lFunc(.  void *N
2cf0: 6f 74 55 73 65 64 2c 0a 20 20 69 6e 74 20 6e 4b  otUsed,.  int nK
2d00: 65 79 31 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20  ey1, const void 
2d10: 2a 70 4b 65 79 31 2c 0a 20 20 69 6e 74 20 6e 4b  *pKey1,.  int nK
2d20: 65 79 32 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20  ey2, const void 
2d30: 2a 70 4b 65 79 32 0a 29 7b 0a 20 20 69 6e 74 20  *pKey2.){.  int 
2d40: 72 63 2c 20 6e 3b 0a 20 20 6e 20 3d 20 6e 4b 65  rc, n;.  n = nKe
2d50: 79 31 3c 6e 4b 65 79 32 20 3f 20 6e 4b 65 79 31  y1<nKey2 ? nKey1
2d60: 20 3a 20 6e 4b 65 79 32 3b 0a 20 20 72 63 20 3d   : nKey2;.  rc =
2d70: 20 6d 65 6d 63 6d 70 28 70 4b 65 79 31 2c 20 70   memcmp(pKey1, p
2d80: 4b 65 79 32 2c 20 6e 29 3b 0a 20 20 69 66 28 20  Key2, n);.  if( 
2d90: 72 63 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20  rc==0 ){.    rc 
2da0: 3d 20 6e 4b 65 79 31 20 2d 20 6e 4b 65 79 32 3b  = nKey1 - nKey2;
2db0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63  .  }.  return rc
2dc0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6e 6f 74 68  ;.}../*.** Anoth
2dd0: 65 72 20 62 75 69 6c 74 2d 69 6e 20 63 6f 6c 6c  er built-in coll
2de0: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 3a 20  ating sequence: 
2df0: 4e 4f 43 41 53 45 2e 20 0a 2a 2a 0a 2a 2a 20 54  NOCASE. .**.** T
2e00: 68 69 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  his collating se
2e10: 71 75 65 6e 63 65 20 69 73 20 69 6e 74 65 6e 64  quence is intend
2e20: 65 64 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f  ed to be used fo
2e30: 72 20 22 63 61 73 65 20 69 6e 64 65 70 65 6e 64  r "case independ
2e40: 61 6e 74 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f  ant.** compariso
2e50: 6e 22 2e 20 53 51 4c 69 74 65 27 73 20 6b 6e 6f  n". SQLite's kno
2e60: 77 6c 65 64 67 65 20 6f 66 20 75 70 70 65 72 20  wledge of upper 
2e70: 61 6e 64 20 6c 6f 77 65 72 20 63 61 73 65 20 65  and lower case e
2e80: 71 75 69 76 61 6c 65 6e 74 73 0a 2a 2a 20 65 78  quivalents.** ex
2e90: 74 65 6e 64 73 20 6f 6e 6c 79 20 74 6f 20 74 68  tends only to th
2ea0: 65 20 32 36 20 63 68 61 72 61 63 74 65 72 73 20  e 26 characters 
2eb0: 75 73 65 64 20 69 6e 20 74 68 65 20 45 6e 67 6c  used in the Engl
2ec0: 69 73 68 20 6c 61 6e 67 75 61 67 65 2e 0a 2a 2a  ish language..**
2ed0: 0a 2a 2a 20 41 74 20 74 68 65 20 6d 6f 6d 65 6e  .** At the momen
2ee0: 74 20 74 68 65 72 65 20 69 73 20 6f 6e 6c 79 20  t there is only 
2ef0: 61 20 55 54 46 2d 38 20 69 6d 70 6c 65 6d 65 6e  a UTF-8 implemen
2f00: 74 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61 74 69  tation..*/.stati
2f10: 63 20 69 6e 74 20 6e 6f 63 61 73 65 43 6f 6c 6c  c int nocaseColl
2f20: 61 74 69 6e 67 46 75 6e 63 28 0a 20 20 76 6f 69  atingFunc(.  voi
2f30: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 69 6e  d *NotUsed,.  in
2f40: 74 20 6e 4b 65 79 31 2c 20 63 6f 6e 73 74 20 76  t nKey1, const v
2f50: 6f 69 64 20 2a 70 4b 65 79 31 2c 0a 20 20 69 6e  oid *pKey1,.  in
2f60: 74 20 6e 4b 65 79 32 2c 20 63 6f 6e 73 74 20 76  t nKey2, const v
2f70: 6f 69 64 20 2a 70 4b 65 79 32 0a 29 7b 0a 20 20  oid *pKey2.){.  
2f80: 69 6e 74 20 72 20 3d 20 73 71 6c 69 74 65 33 53  int r = sqlite3S
2f90: 74 72 4e 49 43 6d 70 28 0a 20 20 20 20 20 20 28  trNICmp(.      (
2fa0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 70 4b 65  const char *)pKe
2fb0: 79 31 2c 20 28 63 6f 6e 73 74 20 63 68 61 72 20  y1, (const char 
2fc0: 2a 29 70 4b 65 79 32 2c 20 28 6e 4b 65 79 31 3c  *)pKey2, (nKey1<
2fd0: 6e 4b 65 79 32 29 3f 6e 4b 65 79 31 3a 6e 4b 65  nKey2)?nKey1:nKe
2fe0: 79 32 29 3b 0a 20 20 69 66 28 20 30 3d 3d 72 20  y2);.  if( 0==r 
2ff0: 29 7b 0a 20 20 20 20 72 20 3d 20 6e 4b 65 79 31  ){.    r = nKey1
3000: 2d 6e 4b 65 79 32 3b 0a 20 20 7d 0a 20 20 72 65  -nKey2;.  }.  re
3010: 74 75 72 6e 20 72 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn r;.}../*.**
3020: 20 52 65 74 75 72 6e 20 74 68 65 20 52 4f 57 49   Return the ROWI
3030: 44 20 6f 66 20 74 68 65 20 6d 6f 73 74 20 72 65  D of the most re
3040: 63 65 6e 74 20 69 6e 73 65 72 74 0a 2a 2f 0a 73  cent insert.*/.s
3050: 71 6c 69 74 65 5f 69 6e 74 36 34 20 73 71 6c 69  qlite_int64 sqli
3060: 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f  te3_last_insert_
3070: 72 6f 77 69 64 28 73 71 6c 69 74 65 33 20 2a 64  rowid(sqlite3 *d
3080: 62 29 7b 0a 20 20 72 65 74 75 72 6e 20 64 62 2d  b){.  return db-
3090: 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 7d 0a 0a 2f  >lastRowid;.}../
30a0: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
30b0: 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 6e 67 65  number of change
30c0: 73 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 72 65  s in the most re
30d0: 63 65 6e 74 20 63 61 6c 6c 20 74 6f 20 73 71 6c  cent call to sql
30e0: 69 74 65 33 5f 65 78 65 63 28 29 2e 0a 2a 2f 0a  ite3_exec()..*/.
30f0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 68 61 6e  int sqlite3_chan
3100: 67 65 73 28 73 71 6c 69 74 65 33 20 2a 64 62 29  ges(sqlite3 *db)
3110: 7b 0a 20 20 72 65 74 75 72 6e 20 64 62 2d 3e 6e  {.  return db->n
3120: 43 68 61 6e 67 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  Change;.}../*.**
3130: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   Return the numb
3140: 65 72 20 6f 66 20 63 68 61 6e 67 65 73 20 73 69  er of changes si
3150: 6e 63 65 20 74 68 65 20 64 61 74 61 62 61 73 65  nce the database
3160: 20 68 61 6e 64 6c 65 20 77 61 73 20 6f 70 65 6e   handle was open
3170: 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ed..*/.int sqlit
3180: 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73  e3_total_changes
3190: 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20  (sqlite3 *db){. 
31a0: 20 72 65 74 75 72 6e 20 64 62 2d 3e 6e 54 6f 74   return db->nTot
31b0: 61 6c 43 68 61 6e 67 65 3b 0a 7d 0a 0a 2f 2a 0a  alChange;.}../*.
31c0: 2a 2a 20 43 6c 6f 73 65 20 61 6e 20 65 78 69 73  ** Close an exis
31d0: 74 69 6e 67 20 53 51 4c 69 74 65 20 64 61 74 61  ting SQLite data
31e0: 62 61 73 65 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  base.*/.int sqli
31f0: 74 65 33 5f 63 6c 6f 73 65 28 73 71 6c 69 74 65  te3_close(sqlite
3200: 33 20 2a 64 62 29 7b 0a 20 20 48 61 73 68 45 6c  3 *db){.  HashEl
3210: 65 6d 20 2a 69 3b 0a 20 20 69 6e 74 20 6a 3b 0a  em *i;.  int j;.
3220: 0a 20 20 69 66 28 20 21 64 62 20 29 7b 0a 20 20  .  if( !db ){.  
3230: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
3240: 4f 4b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71  OK;.  }.  if( sq
3250: 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
3260: 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75  (db) ){.    retu
3270: 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  rn SQLITE_MISUSE
3280: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74  ;.  }..  /* If t
3290: 68 65 72 65 20 61 72 65 20 61 6e 79 20 6f 75 74  here are any out
32a0: 73 74 61 6e 64 69 6e 67 20 56 4d 73 2c 20 72 65  standing VMs, re
32b0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 42 55 53 59  turn SQLITE_BUSY
32c0: 2e 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 70  . */.  if( db->p
32d0: 56 64 62 65 20 29 7b 0a 20 20 20 20 73 71 6c 69  Vdbe ){.    sqli
32e0: 74 65 33 45 72 72 6f 72 28 64 62 2c 20 53 51 4c  te3Error(db, SQL
32f0: 49 54 45 5f 42 55 53 59 2c 20 0a 20 20 20 20 20  ITE_BUSY, .     
3300: 20 20 20 22 55 6e 61 62 6c 65 20 74 6f 20 63 6c     "Unable to cl
3310: 6f 73 65 20 64 75 65 20 74 6f 20 75 6e 66 69 6e  ose due to unfin
3320: 61 6c 69 73 65 64 20 73 74 61 74 65 6d 65 6e 74  alised statement
3330: 73 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  s");.    return 
3340: 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d  SQLITE_BUSY;.  }
3350: 0a 20 20 61 73 73 65 72 74 28 20 21 73 71 6c 69  .  assert( !sqli
3360: 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 28 64  te3SafetyCheck(d
3370: 62 29 20 29 3b 0a 0a 20 20 2f 2a 20 46 49 58 20  b) );..  /* FIX 
3380: 4d 45 3a 20 64 62 2d 3e 6d 61 67 69 63 20 6d 61  ME: db->magic ma
3390: 79 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c 49  y be set to SQLI
33a0: 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20  TE_MAGIC_CLOSED 
33b0: 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  if the database.
33c0: 20 20 2a 2a 20 63 61 6e 6e 6f 74 20 62 65 20 6f    ** cannot be o
33d0: 70 65 6e 65 64 20 66 6f 72 20 73 6f 6d 65 20 72  pened for some r
33e0: 65 61 73 6f 6e 2e 20 53 6f 20 74 68 69 73 20 72  eason. So this r
33f0: 6f 75 74 69 6e 65 20 6e 65 65 64 73 20 74 6f 20  outine needs to 
3400: 72 75 6e 20 69 6e 0a 20 20 2a 2a 20 74 68 61 74  run in.  ** that
3410: 20 63 61 73 65 2e 20 42 75 74 20 6d 61 79 62 65   case. But maybe
3420: 20 74 68 65 72 65 20 73 68 6f 75 6c 64 20 62 65   there should be
3430: 20 61 6e 20 65 78 74 72 61 20 6d 61 67 69 63 20   an extra magic 
3440: 76 61 6c 75 65 20 66 6f 72 20 74 68 65 0a 20 20  value for the.  
3450: 2a 2a 20 22 66 61 69 6c 65 64 20 74 6f 20 6f 70  ** "failed to op
3460: 65 6e 22 20 73 74 61 74 65 2e 0a 20 20 2a 2f 0a  en" state..  */.
3470: 20 20 69 66 28 20 64 62 2d 3e 6d 61 67 69 63 21    if( db->magic!
3480: 3d 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c  =SQLITE_MAGIC_CL
3490: 4f 53 45 44 20 26 26 20 73 71 6c 69 74 65 33 53  OSED && sqlite3S
34a0: 61 66 65 74 79 4f 6e 28 64 62 29 20 29 7b 0a 20  afetyOn(db) ){. 
34b0: 20 20 20 2f 2a 20 70 72 69 6e 74 66 28 22 44 49     /* printf("DI
34c0: 44 20 4e 4f 54 20 43 4c 4f 53 45 5c 6e 22 29 3b  D NOT CLOSE\n");
34d0: 20 66 66 6c 75 73 68 28 73 74 64 6f 75 74 29 3b   fflush(stdout);
34e0: 20 2a 2f 0a 20 20 20 20 72 65 74 75 72 6e 20 53   */.    return S
34f0: 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d  QLITE_ERROR;.  }
3500: 0a 0a 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 64  ..  for(j=0; j<d
3510: 62 2d 3e 6e 44 62 3b 20 6a 2b 2b 29 7b 0a 20 20  b->nDb; j++){.  
3520: 20 20 73 74 72 75 63 74 20 44 62 20 2a 70 44 62    struct Db *pDb
3530: 20 3d 20 26 64 62 2d 3e 61 44 62 5b 6a 5d 3b 0a   = &db->aDb[j];.
3540: 20 20 20 20 69 66 28 20 70 44 62 2d 3e 70 42 74      if( pDb->pBt
3550: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
3560: 33 42 74 72 65 65 43 6c 6f 73 65 28 70 44 62 2d  3BtreeClose(pDb-
3570: 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 70 44 62  >pBt);.      pDb
3580: 2d 3e 70 42 74 20 3d 20 30 3b 0a 20 20 20 20 7d  ->pBt = 0;.    }
3590: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52 65  .  }.  sqlite3Re
35a0: 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d  setInternalSchem
35b0: 61 28 64 62 2c 20 30 29 3b 0a 20 20 61 73 73 65  a(db, 0);.  asse
35c0: 72 74 28 20 64 62 2d 3e 6e 44 62 3c 3d 32 20 29  rt( db->nDb<=2 )
35d0: 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  ;.  assert( db->
35e0: 61 44 62 3d 3d 64 62 2d 3e 61 44 62 53 74 61 74  aDb==db->aDbStat
35f0: 69 63 20 29 3b 0a 20 20 66 6f 72 28 69 3d 73 71  ic );.  for(i=sq
3600: 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 26 64  liteHashFirst(&d
3610: 62 2d 3e 61 46 75 6e 63 29 3b 20 69 3b 20 69 3d  b->aFunc); i; i=
3620: 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 69  sqliteHashNext(i
3630: 29 29 7b 0a 20 20 20 20 46 75 6e 63 44 65 66 20  )){.    FuncDef 
3640: 2a 70 46 75 6e 63 2c 20 2a 70 4e 65 78 74 3b 0a  *pFunc, *pNext;.
3650: 20 20 20 20 66 6f 72 28 70 46 75 6e 63 20 3d 20      for(pFunc = 
3660: 28 46 75 6e 63 44 65 66 2a 29 73 71 6c 69 74 65  (FuncDef*)sqlite
3670: 48 61 73 68 44 61 74 61 28 69 29 3b 20 70 46 75  HashData(i); pFu
3680: 6e 63 3b 20 70 46 75 6e 63 3d 70 4e 65 78 74 29  nc; pFunc=pNext)
3690: 7b 0a 20 20 20 20 20 20 70 4e 65 78 74 20 3d 20  {.      pNext = 
36a0: 70 46 75 6e 63 2d 3e 70 4e 65 78 74 3b 0a 20 20  pFunc->pNext;.  
36b0: 20 20 20 20 73 71 6c 69 74 65 46 72 65 65 28 70      sqliteFree(p
36c0: 46 75 6e 63 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  Func);.    }.  }
36d0: 0a 0a 20 20 66 6f 72 28 69 3d 73 71 6c 69 74 65  ..  for(i=sqlite
36e0: 48 61 73 68 46 69 72 73 74 28 26 64 62 2d 3e 61  HashFirst(&db->a
36f0: 43 6f 6c 6c 53 65 71 29 3b 20 69 3b 20 69 3d 73  CollSeq); i; i=s
3700: 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 69 29  qliteHashNext(i)
3710: 29 7b 0a 20 20 20 20 43 6f 6c 6c 53 65 71 20 2a  ){.    CollSeq *
3720: 70 43 6f 6c 6c 20 3d 20 28 43 6f 6c 6c 53 65 71  pColl = (CollSeq
3730: 20 2a 29 73 71 6c 69 74 65 48 61 73 68 44 61 74   *)sqliteHashDat
3740: 61 28 69 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  a(i);.    sqlite
3750: 46 72 65 65 28 70 43 6f 6c 6c 29 3b 0a 20 20 7d  Free(pColl);.  }
3760: 0a 20 20 73 71 6c 69 74 65 33 48 61 73 68 43 6c  .  sqlite3HashCl
3770: 65 61 72 28 26 64 62 2d 3e 61 43 6f 6c 6c 53 65  ear(&db->aCollSe
3780: 71 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33 48 61  q);..  sqlite3Ha
3790: 73 68 43 6c 65 61 72 28 26 64 62 2d 3e 61 46 75  shClear(&db->aFu
37a0: 6e 63 29 3b 0a 20 20 73 71 6c 69 74 65 33 45 72  nc);.  sqlite3Er
37b0: 72 6f 72 28 64 62 2c 20 53 51 4c 49 54 45 5f 4f  ror(db, SQLITE_O
37c0: 4b 2c 20 30 29 3b 20 2f 2a 20 44 65 61 6c 6c 6f  K, 0); /* Deallo
37d0: 63 61 74 65 73 20 61 6e 79 20 63 61 63 68 65 64  cates any cached
37e0: 20 65 72 72 6f 72 20 73 74 72 69 6e 67 73 2e 20   error strings. 
37f0: 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 70 56 61  */.  if( db->pVa
3800: 6c 75 65 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  lue ){.    sqlit
3810: 65 33 56 61 6c 75 65 46 72 65 65 28 64 62 2d 3e  e3ValueFree(db->
3820: 70 56 61 6c 75 65 29 3b 0a 20 20 7d 0a 20 20 69  pValue);.  }.  i
3830: 66 28 20 64 62 2d 3e 70 45 72 72 20 29 7b 0a 20  f( db->pErr ){. 
3840: 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46     sqlite3ValueF
3850: 72 65 65 28 64 62 2d 3e 70 45 72 72 29 3b 0a 20  ree(db->pErr);. 
3860: 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   }..#ifndef SQLI
3870: 54 45 5f 4f 4d 49 54 5f 43 55 52 53 4f 52 0a 20  TE_OMIT_CURSOR. 
3880: 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 64 62 2d 3e   for(j=0; j<db->
3890: 6e 53 71 6c 43 75 72 73 6f 72 3b 20 6a 2b 2b 29  nSqlCursor; j++)
38a0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 43 75 72  {.    sqlite3Cur
38b0: 73 6f 72 44 65 6c 65 74 65 28 64 62 2d 3e 61 70  sorDelete(db->ap
38c0: 53 71 6c 43 75 72 73 6f 72 5b 6a 5d 29 3b 0a 20  SqlCursor[j]);. 
38d0: 20 7d 0a 20 20 73 71 6c 69 74 65 46 72 65 65 28   }.  sqliteFree(
38e0: 64 62 2d 3e 61 70 53 71 6c 43 75 72 73 6f 72 29  db->apSqlCursor)
38f0: 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 64 62 2d 3e  ;.#endif..  db->
3900: 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d  magic = SQLITE_M
3910: 41 47 49 43 5f 45 52 52 4f 52 3b 0a 20 20 73 71  AGIC_ERROR;.  sq
3920: 6c 69 74 65 46 72 65 65 28 64 62 29 3b 0a 20 20  liteFree(db);.  
3930: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
3940: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 6f 6c 6c 62  ;.}../*.** Rollb
3950: 61 63 6b 20 61 6c 6c 20 64 61 74 61 62 61 73 65  ack all database
3960: 20 66 69 6c 65 73 2e 0a 2a 2f 0a 76 6f 69 64 20   files..*/.void 
3970: 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41  sqlite3RollbackA
3980: 6c 6c 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b  ll(sqlite3 *db){
3990: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 66 6f 72 28  .  int i;.  for(
39a0: 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20  i=0; i<db->nDb; 
39b0: 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 64 62  i++){.    if( db
39c0: 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 20 29 7b 0a  ->aDb[i].pBt ){.
39d0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72        sqlite3Btr
39e0: 65 65 52 6f 6c 6c 62 61 63 6b 28 64 62 2d 3e 61  eeRollback(db->a
39f0: 44 62 5b 69 5d 2e 70 42 74 29 3b 0a 20 20 20 20  Db[i].pBt);.    
3a00: 20 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 69 6e 54    db->aDb[i].inT
3a10: 72 61 6e 73 20 3d 20 30 3b 0a 20 20 20 20 7d 0a  rans = 0;.    }.
3a20: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52 65 73    }.  sqlite3Res
3a30: 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61  etInternalSchema
3a40: 28 64 62 2c 20 30 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  (db, 0);.}../*.*
3a50: 2a 20 52 65 74 75 72 6e 20 61 20 73 74 61 74 69  * Return a stati
3a60: 63 20 73 74 72 69 6e 67 20 74 68 61 74 20 64 65  c string that de
3a70: 73 63 72 69 62 65 73 20 74 68 65 20 6b 69 6e 64  scribes the kind
3a80: 20 6f 66 20 65 72 72 6f 72 20 73 70 65 63 69 66   of error specif
3a90: 69 65 64 20 69 6e 20 74 68 65 0a 2a 2a 20 61 72  ied in the.** ar
3aa0: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 63 6f 6e 73 74  gument..*/.const
3ab0: 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72   char *sqlite3Er
3ac0: 72 53 74 72 28 69 6e 74 20 72 63 29 7b 0a 20 20  rStr(int rc){.  
3ad0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 0a 20  const char *z;. 
3ae0: 20 73 77 69 74 63 68 28 20 72 63 20 29 7b 0a 20   switch( rc ){. 
3af0: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 52     case SQLITE_R
3b00: 4f 57 3a 0a 20 20 20 20 63 61 73 65 20 53 51 4c  OW:.    case SQL
3b10: 49 54 45 5f 44 4f 4e 45 3a 0a 20 20 20 20 63 61  ITE_DONE:.    ca
3b20: 73 65 20 53 51 4c 49 54 45 5f 4f 4b 3a 20 20 20  se SQLITE_OK:   
3b30: 20 20 20 20 20 20 7a 20 3d 20 22 6e 6f 74 20 61        z = "not a
3b40: 6e 20 65 72 72 6f 72 22 3b 20 20 20 20 20 20 20  n error";       
3b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b60: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
3b70: 73 65 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3a  se SQLITE_ERROR:
3b80: 20 20 20 20 20 20 7a 20 3d 20 22 53 51 4c 20 6c        z = "SQL l
3b90: 6f 67 69 63 20 65 72 72 6f 72 20 6f 72 20 6d 69  ogic error or mi
3ba0: 73 73 69 6e 67 20 64 61 74 61 62 61 73 65 22 3b  ssing database";
3bb0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
3bc0: 73 65 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 4e  se SQLITE_INTERN
3bd0: 41 4c 3a 20 20 20 7a 20 3d 20 22 69 6e 74 65 72  AL:   z = "inter
3be0: 6e 61 6c 20 53 51 4c 69 74 65 20 69 6d 70 6c 65  nal SQLite imple
3bf0: 6d 65 6e 74 61 74 69 6f 6e 20 66 6c 61 77 22 3b  mentation flaw";
3c00: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
3c10: 73 65 20 53 51 4c 49 54 45 5f 50 45 52 4d 3a 20  se SQLITE_PERM: 
3c20: 20 20 20 20 20 20 7a 20 3d 20 22 61 63 63 65 73        z = "acces
3c30: 73 20 70 65 72 6d 69 73 73 69 6f 6e 20 64 65 6e  s permission den
3c40: 69 65 64 22 3b 20 20 20 20 20 20 20 20 20 20 20  ied";           
3c50: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
3c60: 73 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 3a  se SQLITE_ABORT:
3c70: 20 20 20 20 20 20 7a 20 3d 20 22 63 61 6c 6c 62        z = "callb
3c80: 61 63 6b 20 72 65 71 75 65 73 74 65 64 20 71 75  ack requested qu
3c90: 65 72 79 20 61 62 6f 72 74 22 3b 20 20 20 20 20  ery abort";     
3ca0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
3cb0: 73 65 20 53 51 4c 49 54 45 5f 42 55 53 59 3a 20  se SQLITE_BUSY: 
3cc0: 20 20 20 20 20 20 7a 20 3d 20 22 64 61 74 61 62        z = "datab
3cd0: 61 73 65 20 69 73 20 6c 6f 63 6b 65 64 22 3b 20  ase is locked"; 
3ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3cf0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
3d00: 73 65 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  se SQLITE_LOCKED
3d10: 3a 20 20 20 20 20 7a 20 3d 20 22 64 61 74 61 62  :     z = "datab
3d20: 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63  ase table is loc
3d30: 6b 65 64 22 3b 20 20 20 20 20 20 20 20 20 20 20  ked";           
3d40: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
3d50: 73 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3a  se SQLITE_NOMEM:
3d60: 20 20 20 20 20 20 7a 20 3d 20 22 6f 75 74 20 6f        z = "out o
3d70: 66 20 6d 65 6d 6f 72 79 22 3b 20 20 20 20 20 20  f memory";      
3d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d90: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
3da0: 73 65 20 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e  se SQLITE_READON
3db0: 4c 59 3a 20 20 20 7a 20 3d 20 22 61 74 74 65 6d  LY:   z = "attem
3dc0: 70 74 20 74 6f 20 77 72 69 74 65 20 61 20 72 65  pt to write a re
3dd0: 61 64 6f 6e 6c 79 20 64 61 74 61 62 61 73 65 22  adonly database"
3de0: 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61  ;  break;.    ca
3df0: 73 65 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52  se SQLITE_INTERR
3e00: 55 50 54 3a 20 20 7a 20 3d 20 22 69 6e 74 65 72  UPT:  z = "inter
3e10: 72 75 70 74 65 64 22 3b 20 20 20 20 20 20 20 20  rupted";        
3e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e30: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
3e40: 73 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 3a  se SQLITE_IOERR:
3e50: 20 20 20 20 20 20 7a 20 3d 20 22 64 69 73 6b 20        z = "disk 
3e60: 49 2f 4f 20 65 72 72 6f 72 22 3b 20 20 20 20 20  I/O error";     
3e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e80: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
3e90: 73 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  se SQLITE_CORRUP
3ea0: 54 3a 20 20 20 20 7a 20 3d 20 22 64 61 74 61 62  T:    z = "datab
3eb0: 61 73 65 20 64 69 73 6b 20 69 6d 61 67 65 20 69  ase disk image i
3ec0: 73 20 6d 61 6c 66 6f 72 6d 65 64 22 3b 20 20 20  s malformed";   
3ed0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
3ee0: 73 65 20 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55  se SQLITE_NOTFOU
3ef0: 4e 44 3a 20 20 20 7a 20 3d 20 22 74 61 62 6c 65  ND:   z = "table
3f00: 20 6f 72 20 72 65 63 6f 72 64 20 6e 6f 74 20 66   or record not f
3f10: 6f 75 6e 64 22 3b 20 20 20 20 20 20 20 20 20 20  ound";          
3f20: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
3f30: 73 65 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3a 20  se SQLITE_FULL: 
3f40: 20 20 20 20 20 20 7a 20 3d 20 22 64 61 74 61 62        z = "datab
3f50: 61 73 65 20 69 73 20 66 75 6c 6c 22 3b 20 20 20  ase is full";   
3f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f70: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
3f80: 73 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50  se SQLITE_CANTOP
3f90: 45 4e 3a 20 20 20 7a 20 3d 20 22 75 6e 61 62 6c  EN:   z = "unabl
3fa0: 65 20 74 6f 20 6f 70 65 6e 20 64 61 74 61 62 61  e to open databa
3fb0: 73 65 20 66 69 6c 65 22 3b 20 20 20 20 20 20 20  se file";       
3fc0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
3fd0: 73 65 20 53 51 4c 49 54 45 5f 50 52 4f 54 4f 43  se SQLITE_PROTOC
3fe0: 4f 4c 3a 20 20 20 7a 20 3d 20 22 64 61 74 61 62  OL:   z = "datab
3ff0: 61 73 65 20 6c 6f 63 6b 69 6e 67 20 70 72 6f 74  ase locking prot
4000: 6f 63 6f 6c 20 66 61 69 6c 75 72 65 22 3b 20 20  ocol failure";  
4010: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
4020: 73 65 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 3a  se SQLITE_EMPTY:
4030: 20 20 20 20 20 20 7a 20 3d 20 22 74 61 62 6c 65        z = "table
4040: 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 61 74   contains no dat
4050: 61 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  a";             
4060: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
4070: 73 65 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41  se SQLITE_SCHEMA
4080: 3a 20 20 20 20 20 7a 20 3d 20 22 64 61 74 61 62  :     z = "datab
4090: 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 63  ase schema has c
40a0: 68 61 6e 67 65 64 22 3b 20 20 20 20 20 20 20 20  hanged";        
40b0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
40c0: 73 65 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47  se SQLITE_TOOBIG
40d0: 3a 20 20 20 20 20 7a 20 3d 20 22 74 6f 6f 20 6d  :     z = "too m
40e0: 75 63 68 20 64 61 74 61 20 66 6f 72 20 6f 6e 65  uch data for one
40f0: 20 74 61 62 6c 65 20 72 6f 77 22 3b 20 20 20 20   table row";    
4100: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
4110: 73 65 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52  se SQLITE_CONSTR
4120: 41 49 4e 54 3a 20 7a 20 3d 20 22 63 6f 6e 73 74  AINT: z = "const
4130: 72 61 69 6e 74 20 66 61 69 6c 65 64 22 3b 20 20  raint failed";  
4140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4150: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
4160: 73 65 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54  se SQLITE_MISMAT
4170: 43 48 3a 20 20 20 7a 20 3d 20 22 64 61 74 61 74  CH:   z = "datat
4180: 79 70 65 20 6d 69 73 6d 61 74 63 68 22 3b 20 20  ype mismatch";  
4190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
41a0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
41b0: 73 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  se SQLITE_MISUSE
41c0: 3a 20 20 20 20 20 7a 20 3d 20 22 6c 69 62 72 61  :     z = "libra
41d0: 72 79 20 72 6f 75 74 69 6e 65 20 63 61 6c 6c 65  ry routine calle
41e0: 64 20 6f 75 74 20 6f 66 20 73 65 71 75 65 6e 63  d out of sequenc
41f0: 65 22 3b 62 72 65 61 6b 3b 0a 20 20 20 20 63 61  e";break;.    ca
4200: 73 65 20 53 51 4c 49 54 45 5f 4e 4f 4c 46 53 3a  se SQLITE_NOLFS:
4210: 20 20 20 20 20 20 7a 20 3d 20 22 6b 65 72 6e 65        z = "kerne
4220: 6c 20 6c 61 63 6b 73 20 6c 61 72 67 65 20 66 69  l lacks large fi
4230: 6c 65 20 73 75 70 70 6f 72 74 22 3b 20 20 20 20  le support";    
4240: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
4250: 73 65 20 53 51 4c 49 54 45 5f 41 55 54 48 3a 20  se SQLITE_AUTH: 
4260: 20 20 20 20 20 20 7a 20 3d 20 22 61 75 74 68 6f        z = "autho
4270: 72 69 7a 61 74 69 6f 6e 20 64 65 6e 69 65 64 22  rization denied"
4280: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4290: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
42a0: 73 65 20 53 51 4c 49 54 45 5f 46 4f 52 4d 41 54  se SQLITE_FORMAT
42b0: 3a 20 20 20 20 20 7a 20 3d 20 22 61 75 78 69 6c  :     z = "auxil
42c0: 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66 6f  iary database fo
42d0: 72 6d 61 74 20 65 72 72 6f 72 22 3b 20 20 20 20  rmat error";    
42e0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
42f0: 73 65 20 53 51 4c 49 54 45 5f 52 41 4e 47 45 3a  se SQLITE_RANGE:
4300: 20 20 20 20 20 20 7a 20 3d 20 22 62 69 6e 64 20        z = "bind 
4310: 6f 72 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 20  or column index 
4320: 6f 75 74 20 6f 66 20 72 61 6e 67 65 22 3b 20 20  out of range";  
4330: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
4340: 73 65 20 53 51 4c 49 54 45 5f 4e 4f 54 41 44 42  se SQLITE_NOTADB
4350: 3a 20 20 20 20 20 7a 20 3d 20 22 66 69 6c 65 20  :     z = "file 
4360: 69 73 20 65 6e 63 72 79 70 74 65 64 20 6f 72 20  is encrypted or 
4370: 69 73 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73  is not a databas
4380: 65 22 3b 62 72 65 61 6b 3b 0a 20 20 20 20 64 65  e";break;.    de
4390: 66 61 75 6c 74 3a 20 20 20 20 20 20 20 20 20 20  fault:          
43a0: 20 20 20 20 20 20 7a 20 3d 20 22 75 6e 6b 6e 6f        z = "unkno
43b0: 77 6e 20 65 72 72 6f 72 22 3b 20 20 20 20 20 20  wn error";      
43c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43d0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
43e0: 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 2f 2a 0a  return z;.}../*.
43f0: 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  ** This routine 
4400: 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 62 75 73  implements a bus
4410: 79 20 63 61 6c 6c 62 61 63 6b 20 74 68 61 74 20  y callback that 
4420: 73 6c 65 65 70 73 20 61 6e 64 20 74 72 69 65 73  sleeps and tries
4430: 0a 2a 2a 20 61 67 61 69 6e 20 75 6e 74 69 6c 20  .** again until 
4440: 61 20 74 69 6d 65 6f 75 74 20 76 61 6c 75 65 20  a timeout value 
4450: 69 73 20 72 65 61 63 68 65 64 2e 20 20 54 68 65  is reached.  The
4460: 20 74 69 6d 65 6f 75 74 20 76 61 6c 75 65 20 69   timeout value i
4470: 73 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 20  s.** an integer 
4480: 6e 75 6d 62 65 72 20 6f 66 20 6d 69 6c 6c 69 73  number of millis
4490: 65 63 6f 6e 64 73 20 70 61 73 73 65 64 20 69 6e  econds passed in
44a0: 20 61 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a   as the first.**
44b0: 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74   argument..*/.st
44c0: 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65 44  atic int sqliteD
44d0: 65 66 61 75 6c 74 42 75 73 79 43 61 6c 6c 62 61  efaultBusyCallba
44e0: 63 6b 28 0a 20 76 6f 69 64 20 2a 54 69 6d 65 6f  ck(. void *Timeo
44f0: 75 74 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ut,           /*
4500: 20 4d 61 78 69 6d 75 6d 20 61 6d 6f 75 6e 74 20   Maximum amount 
4510: 6f 66 20 74 69 6d 65 20 74 6f 20 77 61 69 74 20  of time to wait 
4520: 2a 2f 0a 20 69 6e 74 20 63 6f 75 6e 74 20 20 20  */. int count   
4530: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4540: 4e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 20  Number of times 
4550: 74 61 62 6c 65 20 68 61 73 20 62 65 65 6e 20 62  table has been b
4560: 75 73 79 20 2a 2f 0a 29 7b 0a 23 69 66 20 53 51  usy */.){.#if SQ
4570: 4c 49 54 45 5f 4d 49 4e 5f 53 4c 45 45 50 5f 4d  LITE_MIN_SLEEP_M
4580: 53 3d 3d 31 0a 20 20 73 74 61 74 69 63 20 63 6f  S==1.  static co
4590: 6e 73 74 20 63 68 61 72 20 64 65 6c 61 79 73 5b  nst char delays[
45a0: 5d 20 3d 0a 20 20 20 20 20 7b 20 31 2c 20 32 2c  ] =.     { 1, 2,
45b0: 20 35 2c 20 31 30 2c 20 31 35 2c 20 32 30 2c 20   5, 10, 15, 20, 
45c0: 32 35 2c 20 32 35 2c 20 20 32 35 2c 20 20 35 30  25, 25,  25,  50
45d0: 2c 20 20 35 30 2c 20 20 35 30 2c 20 31 30 30 7d  ,  50,  50, 100}
45e0: 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74  ;.  static const
45f0: 20 73 68 6f 72 74 20 69 6e 74 20 74 6f 74 61 6c   short int total
4600: 73 5b 5d 20 3d 0a 20 20 20 20 20 7b 20 30 2c 20  s[] =.     { 0, 
4610: 31 2c 20 33 2c 20 20 38 2c 20 31 38 2c 20 33 33  1, 3,  8, 18, 33
4620: 2c 20 35 33 2c 20 37 38 2c 20 31 30 33 2c 20 31  , 53, 78, 103, 1
4630: 32 38 2c 20 31 37 38 2c 20 32 32 38 2c 20 32 38  28, 178, 228, 28
4640: 37 7d 3b 0a 23 20 64 65 66 69 6e 65 20 4e 44 45  7};.# define NDE
4650: 4c 41 59 20 28 73 69 7a 65 6f 66 28 64 65 6c 61  LAY (sizeof(dela
4660: 79 73 29 2f 73 69 7a 65 6f 66 28 64 65 6c 61 79  ys)/sizeof(delay
4670: 73 5b 30 5d 29 29 0a 20 20 70 74 72 20 74 69 6d  s[0])).  ptr tim
4680: 65 6f 75 74 20 3d 20 28 70 74 72 29 54 69 6d 65  eout = (ptr)Time
4690: 6f 75 74 3b 0a 20 20 70 74 72 20 64 65 6c 61 79  out;.  ptr delay
46a0: 2c 20 70 72 69 6f 72 3b 0a 0a 20 20 69 66 28 20  , prior;..  if( 
46b0: 63 6f 75 6e 74 20 3c 3d 20 4e 44 45 4c 41 59 20  count <= NDELAY 
46c0: 29 7b 0a 20 20 20 20 64 65 6c 61 79 20 3d 20 64  ){.    delay = d
46d0: 65 6c 61 79 73 5b 63 6f 75 6e 74 2d 31 5d 3b 0a  elays[count-1];.
46e0: 20 20 20 20 70 72 69 6f 72 20 3d 20 74 6f 74 61      prior = tota
46f0: 6c 73 5b 63 6f 75 6e 74 2d 31 5d 3b 0a 20 20 7d  ls[count-1];.  }
4700: 65 6c 73 65 7b 0a 20 20 20 20 64 65 6c 61 79 20  else{.    delay 
4710: 3d 20 64 65 6c 61 79 73 5b 4e 44 45 4c 41 59 2d  = delays[NDELAY-
4720: 31 5d 3b 0a 20 20 20 20 70 72 69 6f 72 20 3d 20  1];.    prior = 
4730: 74 6f 74 61 6c 73 5b 4e 44 45 4c 41 59 2d 31 5d  totals[NDELAY-1]
4740: 20 2b 20 64 65 6c 61 79 2a 28 63 6f 75 6e 74 2d   + delay*(count-
4750: 4e 44 45 4c 41 59 2d 31 29 3b 0a 20 20 7d 0a 20  NDELAY-1);.  }. 
4760: 20 69 66 28 20 70 72 69 6f 72 20 2b 20 64 65 6c   if( prior + del
4770: 61 79 20 3e 20 74 69 6d 65 6f 75 74 20 29 7b 0a  ay > timeout ){.
4780: 20 20 20 20 64 65 6c 61 79 20 3d 20 74 69 6d 65      delay = time
4790: 6f 75 74 20 2d 20 70 72 69 6f 72 3b 0a 20 20 20  out - prior;.   
47a0: 20 69 66 28 20 64 65 6c 61 79 3c 3d 30 20 29 20   if( delay<=0 ) 
47b0: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20  return 0;.  }.  
47c0: 73 71 6c 69 74 65 33 4f 73 53 6c 65 65 70 28 64  sqlite3OsSleep(d
47d0: 65 6c 61 79 29 3b 0a 20 20 72 65 74 75 72 6e 20  elay);.  return 
47e0: 31 3b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 74  1;.#else.  int t
47f0: 69 6d 65 6f 75 74 20 3d 20 28 69 6e 74 29 54 69  imeout = (int)Ti
4800: 6d 65 6f 75 74 3b 0a 20 20 69 66 28 20 28 63 6f  meout;.  if( (co
4810: 75 6e 74 2b 31 29 2a 31 30 30 30 20 3e 20 74 69  unt+1)*1000 > ti
4820: 6d 65 6f 75 74 20 29 7b 0a 20 20 20 20 72 65 74  meout ){.    ret
4830: 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c  urn 0;.  }.  sql
4840: 69 74 65 33 4f 73 53 6c 65 65 70 28 31 30 30 30  ite3OsSleep(1000
4850: 29 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 23  );.  return 1;.#
4860: 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  endif.}../*.** T
4870: 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73  his routine sets
4880: 20 74 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61   the busy callba
4890: 63 6b 20 66 6f 72 20 61 6e 20 53 71 6c 69 74 65  ck for an Sqlite
48a0: 20 64 61 74 61 62 61 73 65 20 74 6f 20 74 68 65   database to the
48b0: 0a 2a 2a 20 67 69 76 65 6e 20 63 61 6c 6c 62 61  .** given callba
48c0: 63 6b 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68  ck function with
48d0: 20 74 68 65 20 67 69 76 65 6e 20 61 72 67 75 6d   the given argum
48e0: 65 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ent..*/.int sqli
48f0: 74 65 33 5f 62 75 73 79 5f 68 61 6e 64 6c 65 72  te3_busy_handler
4900: 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c  (.  sqlite3 *db,
4910: 0a 20 20 69 6e 74 20 28 2a 78 42 75 73 79 29 28  .  int (*xBusy)(
4920: 76 6f 69 64 2a 2c 69 6e 74 29 2c 0a 20 20 76 6f  void*,int),.  vo
4930: 69 64 20 2a 70 41 72 67 0a 29 7b 0a 20 20 69 66  id *pArg.){.  if
4940: 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  ( sqlite3SafetyC
4950: 68 65 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20  heck(db) ){.    
4960: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49  return SQLITE_MI
4970: 53 55 53 45 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e  SUSE;.  }.  db->
4980: 62 75 73 79 48 61 6e 64 6c 65 72 2e 78 46 75 6e  busyHandler.xFun
4990: 63 20 3d 20 78 42 75 73 79 3b 0a 20 20 64 62 2d  c = xBusy;.  db-
49a0: 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 70 41 72  >busyHandler.pAr
49b0: 67 20 3d 20 70 41 72 67 3b 0a 20 20 72 65 74 75  g = pArg;.  retu
49c0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a  rn SQLITE_OK;.}.
49d0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
49e0: 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41  OMIT_PROGRESS_CA
49f0: 4c 4c 42 41 43 4b 0a 2f 2a 0a 2a 2a 20 54 68 69  LLBACK./*.** Thi
4a00: 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74  s routine sets t
4a10: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
4a20: 62 61 63 6b 20 66 6f 72 20 61 6e 20 53 71 6c 69  back for an Sqli
4a30: 74 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 74  te database to t
4a40: 68 65 0a 2a 2a 20 67 69 76 65 6e 20 63 61 6c 6c  he.** given call
4a50: 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 77 69  back function wi
4a60: 74 68 20 74 68 65 20 67 69 76 65 6e 20 61 72 67  th the given arg
4a70: 75 6d 65 6e 74 2e 20 54 68 65 20 70 72 6f 67 72  ument. The progr
4a80: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 77 69 6c  ess callback wil
4a90: 6c 0a 2a 2a 20 62 65 20 69 6e 76 6f 6b 65 64 20  l.** be invoked 
4aa0: 65 76 65 72 79 20 6e 4f 70 73 20 6f 70 63 6f 64  every nOps opcod
4ab0: 65 73 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  es..*/.void sqli
4ac0: 74 65 33 5f 70 72 6f 67 72 65 73 73 5f 68 61 6e  te3_progress_han
4ad0: 64 6c 65 72 28 0a 20 20 73 71 6c 69 74 65 33 20  dler(.  sqlite3 
4ae0: 2a 64 62 2c 20 0a 20 20 69 6e 74 20 6e 4f 70 73  *db, .  int nOps
4af0: 2c 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72  ,.  int (*xProgr
4b00: 65 73 73 29 28 76 6f 69 64 2a 29 2c 20 0a 20 20  ess)(void*), .  
4b10: 76 6f 69 64 20 2a 70 41 72 67 0a 29 7b 0a 20 20  void *pArg.){.  
4b20: 69 66 28 20 21 73 71 6c 69 74 65 33 53 61 66 65  if( !sqlite3Safe
4b30: 74 79 43 68 65 63 6b 28 64 62 29 20 29 7b 0a 20  tyCheck(db) ){. 
4b40: 20 20 20 69 66 28 20 6e 4f 70 73 3e 30 20 29 7b     if( nOps>0 ){
4b50: 0a 20 20 20 20 20 20 64 62 2d 3e 78 50 72 6f 67  .      db->xProg
4b60: 72 65 73 73 20 3d 20 78 50 72 6f 67 72 65 73 73  ress = xProgress
4b70: 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6e 50 72 6f  ;.      db->nPro
4b80: 67 72 65 73 73 4f 70 73 20 3d 20 6e 4f 70 73 3b  gressOps = nOps;
4b90: 0a 20 20 20 20 20 20 64 62 2d 3e 70 50 72 6f 67  .      db->pProg
4ba0: 72 65 73 73 41 72 67 20 3d 20 70 41 72 67 3b 0a  ressArg = pArg;.
4bb0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
4bc0: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 3d   db->xProgress =
4bd0: 20 30 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6e 50   0;.      db->nP
4be0: 72 6f 67 72 65 73 73 4f 70 73 20 3d 20 30 3b 0a  rogressOps = 0;.
4bf0: 20 20 20 20 20 20 64 62 2d 3e 70 50 72 6f 67 72        db->pProgr
4c00: 65 73 73 41 72 67 20 3d 20 30 3b 0a 20 20 20 20  essArg = 0;.    
4c10: 7d 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a  }.  }.}.#endif..
4c20: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  ./*.** This rout
4c30: 69 6e 65 20 69 6e 73 74 61 6c 6c 73 20 61 20 64  ine installs a d
4c40: 65 66 61 75 6c 74 20 62 75 73 79 20 68 61 6e 64  efault busy hand
4c50: 6c 65 72 20 74 68 61 74 20 77 61 69 74 73 20 66  ler that waits f
4c60: 6f 72 20 74 68 65 0a 2a 2a 20 73 70 65 63 69 66  or the.** specif
4c70: 69 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 6d 69  ied number of mi
4c80: 6c 6c 69 73 65 63 6f 6e 64 73 20 62 65 66 6f 72  lliseconds befor
4c90: 65 20 72 65 74 75 72 6e 69 6e 67 20 30 2e 0a 2a  e returning 0..*
4ca0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 62 75  /.int sqlite3_bu
4cb0: 73 79 5f 74 69 6d 65 6f 75 74 28 73 71 6c 69 74  sy_timeout(sqlit
4cc0: 65 33 20 2a 64 62 2c 20 69 6e 74 20 6d 73 29 7b  e3 *db, int ms){
4cd0: 0a 20 20 69 66 28 20 6d 73 3e 30 20 29 7b 0a 20  .  if( ms>0 ){. 
4ce0: 20 20 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f     sqlite3_busy_
4cf0: 68 61 6e 64 6c 65 72 28 64 62 2c 20 73 71 6c 69  handler(db, sqli
4d00: 74 65 44 65 66 61 75 6c 74 42 75 73 79 43 61 6c  teDefaultBusyCal
4d10: 6c 62 61 63 6b 2c 20 28 76 6f 69 64 2a 29 28 70  lback, (void*)(p
4d20: 74 72 29 6d 73 29 3b 0a 20 20 7d 65 6c 73 65 7b  tr)ms);.  }else{
4d30: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 75 73  .    sqlite3_bus
4d40: 79 5f 68 61 6e 64 6c 65 72 28 64 62 2c 20 30 2c  y_handler(db, 0,
4d50: 20 30 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72   0);.  }.  retur
4d60: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a  n SQLITE_OK;.}..
4d70: 2f 2a 0a 2a 2a 20 43 61 75 73 65 20 61 6e 79 20  /*.** Cause any 
4d80: 70 65 6e 64 69 6e 67 20 6f 70 65 72 61 74 69 6f  pending operatio
4d90: 6e 20 74 6f 20 73 74 6f 70 20 61 74 20 69 74 73  n to stop at its
4da0: 20 65 61 72 6c 69 65 73 74 20 6f 70 70 6f 72 74   earliest opport
4db0: 75 6e 69 74 79 2e 0a 2a 2f 0a 76 6f 69 64 20 73  unity..*/.void s
4dc0: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
4dd0: 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20  (sqlite3 *db){. 
4de0: 20 69 66 28 20 21 73 71 6c 69 74 65 33 53 61 66   if( !sqlite3Saf
4df0: 65 74 79 43 68 65 63 6b 28 64 62 29 20 29 7b 0a  etyCheck(db) ){.
4e00: 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d      db->flags |=
4e10: 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 72 75 70   SQLITE_Interrup
4e20: 74 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  t;.  }.}../*.** 
4e30: 57 69 6e 64 6f 77 73 20 73 79 73 74 65 6d 73 20  Windows systems 
4e40: 73 68 6f 75 6c 64 20 63 61 6c 6c 20 74 68 69 73  should call this
4e50: 20 72 6f 75 74 69 6e 65 20 74 6f 20 66 72 65 65   routine to free
4e60: 20 6d 65 6d 6f 72 79 20 74 68 61 74 0a 2a 2a 20   memory that.** 
4e70: 69 73 20 72 65 74 75 72 6e 65 64 20 69 6e 20 74  is returned in t
4e80: 68 65 20 69 6e 20 74 68 65 20 65 72 72 6d 73 67  he in the errmsg
4e90: 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73 71   parameter of sq
4ea0: 6c 69 74 65 33 5f 6f 70 65 6e 28 29 20 77 68 65  lite3_open() whe
4eb0: 6e 0a 2a 2a 20 53 51 4c 69 74 65 20 69 73 20 61  n.** SQLite is a
4ec0: 20 44 4c 4c 2e 20 20 46 6f 72 20 73 6f 6d 65 20   DLL.  For some 
4ed0: 72 65 61 73 6f 6e 2c 20 69 74 20 64 6f 65 73 20  reason, it does 
4ee0: 6e 6f 74 20 77 6f 72 6b 20 74 6f 20 63 61 6c 6c  not work to call
4ef0: 20 66 72 65 65 28 29 0a 2a 2a 20 64 69 72 65 63   free().** direc
4f00: 74 6c 79 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  tly..**.** Note 
4f10: 74 68 61 74 20 77 65 20 6e 65 65 64 20 74 6f 20  that we need to 
4f20: 63 61 6c 6c 20 66 72 65 65 28 29 20 6e 6f 74 20  call free() not 
4f30: 73 71 6c 69 74 65 46 72 65 65 28 29 20 68 65 72  sqliteFree() her
4f40: 65 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  e..*/.void sqlit
4f50: 65 33 5f 66 72 65 65 28 63 68 61 72 20 2a 70 29  e3_free(char *p)
4f60: 7b 20 66 72 65 65 28 70 29 3b 20 7d 0a 0a 2f 2a  { free(p); }../*
4f70: 0a 2a 2a 20 43 72 65 61 74 65 20 6e 65 77 20 75  .** Create new u
4f80: 73 65 72 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a  ser functions..*
4f90: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 72  /.int sqlite3_cr
4fa0: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 0a 20  eate_function(. 
4fb0: 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a 20 20   sqlite3 *db,.  
4fc0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 75 6e  const char *zFun
4fd0: 63 74 69 6f 6e 4e 61 6d 65 2c 0a 20 20 69 6e 74  ctionName,.  int
4fe0: 20 6e 41 72 67 2c 0a 20 20 69 6e 74 20 65 6e 63   nArg,.  int enc
4ff0: 2c 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44  ,.  void *pUserD
5000: 61 74 61 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46  ata,.  void (*xF
5010: 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  unc)(sqlite3_con
5020: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
5030: 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76  3_value **),.  v
5040: 6f 69 64 20 28 2a 78 53 74 65 70 29 28 73 71 6c  oid (*xStep)(sql
5050: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
5060: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  t,sqlite3_value 
5070: 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46  **),.  void (*xF
5080: 69 6e 61 6c 29 28 73 71 6c 69 74 65 33 5f 63 6f  inal)(sqlite3_co
5090: 6e 74 65 78 74 2a 29 0a 29 7b 0a 20 20 46 75 6e  ntext*).){.  Fun
50a0: 63 44 65 66 20 2a 70 3b 0a 20 20 69 6e 74 20 6e  cDef *p;.  int n
50b0: 4e 61 6d 65 3b 0a 0a 20 20 69 66 28 20 73 71 6c  Name;..  if( sql
50c0: 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 28  ite3SafetyCheck(
50d0: 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72  db) ){.    retur
50e0: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b  n SQLITE_MISUSE;
50f0: 0a 20 20 7d 0a 20 20 69 66 28 20 7a 46 75 6e 63  .  }.  if( zFunc
5100: 74 69 6f 6e 4e 61 6d 65 3d 3d 30 20 7c 7c 0a 20  tionName==0 ||. 
5110: 20 20 20 20 20 28 78 46 75 6e 63 20 26 26 20 28       (xFunc && (
5120: 78 46 69 6e 61 6c 20 7c 7c 20 78 53 74 65 70 29  xFinal || xStep)
5130: 29 20 7c 7c 20 0a 20 20 20 20 20 20 28 21 78 46  ) || .      (!xF
5140: 75 6e 63 20 26 26 20 28 78 46 69 6e 61 6c 20 26  unc && (xFinal &
5150: 26 20 21 78 53 74 65 70 29 29 20 7c 7c 0a 20 20  & !xStep)) ||.  
5160: 20 20 20 20 28 21 78 46 75 6e 63 20 26 26 20 28      (!xFunc && (
5170: 21 78 46 69 6e 61 6c 20 26 26 20 78 53 74 65 70  !xFinal && xStep
5180: 29 29 20 7c 7c 0a 20 20 20 20 20 20 28 6e 41 72  )) ||.      (nAr
5190: 67 3c 2d 31 20 7c 7c 20 6e 41 72 67 3e 31 32 37  g<-1 || nArg>127
51a0: 29 20 7c 7c 0a 20 20 20 20 20 20 28 32 35 35 3c  ) ||.      (255<
51b0: 28 6e 4e 61 6d 65 20 3d 20 73 74 72 6c 65 6e 28  (nName = strlen(
51c0: 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 29 29 29  zFunctionName)))
51d0: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
51e0: 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d  QLITE_ERROR;.  }
51f0: 0a 20 20 0a 20 20 2f 2a 20 49 66 20 53 51 4c 49  .  .  /* If SQLI
5200: 54 45 5f 55 54 46 31 36 20 69 73 20 73 70 65 63  TE_UTF16 is spec
5210: 69 66 69 65 64 20 61 73 20 74 68 65 20 65 6e 63  ified as the enc
5220: 6f 64 69 6e 67 20 74 79 70 65 2c 20 74 72 61 6e  oding type, tran
5230: 73 66 6f 72 6d 20 74 68 69 73 0a 20 20 2a 2a 20  sform this.  ** 
5240: 74 6f 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45  to one of SQLITE
5250: 5f 55 54 46 31 36 4c 45 20 6f 72 20 53 51 4c 49  _UTF16LE or SQLI
5260: 54 45 5f 55 54 46 31 36 42 45 20 75 73 69 6e 67  TE_UTF16BE using
5270: 20 74 68 65 0a 20 20 2a 2a 20 53 51 4c 49 54 45   the.  ** SQLITE
5280: 5f 55 54 46 31 36 4e 41 54 49 56 45 20 6d 61 63  _UTF16NATIVE mac
5290: 72 6f 2e 20 53 51 4c 49 54 45 5f 55 54 46 31 36  ro. SQLITE_UTF16
52a0: 20 69 73 20 6e 6f 74 20 75 73 65 64 20 69 6e 74   is not used int
52b0: 65 72 6e 61 6c 6c 79 2e 0a 20 20 2a 2a 0a 20 20  ernally..  **.  
52c0: 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 41 4e 59  ** If SQLITE_ANY
52d0: 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 61   is specified, a
52e0: 64 64 20 74 68 72 65 65 20 76 65 72 73 69 6f 6e  dd three version
52f0: 73 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  s of the functio
5300: 6e 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 68 61  n.  ** to the ha
5310: 73 68 20 74 61 62 6c 65 2e 0a 20 20 2a 2f 0a 20  sh table..  */. 
5320: 20 69 66 28 20 65 6e 63 3d 3d 53 51 4c 49 54 45   if( enc==SQLITE
5330: 5f 55 54 46 31 36 20 29 7b 0a 20 20 20 20 65 6e  _UTF16 ){.    en
5340: 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 31 36  c = SQLITE_UTF16
5350: 4e 41 54 49 56 45 3b 0a 20 20 7d 65 6c 73 65 20  NATIVE;.  }else 
5360: 69 66 28 20 65 6e 63 3d 3d 53 51 4c 49 54 45 5f  if( enc==SQLITE_
5370: 41 4e 59 20 29 7b 0a 20 20 20 20 69 6e 74 20 72  ANY ){.    int r
5380: 63 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  c;.    rc = sqli
5390: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
53a0: 69 6f 6e 28 64 62 2c 20 7a 46 75 6e 63 74 69 6f  ion(db, zFunctio
53b0: 6e 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 53 51 4c  nName, nArg, SQL
53c0: 49 54 45 5f 55 54 46 38 2c 0a 20 20 20 20 20 20  ITE_UTF8,.      
53d0: 20 20 20 70 55 73 65 72 44 61 74 61 2c 20 78 46     pUserData, xF
53e0: 75 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e  unc, xStep, xFin
53f0: 61 6c 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21  al);.    if( rc!
5400: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72 65 74  =SQLITE_OK ) ret
5410: 75 72 6e 20 72 63 3b 0a 20 20 20 20 72 63 20 3d  urn rc;.    rc =
5420: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
5430: 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 7a 46 75  function(db, zFu
5440: 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 6e 41 72 67  nctionName, nArg
5450: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  , SQLITE_UTF16LE
5460: 2c 0a 20 20 20 20 20 20 20 20 70 55 73 65 72 44  ,.        pUserD
5470: 61 74 61 2c 20 78 46 75 6e 63 2c 20 78 53 74 65  ata, xFunc, xSte
5480: 70 2c 20 78 46 69 6e 61 6c 29 3b 0a 20 20 20 20  p, xFinal);.    
5490: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
54a0: 4b 20 29 20 72 65 74 75 72 6e 20 72 63 3b 0a 20  K ) return rc;. 
54b0: 20 20 20 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f     enc = SQLITE_
54c0: 55 54 46 31 36 42 45 3b 0a 20 20 7d 0a 0a 20 20  UTF16BE;.  }..  
54d0: 70 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 46  p = sqlite3FindF
54e0: 75 6e 63 74 69 6f 6e 28 64 62 2c 20 7a 46 75 6e  unction(db, zFun
54f0: 63 74 69 6f 6e 4e 61 6d 65 2c 20 6e 4e 61 6d 65  ctionName, nName
5500: 2c 20 6e 41 72 67 2c 20 65 6e 63 2c 20 31 29 3b  , nArg, enc, 1);
5510: 0a 20 20 69 66 28 20 70 3d 3d 30 20 29 20 72 65  .  if( p==0 ) re
5520: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  turn SQLITE_NOME
5530: 4d 3b 0a 20 20 70 2d 3e 78 46 75 6e 63 20 3d 20  M;.  p->xFunc = 
5540: 78 46 75 6e 63 3b 0a 20 20 70 2d 3e 78 53 74 65  xFunc;.  p->xSte
5550: 70 20 3d 20 78 53 74 65 70 3b 0a 20 20 70 2d 3e  p = xStep;.  p->
5560: 78 46 69 6e 61 6c 69 7a 65 20 3d 20 78 46 69 6e  xFinalize = xFin
5570: 61 6c 3b 0a 20 20 70 2d 3e 70 55 73 65 72 44 61  al;.  p->pUserDa
5580: 74 61 20 3d 20 70 55 73 65 72 44 61 74 61 3b 0a  ta = pUserData;.
5590: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
55a0: 4f 4b 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65  OK;.}.int sqlite
55b0: 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
55c0: 6e 31 36 28 0a 20 20 73 71 6c 69 74 65 33 20 2a  n16(.  sqlite3 *
55d0: 64 62 2c 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64  db,.  const void
55e0: 20 2a 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c   *zFunctionName,
55f0: 0a 20 20 69 6e 74 20 6e 41 72 67 2c 0a 20 20 69  .  int nArg,.  i
5600: 6e 74 20 65 54 65 78 74 52 65 70 2c 0a 20 20 76  nt eTextRep,.  v
5610: 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 2c 0a  oid *pUserData,.
5620: 20 20 76 6f 69 64 20 28 2a 78 46 75 6e 63 29 28    void (*xFunc)(
5630: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
5640: 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
5650: 75 65 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a  ue**),.  void (*
5660: 78 53 74 65 70 29 28 73 71 6c 69 74 65 33 5f 63  xStep)(sqlite3_c
5670: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
5680: 74 65 33 5f 76 61 6c 75 65 2a 2a 29 2c 0a 20 20  te3_value**),.  
5690: 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 29 28 73  void (*xFinal)(s
56a0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29  qlite3_context*)
56b0: 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  .){.  int rc;.  
56c0: 63 68 61 72 20 63 6f 6e 73 74 20 2a 7a 46 75 6e  char const *zFun
56d0: 63 38 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  c8;.  sqlite3_va
56e0: 6c 75 65 20 2a 70 54 6d 70 3b 0a 0a 20 20 69 66  lue *pTmp;..  if
56f0: 28 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  ( sqlite3SafetyC
5700: 68 65 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20  heck(db) ){.    
5710: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49  return SQLITE_MI
5720: 53 55 53 45 3b 0a 20 20 7d 0a 20 20 70 54 6d 70  SUSE;.  }.  pTmp
5730: 20 3d 20 73 71 6c 69 74 65 33 47 65 74 54 72 61   = sqlite3GetTra
5740: 6e 73 69 65 6e 74 56 61 6c 75 65 28 64 62 29 3b  nsientValue(db);
5750: 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53  .  sqlite3ValueS
5760: 65 74 53 74 72 28 70 54 6d 70 2c 20 2d 31 2c 20  etStr(pTmp, -1, 
5770: 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 53  zFunctionName, S
5780: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
5790: 45 2c 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  E,SQLITE_STATIC)
57a0: 3b 0a 20 20 7a 46 75 6e 63 38 20 3d 20 73 71 6c  ;.  zFunc8 = sql
57b0: 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 70 54  ite3ValueText(pT
57c0: 6d 70 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29  mp, SQLITE_UTF8)
57d0: 3b 0a 0a 20 20 69 66 28 20 21 7a 46 75 6e 63 38  ;..  if( !zFunc8
57e0: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
57f0: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d  QLITE_NOMEM;.  }
5800: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
5810: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
5820: 64 62 2c 20 7a 46 75 6e 63 38 2c 20 6e 41 72 67  db, zFunc8, nArg
5830: 2c 20 65 54 65 78 74 52 65 70 2c 20 0a 20 20 20  , eTextRep, .   
5840: 20 20 20 70 55 73 65 72 44 61 74 61 2c 20 78 46     pUserData, xF
5850: 75 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e  unc, xStep, xFin
5860: 61 6c 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63  al);.  return rc
5870: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73  ;.}../*.** Regis
5880: 74 65 72 20 61 20 74 72 61 63 65 20 66 75 6e 63  ter a trace func
5890: 74 69 6f 6e 2e 20 20 54 68 65 20 70 41 72 67 20  tion.  The pArg 
58a0: 66 72 6f 6d 20 74 68 65 20 70 72 65 76 69 6f 75  from the previou
58b0: 73 6c 79 20 72 65 67 69 73 74 65 72 65 64 20 74  sly registered t
58c0: 72 61 63 65 0a 2a 2a 20 69 73 20 72 65 74 75 72  race.** is retur
58d0: 6e 65 64 2e 20 20 0a 2a 2a 0a 2a 2a 20 41 20 4e  ned.  .**.** A N
58e0: 55 4c 4c 20 74 72 61 63 65 20 66 75 6e 63 74 69  ULL trace functi
58f0: 6f 6e 20 6d 65 61 6e 73 20 74 68 61 74 20 6e 6f  on means that no
5900: 20 74 72 61 63 69 6e 67 20 69 73 20 65 78 65 63   tracing is exec
5910: 75 74 65 73 2e 20 20 41 20 6e 6f 6e 2d 4e 55 4c  utes.  A non-NUL
5920: 4c 0a 2a 2a 20 74 72 61 63 65 20 69 73 20 61 20  L.** trace is a 
5930: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 66 75 6e  pointer to a fun
5940: 63 74 69 6f 6e 20 74 68 61 74 20 69 73 20 69 6e  ction that is in
5950: 76 6f 6b 65 64 20 61 74 20 74 68 65 20 73 74 61  voked at the sta
5960: 72 74 20 6f 66 20 65 61 63 68 0a 2a 2a 20 73 71  rt of each.** sq
5970: 6c 69 74 65 33 5f 65 78 65 63 28 29 2e 0a 2a 2f  lite3_exec()..*/
5980: 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 74  .void *sqlite3_t
5990: 72 61 63 65 28 73 71 6c 69 74 65 33 20 2a 64 62  race(sqlite3 *db
59a0: 2c 20 76 6f 69 64 20 28 2a 78 54 72 61 63 65 29  , void (*xTrace)
59b0: 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61  (void*,const cha
59c0: 72 2a 29 2c 20 76 6f 69 64 20 2a 70 41 72 67 29  r*), void *pArg)
59d0: 7b 0a 20 20 76 6f 69 64 20 2a 70 4f 6c 64 20 3d  {.  void *pOld =
59e0: 20 64 62 2d 3e 70 54 72 61 63 65 41 72 67 3b 0a   db->pTraceArg;.
59f0: 20 20 64 62 2d 3e 78 54 72 61 63 65 20 3d 20 78    db->xTrace = x
5a00: 54 72 61 63 65 3b 0a 20 20 64 62 2d 3e 70 54 72  Trace;.  db->pTr
5a10: 61 63 65 41 72 67 20 3d 20 70 41 72 67 3b 0a 20  aceArg = pArg;. 
5a20: 20 72 65 74 75 72 6e 20 70 4f 6c 64 3b 0a 7d 0a   return pOld;.}.
5a30: 0a 2f 2a 2a 2a 20 45 58 50 45 52 49 4d 45 4e 54  ./*** EXPERIMENT
5a40: 41 4c 20 2a 2a 2a 0a 2a 2a 0a 2a 2a 20 52 65 67  AL ***.**.** Reg
5a50: 69 73 74 65 72 20 61 20 66 75 6e 63 74 69 6f 6e  ister a function
5a60: 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64 20 77   to be invoked w
5a70: 68 65 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  hen a transactio
5a80: 6e 20 63 6f 6d 6d 65 6e 74 73 2e 0a 2a 2a 20 49  n comments..** I
5a90: 66 20 65 69 74 68 65 72 20 66 75 6e 63 74 69 6f  f either functio
5aa0: 6e 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65  n returns non-ze
5ab0: 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6d  ro, then the com
5ac0: 6d 69 74 20 62 65 63 6f 6d 65 73 20 61 0a 2a 2a  mit becomes a.**
5ad0: 20 72 6f 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 76 6f   rollback..*/.vo
5ae0: 69 64 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6d 6d  id *sqlite3_comm
5af0: 69 74 5f 68 6f 6f 6b 28 0a 20 20 73 71 6c 69 74  it_hook(.  sqlit
5b00: 65 33 20 2a 64 62 2c 20 20 20 20 20 20 20 20 20  e3 *db,         
5b10: 20 20 20 20 20 2f 2a 20 41 74 74 61 63 68 20 74       /* Attach t
5b20: 68 65 20 68 6f 6f 6b 20 74 6f 20 74 68 69 73 20  he hook to this 
5b30: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 69 6e  database */.  in
5b40: 74 20 28 2a 78 43 61 6c 6c 62 61 63 6b 29 28 76  t (*xCallback)(v
5b50: 6f 69 64 2a 29 2c 20 20 2f 2a 20 46 75 6e 63 74  oid*),  /* Funct
5b60: 69 6f 6e 20 74 6f 20 69 6e 76 6f 6b 65 20 6f 6e  ion to invoke on
5b70: 20 65 61 63 68 20 63 6f 6d 6d 69 74 20 2a 2f 0a   each commit */.
5b80: 20 20 76 6f 69 64 20 2a 70 41 72 67 20 20 20 20    void *pArg    
5b90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
5ba0: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 66  rgument to the f
5bb0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 29 7b 0a 20 20  unction */.){.  
5bc0: 76 6f 69 64 20 2a 70 4f 6c 64 20 3d 20 64 62 2d  void *pOld = db-
5bd0: 3e 70 43 6f 6d 6d 69 74 41 72 67 3b 0a 20 20 64  >pCommitArg;.  d
5be0: 62 2d 3e 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61  b->xCommitCallba
5bf0: 63 6b 20 3d 20 78 43 61 6c 6c 62 61 63 6b 3b 0a  ck = xCallback;.
5c00: 20 20 64 62 2d 3e 70 43 6f 6d 6d 69 74 41 72 67    db->pCommitArg
5c10: 20 3d 20 70 41 72 67 3b 0a 20 20 72 65 74 75 72   = pArg;.  retur
5c20: 6e 20 70 4f 6c 64 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a  n pOld;.}.../*.*
5c30: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69  * This routine i
5c40: 73 20 63 61 6c 6c 65 64 20 74 6f 20 63 72 65 61  s called to crea
5c50: 74 65 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  te a connection 
5c60: 74 6f 20 61 20 64 61 74 61 62 61 73 65 20 42 54  to a database BT
5c70: 72 65 65 0a 2a 2a 20 64 72 69 76 65 72 2e 20 20  ree.** driver.  
5c80: 49 66 20 7a 46 69 6c 65 6e 61 6d 65 20 69 73 20  If zFilename is 
5c90: 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 66 69  the name of a fi
5ca0: 6c 65 2c 20 74 68 65 6e 20 74 68 61 74 20 66 69  le, then that fi
5cb0: 6c 65 20 69 73 0a 2a 2a 20 6f 70 65 6e 65 64 20  le is.** opened 
5cc0: 61 6e 64 20 75 73 65 64 2e 20 20 49 66 20 7a 46  and used.  If zF
5cd0: 69 6c 65 6e 61 6d 65 20 69 73 20 74 68 65 20 6d  ilename is the m
5ce0: 61 67 69 63 20 6e 61 6d 65 20 22 3a 6d 65 6d 6f  agic name ":memo
5cf0: 72 79 3a 22 20 74 68 65 6e 0a 2a 2a 20 74 68 65  ry:" then.** the
5d00: 20 64 61 74 61 62 61 73 65 20 69 73 20 73 74 6f   database is sto
5d10: 72 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 28 61  red in memory (a
5d20: 6e 64 20 69 73 20 74 68 75 73 20 66 6f 72 67 6f  nd is thus forgo
5d30: 74 74 65 6e 20 61 73 20 73 6f 6f 6e 20 61 73 0a  tten as soon as.
5d40: 2a 2a 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  ** the connectio
5d50: 6e 20 69 73 20 63 6c 6f 73 65 64 2e 29 20 20 49  n is closed.)  I
5d60: 66 20 7a 46 69 6c 65 6e 61 6d 65 20 69 73 20 4e  f zFilename is N
5d70: 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 64 61 74  ULL then the dat
5d80: 61 62 61 73 65 0a 2a 2a 20 69 73 20 66 6f 72 20  abase.** is for 
5d90: 74 65 6d 70 6f 72 61 72 79 20 75 73 65 20 6f 6e  temporary use on
5da0: 6c 79 20 61 6e 64 20 69 73 20 64 65 6c 65 74 65  ly and is delete
5db0: 64 20 61 73 20 73 6f 6f 6e 20 61 73 20 74 68 65  d as soon as the
5dc0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a 2a 2a 20 69   connection.** i
5dd0: 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  s closed..**.** 
5de0: 41 20 74 65 6d 70 6f 72 61 72 79 20 64 61 74 61  A temporary data
5df0: 62 61 73 65 20 63 61 6e 20 62 65 20 65 69 74 68  base can be eith
5e00: 65 72 20 61 20 64 69 73 6b 20 66 69 6c 65 20 28  er a disk file (
5e10: 74 68 61 74 20 69 73 20 61 75 74 6f 6d 61 74 69  that is automati
5e20: 63 61 6c 6c 79 0a 2a 2a 20 64 65 6c 65 74 65 64  cally.** deleted
5e30: 20 77 68 65 6e 20 74 68 65 20 66 69 6c 65 20 69   when the file i
5e40: 73 20 63 6c 6f 73 65 64 29 20 6f 72 20 61 20 73  s closed) or a s
5e50: 65 74 20 6f 66 20 72 65 64 2d 62 6c 61 63 6b 20  et of red-black 
5e60: 74 72 65 65 73 20 68 65 6c 64 20 69 6e 20 6d 65  trees held in me
5e70: 6d 6f 72 79 2c 0a 2a 2a 20 64 65 70 65 6e 64 69  mory,.** dependi
5e80: 6e 67 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 73  ng on the values
5e90: 20 6f 66 20 74 68 65 20 54 45 4d 50 5f 53 54 4f   of the TEMP_STO
5ea0: 52 45 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  RE compile-time 
5eb0: 6d 61 63 72 6f 20 61 6e 64 20 74 68 65 0a 2a 2a  macro and the.**
5ec0: 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 20   db->temp_store 
5ed0: 76 61 72 69 61 62 6c 65 2c 20 61 63 63 6f 72 64  variable, accord
5ee0: 69 6e 67 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  ing to the follo
5ef0: 77 69 6e 67 20 63 68 61 72 74 3a 0a 2a 2a 0a 2a  wing chart:.**.*
5f00: 2a 20 20 20 20 20 20 20 54 45 4d 50 5f 53 54 4f  *       TEMP_STO
5f10: 52 45 20 20 20 20 20 64 62 2d 3e 74 65 6d 70 5f  RE     db->temp_
5f20: 73 74 6f 72 65 20 20 20 20 20 4c 6f 63 61 74 69  store     Locati
5f30: 6f 6e 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20  on of temporary 
5f40: 64 61 74 61 62 61 73 65 0a 2a 2a 20 20 20 20 20  database.**     
5f50: 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 20 20 20    ----------    
5f60: 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20   -------------- 
5f70: 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d      ------------
5f80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5f90: 2d 2d 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  --.**           
5fa0: 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  0               
5fb0: 61 6e 79 20 20 20 20 20 20 20 20 20 20 20 20 20  any             
5fc0: 66 69 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  file.**         
5fd0: 20 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20    1             
5fe0: 20 20 20 31 20 20 20 20 20 20 20 20 20 20 20 20     1            
5ff0: 20 20 66 69 6c 65 0a 2a 2a 20 20 20 20 20 20 20    file.**       
6000: 20 20 20 20 31 20 20 20 20 20 20 20 20 20 20 20      1           
6010: 20 20 20 20 20 32 20 20 20 20 20 20 20 20 20 20       2          
6020: 20 20 20 20 6d 65 6d 6f 72 79 0a 2a 2a 20 20 20      memory.**   
6030: 20 20 20 20 20 20 20 20 31 20 20 20 20 20 20 20          1       
6040: 20 20 20 20 20 20 20 20 20 30 20 20 20 20 20 20           0      
6050: 20 20 20 20 20 20 20 20 66 69 6c 65 0a 2a 2a 20          file.** 
6060: 20 20 20 20 20 20 20 20 20 20 32 20 20 20 20 20            2     
6070: 20 20 20 20 20 20 20 20 20 20 20 31 20 20 20 20             1    
6080: 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 0a 2a            file.*
6090: 2a 20 20 20 20 20 20 20 20 20 20 20 32 20 20 20  *           2   
60a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 32 20 20               2  
60b0: 20 20 20 20 20 20 20 20 20 20 20 20 6d 65 6d 6f              memo
60c0: 72 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ry.**           
60d0: 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2               
60e0: 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20   0              
60f0: 6d 65 6d 6f 72 79 0a 2a 2a 20 20 20 20 20 20 20  memory.**       
6100: 20 20 20 20 33 20 20 20 20 20 20 20 20 20 20 20      3           
6110: 20 20 20 20 61 6e 79 20 20 20 20 20 20 20 20 20      any         
6120: 20 20 20 20 6d 65 6d 6f 72 79 0a 2a 2f 0a 69 6e      memory.*/.in
6130: 74 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 61  t sqlite3BtreeFa
6140: 63 74 6f 72 79 28 0a 20 20 63 6f 6e 73 74 20 73  ctory(.  const s
6150: 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20 20  qlite3 *db,     
6160: 20 20 20 2f 2a 20 4d 61 69 6e 20 64 61 74 61 62     /* Main datab
6170: 61 73 65 20 77 68 65 6e 20 6f 70 65 6e 69 6e 67  ase when opening
6180: 20 61 75 78 20 6f 74 68 65 72 77 69 73 65 20 30   aux otherwise 0
6190: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
61a0: 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20 20 20 20   *zFilename,    
61b0: 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 66  /* Name of the f
61c0: 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ile containing t
61d0: 68 65 20 42 54 72 65 65 20 64 61 74 61 62 61 73  he BTree databas
61e0: 65 20 2a 2f 0a 20 20 69 6e 74 20 6f 6d 69 74 4a  e */.  int omitJ
61f0: 6f 75 72 6e 61 6c 2c 20 20 20 20 20 20 20 20 20  ournal,         
6200: 20 2f 2a 20 69 66 20 54 52 55 45 20 74 68 65 6e   /* if TRUE then
6210: 20 64 6f 20 6e 6f 74 20 6a 6f 75 72 6e 61 6c 20   do not journal 
6220: 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69  this file */.  i
6230: 6e 74 20 6e 43 61 63 68 65 2c 20 20 20 20 20 20  nt nCache,      
6240: 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20           /* How 
6250: 6d 61 6e 79 20 70 61 67 65 73 20 69 6e 20 74 68  many pages in th
6260: 65 20 70 61 67 65 20 63 61 63 68 65 20 2a 2f 0a  e page cache */.
6270: 20 20 42 74 72 65 65 20 2a 2a 70 70 42 74 72 65    Btree **ppBtre
6280: 65 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50  e           /* P
6290: 6f 69 6e 74 65 72 20 74 6f 20 6e 65 77 20 42 74  ointer to new Bt
62a0: 72 65 65 20 6f 62 6a 65 63 74 20 77 72 69 74 74  ree object writt
62b0: 65 6e 20 68 65 72 65 20 2a 2f 0a 29 7b 0a 20 20  en here */.){.  
62c0: 69 6e 74 20 62 74 72 65 65 5f 66 6c 61 67 73 20  int btree_flags 
62d0: 3d 20 30 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  = 0;.  int rc;. 
62e0: 20 0a 20 20 61 73 73 65 72 74 28 20 70 70 42 74   .  assert( ppBt
62f0: 72 65 65 20 21 3d 20 30 29 3b 0a 20 20 69 66 28  ree != 0);.  if(
6300: 20 6f 6d 69 74 4a 6f 75 72 6e 61 6c 20 29 7b 0a   omitJournal ){.
6310: 20 20 20 20 62 74 72 65 65 5f 66 6c 61 67 73 20      btree_flags 
6320: 7c 3d 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f  |= BTREE_OMIT_JO
6330: 55 52 4e 41 4c 3b 0a 20 20 7d 0a 20 20 69 66 28  URNAL;.  }.  if(
6340: 20 7a 46 69 6c 65 6e 61 6d 65 3d 3d 30 20 29 7b   zFilename==0 ){
6350: 0a 23 69 66 20 54 45 4d 50 5f 53 54 4f 52 45 3d  .#if TEMP_STORE=
6360: 3d 30 0a 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74  =0.    /* Do not
6370: 68 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  hing */.#endif.#
6380: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
6390: 49 54 5f 4d 45 4d 4f 52 59 44 42 0a 23 69 66 20  IT_MEMORYDB.#if 
63a0: 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 31 0a 20 20  TEMP_STORE==1.  
63b0: 20 20 69 66 28 20 64 62 2d 3e 74 65 6d 70 5f 73    if( db->temp_s
63c0: 74 6f 72 65 3d 3d 32 20 29 20 7a 46 69 6c 65 6e  tore==2 ) zFilen
63d0: 61 6d 65 20 3d 20 22 3a 6d 65 6d 6f 72 79 3a 22  ame = ":memory:"
63e0: 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 54 45 4d  ;.#endif.#if TEM
63f0: 50 5f 53 54 4f 52 45 3d 3d 32 0a 20 20 20 20 69  P_STORE==2.    i
6400: 66 28 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  f( db->temp_stor
6410: 65 21 3d 31 20 29 20 7a 46 69 6c 65 6e 61 6d 65  e!=1 ) zFilename
6420: 20 3d 20 22 3a 6d 65 6d 6f 72 79 3a 22 3b 0a 23   = ":memory:";.#
6430: 65 6e 64 69 66 0a 23 69 66 20 54 45 4d 50 5f 53  endif.#if TEMP_S
6440: 54 4f 52 45 3d 3d 33 0a 20 20 20 20 7a 46 69 6c  TORE==3.    zFil
6450: 65 6e 61 6d 65 20 3d 20 22 3a 6d 65 6d 6f 72 79  ename = ":memory
6460: 3a 22 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69  :";.#endif.#endi
6470: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
6480: 5f 4d 45 4d 4f 52 59 44 42 20 2a 2f 0a 20 20 7d  _MEMORYDB */.  }
6490: 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ..  rc = sqlite3
64a0: 42 74 72 65 65 4f 70 65 6e 28 7a 46 69 6c 65 6e  BtreeOpen(zFilen
64b0: 61 6d 65 2c 20 70 70 42 74 72 65 65 2c 20 62 74  ame, ppBtree, bt
64c0: 72 65 65 5f 66 6c 61 67 73 29 3b 0a 20 20 69 66  ree_flags);.  if
64d0: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
64e0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74  ){.    sqlite3Bt
64f0: 72 65 65 53 65 74 42 75 73 79 48 61 6e 64 6c 65  reeSetBusyHandle
6500: 72 28 2a 70 70 42 74 72 65 65 2c 20 28 76 6f 69  r(*ppBtree, (voi
6510: 64 2a 29 26 64 62 2d 3e 62 75 73 79 48 61 6e 64  d*)&db->busyHand
6520: 6c 65 72 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  ler);.    sqlite
6530: 33 42 74 72 65 65 53 65 74 43 61 63 68 65 53 69  3BtreeSetCacheSi
6540: 7a 65 28 2a 70 70 42 74 72 65 65 2c 20 6e 43 61  ze(*ppBtree, nCa
6550: 63 68 65 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  che);.  }.  retu
6560: 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  rn rc;.}../*.** 
6570: 52 65 74 75 72 6e 20 55 54 46 2d 38 20 65 6e 63  Return UTF-8 enc
6580: 6f 64 65 64 20 45 6e 67 6c 69 73 68 20 6c 61 6e  oded English lan
6590: 67 75 61 67 65 20 65 78 70 6c 61 6e 61 74 69 6f  guage explanatio
65a0: 6e 20 6f 66 20 74 68 65 20 6d 6f 73 74 20 72 65  n of the most re
65b0: 63 65 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 0a 2a  cent.** error..*
65c0: 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  /.const char *sq
65d0: 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 73 71 6c  lite3_errmsg(sql
65e0: 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 63 6f 6e  ite3 *db){.  con
65f0: 73 74 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69 66  st char *z;.  if
6600: 28 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  ( sqlite3_malloc
6610: 5f 66 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 72  _failed ){.    r
6620: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 45 72 72  eturn sqlite3Err
6630: 53 74 72 28 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  Str(SQLITE_NOMEM
6640: 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c  );.  }.  if( sql
6650: 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 28  ite3SafetyCheck(
6660: 64 62 29 20 7c 7c 20 64 62 2d 3e 65 72 72 43 6f  db) || db->errCo
6670: 64 65 3d 3d 53 51 4c 49 54 45 5f 4d 49 53 55 53  de==SQLITE_MISUS
6680: 45 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  E ){.    return 
6690: 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 53 51  sqlite3ErrStr(SQ
66a0: 4c 49 54 45 5f 4d 49 53 55 53 45 29 3b 0a 20 20  LITE_MISUSE);.  
66b0: 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f  }.  z = sqlite3_
66c0: 76 61 6c 75 65 5f 74 65 78 74 28 64 62 2d 3e 70  value_text(db->p
66d0: 45 72 72 29 3b 0a 20 20 69 66 28 20 7a 3d 3d 30  Err);.  if( z==0
66e0: 20 29 7b 0a 20 20 20 20 7a 20 3d 20 73 71 6c 69   ){.    z = sqli
66f0: 74 65 33 45 72 72 53 74 72 28 64 62 2d 3e 65 72  te3ErrStr(db->er
6700: 72 43 6f 64 65 29 3b 0a 20 20 7d 0a 20 20 72 65  rCode);.  }.  re
6710: 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 23 69 66 6e 64  turn z;.}..#ifnd
6720: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
6730: 54 46 31 36 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  TF16./*.** Retur
6740: 6e 20 55 54 46 2d 31 36 20 65 6e 63 6f 64 65 64  n UTF-16 encoded
6750: 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67   English languag
6760: 65 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 6f 66  e explanation of
6770: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
6780: 0a 2a 2a 20 65 72 72 6f 72 2e 0a 2a 2f 0a 63 6f  .** error..*/.co
6790: 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  nst void *sqlite
67a0: 33 5f 65 72 72 6d 73 67 31 36 28 73 71 6c 69 74  3_errmsg16(sqlit
67b0: 65 33 20 2a 64 62 29 7b 0a 20 20 2f 2a 20 42 65  e3 *db){.  /* Be
67c0: 63 61 75 73 65 20 61 6c 6c 20 74 68 65 20 63 68  cause all the ch
67d0: 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 65 20  aracters in the 
67e0: 73 74 72 69 6e 67 20 61 72 65 20 69 6e 20 74 68  string are in th
67f0: 65 20 75 6e 69 63 6f 64 65 0a 20 20 2a 2a 20 72  e unicode.  ** r
6800: 61 6e 67 65 20 30 78 30 30 2d 30 78 46 46 2c 20  ange 0x00-0xFF, 
6810: 69 66 20 77 65 20 70 61 64 20 74 68 65 20 62 69  if we pad the bi
6820: 67 2d 65 6e 64 69 61 6e 20 73 74 72 69 6e 67 20  g-endian string 
6830: 77 69 74 68 20 61 20 0a 20 20 2a 2a 20 7a 65 72  with a .  ** zer
6840: 6f 20 62 79 74 65 2c 20 77 65 20 63 61 6e 20 6f  o byte, we can o
6850: 62 74 61 69 6e 20 74 68 65 20 6c 69 74 74 6c 65  btain the little
6860: 2d 65 6e 64 69 61 6e 20 73 74 72 69 6e 67 20 77  -endian string w
6870: 69 74 68 0a 20 20 2a 2a 20 26 62 69 67 5f 65 6e  ith.  ** &big_en
6880: 64 69 61 6e 5b 31 5d 2e 0a 20 20 2a 2f 0a 20 20  dian[1]..  */.  
6890: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
68a0: 72 20 6f 75 74 4f 66 4d 65 6d 42 65 5b 5d 20 3d  r outOfMemBe[] =
68b0: 20 7b 0a 20 20 20 20 30 2c 20 27 6f 27 2c 20 30   {.    0, 'o', 0
68c0: 2c 20 27 75 27 2c 20 30 2c 20 27 74 27 2c 20 30  , 'u', 0, 't', 0
68d0: 2c 20 27 20 27 2c 20 0a 20 20 20 20 30 2c 20 27  , ' ', .    0, '
68e0: 6f 27 2c 20 30 2c 20 27 66 27 2c 20 30 2c 20 27  o', 0, 'f', 0, '
68f0: 20 27 2c 20 0a 20 20 20 20 30 2c 20 27 6d 27 2c   ', .    0, 'm',
6900: 20 30 2c 20 27 65 27 2c 20 30 2c 20 27 6d 27 2c   0, 'e', 0, 'm',
6910: 20 30 2c 20 27 6f 27 2c 20 30 2c 20 27 72 27 2c   0, 'o', 0, 'r',
6920: 20 30 2c 20 27 79 27 2c 20 30 2c 20 30 2c 20 30   0, 'y', 0, 0, 0
6930: 0a 20 20 7d 3b 0a 20 20 73 74 61 74 69 63 20 63  .  };.  static c
6940: 6f 6e 73 74 20 63 68 61 72 20 6d 69 73 75 73 65  onst char misuse
6950: 42 65 20 5b 5d 20 3d 20 7b 0a 20 20 20 20 30 2c  Be [] = {.    0,
6960: 20 27 6c 27 2c 20 30 2c 20 27 69 27 2c 20 30 2c   'l', 0, 'i', 0,
6970: 20 27 62 27 2c 20 30 2c 20 27 72 27 2c 20 30 2c   'b', 0, 'r', 0,
6980: 20 27 61 27 2c 20 30 2c 20 27 72 27 2c 20 30 2c   'a', 0, 'r', 0,
6990: 20 27 79 27 2c 20 30 2c 20 27 20 27 2c 20 0a 20   'y', 0, ' ', . 
69a0: 20 20 20 30 2c 20 27 72 27 2c 20 30 2c 20 27 6f     0, 'r', 0, 'o
69b0: 27 2c 20 30 2c 20 27 75 27 2c 20 30 2c 20 27 74  ', 0, 'u', 0, 't
69c0: 27 2c 20 30 2c 20 27 69 27 2c 20 30 2c 20 27 6e  ', 0, 'i', 0, 'n
69d0: 27 2c 20 30 2c 20 27 65 27 2c 20 30 2c 20 27 20  ', 0, 'e', 0, ' 
69e0: 27 2c 20 0a 20 20 20 20 30 2c 20 27 63 27 2c 20  ', .    0, 'c', 
69f0: 30 2c 20 27 61 27 2c 20 30 2c 20 27 6c 27 2c 20  0, 'a', 0, 'l', 
6a00: 30 2c 20 27 6c 27 2c 20 30 2c 20 27 65 27 2c 20  0, 'l', 0, 'e', 
6a10: 30 2c 20 27 64 27 2c 20 30 2c 20 27 20 27 2c 20  0, 'd', 0, ' ', 
6a20: 0a 20 20 20 20 30 2c 20 27 6f 27 2c 20 30 2c 20  .    0, 'o', 0, 
6a30: 27 75 27 2c 20 30 2c 20 27 74 27 2c 20 30 2c 20  'u', 0, 't', 0, 
6a40: 27 20 27 2c 20 0a 20 20 20 20 30 2c 20 27 6f 27  ' ', .    0, 'o'
6a50: 2c 20 30 2c 20 27 66 27 2c 20 30 2c 20 27 20 27  , 0, 'f', 0, ' '
6a60: 2c 20 0a 20 20 20 20 30 2c 20 27 73 27 2c 20 30  , .    0, 's', 0
6a70: 2c 20 27 65 27 2c 20 30 2c 20 27 71 27 2c 20 30  , 'e', 0, 'q', 0
6a80: 2c 20 27 75 27 2c 20 30 2c 20 27 65 27 2c 20 30  , 'u', 0, 'e', 0
6a90: 2c 20 27 6e 27 2c 20 30 2c 20 27 63 27 2c 20 30  , 'n', 0, 'c', 0
6aa0: 2c 20 27 65 27 2c 20 30 2c 20 30 2c 20 30 0a 20  , 'e', 0, 0, 0. 
6ab0: 20 7d 3b 0a 0a 20 20 63 6f 6e 73 74 20 76 6f 69   };..  const voi
6ac0: 64 20 2a 7a 3b 0a 20 20 69 66 28 20 73 71 6c 69  d *z;.  if( sqli
6ad0: 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 65  te3_malloc_faile
6ae0: 64 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  d ){.    return 
6af0: 28 76 6f 69 64 20 2a 29 28 26 6f 75 74 4f 66 4d  (void *)(&outOfM
6b00: 65 6d 42 65 5b 53 51 4c 49 54 45 5f 55 54 46 31  emBe[SQLITE_UTF1
6b10: 36 4e 41 54 49 56 45 3d 3d 53 51 4c 49 54 45 5f  6NATIVE==SQLITE_
6b20: 55 54 46 31 36 4c 45 3f 31 3a 30 5d 29 3b 0a 20  UTF16LE?1:0]);. 
6b30: 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33   }.  if( sqlite3
6b40: 53 61 66 65 74 79 43 68 65 63 6b 28 64 62 29 20  SafetyCheck(db) 
6b50: 7c 7c 20 64 62 2d 3e 65 72 72 43 6f 64 65 3d 3d  || db->errCode==
6b60: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 29 7b  SQLITE_MISUSE ){
6b70: 0a 20 20 20 20 72 65 74 75 72 6e 20 28 76 6f 69  .    return (voi
6b80: 64 20 2a 29 28 26 6d 69 73 75 73 65 42 65 5b 53  d *)(&misuseBe[S
6b90: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
6ba0: 45 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  E==SQLITE_UTF16L
6bb0: 45 3f 31 3a 30 5d 29 3b 0a 20 20 7d 0a 20 20 7a  E?1:0]);.  }.  z
6bc0: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
6bd0: 5f 74 65 78 74 31 36 28 64 62 2d 3e 70 45 72 72  _text16(db->pErr
6be0: 29 3b 0a 20 20 69 66 28 20 7a 3d 3d 30 20 29 7b  );.  if( z==0 ){
6bf0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75  .    sqlite3Valu
6c00: 65 53 65 74 53 74 72 28 64 62 2d 3e 70 45 72 72  eSetStr(db->pErr
6c10: 2c 20 2d 31 2c 20 73 71 6c 69 74 65 33 45 72 72  , -1, sqlite3Err
6c20: 53 74 72 28 64 62 2d 3e 65 72 72 43 6f 64 65 29  Str(db->errCode)
6c30: 2c 0a 20 20 20 20 20 20 20 20 20 53 51 4c 49 54  ,.         SQLIT
6c40: 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53  E_UTF8, SQLITE_S
6c50: 54 41 54 49 43 29 3b 0a 20 20 20 20 7a 20 3d 20  TATIC);.    z = 
6c60: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
6c70: 78 74 31 36 28 64 62 2d 3e 70 45 72 72 29 3b 0a  xt16(db->pErr);.
6c80: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a 3b 0a    }.  return z;.
6c90: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
6ca0: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f  TE_OMIT_UTF16 */
6cb0: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
6cc0: 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 65  he most recent e
6cd0: 72 72 6f 72 20 63 6f 64 65 20 67 65 6e 65 72 61  rror code genera
6ce0: 74 65 64 20 62 79 20 61 6e 20 53 51 4c 69 74 65  ted by an SQLite
6cf0: 20 72 6f 75 74 69 6e 65 2e 0a 2a 2f 0a 69 6e 74   routine..*/.int
6d00: 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65   sqlite3_errcode
6d10: 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20  (sqlite3 *db){. 
6d20: 20 69 66 28 20 73 71 6c 69 74 65 33 5f 6d 61 6c   if( sqlite3_mal
6d30: 6c 6f 63 5f 66 61 69 6c 65 64 20 29 7b 0a 20 20  loc_failed ){.  
6d40: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
6d50: 4e 4f 4d 45 4d 3b 0a 20 20 7d 0a 20 20 69 66 28  NOMEM;.  }.  if(
6d60: 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
6d70: 65 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 72  eck(db) ){.    r
6d80: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53  eturn SQLITE_MIS
6d90: 55 53 45 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  USE;.  }.  retur
6da0: 6e 20 64 62 2d 3e 65 72 72 43 6f 64 65 3b 0a 7d  n db->errCode;.}
6db0: 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 73 63  ../*.** Check sc
6dc0: 68 65 6d 61 20 63 6f 6f 6b 69 65 73 20 69 6e 20  hema cookies in 
6dd0: 61 6c 6c 20 64 61 74 61 62 61 73 65 73 2e 20 20  all databases.  
6de0: 49 66 20 61 6e 79 20 63 6f 6f 6b 69 65 20 69 73  If any cookie is
6df0: 20 6f 75 74 0a 2a 2a 20 6f 66 20 64 61 74 65 2c   out.** of date,
6e00: 20 72 65 74 75 72 6e 20 30 2e 20 20 49 66 20 61   return 0.  If a
6e10: 6c 6c 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  ll schema cookie
6e20: 73 20 61 72 65 20 63 75 72 72 65 6e 74 2c 20 72  s are current, r
6e30: 65 74 75 72 6e 20 31 2e 0a 2a 2f 0a 73 74 61 74  eturn 1..*/.stat
6e40: 69 63 20 69 6e 74 20 73 63 68 65 6d 61 49 73 56  ic int schemaIsV
6e50: 61 6c 69 64 28 73 71 6c 69 74 65 33 20 2a 64 62  alid(sqlite3 *db
6e60: 29 7b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20  ){.  int iDb;.  
6e70: 69 6e 74 20 72 63 3b 0a 20 20 42 74 43 75 72 73  int rc;.  BtCurs
6e80: 6f 72 20 2a 63 75 72 54 65 6d 70 3b 0a 20 20 69  or *curTemp;.  i
6e90: 6e 74 20 63 6f 6f 6b 69 65 3b 0a 20 20 69 6e 74  nt cookie;.  int
6ea0: 20 61 6c 6c 4f 6b 20 3d 20 31 3b 0a 0a 20 20 66   allOk = 1;..  f
6eb0: 6f 72 28 69 44 62 3d 30 3b 20 61 6c 6c 4f 6b 20  or(iDb=0; allOk 
6ec0: 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 3b 20  && iDb<db->nDb; 
6ed0: 69 44 62 2b 2b 29 7b 0a 20 20 20 20 42 74 72 65  iDb++){.    Btre
6ee0: 65 20 2a 70 42 74 3b 0a 20 20 20 20 70 42 74 20  e *pBt;.    pBt 
6ef0: 3d 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  = db->aDb[iDb].p
6f00: 42 74 3b 0a 20 20 20 20 69 66 28 20 70 42 74 3d  Bt;.    if( pBt=
6f10: 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  =0 ) continue;. 
6f20: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
6f30: 74 72 65 65 43 75 72 73 6f 72 28 70 42 74 2c 20  treeCursor(pBt, 
6f40: 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 30 2c 20  MASTER_ROOT, 0, 
6f50: 30 2c 20 30 2c 20 26 63 75 72 54 65 6d 70 29 3b  0, 0, &curTemp);
6f60: 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
6f70: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
6f80: 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
6f90: 65 47 65 74 4d 65 74 61 28 70 42 74 2c 20 31 2c  eGetMeta(pBt, 1,
6fa0: 20 28 75 33 32 20 2a 29 26 63 6f 6f 6b 69 65 29   (u32 *)&cookie)
6fb0: 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  ;.      if( rc==
6fc0: 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 63 6f 6f  SQLITE_OK && coo
6fd0: 6b 69 65 21 3d 64 62 2d 3e 61 44 62 5b 69 44 62  kie!=db->aDb[iDb
6fe0: 5d 2e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20  ].schema_cookie 
6ff0: 29 7b 0a 20 20 20 20 20 20 20 20 61 6c 6c 4f 6b  ){.        allOk
7000: 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 0;.      }.  
7010: 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
7020: 43 6c 6f 73 65 43 75 72 73 6f 72 28 63 75 72 54  CloseCursor(curT
7030: 65 6d 70 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  emp);.    }.  }.
7040: 20 20 72 65 74 75 72 6e 20 61 6c 6c 4f 6b 3b 0a    return allOk;.
7050: 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d 70 69 6c 65  }../*.** Compile
7060: 20 74 68 65 20 55 54 46 2d 38 20 65 6e 63 6f 64   the UTF-8 encod
7070: 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  ed SQL statement
7080: 20 7a 53 71 6c 20 69 6e 74 6f 20 61 20 73 74 61   zSql into a sta
7090: 74 65 6d 65 6e 74 20 68 61 6e 64 6c 65 2e 0a 2a  tement handle..*
70a0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 70 72  /.int sqlite3_pr
70b0: 65 70 61 72 65 28 0a 20 20 73 71 6c 69 74 65 33  epare(.  sqlite3
70c0: 20 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20 20   *db,           
70d0: 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 68     /* Database h
70e0: 61 6e 64 6c 65 2e 20 2a 2f 0a 20 20 63 6f 6e 73  andle. */.  cons
70f0: 74 20 63 68 61 72 20 2a 7a 53 71 6c 2c 20 20 20  t char *zSql,   
7100: 20 20 20 20 20 20 2f 2a 20 55 54 46 2d 38 20 65        /* UTF-8 e
7110: 6e 63 6f 64 65 64 20 53 51 4c 20 73 74 61 74 65  ncoded SQL state
7120: 6d 65 6e 74 2e 20 2a 2f 0a 20 20 69 6e 74 20 6e  ment. */.  int n
7130: 42 79 74 65 73 2c 20 20 20 20 20 20 20 20 20 20  Bytes,          
7140: 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f       /* Length o
7150: 66 20 7a 53 71 6c 20 69 6e 20 62 79 74 65 73 2e  f zSql in bytes.
7160: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 73 74   */.  sqlite3_st
7170: 6d 74 20 2a 2a 70 70 53 74 6d 74 2c 20 20 20 20  mt **ppStmt,    
7180: 2f 2a 20 4f 55 54 3a 20 41 20 70 6f 69 6e 74 65  /* OUT: A pointe
7190: 72 20 74 6f 20 74 68 65 20 70 72 65 70 61 72 65  r to the prepare
71a0: 64 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20  d statement */. 
71b0: 20 63 6f 6e 73 74 20 63 68 61 72 2a 2a 20 70 7a   const char** pz
71c0: 54 61 69 6c 20 20 20 20 20 20 20 2f 2a 20 4f 55  Tail       /* OU
71d0: 54 3a 20 45 6e 64 20 6f 66 20 70 61 72 73 65 64  T: End of parsed
71e0: 20 73 74 72 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20   string */.){.  
71f0: 50 61 72 73 65 20 73 50 61 72 73 65 3b 0a 20 20  Parse sParse;.  
7200: 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 20 3d 20  char *zErrMsg = 
7210: 30 3b 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51  0;.  int rc = SQ
7220: 4c 49 54 45 5f 4f 4b 3b 0a 0a 20 20 69 66 28 20  LITE_OK;..  if( 
7230: 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66  sqlite3_malloc_f
7240: 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 72 65 74  ailed ){.    ret
7250: 75 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  urn SQLITE_NOMEM
7260: 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28  ;.  }..  assert(
7270: 20 70 70 53 74 6d 74 20 29 3b 0a 20 20 2a 70 70   ppStmt );.  *pp
7280: 53 74 6d 74 20 3d 20 30 3b 0a 20 20 69 66 28 20  Stmt = 0;.  if( 
7290: 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28  sqlite3SafetyOn(
72a0: 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72  db) ){.    retur
72b0: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b  n SQLITE_MISUSE;
72c0: 0a 20 20 7d 0a 0a 20 20 6d 65 6d 73 65 74 28 26  .  }..  memset(&
72d0: 73 50 61 72 73 65 2c 20 30 2c 20 73 69 7a 65 6f  sParse, 0, sizeo
72e0: 66 28 73 50 61 72 73 65 29 29 3b 0a 20 20 73 50  f(sParse));.  sP
72f0: 61 72 73 65 2e 64 62 20 3d 20 64 62 3b 0a 20 20  arse.db = db;.  
7300: 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72  sqlite3RunParser
7310: 28 26 73 50 61 72 73 65 2c 20 7a 53 71 6c 2c 20  (&sParse, zSql, 
7320: 26 7a 45 72 72 4d 73 67 29 3b 0a 0a 20 20 69 66  &zErrMsg);..  if
7330: 28 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  ( sqlite3_malloc
7340: 5f 66 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 72  _failed ){.    r
7350: 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  c = SQLITE_NOMEM
7360: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6c  ;.    sqlite3Rol
7370: 6c 62 61 63 6b 41 6c 6c 28 64 62 29 3b 0a 20 20  lbackAll(db);.  
7380: 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e    sqlite3ResetIn
7390: 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c  ternalSchema(db,
73a0: 20 30 29 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61   0);.    db->fla
73b0: 67 73 20 26 3d 20 7e 53 51 4c 49 54 45 5f 49 6e  gs &= ~SQLITE_In
73c0: 54 72 61 6e 73 3b 0a 20 20 20 20 67 6f 74 6f 20  Trans;.    goto 
73d0: 70 72 65 70 61 72 65 5f 6f 75 74 3b 0a 20 20 7d  prepare_out;.  }
73e0: 0a 20 20 69 66 28 20 73 50 61 72 73 65 2e 72 63  .  if( sParse.rc
73f0: 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 20  ==SQLITE_DONE ) 
7400: 73 50 61 72 73 65 2e 72 63 20 3d 20 53 51 4c 49  sParse.rc = SQLI
7410: 54 45 5f 4f 4b 3b 0a 20 20 69 66 28 20 73 50 61  TE_OK;.  if( sPa
7420: 72 73 65 2e 72 63 21 3d 53 51 4c 49 54 45 5f 4f  rse.rc!=SQLITE_O
7430: 4b 20 26 26 20 73 50 61 72 73 65 2e 63 68 65 63  K && sParse.chec
7440: 6b 53 63 68 65 6d 61 20 26 26 20 21 73 63 68 65  kSchema && !sche
7450: 6d 61 49 73 56 61 6c 69 64 28 64 62 29 20 29 7b  maIsValid(db) ){
7460: 0a 20 20 20 20 73 50 61 72 73 65 2e 72 63 20 3d  .    sParse.rc =
7470: 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a   SQLITE_SCHEMA;.
7480: 20 20 7d 0a 20 20 69 66 28 20 73 50 61 72 73 65    }.  if( sParse
7490: 2e 72 63 3d 3d 53 51 4c 49 54 45 5f 53 43 48 45  .rc==SQLITE_SCHE
74a0: 4d 41 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  MA ){.    sqlite
74b0: 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63  3ResetInternalSc
74c0: 68 65 6d 61 28 64 62 2c 20 30 29 3b 0a 20 20 7d  hema(db, 0);.  }
74d0: 0a 20 20 69 66 28 20 70 7a 54 61 69 6c 20 29 20  .  if( pzTail ) 
74e0: 2a 70 7a 54 61 69 6c 20 3d 20 73 50 61 72 73 65  *pzTail = sParse
74f0: 2e 7a 54 61 69 6c 3b 0a 20 20 72 63 20 3d 20 73  .zTail;.  rc = s
7500: 50 61 72 73 65 2e 72 63 3b 0a 0a 20 20 69 66 28  Parse.rc;..  if(
7510: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
7520: 26 20 73 50 61 72 73 65 2e 70 56 64 62 65 20 26  & sParse.pVdbe &
7530: 26 20 73 50 61 72 73 65 2e 65 78 70 6c 61 69 6e  & sParse.explain
7540: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
7550: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 73 50  dbeSetNumCols(sP
7560: 61 72 73 65 2e 70 56 64 62 65 2c 20 35 29 3b 0a  arse.pVdbe, 5);.
7570: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
7580: 65 74 43 6f 6c 4e 61 6d 65 28 73 50 61 72 73 65  etColName(sParse
7590: 2e 70 56 64 62 65 2c 20 30 2c 20 22 61 64 64 72  .pVdbe, 0, "addr
75a0: 22 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20  ", P3_STATIC);. 
75b0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
75c0: 74 43 6f 6c 4e 61 6d 65 28 73 50 61 72 73 65 2e  tColName(sParse.
75d0: 70 56 64 62 65 2c 20 31 2c 20 22 6f 70 63 6f 64  pVdbe, 1, "opcod
75e0: 65 22 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a  e", P3_STATIC);.
75f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
7600: 65 74 43 6f 6c 4e 61 6d 65 28 73 50 61 72 73 65  etColName(sParse
7610: 2e 70 56 64 62 65 2c 20 32 2c 20 22 70 31 22 2c  .pVdbe, 2, "p1",
7620: 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20   P3_STATIC);.   
7630: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
7640: 6f 6c 4e 61 6d 65 28 73 50 61 72 73 65 2e 70 56  olName(sParse.pV
7650: 64 62 65 2c 20 33 2c 20 22 70 32 22 2c 20 50 33  dbe, 3, "p2", P3
7660: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71  _STATIC);.    sq
7670: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
7680: 61 6d 65 28 73 50 61 72 73 65 2e 70 56 64 62 65  ame(sParse.pVdbe
7690: 2c 20 34 2c 20 22 70 33 22 2c 20 50 33 5f 53 54  , 4, "p3", P3_ST
76a0: 41 54 49 43 29 3b 0a 20 20 7d 20 0a 0a 70 72 65  ATIC);.  } ..pre
76b0: 70 61 72 65 5f 6f 75 74 3a 0a 20 20 69 66 28 20  pare_out:.  if( 
76c0: 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66  sqlite3SafetyOff
76d0: 28 64 62 29 20 29 7b 0a 20 20 20 20 72 63 20 3d  (db) ){.    rc =
76e0: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a   SQLITE_MISUSE;.
76f0: 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51    }.  if( rc==SQ
7700: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2a  LITE_OK ){.    *
7710: 70 70 53 74 6d 74 20 3d 20 28 73 71 6c 69 74 65  ppStmt = (sqlite
7720: 33 5f 73 74 6d 74 2a 29 73 50 61 72 73 65 2e 70  3_stmt*)sParse.p
7730: 56 64 62 65 3b 0a 20 20 7d 65 6c 73 65 20 69 66  Vdbe;.  }else if
7740: 28 20 73 50 61 72 73 65 2e 70 56 64 62 65 20 29  ( sParse.pVdbe )
7750: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69  {.    sqlite3_fi
7760: 6e 61 6c 69 7a 65 28 28 73 71 6c 69 74 65 33 5f  nalize((sqlite3_
7770: 73 74 6d 74 2a 29 73 50 61 72 73 65 2e 70 56 64  stmt*)sParse.pVd
7780: 62 65 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  be);.  }..  if( 
7790: 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20 20 73  zErrMsg ){.    s
77a0: 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20  qlite3Error(db, 
77b0: 72 63 2c 20 22 25 73 22 2c 20 7a 45 72 72 4d 73  rc, "%s", zErrMs
77c0: 67 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 46 72  g);.    sqliteFr
77d0: 65 65 28 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d  ee(zErrMsg);.  }
77e0: 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
77f0: 33 45 72 72 6f 72 28 64 62 2c 20 72 63 2c 20 30  3Error(db, rc, 0
7800: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
7810: 72 63 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53  rc;.}..#ifndef S
7820: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
7830: 0a 2f 2a 0a 2a 2a 20 43 6f 6d 70 69 6c 65 20 74  ./*.** Compile t
7840: 68 65 20 55 54 46 2d 31 36 20 65 6e 63 6f 64 65  he UTF-16 encode
7850: 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  d SQL statement 
7860: 7a 53 71 6c 20 69 6e 74 6f 20 61 20 73 74 61 74  zSql into a stat
7870: 65 6d 65 6e 74 20 68 61 6e 64 6c 65 2e 0a 2a 2f  ement handle..*/
7880: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 70 72 65  .int sqlite3_pre
7890: 70 61 72 65 31 36 28 0a 20 20 73 71 6c 69 74 65  pare16(.  sqlite
78a0: 33 20 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20  3 *db,          
78b0: 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
78c0: 68 61 6e 64 6c 65 2e 20 2a 2f 20 0a 20 20 63 6f  handle. */ .  co
78d0: 6e 73 74 20 76 6f 69 64 20 2a 7a 53 71 6c 2c 20  nst void *zSql, 
78e0: 20 20 20 20 20 20 20 20 2f 2a 20 55 54 46 2d 38          /* UTF-8
78f0: 20 65 6e 63 6f 64 65 64 20 53 51 4c 20 73 74 61   encoded SQL sta
7900: 74 65 6d 65 6e 74 2e 20 2a 2f 0a 20 20 69 6e 74  tement. */.  int
7910: 20 6e 42 79 74 65 73 2c 20 20 20 20 20 20 20 20   nBytes,        
7920: 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68         /* Length
7930: 20 6f 66 20 7a 53 71 6c 20 69 6e 20 62 79 74 65   of zSql in byte
7940: 73 2e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  s. */.  sqlite3_
7950: 73 74 6d 74 20 2a 2a 70 70 53 74 6d 74 2c 20 20  stmt **ppStmt,  
7960: 20 20 2f 2a 20 4f 55 54 3a 20 41 20 70 6f 69 6e    /* OUT: A poin
7970: 74 65 72 20 74 6f 20 74 68 65 20 70 72 65 70 61  ter to the prepa
7980: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f  red statement */
7990: 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2a  .  const void **
79a0: 70 7a 54 61 69 6c 20 20 20 20 20 20 20 2f 2a 20  pzTail       /* 
79b0: 4f 55 54 3a 20 45 6e 64 20 6f 66 20 70 61 72 73  OUT: End of pars
79c0: 65 64 20 73 74 72 69 6e 67 20 2a 2f 0a 29 7b 0a  ed string */.){.
79d0: 20 20 2f 2a 20 54 68 69 73 20 66 75 6e 63 74 69    /* This functi
79e0: 6f 6e 20 63 75 72 72 65 6e 74 6c 79 20 77 6f 72  on currently wor
79f0: 6b 73 20 62 79 20 66 69 72 73 74 20 74 72 61 6e  ks by first tran
7a00: 73 66 6f 72 6d 69 6e 67 20 74 68 65 20 55 54 46  sforming the UTF
7a10: 2d 31 36 0a 20 20 2a 2a 20 65 6e 63 6f 64 65 64  -16.  ** encoded
7a20: 20 73 74 72 69 6e 67 20 74 6f 20 55 54 46 2d 38   string to UTF-8
7a30: 2c 20 74 68 65 6e 20 69 6e 76 6f 6b 69 6e 67 20  , then invoking 
7a40: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
7a50: 29 2e 20 54 68 65 0a 20 20 2a 2a 20 74 72 69 63  ). The.  ** tric
7a60: 6b 79 20 62 69 74 20 69 73 20 66 69 67 75 72 69  ky bit is figuri
7a70: 6e 67 20 6f 75 74 20 74 68 65 20 70 6f 69 6e 74  ng out the point
7a80: 65 72 20 74 6f 20 72 65 74 75 72 6e 20 69 6e 20  er to return in 
7a90: 2a 70 7a 54 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20  *pzTail..  */.  
7aa0: 63 68 61 72 20 63 6f 6e 73 74 20 2a 7a 53 71 6c  char const *zSql
7ab0: 38 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 63 6f  8 = 0;.  char co
7ac0: 6e 73 74 20 2a 7a 54 61 69 6c 38 20 3d 20 30 3b  nst *zTail8 = 0;
7ad0: 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 73 71 6c  .  int rc;.  sql
7ae0: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 54 6d 70  ite3_value *pTmp
7af0: 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ;..  if( sqlite3
7b00: 53 61 66 65 74 79 43 68 65 63 6b 28 64 62 29 20  SafetyCheck(db) 
7b10: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51  ){.    return SQ
7b20: 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d  LITE_MISUSE;.  }
7b30: 0a 20 20 70 54 6d 70 20 3d 20 73 71 6c 69 74 65  .  pTmp = sqlite
7b40: 33 47 65 74 54 72 61 6e 73 69 65 6e 74 56 61 6c  3GetTransientVal
7b50: 75 65 28 64 62 29 3b 0a 20 20 73 71 6c 69 74 65  ue(db);.  sqlite
7b60: 33 56 61 6c 75 65 53 65 74 53 74 72 28 70 54 6d  3ValueSetStr(pTm
7b70: 70 2c 20 2d 31 2c 20 7a 53 71 6c 2c 20 53 51 4c  p, -1, zSql, SQL
7b80: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 2c  ITE_UTF16NATIVE,
7b90: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
7ba0: 0a 20 20 7a 53 71 6c 38 20 3d 20 73 71 6c 69 74  .  zSql8 = sqlit
7bb0: 65 33 56 61 6c 75 65 54 65 78 74 28 70 54 6d 70  e3ValueText(pTmp
7bc0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a  , SQLITE_UTF8);.
7bd0: 20 20 69 66 28 20 21 7a 53 71 6c 38 20 29 7b 0a    if( !zSql8 ){.
7be0: 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72      sqlite3Error
7bf0: 28 64 62 2c 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  (db, SQLITE_NOME
7c00: 4d 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  M, 0);.    retur
7c10: 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  n SQLITE_NOMEM;.
7c20: 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
7c30: 65 33 5f 70 72 65 70 61 72 65 28 64 62 2c 20 7a  e3_prepare(db, z
7c40: 53 71 6c 38 2c 20 2d 31 2c 20 70 70 53 74 6d 74  Sql8, -1, ppStmt
7c50: 2c 20 26 7a 54 61 69 6c 38 29 3b 0a 0a 20 20 69  , &zTail8);..  i
7c60: 66 28 20 7a 54 61 69 6c 38 20 26 26 20 70 7a 54  f( zTail8 && pzT
7c70: 61 69 6c 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  ail ){.    /* If
7c80: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
7c90: 20 72 65 74 75 72 6e 73 20 61 20 74 61 69 6c 20   returns a tail 
7ca0: 70 6f 69 6e 74 65 72 2c 20 77 65 20 63 61 6c 63  pointer, we calc
7cb0: 75 6c 61 74 65 20 74 68 65 0a 20 20 20 20 2a 2a  ulate the.    **
7cc0: 20 65 71 75 69 76 61 6c 65 6e 74 20 70 6f 69 6e   equivalent poin
7cd0: 74 65 72 20 69 6e 74 6f 20 74 68 65 20 55 54 46  ter into the UTF
7ce0: 2d 31 36 20 73 74 72 69 6e 67 20 62 79 20 63 6f  -16 string by co
7cf0: 75 6e 74 69 6e 67 20 74 68 65 20 75 6e 69 63 6f  unting the unico
7d00: 64 65 0a 20 20 20 20 2a 2a 20 63 68 61 72 61 63  de.    ** charac
7d10: 74 65 72 73 20 62 65 74 77 65 65 6e 20 7a 53 71  ters between zSq
7d20: 6c 38 20 61 6e 64 20 7a 54 61 69 6c 38 2c 20 61  l8 and zTail8, a
7d30: 6e 64 20 74 68 65 6e 20 72 65 74 75 72 6e 69 6e  nd then returnin
7d40: 67 20 61 20 70 6f 69 6e 74 65 72 0a 20 20 20 20  g a pointer.    
7d50: 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e 75 6d 62  ** the same numb
7d60: 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73  er of characters
7d70: 20 69 6e 74 6f 20 74 68 65 20 55 54 46 2d 31 36   into the UTF-16
7d80: 20 73 74 72 69 6e 67 2e 0a 20 20 20 20 2a 2f 0a   string..    */.
7d90: 20 20 20 20 69 6e 74 20 63 68 61 72 73 5f 70 61      int chars_pa
7da0: 72 73 65 64 20 3d 20 73 71 6c 69 74 65 33 75 74  rsed = sqlite3ut
7db0: 66 38 43 68 61 72 4c 65 6e 28 7a 53 71 6c 38 2c  f8CharLen(zSql8,
7dc0: 20 7a 54 61 69 6c 38 2d 7a 53 71 6c 38 29 3b 0a   zTail8-zSql8);.
7dd0: 20 20 20 20 2a 70 7a 54 61 69 6c 20 3d 20 28 75      *pzTail = (u
7de0: 38 20 2a 29 7a 53 71 6c 20 2b 20 73 71 6c 69 74  8 *)zSql + sqlit
7df0: 65 33 75 74 66 31 36 42 79 74 65 4c 65 6e 28 7a  e3utf16ByteLen(z
7e00: 53 71 6c 2c 20 63 68 61 72 73 5f 70 61 72 73 65  Sql, chars_parse
7e10: 64 29 3b 0a 20 20 7d 0a 20 0a 20 20 72 65 74 75  d);.  }. .  retu
7e20: 72 6e 20 72 63 3b 0a 7d 0a 23 65 6e 64 69 66 20  rn rc;.}.#endif 
7e30: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  /* SQLITE_OMIT_U
7e40: 54 46 31 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  TF16 */../*.** T
7e50: 68 69 73 20 72 6f 75 74 69 6e 65 20 64 6f 65 73  his routine does
7e60: 20 74 68 65 20 77 6f 72 6b 20 6f 66 20 6f 70 65   the work of ope
7e70: 6e 69 6e 67 20 61 20 64 61 74 61 62 61 73 65 20  ning a database 
7e80: 6f 6e 20 62 65 68 61 6c 66 20 6f 66 0a 2a 2a 20  on behalf of.** 
7e90: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28 29 20 61  sqlite3_open() a
7ea0: 6e 64 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31  nd sqlite3_open1
7eb0: 36 28 29 2e 20 54 68 65 20 64 61 74 61 62 61 73  6(). The databas
7ec0: 65 20 66 69 6c 65 6e 61 6d 65 20 22 7a 46 69 6c  e filename "zFil
7ed0: 65 6e 61 6d 65 22 20 20 0a 2a 2a 20 69 73 20 55  ename"  .** is U
7ee0: 54 46 2d 38 20 65 6e 63 6f 64 65 64 2e 20 54 68  TF-8 encoded. Th
7ef0: 65 20 66 6f 75 72 74 68 20 61 72 67 75 6d 65 6e  e fourth argumen
7f00: 74 2c 20 22 64 65 66 5f 65 6e 63 22 20 69 73 20  t, "def_enc" is 
7f10: 6f 6e 65 20 6f 66 20 74 68 65 20 54 45 58 54 5f  one of the TEXT_
7f20: 2a 0a 2a 2a 20 6d 61 63 72 6f 73 20 66 72 6f 6d  *.** macros from
7f30: 20 73 71 6c 69 74 65 49 6e 74 2e 68 2e 20 49 66   sqliteInt.h. If
7f40: 20 77 65 20 65 6e 64 20 75 70 20 63 72 65 61 74   we end up creat
7f50: 69 6e 67 20 61 20 6e 65 77 20 64 61 74 61 62 61  ing a new databa
7f60: 73 65 20 66 69 6c 65 0a 2a 2a 20 28 6e 6f 74 20  se file.** (not 
7f70: 6f 70 65 6e 69 6e 67 20 61 6e 20 65 78 69 73 74  opening an exist
7f80: 69 6e 67 20 6f 6e 65 29 2c 20 74 68 65 20 74 65  ing one), the te
7f90: 78 74 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 74  xt encoding of t
7fa0: 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 77  he database.** w
7fb0: 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 74 68  ill be set to th
7fc0: 69 73 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61  is value..*/.sta
7fd0: 74 69 63 20 69 6e 74 20 6f 70 65 6e 44 61 74 61  tic int openData
7fe0: 62 61 73 65 28 0a 20 20 63 6f 6e 73 74 20 63 68  base(.  const ch
7ff0: 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20 2f  ar *zFilename, /
8000: 2a 20 44 61 74 61 62 61 73 65 20 66 69 6c 65 6e  * Database filen
8010: 61 6d 65 20 55 54 46 2d 38 20 65 6e 63 6f 64 65  ame UTF-8 encode
8020: 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  d */.  sqlite3 *
8030: 2a 70 70 44 62 20 20 20 20 20 20 20 20 20 2f 2a  *ppDb         /*
8040: 20 4f 55 54 3a 20 52 65 74 75 72 6e 65 64 20 64   OUT: Returned d
8050: 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 2a  atabase handle *
8060: 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  /.){.  sqlite3 *
8070: 64 62 3b 0a 20 20 69 6e 74 20 72 63 2c 20 69 3b  db;.  int rc, i;
8080: 0a 0a 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 20  ..  /* Allocate 
8090: 74 68 65 20 73 71 6c 69 74 65 20 64 61 74 61 20  the sqlite data 
80a0: 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 64  structure */.  d
80b0: 62 20 3d 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63  b = sqliteMalloc
80c0: 28 20 73 69 7a 65 6f 66 28 73 71 6c 69 74 65 33  ( sizeof(sqlite3
80d0: 29 20 29 3b 0a 20 20 69 66 28 20 64 62 3d 3d 30  ) );.  if( db==0
80e0: 20 29 20 67 6f 74 6f 20 6f 70 65 6e 64 62 5f 6f   ) goto opendb_o
80f0: 75 74 3b 0a 20 20 64 62 2d 3e 70 72 69 6f 72 4e  ut;.  db->priorN
8100: 65 77 52 6f 77 69 64 20 3d 20 30 3b 0a 20 20 64  ewRowid = 0;.  d
8110: 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54  b->magic = SQLIT
8120: 45 5f 4d 41 47 49 43 5f 42 55 53 59 3b 0a 20 20  E_MAGIC_BUSY;.  
8130: 64 62 2d 3e 6e 44 62 20 3d 20 32 3b 0a 20 20 64  db->nDb = 2;.  d
8140: 62 2d 3e 61 44 62 20 3d 20 64 62 2d 3e 61 44 62  b->aDb = db->aDb
8150: 53 74 61 74 69 63 3b 0a 20 20 64 62 2d 3e 65 6e  Static;.  db->en
8160: 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b  c = SQLITE_UTF8;
8170: 0a 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  .  db->autoCommi
8180: 74 20 3d 20 31 3b 0a 20 20 64 62 2d 3e 66 6c 61  t = 1;.  db->fla
8190: 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 53 68 6f  gs |= SQLITE_Sho
81a0: 72 74 43 6f 6c 4e 61 6d 65 73 3b 0a 20 20 73 71  rtColNames;.  sq
81b0: 6c 69 74 65 33 48 61 73 68 49 6e 69 74 28 26 64  lite3HashInit(&d
81c0: 62 2d 3e 61 46 75 6e 63 2c 20 53 51 4c 49 54 45  b->aFunc, SQLITE
81d0: 5f 48 41 53 48 5f 53 54 52 49 4e 47 2c 20 30 29  _HASH_STRING, 0)
81e0: 3b 0a 20 20 73 71 6c 69 74 65 33 48 61 73 68 49  ;.  sqlite3HashI
81f0: 6e 69 74 28 26 64 62 2d 3e 61 43 6f 6c 6c 53 65  nit(&db->aCollSe
8200: 71 2c 20 53 51 4c 49 54 45 5f 48 41 53 48 5f 53  q, SQLITE_HASH_S
8210: 54 52 49 4e 47 2c 20 30 29 3b 0a 20 20 66 6f 72  TRING, 0);.  for
8220: 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b  (i=0; i<db->nDb;
8230: 20 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74   i++){.    sqlit
8240: 65 33 48 61 73 68 49 6e 69 74 28 26 64 62 2d 3e  e3HashInit(&db->
8250: 61 44 62 5b 69 5d 2e 74 62 6c 48 61 73 68 2c 20  aDb[i].tblHash, 
8260: 53 51 4c 49 54 45 5f 48 41 53 48 5f 53 54 52 49  SQLITE_HASH_STRI
8270: 4e 47 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69  NG, 0);.    sqli
8280: 74 65 33 48 61 73 68 49 6e 69 74 28 26 64 62 2d  te3HashInit(&db-
8290: 3e 61 44 62 5b 69 5d 2e 69 64 78 48 61 73 68 2c  >aDb[i].idxHash,
82a0: 20 53 51 4c 49 54 45 5f 48 41 53 48 5f 53 54 52   SQLITE_HASH_STR
82b0: 49 4e 47 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c  ING, 0);.    sql
82c0: 69 74 65 33 48 61 73 68 49 6e 69 74 28 26 64 62  ite3HashInit(&db
82d0: 2d 3e 61 44 62 5b 69 5d 2e 74 72 69 67 48 61 73  ->aDb[i].trigHas
82e0: 68 2c 20 53 51 4c 49 54 45 5f 48 41 53 48 5f 53  h, SQLITE_HASH_S
82f0: 54 52 49 4e 47 2c 20 30 29 3b 0a 20 20 20 20 73  TRING, 0);.    s
8300: 71 6c 69 74 65 33 48 61 73 68 49 6e 69 74 28 26  qlite3HashInit(&
8310: 64 62 2d 3e 61 44 62 5b 69 5d 2e 61 46 4b 65 79  db->aDb[i].aFKey
8320: 2c 20 53 51 4c 49 54 45 5f 48 41 53 48 5f 53 54  , SQLITE_HASH_ST
8330: 52 49 4e 47 2c 20 31 29 3b 0a 20 20 7d 0a 20 20  RING, 1);.  }.  
8340: 0a 20 20 2f 2a 20 41 64 64 20 74 68 65 20 64 65  .  /* Add the de
8350: 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20  fault collation 
8360: 73 65 71 75 65 6e 63 65 20 42 49 4e 41 52 59 2e  sequence BINARY.
8370: 20 42 49 4e 41 52 59 20 77 6f 72 6b 73 20 66 6f   BINARY works fo
8380: 72 20 62 6f 74 68 20 55 54 46 2d 38 0a 20 20 2a  r both UTF-8.  *
8390: 2a 20 61 6e 64 20 55 54 46 2d 31 36 2c 20 73 6f  * and UTF-16, so
83a0: 20 61 64 64 20 61 20 76 65 72 73 69 6f 6e 20 66   add a version f
83b0: 6f 72 20 65 61 63 68 20 74 6f 20 61 76 6f 69 64  or each to avoid
83c0: 20 61 6e 79 20 75 6e 6e 65 63 65 73 73 61 72 79   any unnecessary
83d0: 0a 20 20 2a 2a 20 63 6f 6e 76 65 72 73 69 6f 6e  .  ** conversion
83e0: 73 2e 20 54 68 65 20 6f 6e 6c 79 20 65 72 72 6f  s. The only erro
83f0: 72 20 74 68 61 74 20 63 61 6e 20 6f 63 63 75 72  r that can occur
8400: 20 68 65 72 65 20 69 73 20 61 20 6d 61 6c 6c 6f   here is a mallo
8410: 63 28 29 20 66 61 69 6c 75 72 65 2e 0a 20 20 2a  c() failure..  *
8420: 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f  /.  if( sqlite3_
8430: 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e  create_collation
8440: 28 64 62 2c 20 22 42 49 4e 41 52 59 22 2c 20 53  (db, "BINARY", S
8450: 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 62 69  QLITE_UTF8, 0,bi
8460: 6e 43 6f 6c 6c 46 75 6e 63 29 20 7c 7c 0a 20 20  nCollFunc) ||.  
8470: 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61      sqlite3_crea
8480: 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c  te_collation(db,
8490: 20 22 42 49 4e 41 52 59 22 2c 20 53 51 4c 49 54   "BINARY", SQLIT
84a0: 45 5f 55 54 46 31 36 2c 20 30 2c 62 69 6e 43 6f  E_UTF16, 0,binCo
84b0: 6c 6c 46 75 6e 63 29 20 7c 7c 0a 20 20 20 20 20  llFunc) ||.     
84c0: 20 21 28 64 62 2d 3e 70 44 66 6c 74 43 6f 6c 6c   !(db->pDfltColl
84d0: 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 43 6f   = sqlite3FindCo
84e0: 6c 6c 53 65 71 28 64 62 2c 20 64 62 2d 3e 65 6e  llSeq(db, db->en
84f0: 63 2c 20 22 42 49 4e 41 52 59 22 2c 20 36 2c 20  c, "BINARY", 6, 
8500: 30 29 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  0)) ){.    rc = 
8510: 64 62 2d 3e 65 72 72 43 6f 64 65 3b 0a 20 20 20  db->errCode;.   
8520: 20 61 73 73 65 72 74 28 20 72 63 21 3d 53 51 4c   assert( rc!=SQL
8530: 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20 20 64 62  ITE_OK );.    db
8540: 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45  ->magic = SQLITE
8550: 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 3b 0a 20  _MAGIC_CLOSED;. 
8560: 20 20 20 67 6f 74 6f 20 6f 70 65 6e 64 62 5f 6f     goto opendb_o
8570: 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 41 6c  ut;.  }..  /* Al
8580: 73 6f 20 61 64 64 20 61 20 55 54 46 2d 38 20 63  so add a UTF-8 c
8590: 61 73 65 2d 69 6e 73 65 6e 73 69 74 69 76 65 20  ase-insensitive 
85a0: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
85b0: 63 65 2e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ce. */.  sqlite3
85c0: 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f  _create_collatio
85d0: 6e 28 64 62 2c 20 22 4e 4f 43 41 53 45 22 2c 20  n(db, "NOCASE", 
85e0: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 20  SQLITE_UTF8, 0, 
85f0: 6e 6f 63 61 73 65 43 6f 6c 6c 61 74 69 6e 67 46  nocaseCollatingF
8600: 75 6e 63 29 3b 0a 0a 20 20 2f 2a 20 4f 70 65 6e  unc);..  /* Open
8610: 20 74 68 65 20 62 61 63 6b 65 6e 64 20 64 61 74   the backend dat
8620: 61 62 61 73 65 20 64 72 69 76 65 72 20 2a 2f 0a  abase driver */.
8630: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
8640: 72 65 65 46 61 63 74 6f 72 79 28 64 62 2c 20 7a  reeFactory(db, z
8650: 46 69 6c 65 6e 61 6d 65 2c 20 30 2c 20 4d 41 58  Filename, 0, MAX
8660: 5f 50 41 47 45 53 2c 20 26 64 62 2d 3e 61 44 62  _PAGES, &db->aDb
8670: 5b 30 5d 2e 70 42 74 29 3b 0a 20 20 69 66 28 20  [0].pBt);.  if( 
8680: 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
8690: 0a 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f  .    sqlite3Erro
86a0: 72 28 64 62 2c 20 72 63 2c 20 30 29 3b 0a 20 20  r(db, rc, 0);.  
86b0: 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51    db->magic = SQ
86c0: 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45  LITE_MAGIC_CLOSE
86d0: 44 3b 0a 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e  D;.    goto open
86e0: 64 62 5f 6f 75 74 3b 0a 20 20 7d 0a 20 20 64 62  db_out;.  }.  db
86f0: 2d 3e 61 44 62 5b 30 5d 2e 7a 4e 61 6d 65 20 3d  ->aDb[0].zName =
8700: 20 22 6d 61 69 6e 22 3b 0a 20 20 64 62 2d 3e 61   "main";.  db->a
8710: 44 62 5b 31 5d 2e 7a 4e 61 6d 65 20 3d 20 22 74  Db[1].zName = "t
8720: 65 6d 70 22 3b 0a 0a 20 20 2f 2a 20 54 68 65 20  emp";..  /* The 
8730: 64 65 66 61 75 6c 74 20 73 61 66 65 74 79 5f 6c  default safety_l
8740: 65 76 65 6c 20 66 6f 72 20 74 68 65 20 6d 61 69  evel for the mai
8750: 6e 20 64 61 74 61 62 61 73 65 20 69 73 20 27 66  n database is 'f
8760: 75 6c 6c 27 20 66 6f 72 20 74 68 65 20 74 65 6d  ull' for the tem
8770: 70 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20  p.  ** database 
8780: 69 74 20 69 73 20 27 4e 4f 4e 45 27 2e 20 54 68  it is 'NONE'. Th
8790: 69 73 20 6d 61 74 63 68 65 73 20 74 68 65 20 70  is matches the p
87a0: 61 67 65 72 20 6c 61 79 65 72 20 64 65 66 61 75  ager layer defau
87b0: 6c 74 73 2e 20 20 2a 2f 0a 20 20 64 62 2d 3e 61  lts.  */.  db->a
87c0: 44 62 5b 30 5d 2e 73 61 66 65 74 79 5f 6c 65 76  Db[0].safety_lev
87d0: 65 6c 20 3d 20 33 3b 0a 20 20 64 62 2d 3e 61 44  el = 3;.  db->aD
87e0: 62 5b 31 5d 2e 73 61 66 65 74 79 5f 6c 65 76 65  b[1].safety_leve
87f0: 6c 20 3d 20 31 3b 0a 0a 20 20 2f 2a 20 52 65 67  l = 1;..  /* Reg
8800: 69 73 74 65 72 20 61 6c 6c 20 62 75 69 6c 74 2d  ister all built-
8810: 69 6e 20 66 75 6e 63 74 69 6f 6e 73 2c 20 62 75  in functions, bu
8820: 74 20 64 6f 20 6e 6f 74 20 61 74 74 65 6d 70 74  t do not attempt
8830: 20 74 6f 20 72 65 61 64 20 74 68 65 0a 20 20 2a   to read the.  *
8840: 2a 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  * database schem
8850: 61 20 79 65 74 2e 20 54 68 69 73 20 69 73 20 64  a yet. This is d
8860: 65 6c 61 79 65 64 20 75 6e 74 69 6c 20 74 68 65  elayed until the
8870: 20 66 69 72 73 74 20 74 69 6d 65 20 74 68 65 20   first time the 
8880: 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 69 73  database.  ** is
8890: 20 61 63 63 65 73 73 65 64 2e 0a 20 20 2a 2f 0a   accessed..  */.
88a0: 20 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65    sqlite3Registe
88b0: 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  rBuiltinFunction
88c0: 73 28 64 62 29 3b 0a 20 20 73 71 6c 69 74 65 33  s(db);.  sqlite3
88d0: 45 72 72 6f 72 28 64 62 2c 20 53 51 4c 49 54 45  Error(db, SQLITE
88e0: 5f 4f 4b 2c 20 30 29 3b 0a 20 20 64 62 2d 3e 6d  _OK, 0);.  db->m
88f0: 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41  agic = SQLITE_MA
8900: 47 49 43 5f 4f 50 45 4e 3b 0a 0a 6f 70 65 6e 64  GIC_OPEN;..opend
8910: 62 5f 6f 75 74 3a 0a 20 20 69 66 28 20 73 71 6c  b_out:.  if( sql
8920: 69 74 65 33 5f 65 72 72 63 6f 64 65 28 64 62 29  ite3_errcode(db)
8930: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 73  ==SQLITE_OK && s
8940: 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 66 61  qlite3_malloc_fa
8950: 69 6c 65 64 20 29 7b 0a 20 20 20 20 73 71 6c 69  iled ){.    sqli
8960: 74 65 33 45 72 72 6f 72 28 64 62 2c 20 53 51 4c  te3Error(db, SQL
8970: 49 54 45 5f 4e 4f 4d 45 4d 2c 20 30 29 3b 0a 20  ITE_NOMEM, 0);. 
8980: 20 7d 0a 20 20 2a 70 70 44 62 20 3d 20 64 62 3b   }.  *ppDb = db;
8990: 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65  .  return sqlite
89a0: 33 5f 65 72 72 63 6f 64 65 28 64 62 29 3b 0a 7d  3_errcode(db);.}
89b0: 0a 0a 2f 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e  ../*.** Open a n
89c0: 65 77 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  ew database hand
89d0: 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  le..*/.int sqlit
89e0: 65 33 5f 6f 70 65 6e 28 0a 20 20 63 6f 6e 73 74  e3_open(.  const
89f0: 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65   char *zFilename
8a00: 2c 20 0a 20 20 73 71 6c 69 74 65 33 20 2a 2a 70  , .  sqlite3 **p
8a10: 70 44 62 20 0a 29 7b 0a 20 20 72 65 74 75 72 6e  pDb .){.  return
8a20: 20 6f 70 65 6e 44 61 74 61 62 61 73 65 28 7a 46   openDatabase(zF
8a30: 69 6c 65 6e 61 6d 65 2c 20 70 70 44 62 29 3b 0a  ilename, ppDb);.
8a40: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
8a50: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 2f 2a 0a  E_OMIT_UTF16./*.
8a60: 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 64 61  ** Open a new da
8a70: 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 0a 2a  tabase handle..*
8a80: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 6f 70  /.int sqlite3_op
8a90: 65 6e 31 36 28 0a 20 20 63 6f 6e 73 74 20 76 6f  en16(.  const vo
8aa0: 69 64 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20 0a  id *zFilename, .
8ab0: 20 20 73 71 6c 69 74 65 33 20 2a 2a 70 70 44 62    sqlite3 **ppDb
8ac0: 0a 29 7b 0a 20 20 63 68 61 72 20 63 6f 6e 73 74  .){.  char const
8ad0: 20 2a 7a 46 69 6c 65 6e 61 6d 65 38 3b 20 20 20   *zFilename8;   
8ae0: 2f 2a 20 7a 46 69 6c 65 6e 61 6d 65 20 65 6e 63  /* zFilename enc
8af0: 6f 64 65 64 20 69 6e 20 55 54 46 2d 38 20 69 6e  oded in UTF-8 in
8b00: 73 74 65 61 64 20 6f 66 20 55 54 46 2d 31 36 20  stead of UTF-16 
8b10: 2a 2f 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51  */.  int rc = SQ
8b20: 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 73 71  LITE_NOMEM;.  sq
8b30: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
8b40: 6c 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 70  l;..  assert( pp
8b50: 44 62 20 29 3b 0a 20 20 2a 70 70 44 62 20 3d 20  Db );.  *ppDb = 
8b60: 30 3b 0a 20 20 70 56 61 6c 20 3d 20 73 71 6c 69  0;.  pVal = sqli
8b70: 74 65 33 56 61 6c 75 65 4e 65 77 28 29 3b 0a 20  te3ValueNew();. 
8b80: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74   sqlite3ValueSet
8b90: 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c 20 7a 46  Str(pVal, -1, zF
8ba0: 69 6c 65 6e 61 6d 65 2c 20 53 51 4c 49 54 45 5f  ilename, SQLITE_
8bb0: 55 54 46 31 36 4e 41 54 49 56 45 2c 20 53 51 4c  UTF16NATIVE, SQL
8bc0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 7a  ITE_STATIC);.  z
8bd0: 46 69 6c 65 6e 61 6d 65 38 20 3d 20 73 71 6c 69  Filename8 = sqli
8be0: 74 65 33 56 61 6c 75 65 54 65 78 74 28 70 56 61  te3ValueText(pVa
8bf0: 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3b  l, SQLITE_UTF8);
8c00: 0a 20 20 69 66 28 20 7a 46 69 6c 65 6e 61 6d 65  .  if( zFilename
8c10: 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 6f 70  8 ){.    rc = op
8c20: 65 6e 44 61 74 61 62 61 73 65 28 7a 46 69 6c 65  enDatabase(zFile
8c30: 6e 61 6d 65 38 2c 20 70 70 44 62 29 3b 0a 20 20  name8, ppDb);.  
8c40: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
8c50: 5f 4f 4b 20 26 26 20 2a 70 70 44 62 20 29 7b 0a  _OK && *ppDb ){.
8c60: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78        sqlite3_ex
8c70: 65 63 28 2a 70 70 44 62 2c 20 22 50 52 41 47 4d  ec(*ppDb, "PRAGM
8c80: 41 20 65 6e 63 6f 64 69 6e 67 20 3d 20 27 55 54  A encoding = 'UT
8c90: 46 2d 31 36 27 22 2c 20 30 2c 20 30 2c 20 30 29  F-16'", 0, 0, 0)
8ca0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
8cb0: 28 20 70 56 61 6c 20 29 7b 0a 20 20 20 20 73 71  ( pVal ){.    sq
8cc0: 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 70  lite3ValueFree(p
8cd0: 56 61 6c 29 3b 0a 20 20 7d 0a 0a 20 20 72 65 74  Val);.  }..  ret
8ce0: 75 72 6e 20 72 63 3b 0a 7d 0a 23 65 6e 64 69 66  urn rc;.}.#endif
8cf0: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
8d00: 55 54 46 31 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  UTF16 */../*.** 
8d10: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 6f  The following ro
8d20: 75 74 69 6e 65 20 64 65 73 74 72 6f 79 73 20 61  utine destroys a
8d30: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
8d40: 20 74 68 61 74 20 69 73 20 63 72 65 61 74 65 64   that is created
8d50: 20 62 79 0a 2a 2a 20 74 68 65 20 73 71 6c 69 74   by.** the sqlit
8d60: 65 33 5f 63 6f 6d 70 69 6c 65 28 29 20 72 6f 75  e3_compile() rou
8d70: 74 69 6e 65 2e 20 54 68 65 20 69 6e 74 65 67 65  tine. The intege
8d80: 72 20 72 65 74 75 72 6e 65 64 20 69 73 20 61 6e  r returned is an
8d90: 20 53 51 4c 49 54 45 5f 0a 2a 2a 20 73 75 63 63   SQLITE_.** succ
8da0: 65 73 73 2f 66 61 69 6c 75 72 65 20 63 6f 64 65  ess/failure code
8db0: 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20   that describes 
8dc0: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 65 78  the result of ex
8dd0: 65 63 75 74 69 6e 67 20 74 68 65 20 76 69 72 74  ecuting the virt
8de0: 75 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65 2e 0a  ual.** machine..
8df0: 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69  **.** This routi
8e00: 6e 65 20 73 65 74 73 20 74 68 65 20 65 72 72 6f  ne sets the erro
8e10: 72 20 63 6f 64 65 20 61 6e 64 20 73 74 72 69 6e  r code and strin
8e20: 67 20 72 65 74 75 72 6e 65 64 20 62 79 0a 2a 2a  g returned by.**
8e30: 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65   sqlite3_errcode
8e40: 28 29 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d  (), sqlite3_errm
8e50: 73 67 28 29 20 61 6e 64 20 73 71 6c 69 74 65 33  sg() and sqlite3
8e60: 5f 65 72 72 6d 73 67 31 36 28 29 2e 0a 2a 2f 0a  _errmsg16()..*/.
8e70: 69 6e 74 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  int sqlite3_fina
8e80: 6c 69 7a 65 28 73 71 6c 69 74 65 33 5f 73 74 6d  lize(sqlite3_stm
8e90: 74 20 2a 70 53 74 6d 74 29 7b 0a 20 20 69 6e 74  t *pStmt){.  int
8ea0: 20 72 63 3b 0a 20 20 69 66 28 20 70 53 74 6d 74   rc;.  if( pStmt
8eb0: 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ==0 ){.    rc = 
8ec0: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 65 6c  SQLITE_OK;.  }el
8ed0: 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  se{.    rc = sql
8ee0: 69 74 65 33 56 64 62 65 46 69 6e 61 6c 69 7a 65  ite3VdbeFinalize
8ef0: 28 28 56 64 62 65 2a 29 70 53 74 6d 74 29 3b 0a  ((Vdbe*)pStmt);.
8f00: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b    }.  return rc;
8f10: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 65 72 6d 69 6e  .}../*.** Termin
8f20: 61 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20  ate the current 
8f30: 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 61 6e 20  execution of an 
8f40: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 61 6e  SQL statement an
8f50: 64 20 72 65 73 65 74 20 69 74 0a 2a 2a 20 62 61  d reset it.** ba
8f60: 63 6b 20 74 6f 20 69 74 73 20 73 74 61 72 74 69  ck to its starti
8f70: 6e 67 20 73 74 61 74 65 20 73 6f 20 74 68 61 74  ng state so that
8f80: 20 69 74 20 63 61 6e 20 62 65 20 72 65 75 73 65   it can be reuse
8f90: 64 2e 20 41 20 73 75 63 63 65 73 73 20 63 6f 64  d. A success cod
8fa0: 65 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 70 72  e from.** the pr
8fb0: 69 6f 72 20 65 78 65 63 75 74 69 6f 6e 20 69 73  ior execution is
8fc0: 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2a 0a 2a 2a   returned..**.**
8fd0: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65   This routine se
8fe0: 74 73 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64  ts the error cod
8ff0: 65 20 61 6e 64 20 73 74 72 69 6e 67 20 72 65 74  e and string ret
9000: 75 72 6e 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69  urned by.** sqli
9010: 74 65 33 5f 65 72 72 63 6f 64 65 28 29 2c 20 73  te3_errcode(), s
9020: 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 29 20  qlite3_errmsg() 
9030: 61 6e 64 20 73 71 6c 69 74 65 33 5f 65 72 72 6d  and sqlite3_errm
9040: 73 67 31 36 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73  sg16()..*/.int s
9050: 71 6c 69 74 65 33 5f 72 65 73 65 74 28 73 71 6c  qlite3_reset(sql
9060: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
9070: 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69  ){.  int rc;.  i
9080: 66 28 20 70 53 74 6d 74 3d 3d 30 20 29 7b 0a 20  f( pStmt==0 ){. 
9090: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
90a0: 4b 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  K;.  }else{.    
90b0: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
90c0: 52 65 73 65 74 28 28 56 64 62 65 2a 29 70 53 74  Reset((Vdbe*)pSt
90d0: 6d 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  mt);.    sqlite3
90e0: 56 64 62 65 4d 61 6b 65 52 65 61 64 79 28 28 56  VdbeMakeReady((V
90f0: 64 62 65 2a 29 70 53 74 6d 74 2c 20 2d 31 2c 20  dbe*)pStmt, -1, 
9100: 30 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 20 20  0, 0, 0);.  }.  
9110: 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a  return rc;.}../*
9120: 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 61 20 6e  .** Register a n
9130: 65 77 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  ew collation seq
9140: 75 65 6e 63 65 20 77 69 74 68 20 74 68 65 20 64  uence with the d
9150: 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 64  atabase handle d
9160: 62 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  b..*/.int sqlite
9170: 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69  3_create_collati
9180: 6f 6e 28 0a 20 20 73 71 6c 69 74 65 33 2a 20 64  on(.  sqlite3* d
9190: 62 2c 20 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  b, .  const char
91a0: 20 2a 7a 4e 61 6d 65 2c 20 0a 20 20 69 6e 74 20   *zName, .  int 
91b0: 65 6e 63 2c 20 0a 20 20 76 6f 69 64 2a 20 70 43  enc, .  void* pC
91c0: 74 78 2c 0a 20 20 69 6e 74 28 2a 78 43 6f 6d 70  tx,.  int(*xComp
91d0: 61 72 65 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63  are)(void*,int,c
91e0: 6f 6e 73 74 20 76 6f 69 64 2a 2c 69 6e 74 2c 63  onst void*,int,c
91f0: 6f 6e 73 74 20 76 6f 69 64 2a 29 0a 29 7b 0a 20  onst void*).){. 
9200: 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b   CollSeq *pColl;
9210: 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49  .  int rc = SQLI
9220: 54 45 5f 4f 4b 3b 0a 20 20 0a 20 20 69 66 28 20  TE_OK;.  .  if( 
9230: 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
9240: 63 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65  ck(db) ){.    re
9250: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  turn SQLITE_MISU
9260: 53 45 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66  SE;.  }..  /* If
9270: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 20 69 73   SQLITE_UTF16 is
9280: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74 68   specified as th
9290: 65 20 65 6e 63 6f 64 69 6e 67 20 74 79 70 65 2c  e encoding type,
92a0: 20 74 72 61 6e 73 66 6f 72 6d 20 74 68 69 73 0a   transform this.
92b0: 20 20 2a 2a 20 74 6f 20 6f 6e 65 20 6f 66 20 53    ** to one of S
92c0: 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 6f 72  QLITE_UTF16LE or
92d0: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20   SQLITE_UTF16BE 
92e0: 75 73 69 6e 67 20 74 68 65 0a 20 20 2a 2a 20 53  using the.  ** S
92f0: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
9300: 45 20 6d 61 63 72 6f 2e 20 53 51 4c 49 54 45 5f  E macro. SQLITE_
9310: 55 54 46 31 36 20 69 73 20 6e 6f 74 20 75 73 65  UTF16 is not use
9320: 64 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 0a 20 20  d internally..  
9330: 2a 2f 0a 20 20 69 66 28 20 65 6e 63 3d 3d 53 51  */.  if( enc==SQ
9340: 4c 49 54 45 5f 55 54 46 31 36 20 29 7b 0a 20 20  LITE_UTF16 ){.  
9350: 20 20 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55    enc = SQLITE_U
9360: 54 46 31 36 4e 41 54 49 56 45 3b 0a 20 20 7d 0a  TF16NATIVE;.  }.
9370: 0a 20 20 69 66 28 20 65 6e 63 21 3d 53 51 4c 49  .  if( enc!=SQLI
9380: 54 45 5f 55 54 46 38 20 26 26 20 65 6e 63 21 3d  TE_UTF8 && enc!=
9390: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 26  SQLITE_UTF16LE &
93a0: 26 20 65 6e 63 21 3d 53 51 4c 49 54 45 5f 55 54  & enc!=SQLITE_UT
93b0: 46 31 36 42 45 20 29 7b 0a 20 20 20 20 73 71 6c  F16BE ){.    sql
93c0: 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20 53 51  ite3Error(db, SQ
93d0: 4c 49 54 45 5f 45 52 52 4f 52 2c 20 0a 20 20 20  LITE_ERROR, .   
93e0: 20 20 20 20 20 22 50 61 72 61 6d 20 33 20 74 6f       "Param 3 to
93f0: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
9400: 63 6f 6c 6c 61 74 69 6f 6e 28 29 20 6d 75 73 74  collation() must
9410: 20 62 65 20 6f 6e 65 20 6f 66 20 22 0a 20 20 20   be one of ".   
9420: 20 20 20 20 20 22 53 51 4c 49 54 45 5f 55 54 46       "SQLITE_UTF
9430: 38 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 2c  8, SQLITE_UTF16,
9440: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20   SQLITE_UTF16LE 
9450: 6f 72 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42  or SQLITE_UTF16B
9460: 45 22 0a 20 20 20 20 29 3b 0a 20 20 20 20 72 65  E".    );.    re
9470: 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f  turn SQLITE_ERRO
9480: 52 3b 0a 20 20 7d 0a 20 20 70 43 6f 6c 6c 20 3d  R;.  }.  pColl =
9490: 20 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c   sqlite3FindColl
94a0: 53 65 71 28 64 62 2c 20 28 75 38 29 65 6e 63 2c  Seq(db, (u8)enc,
94b0: 20 7a 4e 61 6d 65 2c 20 73 74 72 6c 65 6e 28 7a   zName, strlen(z
94c0: 4e 61 6d 65 29 2c 20 31 29 3b 0a 20 20 69 66 28  Name), 1);.  if(
94d0: 20 30 3d 3d 70 43 6f 6c 6c 20 29 7b 0a 20 20 20   0==pColl ){.   
94e0: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  rc = SQLITE_NOME
94f0: 4d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  M;.  }else{.    
9500: 70 43 6f 6c 6c 2d 3e 78 43 6d 70 20 3d 20 78 43  pColl->xCmp = xC
9510: 6f 6d 70 61 72 65 3b 0a 20 20 20 20 70 43 6f 6c  ompare;.    pCol
9520: 6c 2d 3e 70 55 73 65 72 20 3d 20 70 43 74 78 3b  l->pUser = pCtx;
9530: 0a 20 20 20 20 70 43 6f 6c 6c 2d 3e 65 6e 63 20  .    pColl->enc 
9540: 3d 20 65 6e 63 3b 0a 20 20 7d 0a 20 20 73 71 6c  = enc;.  }.  sql
9550: 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20 72 63  ite3Error(db, rc
9560: 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 72  , 0);.  return r
9570: 63 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  c;.}..#ifndef SQ
9580: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
9590: 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 61  /*.** Register a
95a0: 20 6e 65 77 20 63 6f 6c 6c 61 74 69 6f 6e 20 73   new collation s
95b0: 65 71 75 65 6e 63 65 20 77 69 74 68 20 74 68 65  equence with the
95c0: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
95d0: 20 64 62 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69   db..*/.int sqli
95e0: 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61  te3_create_colla
95f0: 74 69 6f 6e 31 36 28 0a 20 20 73 71 6c 69 74 65  tion16(.  sqlite
9600: 33 2a 20 64 62 2c 20 0a 20 20 63 6f 6e 73 74 20  3* db, .  const 
9610: 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 20 0a 20 20  char *zName, .  
9620: 69 6e 74 20 65 6e 63 2c 20 0a 20 20 76 6f 69 64  int enc, .  void
9630: 2a 20 70 43 74 78 2c 0a 20 20 69 6e 74 28 2a 78  * pCtx,.  int(*x
9640: 43 6f 6d 70 61 72 65 29 28 76 6f 69 64 2a 2c 69  Compare)(void*,i
9650: 6e 74 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 69  nt,const void*,i
9660: 6e 74 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 0a  nt,const void*).
9670: 29 7b 0a 20 20 63 68 61 72 20 63 6f 6e 73 74 20  ){.  char const 
9680: 2a 7a 4e 61 6d 65 38 3b 0a 20 20 73 71 6c 69 74  *zName8;.  sqlit
9690: 65 33 5f 76 61 6c 75 65 20 2a 70 54 6d 70 3b 0a  e3_value *pTmp;.
96a0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
96b0: 65 74 79 43 68 65 63 6b 28 64 62 29 20 29 7b 0a  etyCheck(db) ){.
96c0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
96d0: 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a 20 20  E_MISUSE;.  }.  
96e0: 70 54 6d 70 20 3d 20 73 71 6c 69 74 65 33 47 65  pTmp = sqlite3Ge
96f0: 74 54 72 61 6e 73 69 65 6e 74 56 61 6c 75 65 28  tTransientValue(
9700: 64 62 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 61  db);.  sqlite3Va
9710: 6c 75 65 53 65 74 53 74 72 28 70 54 6d 70 2c 20  lueSetStr(pTmp, 
9720: 2d 31 2c 20 7a 4e 61 6d 65 2c 20 53 51 4c 49 54  -1, zName, SQLIT
9730: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 2c 20 53  E_UTF16NATIVE, S
9740: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
9750: 20 7a 4e 61 6d 65 38 20 3d 20 73 71 6c 69 74 65   zName8 = sqlite
9760: 33 56 61 6c 75 65 54 65 78 74 28 70 54 6d 70 2c  3ValueText(pTmp,
9770: 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20   SQLITE_UTF8);. 
9780: 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f   return sqlite3_
9790: 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e  create_collation
97a0: 28 64 62 2c 20 7a 4e 61 6d 65 38 2c 20 65 6e 63  (db, zName8, enc
97b0: 2c 20 70 43 74 78 2c 20 78 43 6f 6d 70 61 72 65  , pCtx, xCompare
97c0: 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  );.}.#endif /* S
97d0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
97e0: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73   */../*.** Regis
97f0: 74 65 72 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20  ter a collation 
9800: 73 65 71 75 65 6e 63 65 20 66 61 63 74 6f 72 79  sequence factory
9810: 20 63 61 6c 6c 62 61 63 6b 20 77 69 74 68 20 74   callback with t
9820: 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
9830: 6c 65 0a 2a 2a 20 64 62 2e 20 52 65 70 6c 61 63  le.** db. Replac
9840: 65 20 61 6e 79 20 70 72 65 76 69 6f 75 73 6c 79  e any previously
9850: 20 69 6e 73 74 61 6c 6c 65 64 20 63 6f 6c 6c 61   installed colla
9860: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 61  tion sequence fa
9870: 63 74 6f 72 79 2e 0a 2a 2f 0a 69 6e 74 20 73 71  ctory..*/.int sq
9880: 6c 69 74 65 33 5f 63 6f 6c 6c 61 74 69 6f 6e 5f  lite3_collation_
9890: 6e 65 65 64 65 64 28 0a 20 20 73 71 6c 69 74 65  needed(.  sqlite
98a0: 33 20 2a 64 62 2c 20 0a 20 20 76 6f 69 64 20 2a  3 *db, .  void *
98b0: 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 2c 20  pCollNeededArg, 
98c0: 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65  .  void(*xCollNe
98d0: 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69  eded)(void*,sqli
98e0: 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65  te3*,int eTextRe
98f0: 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 0a 29  p,const char*).)
9900: 7b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  {.  if( sqlite3S
9910: 61 66 65 74 79 43 68 65 63 6b 28 64 62 29 20 29  afetyCheck(db) )
9920: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  {.    return SQL
9930: 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d 0a  ITE_MISUSE;.  }.
9940: 20 20 64 62 2d 3e 78 43 6f 6c 6c 4e 65 65 64 65    db->xCollNeede
9950: 64 20 3d 20 78 43 6f 6c 6c 4e 65 65 64 65 64 3b  d = xCollNeeded;
9960: 0a 20 20 64 62 2d 3e 78 43 6f 6c 6c 4e 65 65 64  .  db->xCollNeed
9970: 65 64 31 36 20 3d 20 30 3b 0a 20 20 64 62 2d 3e  ed16 = 0;.  db->
9980: 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 20 3d  pCollNeededArg =
9990: 20 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b   pCollNeededArg;
99a0: 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  .  return SQLITE
99b0: 5f 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  _OK;.}..#ifndef 
99c0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
99d0: 36 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  6./*.** Register
99e0: 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71   a collation seq
99f0: 75 65 6e 63 65 20 66 61 63 74 6f 72 79 20 63 61  uence factory ca
9a00: 6c 6c 62 61 63 6b 20 77 69 74 68 20 74 68 65 20  llback with the 
9a10: 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a  database handle.
9a20: 2a 2a 20 64 62 2e 20 52 65 70 6c 61 63 65 20 61  ** db. Replace a
9a30: 6e 79 20 70 72 65 76 69 6f 75 73 6c 79 20 69 6e  ny previously in
9a40: 73 74 61 6c 6c 65 64 20 63 6f 6c 6c 61 74 69 6f  stalled collatio
9a50: 6e 20 73 65 71 75 65 6e 63 65 20 66 61 63 74 6f  n sequence facto
9a60: 72 79 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ry..*/.int sqlit
9a70: 65 33 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 6e 65 65  e3_collation_nee
9a80: 64 65 64 31 36 28 0a 20 20 73 71 6c 69 74 65 33  ded16(.  sqlite3
9a90: 20 2a 64 62 2c 20 0a 20 20 76 6f 69 64 20 2a 70   *db, .  void *p
9aa0: 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 2c 20 0a  CollNeededArg, .
9ab0: 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65    void(*xCollNee
9ac0: 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c  ded16)(void*,sql
9ad0: 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52  ite3*,int eTextR
9ae0: 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 0a  ep,const void*).
9af0: 29 7b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ){.  if( sqlite3
9b00: 53 61 66 65 74 79 43 68 65 63 6b 28 64 62 29 20  SafetyCheck(db) 
9b10: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51  ){.    return SQ
9b20: 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d  LITE_MISUSE;.  }
9b30: 0a 20 20 64 62 2d 3e 78 43 6f 6c 6c 4e 65 65 64  .  db->xCollNeed
9b40: 65 64 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 78 43  ed = 0;.  db->xC
9b50: 6f 6c 6c 4e 65 65 64 65 64 31 36 20 3d 20 78 43  ollNeeded16 = xC
9b60: 6f 6c 6c 4e 65 65 64 65 64 31 36 3b 0a 20 20 64  ollNeeded16;.  d
9b70: 62 2d 3e 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72  b->pCollNeededAr
9b80: 67 20 3d 20 70 43 6f 6c 6c 4e 65 65 64 65 64 41  g = pCollNeededA
9b90: 72 67 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c  rg;.  return SQL
9ba0: 49 54 45 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66  ITE_OK;.}.#endif
9bb0: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
9bc0: 55 54 46 31 36 20 2a 2f 0a                       UTF16 */.