/ Hex Artifact Content
Login

Artifact 72c8dc897f89ab6bd8354c7a7898a0347abe2291:


0000: 2f 2a 0a 2a 2a 20 32 30 30 35 20 4d 61 79 20 32  /*.** 2005 May 2
0010: 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 75 74 68  5.**.** The auth
0020: 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70  or disclaims cop
0030: 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73  yright to this s
0040: 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20  ource code.  In 
0050: 70 6c 61 63 65 20 6f 66 0a 2a 2a 20 61 20 6c 65  place of.** a le
0060: 67 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65  gal notice, here
0070: 20 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a   is a blessing:.
0080: 2a 2a 0a 2a 2a 20 20 20 20 4d 61 79 20 79 6f 75  **.**    May you
0090: 20 64 6f 20 67 6f 6f 64 20 61 6e 64 20 6e 6f 74   do good and not
00a0: 20 65 76 69 6c 2e 0a 2a 2a 20 20 20 20 4d 61 79   evil..**    May
00b0: 20 79 6f 75 20 66 69 6e 64 20 66 6f 72 67 69 76   you find forgiv
00c0: 65 6e 65 73 73 20 66 6f 72 20 79 6f 75 72 73 65  eness for yourse
00d0: 6c 66 20 61 6e 64 20 66 6f 72 67 69 76 65 20 6f  lf and forgive o
00e0: 74 68 65 72 73 2e 0a 2a 2a 20 20 20 20 4d 61 79  thers..**    May
00f0: 20 79 6f 75 20 73 68 61 72 65 20 66 72 65 65 6c   you share freel
0100: 79 2c 20 6e 65 76 65 72 20 74 61 6b 69 6e 67 20  y, never taking 
0110: 6d 6f 72 65 20 74 68 61 6e 20 79 6f 75 20 67 69  more than you gi
0120: 76 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ve..**.*********
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: 0a 2a 2a 20 54 68 69 73 20 66 69 6c 65 20 63 6f  .** This file co
0180: 6e 74 61 69 6e 73 20 74 68 65 20 69 6d 70 6c 65  ntains the imple
0190: 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  mentation of the
01a0: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
01b0: 28 29 0a 2a 2a 20 69 6e 74 65 72 66 61 63 65 2c  ().** interface,
01c0: 20 61 6e 64 20 72 6f 75 74 69 6e 65 73 20 74 68   and routines th
01d0: 61 74 20 63 6f 6e 74 72 69 62 75 74 65 20 74 6f  at contribute to
01e0: 20 6c 6f 61 64 69 6e 67 20 74 68 65 20 64 61 74   loading the dat
01f0: 61 62 61 73 65 20 73 63 68 65 6d 61 0a 2a 2a 20  abase schema.** 
0200: 66 72 6f 6d 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a  from disk..**.**
0210: 20 24 49 64 3a 20 70 72 65 70 61 72 65 2e 63 2c   $Id: prepare.c,
0220: 76 20 31 2e 31 30 30 20 32 30 30 38 2f 31 31 2f  v 1.100 2008/11/
0230: 31 39 20 30 39 3a 30 35 3a 32 37 20 64 61 6e 69  19 09:05:27 dani
0240: 65 6c 6b 31 39 37 37 20 45 78 70 20 24 0a 2a 2f  elk1977 Exp $.*/
0250: 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74  .#include "sqlit
0260: 65 49 6e 74 2e 68 22 0a 23 69 6e 63 6c 75 64 65  eInt.h".#include
0270: 20 3c 63 74 79 70 65 2e 68 3e 0a 0a 2f 2a 0a 2a   <ctype.h>../*.*
0280: 2a 20 46 69 6c 6c 20 74 68 65 20 49 6e 69 74 44  * Fill the InitD
0290: 61 74 61 20 73 74 72 75 63 74 75 72 65 20 77 69  ata structure wi
02a0: 74 68 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  th an error mess
02b0: 61 67 65 20 74 68 61 74 20 69 6e 64 69 63 61 74  age that indicat
02c0: 65 73 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64  es.** that the d
02d0: 61 74 61 62 61 73 65 20 69 73 20 63 6f 72 72 75  atabase is corru
02e0: 70 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  pt..*/.static vo
02f0: 69 64 20 63 6f 72 72 75 70 74 53 63 68 65 6d 61  id corruptSchema
0300: 28 0a 20 20 49 6e 69 74 44 61 74 61 20 2a 70 44  (.  InitData *pD
0310: 61 74 61 2c 20 20 20 20 20 2f 2a 20 49 6e 69 74  ata,     /* Init
0320: 69 61 6c 69 7a 61 74 69 6f 6e 20 63 6f 6e 74 65  ialization conte
0330: 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  xt */.  const ch
0340: 61 72 20 2a 7a 4f 62 6a 2c 20 20 20 20 2f 2a 20  ar *zObj,    /* 
0350: 4f 62 6a 65 63 74 20 62 65 69 6e 67 20 70 61 72  Object being par
0360: 73 65 64 20 61 74 20 74 68 65 20 70 6f 69 6e 74  sed at the point
0370: 20 6f 66 20 65 72 72 6f 72 20 2a 2f 0a 20 20 63   of error */.  c
0380: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 78 74 72  onst char *zExtr
0390: 61 20 20 20 2f 2a 20 45 72 72 6f 72 20 69 6e 66  a   /* Error inf
03a0: 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 29 7b 0a 20  ormation */.){. 
03b0: 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70   sqlite3 *db = p
03c0: 44 61 74 61 2d 3e 64 62 3b 0a 20 20 69 66 28 20  Data->db;.  if( 
03d0: 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65  !db->mallocFaile
03e0: 64 20 26 26 20 28 64 62 2d 3e 66 6c 61 67 73 20  d && (db->flags 
03f0: 26 20 53 51 4c 49 54 45 5f 52 65 63 6f 76 65 72  & SQLITE_Recover
0400: 79 4d 6f 64 65 29 3d 3d 30 20 29 7b 0a 20 20 20  yMode)==0 ){.   
0410: 20 69 66 28 20 7a 4f 62 6a 3d 3d 30 20 29 20 7a   if( zObj==0 ) z
0420: 4f 62 6a 20 3d 20 22 3f 22 3b 0a 20 20 20 20 73  Obj = "?";.    s
0430: 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
0440: 70 44 61 74 61 2d 3e 70 7a 45 72 72 4d 73 67 2c  pData->pzErrMsg,
0450: 20 70 44 61 74 61 2d 3e 64 62 2c 0a 20 20 20 20   pData->db,.    
0460: 20 20 20 22 6d 61 6c 66 6f 72 6d 65 64 20 64 61     "malformed da
0470: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 28 25  tabase schema (%
0480: 73 29 22 2c 20 7a 4f 62 6a 29 3b 0a 20 20 20 20  s)", zObj);.    
0490: 69 66 28 20 7a 45 78 74 72 61 20 26 26 20 7a 45  if( zExtra && zE
04a0: 78 74 72 61 5b 30 5d 20 29 7b 0a 20 20 20 20 20  xtra[0] ){.     
04b0: 20 2a 70 44 61 74 61 2d 3e 70 7a 45 72 72 4d 73   *pData->pzErrMs
04c0: 67 20 3d 20 73 71 6c 69 74 65 33 4d 41 70 70 65  g = sqlite3MAppe
04d0: 6e 64 66 28 70 44 61 74 61 2d 3e 64 62 2c 20 2a  ndf(pData->db, *
04e0: 70 44 61 74 61 2d 3e 70 7a 45 72 72 4d 73 67 2c  pData->pzErrMsg,
04f0: 20 22 25 73 20 2d 20 25 73 22 2c 0a 20 20 20 20   "%s - %s",.    
0500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 70                *p
0520: 44 61 74 61 2d 3e 70 7a 45 72 72 4d 73 67 2c 20  Data->pzErrMsg, 
0530: 7a 45 78 74 72 61 29 3b 0a 20 20 20 20 7d 0a 20  zExtra);.    }. 
0540: 20 7d 0a 20 20 70 44 61 74 61 2d 3e 72 63 20 3d   }.  pData->rc =
0550: 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 3b   SQLITE_CORRUPT;
0560: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69  .}../*.** This i
0570: 73 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 72  s the callback r
0580: 6f 75 74 69 6e 65 20 66 6f 72 20 74 68 65 20 63  outine for the c
0590: 6f 64 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c  ode that initial
05a0: 69 7a 65 73 20 74 68 65 0a 2a 2a 20 64 61 74 61  izes the.** data
05b0: 62 61 73 65 2e 20 20 53 65 65 20 73 71 6c 69 74  base.  See sqlit
05c0: 65 33 49 6e 69 74 28 29 20 62 65 6c 6f 77 20 66  e3Init() below f
05d0: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
05e0: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 20 54 68  formation..** Th
05f0: 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61 6c  is routine is al
0600: 73 6f 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 74  so called from t
0610: 68 65 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d  he OP_ParseSchem
0620: 61 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20  a opcode of the 
0630: 56 44 42 45 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68  VDBE..**.** Each
0640: 20 63 61 6c 6c 62 61 63 6b 20 63 6f 6e 74 61 69   callback contai
0650: 6e 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ns the following
0660: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 3a 0a 2a 2a   information:.**
0670: 0a 2a 2a 20 20 20 20 20 61 72 67 76 5b 30 5d 20  .**     argv[0] 
0680: 3d 20 6e 61 6d 65 20 6f 66 20 74 68 69 6e 67 20  = name of thing 
0690: 62 65 69 6e 67 20 63 72 65 61 74 65 64 0a 2a 2a  being created.**
06a0: 20 20 20 20 20 61 72 67 76 5b 31 5d 20 3d 20 72       argv[1] = r
06b0: 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20  oot page number 
06c0: 66 6f 72 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  for table or ind
06d0: 65 78 2e 20 30 20 66 6f 72 20 74 72 69 67 67 65  ex. 0 for trigge
06e0: 72 20 6f 72 20 76 69 65 77 2e 0a 2a 2a 20 20 20  r or view..**   
06f0: 20 20 61 72 67 76 5b 32 5d 20 3d 20 53 51 4c 20    argv[2] = SQL 
0700: 74 65 78 74 20 66 6f 72 20 74 68 65 20 43 52 45  text for the CRE
0710: 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ATE statement..*
0720: 2a 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  *.*/.int sqlite3
0730: 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69  InitCallback(voi
0740: 64 20 2a 70 49 6e 69 74 2c 20 69 6e 74 20 61 72  d *pInit, int ar
0750: 67 63 2c 20 63 68 61 72 20 2a 2a 61 72 67 76 2c  gc, char **argv,
0760: 20 63 68 61 72 20 2a 2a 4e 6f 74 55 73 65 64 29   char **NotUsed)
0770: 7b 0a 20 20 49 6e 69 74 44 61 74 61 20 2a 70 44  {.  InitData *pD
0780: 61 74 61 20 3d 20 28 49 6e 69 74 44 61 74 61 2a  ata = (InitData*
0790: 29 70 49 6e 69 74 3b 0a 20 20 73 71 6c 69 74 65  )pInit;.  sqlite
07a0: 33 20 2a 64 62 20 3d 20 70 44 61 74 61 2d 3e 64  3 *db = pData->d
07b0: 62 3b 0a 20 20 69 6e 74 20 69 44 62 20 3d 20 70  b;.  int iDb = p
07c0: 44 61 74 61 2d 3e 69 44 62 3b 0a 0a 20 20 55 4e  Data->iDb;..  UN
07d0: 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 4e  USED_PARAMETER(N
07e0: 6f 74 55 73 65 64 29 3b 0a 20 20 61 73 73 65 72  otUsed);.  asser
07f0: 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  t( sqlite3_mutex
0800: 5f 68 65 6c 64 28 64 62 2d 3e 6d 75 74 65 78 29  _held(db->mutex)
0810: 20 29 3b 0a 20 20 44 62 43 6c 65 61 72 50 72 6f   );.  DbClearPro
0820: 70 65 72 74 79 28 64 62 2c 20 69 44 62 2c 20 44  perty(db, iDb, D
0830: 42 5f 45 6d 70 74 79 29 3b 0a 20 20 69 66 28 20  B_Empty);.  if( 
0840: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
0850: 20 29 7b 0a 20 20 20 20 63 6f 72 72 75 70 74 53   ){.    corruptS
0860: 63 68 65 6d 61 28 70 44 61 74 61 2c 20 61 72 67  chema(pData, arg
0870: 76 5b 30 5d 2c 20 30 29 3b 0a 20 20 20 20 72 65  v[0], 0);.    re
0880: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  turn SQLITE_NOME
0890: 4d 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74  M;.  }..  assert
08a0: 28 20 61 72 67 63 3d 3d 33 20 29 3b 0a 20 20 61  ( argc==3 );.  a
08b0: 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26  ssert( iDb>=0 &&
08c0: 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a   iDb<db->nDb );.
08d0: 20 20 69 66 28 20 61 72 67 76 3d 3d 30 20 29 20    if( argv==0 ) 
08e0: 72 65 74 75 72 6e 20 30 3b 20 20 20 2f 2a 20 4d  return 0;   /* M
08f0: 69 67 68 74 20 68 61 70 70 65 6e 20 69 66 20 45  ight happen if E
0900: 4d 50 54 59 5f 52 45 53 55 4c 54 5f 43 41 4c 4c  MPTY_RESULT_CALL
0910: 42 41 43 4b 53 20 61 72 65 20 6f 6e 20 2a 2f 0a  BACKS are on */.
0920: 20 20 69 66 28 20 61 72 67 76 5b 31 5d 3d 3d 30    if( argv[1]==0
0930: 20 29 7b 0a 20 20 20 20 63 6f 72 72 75 70 74 53   ){.    corruptS
0940: 63 68 65 6d 61 28 70 44 61 74 61 2c 20 61 72 67  chema(pData, arg
0950: 76 5b 30 5d 2c 20 30 29 3b 0a 20 20 7d 65 6c 73  v[0], 0);.  }els
0960: 65 20 69 66 28 20 61 72 67 76 5b 32 5d 20 26 26  e if( argv[2] &&
0970: 20 61 72 67 76 5b 32 5d 5b 30 5d 20 29 7b 0a 20   argv[2][0] ){. 
0980: 20 20 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70     /* Call the p
0990: 61 72 73 65 72 20 74 6f 20 70 72 6f 63 65 73 73  arser to process
09a0: 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 2c   a CREATE TABLE,
09b0: 20 49 4e 44 45 58 20 6f 72 20 56 49 45 57 2e 0a   INDEX or VIEW..
09c0: 20 20 20 20 2a 2a 20 42 75 74 20 62 65 63 61 75      ** But becau
09d0: 73 65 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79  se db->init.busy
09e0: 20 69 73 20 73 65 74 20 74 6f 20 31 2c 20 6e 6f   is set to 1, no
09f0: 20 56 44 42 45 20 63 6f 64 65 20 69 73 20 67 65   VDBE code is ge
0a00: 6e 65 72 61 74 65 64 0a 20 20 20 20 2a 2a 20 6f  nerated.    ** o
0a10: 72 20 65 78 65 63 75 74 65 64 2e 20 20 41 6c 6c  r executed.  All
0a20: 20 74 68 65 20 70 61 72 73 65 72 20 64 6f 65 73   the parser does
0a30: 20 69 73 20 62 75 69 6c 64 20 74 68 65 20 69 6e   is build the in
0a40: 74 65 72 6e 61 6c 20 64 61 74 61 0a 20 20 20 20  ternal data.    
0a50: 2a 2a 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ** structures th
0a60: 61 74 20 64 65 73 63 72 69 62 65 20 74 68 65 20  at describe the 
0a70: 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20 6f 72  table, index, or
0a80: 20 76 69 65 77 2e 0a 20 20 20 20 2a 2f 0a 20 20   view..    */.  
0a90: 20 20 63 68 61 72 20 2a 7a 45 72 72 3b 0a 20 20    char *zErr;.  
0aa0: 20 20 69 6e 74 20 72 63 3b 0a 20 20 20 20 75 38    int rc;.    u8
0ab0: 20 6c 6f 6f 6b 61 73 69 64 65 45 6e 61 62 6c 65   lookasideEnable
0ac0: 64 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64  d;.    assert( d
0ad0: 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 29 3b 0a  b->init.busy );.
0ae0: 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 69 44 62      db->init.iDb
0af0: 20 3d 20 69 44 62 3b 0a 20 20 20 20 64 62 2d 3e   = iDb;.    db->
0b00: 69 6e 69 74 2e 6e 65 77 54 6e 75 6d 20 3d 20 61  init.newTnum = a
0b10: 74 6f 69 28 61 72 67 76 5b 31 5d 29 3b 0a 20 20  toi(argv[1]);.  
0b20: 20 20 6c 6f 6f 6b 61 73 69 64 65 45 6e 61 62 6c    lookasideEnabl
0b30: 65 64 20 3d 20 64 62 2d 3e 6c 6f 6f 6b 61 73 69  ed = db->lookasi
0b40: 64 65 2e 62 45 6e 61 62 6c 65 64 3b 0a 20 20 20  de.bEnabled;.   
0b50: 20 64 62 2d 3e 6c 6f 6f 6b 61 73 69 64 65 2e 62   db->lookaside.b
0b60: 45 6e 61 62 6c 65 64 20 3d 20 30 3b 0a 20 20 20  Enabled = 0;.   
0b70: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78   rc = sqlite3_ex
0b80: 65 63 28 64 62 2c 20 61 72 67 76 5b 32 5d 2c 20  ec(db, argv[2], 
0b90: 30 2c 20 30 2c 20 26 7a 45 72 72 29 3b 0a 20 20  0, 0, &zErr);.  
0ba0: 20 20 64 62 2d 3e 69 6e 69 74 2e 69 44 62 20 3d    db->init.iDb =
0bb0: 20 30 3b 0a 20 20 20 20 64 62 2d 3e 6c 6f 6f 6b   0;.    db->look
0bc0: 61 73 69 64 65 2e 62 45 6e 61 62 6c 65 64 20 3d  aside.bEnabled =
0bd0: 20 6c 6f 6f 6b 61 73 69 64 65 45 6e 61 62 6c 65   lookasideEnable
0be0: 64 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  d;.    assert( r
0bf0: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c!=SQLITE_OK || 
0c00: 7a 45 72 72 3d 3d 30 20 29 3b 0a 20 20 20 20 69  zErr==0 );.    i
0c10: 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 72 63  f( SQLITE_OK!=rc
0c20: 20 29 7b 0a 20 20 20 20 20 20 70 44 61 74 61 2d   ){.      pData-
0c30: 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20 20 20 20  >rc = rc;.      
0c40: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e  if( rc==SQLITE_N
0c50: 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 20 20  OMEM ){.        
0c60: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
0c70: 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73   = 1;.      }els
0c80: 65 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45  e if( rc!=SQLITE
0c90: 5f 49 4e 54 45 52 52 55 50 54 20 29 7b 0a 20 20  _INTERRUPT ){.  
0ca0: 20 20 20 20 20 20 63 6f 72 72 75 70 74 53 63 68        corruptSch
0cb0: 65 6d 61 28 70 44 61 74 61 2c 20 61 72 67 76 5b  ema(pData, argv[
0cc0: 30 5d 2c 20 7a 45 72 72 29 3b 0a 20 20 20 20 20  0], zErr);.     
0cd0: 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33   }.      sqlite3
0ce0: 44 62 46 72 65 65 28 64 62 2c 20 7a 45 72 72 29  DbFree(db, zErr)
0cf0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20  ;.    }.  }else 
0d00: 69 66 28 20 61 72 67 76 5b 30 5d 3d 3d 30 20 29  if( argv[0]==0 )
0d10: 7b 0a 20 20 20 20 63 6f 72 72 75 70 74 53 63 68  {.    corruptSch
0d20: 65 6d 61 28 70 44 61 74 61 2c 20 30 2c 20 30 29  ema(pData, 0, 0)
0d30: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  ;.  }else{.    /
0d40: 2a 20 49 66 20 74 68 65 20 53 51 4c 20 63 6f 6c  * If the SQL col
0d50: 75 6d 6e 20 69 73 20 62 6c 61 6e 6b 20 69 74 20  umn is blank it 
0d60: 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20 61 6e  means this is an
0d70: 20 69 6e 64 65 78 20 74 68 61 74 0a 20 20 20 20   index that.    
0d80: 2a 2a 20 77 61 73 20 63 72 65 61 74 65 64 20 74  ** was created t
0d90: 6f 20 62 65 20 74 68 65 20 50 52 49 4d 41 52 59  o be the PRIMARY
0da0: 20 4b 45 59 20 6f 72 20 74 6f 20 66 75 6c 66 69   KEY or to fulfi
0db0: 6c 6c 20 61 20 55 4e 49 51 55 45 0a 20 20 20 20  ll a UNIQUE.    
0dc0: 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 6f  ** constraint fo
0dd0: 72 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45  r a CREATE TABLE
0de0: 2e 20 20 54 68 65 20 69 6e 64 65 78 20 73 68 6f  .  The index sho
0df0: 75 6c 64 20 68 61 76 65 20 61 6c 72 65 61 64 79  uld have already
0e00: 0a 20 20 20 20 2a 2a 20 62 65 65 6e 20 63 72 65  .    ** been cre
0e10: 61 74 65 64 20 77 68 65 6e 20 77 65 20 70 72 6f  ated when we pro
0e20: 63 65 73 73 65 64 20 74 68 65 20 43 52 45 41 54  cessed the CREAT
0e30: 45 20 54 41 42 4c 45 2e 20 20 41 6c 6c 20 77 65  E TABLE.  All we
0e40: 20 68 61 76 65 0a 20 20 20 20 2a 2a 20 74 6f 20   have.    ** to 
0e50: 64 6f 20 68 65 72 65 20 69 73 20 72 65 63 6f 72  do here is recor
0e60: 64 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20  d the root page 
0e70: 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20  number for that 
0e80: 69 6e 64 65 78 2e 0a 20 20 20 20 2a 2f 0a 20 20  index..    */.  
0e90: 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b    Index *pIndex;
0ea0: 0a 20 20 20 20 70 49 6e 64 65 78 20 3d 20 73 71  .    pIndex = sq
0eb0: 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 64  lite3FindIndex(d
0ec0: 62 2c 20 61 72 67 76 5b 30 5d 2c 20 64 62 2d 3e  b, argv[0], db->
0ed0: 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65 29 3b  aDb[iDb].zName);
0ee0: 0a 20 20 20 20 69 66 28 20 70 49 6e 64 65 78 3d  .    if( pIndex=
0ef0: 3d 30 20 7c 7c 20 70 49 6e 64 65 78 2d 3e 74 6e  =0 || pIndex->tn
0f00: 75 6d 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f  um!=0 ){.      /
0f10: 2a 20 54 68 69 73 20 63 61 6e 20 6f 63 63 75 72  * This can occur
0f20: 20 69 66 20 74 68 65 72 65 20 65 78 69 73 74 73   if there exists
0f30: 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20 61 20 54   an index on a T
0f40: 45 4d 50 20 74 61 62 6c 65 20 77 68 69 63 68 0a  EMP table which.
0f50: 20 20 20 20 20 20 2a 2a 20 68 61 73 20 74 68 65        ** has the
0f60: 20 73 61 6d 65 20 6e 61 6d 65 20 61 73 20 61 6e   same name as an
0f70: 6f 74 68 65 72 20 69 6e 64 65 78 20 6f 6e 20 61  other index on a
0f80: 20 70 65 72 6d 61 6e 65 6e 74 20 69 6e 64 65 78   permanent index
0f90: 2e 20 20 53 69 6e 63 65 0a 20 20 20 20 20 20 2a  .  Since.      *
0fa0: 2a 20 74 68 65 20 70 65 72 6d 61 6e 65 6e 74 20  * the permanent 
0fb0: 74 61 62 6c 65 20 69 73 20 68 69 64 64 65 6e 20  table is hidden 
0fc0: 62 79 20 74 68 65 20 54 45 4d 50 20 74 61 62 6c  by the TEMP tabl
0fd0: 65 2c 20 77 65 20 63 61 6e 20 61 6c 73 6f 0a 20  e, we can also. 
0fe0: 20 20 20 20 20 2a 2a 20 73 61 66 65 6c 79 20 69       ** safely i
0ff0: 67 6e 6f 72 65 20 74 68 65 20 69 6e 64 65 78 20  gnore the index 
1000: 6f 6e 20 74 68 65 20 70 65 72 6d 61 6e 65 6e 74  on the permanent
1010: 20 74 61 62 6c 65 2e 0a 20 20 20 20 20 20 2a 2f   table..      */
1020: 0a 20 20 20 20 20 20 2f 2a 20 44 6f 20 4e 6f 74  .      /* Do Not
1030: 68 69 6e 67 20 2a 2f 3b 0a 20 20 20 20 7d 65 6c  hing */;.    }el
1040: 73 65 7b 0a 20 20 20 20 20 20 70 49 6e 64 65 78  se{.      pIndex
1050: 2d 3e 74 6e 75 6d 20 3d 20 61 74 6f 69 28 61 72  ->tnum = atoi(ar
1060: 67 76 5b 31 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  gv[1]);.    }.  
1070: 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a  }.  return 0;.}.
1080: 0a 2f 2a 0a 2a 2a 20 41 74 74 65 6d 70 74 20 74  ./*.** Attempt t
1090: 6f 20 72 65 61 64 20 74 68 65 20 64 61 74 61 62  o read the datab
10a0: 61 73 65 20 73 63 68 65 6d 61 20 61 6e 64 20 69  ase schema and i
10b0: 6e 69 74 69 61 6c 69 7a 65 20 69 6e 74 65 72 6e  nitialize intern
10c0: 61 6c 0a 2a 2a 20 64 61 74 61 20 73 74 72 75 63  al.** data struc
10d0: 74 75 72 65 73 20 66 6f 72 20 61 20 73 69 6e 67  tures for a sing
10e0: 6c 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  le database file
10f0: 2e 20 20 54 68 65 20 69 6e 64 65 78 20 6f 66 20  .  The index of 
1100: 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  the.** database 
1110: 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79  file is given by
1120: 20 69 44 62 2e 20 20 69 44 62 3d 3d 30 20 69 73   iDb.  iDb==0 is
1130: 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 6d 61   used for the ma
1140: 69 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20  in.** database. 
1150: 20 69 44 62 3d 3d 31 20 73 68 6f 75 6c 64 20 6e   iDb==1 should n
1160: 65 76 65 72 20 62 65 20 75 73 65 64 2e 20 20 69  ever be used.  i
1170: 44 62 3e 3d 32 20 69 73 20 75 73 65 64 20 66 6f  Db>=2 is used fo
1180: 72 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64  r.** auxiliary d
1190: 61 74 61 62 61 73 65 73 2e 20 20 52 65 74 75 72  atabases.  Retur
11a0: 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c  n one of the SQL
11b0: 49 54 45 5f 20 65 72 72 6f 72 20 63 6f 64 65 73  ITE_ error codes
11c0: 20 74 6f 0a 2a 2a 20 69 6e 64 69 63 61 74 65 20   to.** indicate 
11d0: 73 75 63 63 65 73 73 20 6f 72 20 66 61 69 6c 75  success or failu
11e0: 72 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  re..*/.static in
11f0: 74 20 73 71 6c 69 74 65 33 49 6e 69 74 4f 6e 65  t sqlite3InitOne
1200: 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e  (sqlite3 *db, in
1210: 74 20 69 44 62 2c 20 63 68 61 72 20 2a 2a 70 7a  t iDb, char **pz
1220: 45 72 72 4d 73 67 29 7b 0a 20 20 69 6e 74 20 72  ErrMsg){.  int r
1230: 63 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 63  c;.  BtCursor *c
1240: 75 72 4d 61 69 6e 3b 0a 20 20 69 6e 74 20 73 69  urMain;.  int si
1250: 7a 65 3b 0a 20 20 54 61 62 6c 65 20 2a 70 54 61  ze;.  Table *pTa
1260: 62 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20 20  b;.  Db *pDb;.  
1270: 63 68 61 72 20 63 6f 6e 73 74 20 2a 61 7a 41 72  char const *azAr
1280: 67 5b 34 5d 3b 0a 20 20 69 6e 74 20 6d 65 74 61  g[4];.  int meta
1290: 5b 31 30 5d 3b 0a 20 20 49 6e 69 74 44 61 74 61  [10];.  InitData
12a0: 20 69 6e 69 74 44 61 74 61 3b 0a 20 20 63 68 61   initData;.  cha
12b0: 72 20 63 6f 6e 73 74 20 2a 7a 4d 61 73 74 65 72  r const *zMaster
12c0: 53 63 68 65 6d 61 3b 0a 20 20 63 68 61 72 20 63  Schema;.  char c
12d0: 6f 6e 73 74 20 2a 7a 4d 61 73 74 65 72 4e 61 6d  onst *zMasterNam
12e0: 65 20 3d 20 53 43 48 45 4d 41 5f 54 41 42 4c 45  e = SCHEMA_TABLE
12f0: 28 69 44 62 29 3b 0a 0a 20 20 2f 2a 0a 20 20 2a  (iDb);..  /*.  *
1300: 2a 20 54 68 65 20 6d 61 73 74 65 72 20 64 61 74  * The master dat
1310: 61 62 61 73 65 20 74 61 62 6c 65 20 68 61 73 20  abase table has 
1320: 61 20 73 74 72 75 63 74 75 72 65 20 6c 69 6b 65  a structure like
1330: 20 74 68 69 73 0a 20 20 2a 2f 0a 20 20 73 74 61   this.  */.  sta
1340: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 6d  tic const char m
1350: 61 73 74 65 72 5f 73 63 68 65 6d 61 5b 5d 20 3d  aster_schema[] =
1360: 20 0a 20 20 20 20 20 22 43 52 45 41 54 45 20 54   .     "CREATE T
1370: 41 42 4c 45 20 73 71 6c 69 74 65 5f 6d 61 73 74  ABLE sqlite_mast
1380: 65 72 28 5c 6e 22 0a 20 20 20 20 20 22 20 20 74  er(\n".     "  t
1390: 79 70 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20  ype text,\n".   
13a0: 20 20 22 20 20 6e 61 6d 65 20 74 65 78 74 2c 5c    "  name text,\
13b0: 6e 22 0a 20 20 20 20 20 22 20 20 74 62 6c 5f 6e  n".     "  tbl_n
13c0: 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20  ame text,\n".   
13d0: 20 20 22 20 20 72 6f 6f 74 70 61 67 65 20 69 6e    "  rootpage in
13e0: 74 65 67 65 72 2c 5c 6e 22 0a 20 20 20 20 20 22  teger,\n".     "
13f0: 20 20 73 71 6c 20 74 65 78 74 5c 6e 22 0a 20 20    sql text\n".  
1400: 20 20 20 22 29 22 0a 20 20 3b 0a 23 69 66 6e 64     ")".  ;.#ifnd
1410: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
1420: 45 4d 50 44 42 0a 20 20 73 74 61 74 69 63 20 63  EMPDB.  static c
1430: 6f 6e 73 74 20 63 68 61 72 20 74 65 6d 70 5f 6d  onst char temp_m
1440: 61 73 74 65 72 5f 73 63 68 65 6d 61 5b 5d 20 3d  aster_schema[] =
1450: 20 0a 20 20 20 20 20 22 43 52 45 41 54 45 20 54   .     "CREATE T
1460: 45 4d 50 20 54 41 42 4c 45 20 73 71 6c 69 74 65  EMP TABLE sqlite
1470: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 28 5c 6e 22  _temp_master(\n"
1480: 0a 20 20 20 20 20 22 20 20 74 79 70 65 20 74 65  .     "  type te
1490: 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20 6e  xt,\n".     "  n
14a0: 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20  ame text,\n".   
14b0: 20 20 22 20 20 74 62 6c 5f 6e 61 6d 65 20 74 65    "  tbl_name te
14c0: 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20 72  xt,\n".     "  r
14d0: 6f 6f 74 70 61 67 65 20 69 6e 74 65 67 65 72 2c  ootpage integer,
14e0: 5c 6e 22 0a 20 20 20 20 20 22 20 20 73 71 6c 20  \n".     "  sql 
14f0: 74 65 78 74 5c 6e 22 0a 20 20 20 20 20 22 29 22  text\n".     ")"
1500: 0a 20 20 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  .  ;.#else.  #de
1510: 66 69 6e 65 20 74 65 6d 70 5f 6d 61 73 74 65 72  fine temp_master
1520: 5f 73 63 68 65 6d 61 20 30 0a 23 65 6e 64 69 66  _schema 0.#endif
1530: 0a 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e  ..  assert( iDb>
1540: 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44  =0 && iDb<db->nD
1550: 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  b );.  assert( d
1560: 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 53 63 68  b->aDb[iDb].pSch
1570: 65 6d 61 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ema );.  assert(
1580: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68   sqlite3_mutex_h
1590: 65 6c 64 28 64 62 2d 3e 6d 75 74 65 78 29 20 29  eld(db->mutex) )
15a0: 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3d  ;.  assert( iDb=
15b0: 3d 31 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72  =1 || sqlite3Btr
15c0: 65 65 48 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d  eeHoldsMutex(db-
15d0: 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 29 20 29  >aDb[iDb].pBt) )
15e0: 3b 0a 0a 20 20 2f 2a 20 7a 4d 61 73 74 65 72 53  ;..  /* zMasterS
15f0: 63 68 65 6d 61 20 61 6e 64 20 7a 49 6e 69 74 53  chema and zInitS
1600: 63 72 69 70 74 20 61 72 65 20 73 65 74 20 74 6f  cript are set to
1610: 20 70 6f 69 6e 74 20 61 74 20 74 68 65 20 6d 61   point at the ma
1620: 73 74 65 72 20 73 63 68 65 6d 61 0a 20 20 2a 2a  ster schema.  **
1630: 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 73 61 74   and initialisat
1640: 69 6f 6e 20 73 63 72 69 70 74 20 61 70 70 72 6f  ion script appro
1650: 70 72 69 61 74 65 20 66 6f 72 20 74 68 65 20 64  priate for the d
1660: 61 74 61 62 61 73 65 20 62 65 69 6e 67 0a 20 20  atabase being.  
1670: 2a 2a 20 69 6e 69 74 69 61 6c 69 73 65 64 2e 20  ** initialised. 
1680: 7a 4d 61 73 74 65 72 4e 61 6d 65 20 69 73 20 74  zMasterName is t
1690: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6d  he name of the m
16a0: 61 73 74 65 72 20 74 61 62 6c 65 2e 0a 20 20 2a  aster table..  *
16b0: 2f 0a 20 20 69 66 28 20 21 4f 4d 49 54 5f 54 45  /.  if( !OMIT_TE
16c0: 4d 50 44 42 20 26 26 20 69 44 62 3d 3d 31 20 29  MPDB && iDb==1 )
16d0: 7b 0a 20 20 20 20 7a 4d 61 73 74 65 72 53 63 68  {.    zMasterSch
16e0: 65 6d 61 20 3d 20 74 65 6d 70 5f 6d 61 73 74 65  ema = temp_maste
16f0: 72 5f 73 63 68 65 6d 61 3b 0a 20 20 7d 65 6c 73  r_schema;.  }els
1700: 65 7b 0a 20 20 20 20 7a 4d 61 73 74 65 72 53 63  e{.    zMasterSc
1710: 68 65 6d 61 20 3d 20 6d 61 73 74 65 72 5f 73 63  hema = master_sc
1720: 68 65 6d 61 3b 0a 20 20 7d 0a 20 20 7a 4d 61 73  hema;.  }.  zMas
1730: 74 65 72 4e 61 6d 65 20 3d 20 53 43 48 45 4d 41  terName = SCHEMA
1740: 5f 54 41 42 4c 45 28 69 44 62 29 3b 0a 0a 20 20  _TABLE(iDb);..  
1750: 2f 2a 20 43 6f 6e 73 74 72 75 63 74 20 74 68 65  /* Construct the
1760: 20 73 63 68 65 6d 61 20 74 61 62 6c 65 73 2e 20   schema tables. 
1770: 20 2a 2f 0a 20 20 61 7a 41 72 67 5b 30 5d 20 3d   */.  azArg[0] =
1780: 20 7a 4d 61 73 74 65 72 4e 61 6d 65 3b 0a 20 20   zMasterName;.  
1790: 61 7a 41 72 67 5b 31 5d 20 3d 20 22 31 22 3b 0a  azArg[1] = "1";.
17a0: 20 20 61 7a 41 72 67 5b 32 5d 20 3d 20 7a 4d 61    azArg[2] = zMa
17b0: 73 74 65 72 53 63 68 65 6d 61 3b 0a 20 20 61 7a  sterSchema;.  az
17c0: 41 72 67 5b 33 5d 20 3d 20 30 3b 0a 20 20 69 6e  Arg[3] = 0;.  in
17d0: 69 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a  itData.db = db;.
17e0: 20 20 69 6e 69 74 44 61 74 61 2e 69 44 62 20 3d    initData.iDb =
17f0: 20 69 44 62 3b 0a 20 20 69 6e 69 74 44 61 74 61   iDb;.  initData
1800: 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b  .rc = SQLITE_OK;
1810: 0a 20 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72  .  initData.pzEr
1820: 72 4d 73 67 20 3d 20 70 7a 45 72 72 4d 73 67 3b  rMsg = pzErrMsg;
1830: 0a 20 20 28 76 6f 69 64 29 73 71 6c 69 74 65 33  .  (void)sqlite3
1840: 53 61 66 65 74 79 4f 66 66 28 64 62 29 3b 0a 20  SafetyOff(db);. 
1850: 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
1860: 62 61 63 6b 28 26 69 6e 69 74 44 61 74 61 2c 20  back(&initData, 
1870: 33 2c 20 28 63 68 61 72 20 2a 2a 29 61 7a 41 72  3, (char **)azAr
1880: 67 2c 20 30 29 3b 0a 20 20 28 76 6f 69 64 29 73  g, 0);.  (void)s
1890: 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28 64  qlite3SafetyOn(d
18a0: 62 29 3b 0a 20 20 69 66 28 20 69 6e 69 74 44 61  b);.  if( initDa
18b0: 74 61 2e 72 63 20 29 7b 0a 20 20 20 20 72 63 20  ta.rc ){.    rc 
18c0: 3d 20 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20  = initData.rc;. 
18d0: 20 20 20 67 6f 74 6f 20 65 72 72 6f 72 5f 6f 75     goto error_ou
18e0: 74 3b 0a 20 20 7d 0a 20 20 70 54 61 62 20 3d 20  t;.  }.  pTab = 
18f0: 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65  sqlite3FindTable
1900: 28 64 62 2c 20 7a 4d 61 73 74 65 72 4e 61 6d 65  (db, zMasterName
1910: 2c 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a  , db->aDb[iDb].z
1920: 4e 61 6d 65 29 3b 0a 20 20 69 66 28 20 70 54 61  Name);.  if( pTa
1930: 62 20 29 7b 0a 20 20 20 20 70 54 61 62 2d 3e 74  b ){.    pTab->t
1940: 61 62 46 6c 61 67 73 20 7c 3d 20 54 46 5f 52 65  abFlags |= TF_Re
1950: 61 64 6f 6e 6c 79 3b 0a 20 20 7d 0a 0a 20 20 2f  adonly;.  }..  /
1960: 2a 20 43 72 65 61 74 65 20 61 20 63 75 72 73 6f  * Create a curso
1970: 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61  r to hold the da
1980: 74 61 62 61 73 65 20 6f 70 65 6e 0a 20 20 2a 2f  tabase open.  */
1990: 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
19a0: 62 5b 69 44 62 5d 3b 0a 20 20 69 66 28 20 70 44  b[iDb];.  if( pD
19b0: 62 2d 3e 70 42 74 3d 3d 30 20 29 7b 0a 20 20 20  b->pBt==0 ){.   
19c0: 20 69 66 28 20 21 4f 4d 49 54 5f 54 45 4d 50 44   if( !OMIT_TEMPD
19d0: 42 20 26 26 20 69 44 62 3d 3d 31 20 29 7b 0a 20  B && iDb==1 ){. 
19e0: 20 20 20 20 20 44 62 53 65 74 50 72 6f 70 65 72       DbSetProper
19f0: 74 79 28 64 62 2c 20 31 2c 20 44 42 5f 53 63 68  ty(db, 1, DB_Sch
1a00: 65 6d 61 4c 6f 61 64 65 64 29 3b 0a 20 20 20 20  emaLoaded);.    
1a10: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  }.    return SQL
1a20: 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a 20 20 63 75  ITE_OK;.  }.  cu
1a30: 72 4d 61 69 6e 20 3d 20 73 71 6c 69 74 65 33 4d  rMain = sqlite3M
1a40: 61 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65  allocZero(sqlite
1a50: 33 42 74 72 65 65 43 75 72 73 6f 72 53 69 7a 65  3BtreeCursorSize
1a60: 28 29 29 3b 0a 20 20 69 66 28 20 21 63 75 72 4d  ());.  if( !curM
1a70: 61 69 6e 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ain ){.    rc = 
1a80: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20  SQLITE_NOMEM;.  
1a90: 20 20 67 6f 74 6f 20 65 72 72 6f 72 5f 6f 75 74    goto error_out
1aa0: 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 42  ;.  }.  sqlite3B
1ab0: 74 72 65 65 45 6e 74 65 72 28 70 44 62 2d 3e 70  treeEnter(pDb->p
1ac0: 42 74 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  Bt);.  rc = sqli
1ad0: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
1ae0: 44 62 2d 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f  Db->pBt, MASTER_
1af0: 52 4f 4f 54 2c 20 30 2c 20 30 2c 20 63 75 72 4d  ROOT, 0, 0, curM
1b00: 61 69 6e 29 3b 0a 20 20 69 66 28 20 72 63 21 3d  ain);.  if( rc!=
1b10: 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 63 21  SQLITE_OK && rc!
1b20: 3d 53 51 4c 49 54 45 5f 45 4d 50 54 59 20 29 7b  =SQLITE_EMPTY ){
1b30: 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
1b40: 74 72 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20  tring(pzErrMsg, 
1b50: 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65  db, "%s", sqlite
1b60: 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20 20  3ErrStr(rc));.  
1b70: 20 20 67 6f 74 6f 20 69 6e 69 74 6f 6e 65 5f 65    goto initone_e
1b80: 72 72 6f 72 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20  rror_out;.  }.. 
1b90: 20 2f 2a 20 47 65 74 20 74 68 65 20 64 61 74 61   /* Get the data
1ba0: 62 61 73 65 20 6d 65 74 61 20 69 6e 66 6f 72 6d  base meta inform
1bb0: 61 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  ation..  **.  **
1bc0: 20 4d 65 74 61 20 76 61 6c 75 65 73 20 61 72 65   Meta values are
1bd0: 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 20 2a   as follows:.  *
1be0: 2a 20 20 20 20 6d 65 74 61 5b 30 5d 20 20 20 53  *    meta[0]   S
1bf0: 63 68 65 6d 61 20 63 6f 6f 6b 69 65 2e 20 20 43  chema cookie.  C
1c00: 68 61 6e 67 65 73 20 77 69 74 68 20 65 61 63 68  hanges with each
1c10: 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 2e 0a   schema change..
1c20: 20 20 2a 2a 20 20 20 20 6d 65 74 61 5b 31 5d 20    **    meta[1] 
1c30: 20 20 46 69 6c 65 20 66 6f 72 6d 61 74 20 6f 66    File format of
1c40: 20 73 63 68 65 6d 61 20 6c 61 79 65 72 2e 0a 20   schema layer.. 
1c50: 20 2a 2a 20 20 20 20 6d 65 74 61 5b 32 5d 20 20   **    meta[2]  
1c60: 20 53 69 7a 65 20 6f 66 20 74 68 65 20 70 61 67   Size of the pag
1c70: 65 20 63 61 63 68 65 2e 0a 20 20 2a 2a 20 20 20  e cache..  **   
1c80: 20 6d 65 74 61 5b 33 5d 20 20 20 55 73 65 20 66   meta[3]   Use f
1c90: 72 65 65 6c 69 73 74 20 69 66 20 30 2e 20 20 41  reelist if 0.  A
1ca0: 75 74 6f 76 61 63 75 75 6d 20 69 66 20 67 72 65  utovacuum if gre
1cb0: 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2e 0a  ater than zero..
1cc0: 20 20 2a 2a 20 20 20 20 6d 65 74 61 5b 34 5d 20    **    meta[4] 
1cd0: 20 20 44 62 20 74 65 78 74 20 65 6e 63 6f 64 69    Db text encodi
1ce0: 6e 67 2e 20 31 3a 55 54 46 2d 38 20 32 3a 55 54  ng. 1:UTF-8 2:UT
1cf0: 46 2d 31 36 4c 45 20 33 3a 55 54 46 2d 31 36 42  F-16LE 3:UTF-16B
1d00: 45 0a 20 20 2a 2a 20 20 20 20 6d 65 74 61 5b 35  E.  **    meta[5
1d10: 5d 20 20 20 54 68 65 20 75 73 65 72 20 63 6f 6f  ]   The user coo
1d20: 6b 69 65 2e 20 55 73 65 64 20 62 79 20 74 68 65  kie. Used by the
1d30: 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 0a 20 20   application..  
1d40: 2a 2a 20 20 20 20 6d 65 74 61 5b 36 5d 20 20 20  **    meta[6]   
1d50: 49 6e 63 72 65 6d 65 6e 74 61 6c 2d 76 61 63 75  Incremental-vacu
1d60: 75 6d 20 66 6c 61 67 2e 0a 20 20 2a 2a 20 20 20  um flag..  **   
1d70: 20 6d 65 74 61 5b 37 5d 0a 20 20 2a 2a 20 20 20   meta[7].  **   
1d80: 20 6d 65 74 61 5b 38 5d 0a 20 20 2a 2a 20 20 20   meta[8].  **   
1d90: 20 6d 65 74 61 5b 39 5d 0a 20 20 2a 2a 0a 20 20   meta[9].  **.  
1da0: 2a 2a 20 4e 6f 74 65 3a 20 54 68 65 20 23 64 65  ** Note: The #de
1db0: 66 69 6e 65 64 20 53 51 4c 49 54 45 5f 55 54 46  fined SQLITE_UTF
1dc0: 2a 20 73 79 6d 62 6f 6c 73 20 69 6e 20 73 71 6c  * symbols in sql
1dd0: 69 74 65 49 6e 74 2e 68 20 63 6f 72 72 65 73 70  iteInt.h corresp
1de0: 6f 6e 64 20 74 6f 0a 20 20 2a 2a 20 74 68 65 20  ond to.  ** the 
1df0: 70 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  possible values 
1e00: 6f 66 20 6d 65 74 61 5b 34 5d 2e 0a 20 20 2a 2f  of meta[4]..  */
1e10: 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
1e20: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 6e 74 20  E_OK ){.    int 
1e30: 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  i;.    for(i=0; 
1e40: 69 3c 41 72 72 61 79 53 69 7a 65 28 6d 65 74 61  i<ArraySize(meta
1e50: 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 72  ); i++){.      r
1e60: 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1e70: 47 65 74 4d 65 74 61 28 70 44 62 2d 3e 70 42 74  GetMeta(pDb->pBt
1e80: 2c 20 69 2b 31 2c 20 28 75 33 32 20 2a 29 26 6d  , i+1, (u32 *)&m
1e90: 65 74 61 5b 69 5d 29 3b 0a 20 20 20 20 20 20 69  eta[i]);.      i
1ea0: 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20  f( rc ){.       
1eb0: 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
1ec0: 67 28 70 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  g(pzErrMsg, db, 
1ed0: 22 25 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72  "%s", sqlite3Err
1ee0: 53 74 72 28 72 63 29 29 3b 0a 20 20 20 20 20 20  Str(rc));.      
1ef0: 20 20 67 6f 74 6f 20 69 6e 69 74 6f 6e 65 5f 65    goto initone_e
1f00: 72 72 6f 72 5f 6f 75 74 3b 0a 20 20 20 20 20 20  rror_out;.      
1f10: 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  }.    }.  }else{
1f20: 0a 20 20 20 20 6d 65 6d 73 65 74 28 6d 65 74 61  .    memset(meta
1f30: 2c 20 30 2c 20 73 69 7a 65 6f 66 28 6d 65 74 61  , 0, sizeof(meta
1f40: 29 29 3b 0a 20 20 7d 0a 20 20 70 44 62 2d 3e 70  ));.  }.  pDb->p
1f50: 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63  Schema->schema_c
1f60: 6f 6f 6b 69 65 20 3d 20 6d 65 74 61 5b 30 5d 3b  ookie = meta[0];
1f70: 0a 0a 20 20 2f 2a 20 49 66 20 6f 70 65 6e 69 6e  ..  /* If openin
1f80: 67 20 61 20 6e 6f 6e 2d 65 6d 70 74 79 20 64 61  g a non-empty da
1f90: 74 61 62 61 73 65 2c 20 63 68 65 63 6b 20 74 68  tabase, check th
1fa0: 65 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e  e text encoding.
1fb0: 20 46 6f 72 20 74 68 65 0a 20 20 2a 2a 20 6d 61   For the.  ** ma
1fc0: 69 6e 20 64 61 74 61 62 61 73 65 2c 20 73 65 74  in database, set
1fd0: 20 73 71 6c 69 74 65 33 2e 65 6e 63 20 74 6f 20   sqlite3.enc to 
1fe0: 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20  the encoding of 
1ff0: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
2000: 65 2e 0a 20 20 2a 2a 20 46 6f 72 20 61 6e 20 61  e..  ** For an a
2010: 74 74 61 63 68 65 64 20 64 62 2c 20 69 74 20 69  ttached db, it i
2020: 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68  s an error if th
2030: 65 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 6e 6f  e encoding is no
2040: 74 20 74 68 65 20 73 61 6d 65 0a 20 20 2a 2a 20  t the same.  ** 
2050: 61 73 20 73 71 6c 69 74 65 33 2e 65 6e 63 2e 0a  as sqlite3.enc..
2060: 20 20 2a 2f 0a 20 20 69 66 28 20 6d 65 74 61 5b    */.  if( meta[
2070: 34 5d 20 29 7b 20 20 2f 2a 20 74 65 78 74 20 65  4] ){  /* text e
2080: 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 20 20 69  ncoding */.    i
2090: 66 28 20 69 44 62 3d 3d 30 20 29 7b 0a 20 20 20  f( iDb==0 ){.   
20a0: 20 20 20 2f 2a 20 49 66 20 6f 70 65 6e 69 6e 67     /* If opening
20b0: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
20c0: 73 65 2c 20 73 65 74 20 45 4e 43 28 64 62 29 2e  se, set ENC(db).
20d0: 20 2a 2f 0a 20 20 20 20 20 20 45 4e 43 28 64 62   */.      ENC(db
20e0: 29 20 3d 20 28 75 38 29 6d 65 74 61 5b 34 5d 3b  ) = (u8)meta[4];
20f0: 0a 20 20 20 20 20 20 64 62 2d 3e 70 44 66 6c 74  .      db->pDflt
2100: 43 6f 6c 6c 20 3d 20 73 71 6c 69 74 65 33 46 69  Coll = sqlite3Fi
2110: 6e 64 43 6f 6c 6c 53 65 71 28 64 62 2c 20 53 51  ndCollSeq(db, SQ
2120: 4c 49 54 45 5f 55 54 46 38 2c 20 22 42 49 4e 41  LITE_UTF8, "BINA
2130: 52 59 22 2c 20 36 2c 20 30 29 3b 0a 20 20 20 20  RY", 6, 0);.    
2140: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20  }else{.      /* 
2150: 49 66 20 6f 70 65 6e 69 6e 67 20 61 6e 20 61 74  If opening an at
2160: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 2c  tached database,
2170: 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6d 75   the encoding mu
2180: 63 68 20 6d 61 74 63 68 20 45 4e 43 28 64 62 29  ch match ENC(db)
2190: 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 6d 65   */.      if( me
21a0: 74 61 5b 34 5d 21 3d 45 4e 43 28 64 62 29 20 29  ta[4]!=ENC(db) )
21b0: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
21c0: 33 53 65 74 53 74 72 69 6e 67 28 70 7a 45 72 72  3SetString(pzErr
21d0: 4d 73 67 2c 20 64 62 2c 20 22 61 74 74 61 63 68  Msg, db, "attach
21e0: 65 64 20 64 61 74 61 62 61 73 65 73 20 6d 75 73  ed databases mus
21f0: 74 20 75 73 65 20 74 68 65 20 73 61 6d 65 22 0a  t use the same".
2200: 20 20 20 20 20 20 20 20 20 20 20 20 22 20 74 65              " te
2210: 78 74 20 65 6e 63 6f 64 69 6e 67 20 61 73 20 6d  xt encoding as m
2220: 61 69 6e 20 64 61 74 61 62 61 73 65 22 29 3b 0a  ain database");.
2230: 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
2240: 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20  ITE_ERROR;.     
2250: 20 20 20 67 6f 74 6f 20 69 6e 69 74 6f 6e 65 5f     goto initone_
2260: 65 72 72 6f 72 5f 6f 75 74 3b 0a 20 20 20 20 20  error_out;.     
2270: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65   }.    }.  }else
2280: 7b 0a 20 20 20 20 44 62 53 65 74 50 72 6f 70 65  {.    DbSetPrope
2290: 72 74 79 28 64 62 2c 20 69 44 62 2c 20 44 42 5f  rty(db, iDb, DB_
22a0: 45 6d 70 74 79 29 3b 0a 20 20 7d 0a 20 20 70 44  Empty);.  }.  pD
22b0: 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 20  b->pSchema->enc 
22c0: 3d 20 45 4e 43 28 64 62 29 3b 0a 0a 20 20 69 66  = ENC(db);..  if
22d0: 28 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e  ( pDb->pSchema->
22e0: 63 61 63 68 65 5f 73 69 7a 65 3d 3d 30 20 29 7b  cache_size==0 ){
22f0: 0a 20 20 20 20 73 69 7a 65 20 3d 20 6d 65 74 61  .    size = meta
2300: 5b 32 5d 3b 0a 20 20 20 20 69 66 28 20 73 69 7a  [2];.    if( siz
2310: 65 3d 3d 30 20 29 7b 20 73 69 7a 65 20 3d 20 53  e==0 ){ size = S
2320: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 43 41  QLITE_DEFAULT_CA
2330: 43 48 45 5f 53 49 5a 45 3b 20 7d 0a 20 20 20 20  CHE_SIZE; }.    
2340: 69 66 28 20 73 69 7a 65 3c 30 20 29 20 73 69 7a  if( size<0 ) siz
2350: 65 20 3d 20 2d 73 69 7a 65 3b 0a 20 20 20 20 70  e = -size;.    p
2360: 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63  Db->pSchema->cac
2370: 68 65 5f 73 69 7a 65 20 3d 20 73 69 7a 65 3b 0a  he_size = size;.
2380: 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
2390: 53 65 74 43 61 63 68 65 53 69 7a 65 28 70 44 62  SetCacheSize(pDb
23a0: 2d 3e 70 42 74 2c 20 70 44 62 2d 3e 70 53 63 68  ->pBt, pDb->pSch
23b0: 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29  ema->cache_size)
23c0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
23d0: 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3d 3d 31 20   file_format==1 
23e0: 20 20 20 56 65 72 73 69 6f 6e 20 33 2e 30 2e 30     Version 3.0.0
23f0: 2e 0a 20 20 2a 2a 20 66 69 6c 65 5f 66 6f 72 6d  ..  ** file_form
2400: 61 74 3d 3d 32 20 20 20 20 56 65 72 73 69 6f 6e  at==2    Version
2410: 20 33 2e 31 2e 33 2e 20 20 2f 2f 20 41 4c 54 45   3.1.3.  // ALTE
2420: 52 20 54 41 42 4c 45 20 41 44 44 20 43 4f 4c 55  R TABLE ADD COLU
2430: 4d 4e 0a 20 20 2a 2a 20 66 69 6c 65 5f 66 6f 72  MN.  ** file_for
2440: 6d 61 74 3d 3d 33 20 20 20 20 56 65 72 73 69 6f  mat==3    Versio
2450: 6e 20 33 2e 31 2e 34 2e 20 20 2f 2f 20 64 69 74  n 3.1.4.  // dit
2460: 74 6f 20 62 75 74 20 77 69 74 68 20 6e 6f 6e 2d  to but with non-
2470: 4e 55 4c 4c 20 64 65 66 61 75 6c 74 73 0a 20 20  NULL defaults.  
2480: 2a 2a 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3d 3d  ** file_format==
2490: 34 20 20 20 20 56 65 72 73 69 6f 6e 20 33 2e 33  4    Version 3.3
24a0: 2e 30 2e 20 20 2f 2f 20 44 45 53 43 20 69 6e 64  .0.  // DESC ind
24b0: 69 63 65 73 2e 20 20 42 6f 6f 6c 65 61 6e 20 63  ices.  Boolean c
24c0: 6f 6e 73 74 61 6e 74 73 0a 20 20 2a 2f 0a 20 20  onstants.  */.  
24d0: 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69  pDb->pSchema->fi
24e0: 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 6d 65 74 61  le_format = meta
24f0: 5b 31 5d 3b 0a 20 20 69 66 28 20 70 44 62 2d 3e  [1];.  if( pDb->
2500: 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f  pSchema->file_fo
2510: 72 6d 61 74 3d 3d 30 20 29 7b 0a 20 20 20 20 70  rmat==0 ){.    p
2520: 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c  Db->pSchema->fil
2530: 65 5f 66 6f 72 6d 61 74 20 3d 20 31 3b 0a 20 20  e_format = 1;.  
2540: 7d 0a 20 20 69 66 28 20 70 44 62 2d 3e 70 53 63  }.  if( pDb->pSc
2550: 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61  hema->file_forma
2560: 74 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c  t>SQLITE_MAX_FIL
2570: 45 5f 46 4f 52 4d 41 54 20 29 7b 0a 20 20 20 20  E_FORMAT ){.    
2580: 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
2590: 28 70 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  (pzErrMsg, db, "
25a0: 75 6e 73 75 70 70 6f 72 74 65 64 20 66 69 6c 65  unsupported file
25b0: 20 66 6f 72 6d 61 74 22 29 3b 0a 20 20 20 20 72   format");.    r
25c0: 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
25d0: 3b 0a 20 20 20 20 67 6f 74 6f 20 69 6e 69 74 6f  ;.    goto inito
25e0: 6e 65 5f 65 72 72 6f 72 5f 6f 75 74 3b 0a 20 20  ne_error_out;.  
25f0: 7d 0a 0a 20 20 2f 2a 20 54 69 63 6b 65 74 20 23  }..  /* Ticket #
2600: 32 38 30 34 3a 20 20 57 68 65 6e 20 77 65 20 6f  2804:  When we o
2610: 70 65 6e 20 61 20 64 61 74 61 62 61 73 65 20 69  pen a database i
2620: 6e 20 74 68 65 20 6e 65 77 65 72 20 66 69 6c 65  n the newer file
2630: 20 66 6f 72 6d 61 74 2c 0a 20 20 2a 2a 20 63 6c   format,.  ** cl
2640: 65 61 72 20 74 68 65 20 6c 65 67 61 63 79 5f 66  ear the legacy_f
2650: 69 6c 65 5f 66 6f 72 6d 61 74 20 70 72 61 67 6d  ile_format pragm
2660: 61 20 66 6c 61 67 20 73 6f 20 74 68 61 74 20 61  a flag so that a
2670: 20 56 41 43 55 55 4d 20 77 69 6c 6c 0a 20 20 2a   VACUUM will.  *
2680: 2a 20 6e 6f 74 20 64 6f 77 6e 67 72 61 64 65 20  * not downgrade 
2690: 74 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64  the database and
26a0: 20 74 68 75 73 20 69 6e 76 61 6c 69 64 61 74 65   thus invalidate
26b0: 20 61 6e 79 20 64 65 73 63 65 6e 64 69 6e 67 0a   any descending.
26c0: 20 20 2a 2a 20 69 6e 64 69 63 65 73 20 74 68 61    ** indices tha
26d0: 74 20 74 68 65 20 75 73 65 72 20 6d 69 67 68 74  t the user might
26e0: 20 68 61 76 65 20 63 72 65 61 74 65 64 2e 0a 20   have created.. 
26f0: 20 2a 2f 0a 20 20 69 66 28 20 69 44 62 3d 3d 30   */.  if( iDb==0
2700: 20 26 26 20 6d 65 74 61 5b 31 5d 3e 3d 34 20 29   && meta[1]>=4 )
2710: 7b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20  {.    db->flags 
2720: 26 3d 20 7e 53 51 4c 49 54 45 5f 4c 65 67 61 63  &= ~SQLITE_Legac
2730: 79 46 69 6c 65 46 6d 74 3b 0a 20 20 7d 0a 0a 20  yFileFmt;.  }.. 
2740: 20 2f 2a 20 52 65 61 64 20 74 68 65 20 73 63 68   /* Read the sch
2750: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ema information 
2760: 6f 75 74 20 6f 66 20 74 68 65 20 73 63 68 65 6d  out of the schem
2770: 61 20 74 61 62 6c 65 73 0a 20 20 2a 2f 0a 20 20  a tables.  */.  
2780: 61 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74  assert( db->init
2790: 2e 62 75 73 79 20 29 3b 0a 20 20 69 66 28 20 72  .busy );.  if( r
27a0: 63 3d 3d 53 51 4c 49 54 45 5f 45 4d 50 54 59 20  c==SQLITE_EMPTY 
27b0: 29 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20 61 6e  ){.    /* For an
27c0: 20 65 6d 70 74 79 20 64 61 74 61 62 61 73 65 2c   empty database,
27d0: 20 74 68 65 72 65 20 69 73 20 6e 6f 74 68 69 6e   there is nothin
27e0: 67 20 74 6f 20 72 65 61 64 20 2a 2f 0a 20 20 20  g to read */.   
27f0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
2800: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63 68  .  }else{.    ch
2810: 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 20 20 7a 53  ar *zSql;.    zS
2820: 71 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69  ql = sqlite3MPri
2830: 6e 74 66 28 64 62 2c 20 0a 20 20 20 20 20 20 20  ntf(db, .       
2840: 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 72   "SELECT name, r
2850: 6f 6f 74 70 61 67 65 2c 20 73 71 6c 20 46 52 4f  ootpage, sql FRO
2860: 4d 20 27 25 71 27 2e 25 73 22 2c 0a 20 20 20 20  M '%q'.%s",.    
2870: 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d      db->aDb[iDb]
2880: 2e 7a 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72 4e  .zName, zMasterN
2890: 61 6d 65 29 3b 0a 20 20 20 20 28 76 6f 69 64 29  ame);.    (void)
28a0: 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66  sqlite3SafetyOff
28b0: 28 64 62 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  (db);.#ifndef SQ
28c0: 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52  LITE_OMIT_AUTHOR
28d0: 49 5a 41 54 49 4f 4e 0a 20 20 20 20 7b 0a 20 20  IZATION.    {.  
28e0: 20 20 20 20 69 6e 74 20 28 2a 78 41 75 74 68 29      int (*xAuth)
28f0: 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74  (void*,int,const
2900: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
2910: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  r*,const char*,c
2920: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 20  onst char*);.   
2930: 20 20 20 78 41 75 74 68 20 3d 20 64 62 2d 3e 78     xAuth = db->x
2940: 41 75 74 68 3b 0a 20 20 20 20 20 20 64 62 2d 3e  Auth;.      db->
2950: 78 41 75 74 68 20 3d 20 30 3b 0a 23 65 6e 64 69  xAuth = 0;.#endi
2960: 66 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  f.      rc = sql
2970: 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53  ite3_exec(db, zS
2980: 71 6c 2c 20 73 71 6c 69 74 65 33 49 6e 69 74 43  ql, sqlite3InitC
2990: 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44 61  allback, &initDa
29a0: 74 61 2c 20 30 29 3b 0a 23 69 66 6e 64 65 66 20  ta, 0);.#ifndef 
29b0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
29c0: 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 20 20 20 20  ORIZATION.      
29d0: 64 62 2d 3e 78 41 75 74 68 20 3d 20 78 41 75 74  db->xAuth = xAut
29e0: 68 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  h;.    }.#endif.
29f0: 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
2a00: 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69  TE_OK ) rc = ini
2a10: 74 44 61 74 61 2e 72 63 3b 0a 20 20 20 20 28 76  tData.rc;.    (v
2a20: 6f 69 64 29 73 71 6c 69 74 65 33 53 61 66 65 74  oid)sqlite3Safet
2a30: 79 4f 6e 28 64 62 29 3b 0a 20 20 20 20 73 71 6c  yOn(db);.    sql
2a40: 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a  ite3DbFree(db, z
2a50: 53 71 6c 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  Sql);.#ifndef SQ
2a60: 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a  LITE_OMIT_ANALYZ
2a70: 45 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  E.    if( rc==SQ
2a80: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
2a90: 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73   sqlite3Analysis
2aa0: 4c 6f 61 64 28 64 62 2c 20 69 44 62 29 3b 0a 20  Load(db, iDb);. 
2ab0: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a     }.#endif.  }.
2ac0: 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
2ad0: 46 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 72 63  Failed ){.    rc
2ae0: 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b   = SQLITE_NOMEM;
2af0: 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65  .    sqlite3Rese
2b00: 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28  tInternalSchema(
2b10: 64 62 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66  db, 0);.  }.  if
2b20: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
2b30: 7c 7c 20 28 64 62 2d 3e 66 6c 61 67 73 26 53 51  || (db->flags&SQ
2b40: 4c 49 54 45 5f 52 65 63 6f 76 65 72 79 4d 6f 64  LITE_RecoveryMod
2b50: 65 29 29 7b 0a 20 20 20 20 2f 2a 20 42 6c 61 63  e)){.    /* Blac
2b60: 6b 20 6d 61 67 69 63 3a 20 49 66 20 74 68 65 20  k magic: If the 
2b70: 53 51 4c 49 54 45 5f 52 65 63 6f 76 65 72 79 4d  SQLITE_RecoveryM
2b80: 6f 64 65 20 66 6c 61 67 20 69 73 20 73 65 74 2c  ode flag is set,
2b90: 20 74 68 65 6e 20 63 6f 6e 73 69 64 65 72 0a 20   then consider. 
2ba0: 20 20 20 2a 2a 20 74 68 65 20 73 63 68 65 6d 61     ** the schema
2bb0: 20 6c 6f 61 64 65 64 2c 20 65 76 65 6e 20 69 66   loaded, even if
2bc0: 20 65 72 72 6f 72 73 20 6f 63 63 75 72 65 64 2e   errors occured.
2bd0: 20 49 6e 20 74 68 69 73 20 73 69 74 75 61 74 69   In this situati
2be0: 6f 6e 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 63  on the .    ** c
2bf0: 75 72 72 65 6e 74 20 73 71 6c 69 74 65 33 5f 70  urrent sqlite3_p
2c00: 72 65 70 61 72 65 28 29 20 6f 70 65 72 61 74 69  repare() operati
2c10: 6f 6e 20 77 69 6c 6c 20 66 61 69 6c 2c 20 62 75  on will fail, bu
2c20: 74 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  t the following 
2c30: 6f 6e 65 0a 20 20 20 20 2a 2a 20 77 69 6c 6c 20  one.    ** will 
2c40: 61 74 74 65 6d 70 74 20 74 6f 20 63 6f 6d 70 69  attempt to compi
2c50: 6c 65 20 74 68 65 20 73 75 70 70 6c 69 65 64 20  le the supplied 
2c60: 73 74 61 74 65 6d 65 6e 74 20 61 67 61 69 6e 73  statement agains
2c70: 74 20 77 68 61 74 65 76 65 72 20 73 75 62 73 65  t whatever subse
2c80: 74 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20  t.    ** of the 
2c90: 73 63 68 65 6d 61 20 77 61 73 20 6c 6f 61 64 65  schema was loade
2ca0: 64 20 62 65 66 6f 72 65 20 74 68 65 20 65 72 72  d before the err
2cb0: 6f 72 20 6f 63 63 75 72 65 64 2e 20 54 68 65 20  or occured. The 
2cc0: 70 72 69 6d 61 72 79 0a 20 20 20 20 2a 2a 20 70  primary.    ** p
2cd0: 75 72 70 6f 73 65 20 6f 66 20 74 68 69 73 20 69  urpose of this i
2ce0: 73 20 74 6f 20 61 6c 6c 6f 77 20 61 63 63 65 73  s to allow acces
2cf0: 73 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 5f  s to the sqlite_
2d00: 6d 61 73 74 65 72 20 74 61 62 6c 65 0a 20 20 20  master table.   
2d10: 20 2a 2a 20 65 76 65 6e 20 77 68 65 6e 20 69 74   ** even when it
2d20: 73 20 63 6f 6e 74 65 6e 74 73 20 68 61 76 65 20  s contents have 
2d30: 62 65 65 6e 20 63 6f 72 72 75 70 74 65 64 2e 0a  been corrupted..
2d40: 20 20 20 20 2a 2f 0a 20 20 20 20 44 62 53 65 74      */.    DbSet
2d50: 50 72 6f 70 65 72 74 79 28 64 62 2c 20 69 44 62  Property(db, iDb
2d60: 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65  , DB_SchemaLoade
2d70: 64 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c  d);.    rc = SQL
2d80: 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a 0a 20 20 2f  ITE_OK;.  }..  /
2d90: 2a 20 4a 75 6d 70 20 68 65 72 65 20 66 6f 72 20  * Jump here for 
2da0: 61 6e 20 65 72 72 6f 72 20 74 68 61 74 20 6f 63  an error that oc
2db0: 63 75 72 73 20 61 66 74 65 72 20 73 75 63 63 65  curs after succe
2dc0: 73 73 66 75 6c 6c 79 20 61 6c 6c 6f 63 61 74 69  ssfully allocati
2dd0: 6e 67 0a 20 20 2a 2a 20 63 75 72 4d 61 69 6e 20  ng.  ** curMain 
2de0: 61 6e 64 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69  and calling sqli
2df0: 74 65 33 42 74 72 65 65 45 6e 74 65 72 28 29 2e  te3BtreeEnter().
2e00: 20 46 6f 72 20 61 6e 20 65 72 72 6f 72 20 74 68   For an error th
2e10: 61 74 20 6f 63 63 75 72 73 0a 20 20 2a 2a 20 62  at occurs.  ** b
2e20: 65 66 6f 72 65 20 74 68 61 74 20 70 6f 69 6e 74  efore that point
2e30: 2c 20 6a 75 6d 70 20 74 6f 20 65 72 72 6f 72 5f  , jump to error_
2e40: 6f 75 74 2e 0a 20 20 2a 2f 0a 69 6e 69 74 6f 6e  out..  */.initon
2e50: 65 5f 65 72 72 6f 72 5f 6f 75 74 3a 0a 20 20 73  e_error_out:.  s
2e60: 71 6c 69 74 65 33 42 74 72 65 65 43 6c 6f 73 65  qlite3BtreeClose
2e70: 43 75 72 73 6f 72 28 63 75 72 4d 61 69 6e 29 3b  Cursor(curMain);
2e80: 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  .  sqlite3_free(
2e90: 63 75 72 4d 61 69 6e 29 3b 0a 20 20 73 71 6c 69  curMain);.  sqli
2ea0: 74 65 33 42 74 72 65 65 4c 65 61 76 65 28 70 44  te3BtreeLeave(pD
2eb0: 62 2d 3e 70 42 74 29 3b 0a 0a 65 72 72 6f 72 5f  b->pBt);..error_
2ec0: 6f 75 74 3a 0a 20 20 69 66 28 20 72 63 3d 3d 53  out:.  if( rc==S
2ed0: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 7c 7c 20 72  QLITE_NOMEM || r
2ee0: 63 3d 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  c==SQLITE_IOERR_
2ef0: 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 64 62 2d  NOMEM ){.    db-
2f00: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20  >mallocFailed = 
2f10: 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  1;.  }.  return 
2f20: 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 69  rc;.}../*.** Ini
2f30: 74 69 61 6c 69 7a 65 20 61 6c 6c 20 64 61 74 61  tialize all data
2f40: 62 61 73 65 20 66 69 6c 65 73 20 2d 20 74 68 65  base files - the
2f50: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
2f60: 69 6c 65 2c 20 74 68 65 20 66 69 6c 65 0a 2a 2a  ile, the file.**
2f70: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
2f80: 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c  emporary tables,
2f90: 20 61 6e 64 20 61 6e 79 20 61 64 64 69 74 69 6f   and any additio
2fa0: 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 69 6c  nal database fil
2fb0: 65 73 0a 2a 2a 20 63 72 65 61 74 65 64 20 75 73  es.** created us
2fc0: 69 6e 67 20 41 54 54 41 43 48 20 73 74 61 74 65  ing ATTACH state
2fd0: 6d 65 6e 74 73 2e 20 20 52 65 74 75 72 6e 20 61  ments.  Return a
2fe0: 20 73 75 63 63 65 73 73 20 63 6f 64 65 2e 20 20   success code.  
2ff0: 49 66 20 61 6e 0a 2a 2a 20 65 72 72 6f 72 20 6f  If an.** error o
3000: 63 63 75 72 73 2c 20 77 72 69 74 65 20 61 6e 20  ccurs, write an 
3010: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69 6e  error message in
3020: 74 6f 20 2a 70 7a 45 72 72 4d 73 67 2e 0a 2a 2a  to *pzErrMsg..**
3030: 0a 2a 2a 20 41 66 74 65 72 20 61 20 64 61 74 61  .** After a data
3040: 62 61 73 65 20 69 73 20 69 6e 69 74 69 61 6c 69  base is initiali
3050: 7a 65 64 2c 20 74 68 65 20 44 42 5f 53 63 68 65  zed, the DB_Sche
3060: 6d 61 4c 6f 61 64 65 64 20 62 69 74 20 69 73 20  maLoaded bit is 
3070: 73 65 74 0a 2a 2a 20 62 69 74 20 69 73 20 73 65  set.** bit is se
3080: 74 20 69 6e 20 74 68 65 20 66 6c 61 67 73 20 66  t in the flags f
3090: 69 65 6c 64 20 6f 66 20 74 68 65 20 44 62 20 73  ield of the Db s
30a0: 74 72 75 63 74 75 72 65 2e 20 49 66 20 74 68 65  tructure. If the
30b0: 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c   database.** fil
30c0: 65 20 77 61 73 20 6f 66 20 7a 65 72 6f 2d 6c 65  e was of zero-le
30d0: 6e 67 74 68 2c 20 74 68 65 6e 20 74 68 65 20 44  ngth, then the D
30e0: 42 5f 45 6d 70 74 79 20 66 6c 61 67 20 69 73 20  B_Empty flag is 
30f0: 61 6c 73 6f 20 73 65 74 2e 0a 2a 2f 0a 69 6e 74  also set..*/.int
3100: 20 73 71 6c 69 74 65 33 49 6e 69 74 28 73 71 6c   sqlite3Init(sql
3110: 69 74 65 33 20 2a 64 62 2c 20 63 68 61 72 20 2a  ite3 *db, char *
3120: 2a 70 7a 45 72 72 4d 73 67 29 7b 0a 20 20 69 6e  *pzErrMsg){.  in
3130: 74 20 69 2c 20 72 63 3b 0a 20 20 69 6e 74 20 63  t i, rc;.  int c
3140: 6f 6d 6d 69 74 5f 69 6e 74 65 72 6e 61 6c 20 3d  ommit_internal =
3150: 20 21 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c   !(db->flags&SQL
3160: 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65  ITE_InternChange
3170: 73 29 3b 0a 20 20 0a 20 20 61 73 73 65 72 74 28  s);.  .  assert(
3180: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68   sqlite3_mutex_h
3190: 65 6c 64 28 64 62 2d 3e 6d 75 74 65 78 29 20 29  eld(db->mutex) )
31a0: 3b 0a 20 20 69 66 28 20 64 62 2d 3e 69 6e 69 74  ;.  if( db->init
31b0: 2e 62 75 73 79 20 29 20 72 65 74 75 72 6e 20 53  .busy ) return S
31c0: 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 72 63 20 3d  QLITE_OK;.  rc =
31d0: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 64 62   SQLITE_OK;.  db
31e0: 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b  ->init.busy = 1;
31f0: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 72 63 3d 3d  .  for(i=0; rc==
3200: 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69 3c 64  SQLITE_OK && i<d
3210: 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20  b->nDb; i++){.  
3220: 20 20 69 66 28 20 44 62 48 61 73 50 72 6f 70 65    if( DbHasPrope
3230: 72 74 79 28 64 62 2c 20 69 2c 20 44 42 5f 53 63  rty(db, i, DB_Sc
3240: 68 65 6d 61 4c 6f 61 64 65 64 29 20 7c 7c 20 69  hemaLoaded) || i
3250: 3d 3d 31 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ==1 ) continue;.
3260: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
3270: 49 6e 69 74 4f 6e 65 28 64 62 2c 20 69 2c 20 70  InitOne(db, i, p
3280: 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 69 66  zErrMsg);.    if
3290: 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 73 71  ( rc ){.      sq
32a0: 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e  lite3ResetIntern
32b0: 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 69 29 3b  alSchema(db, i);
32c0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a  .    }.  }..  /*
32d0: 20 4f 6e 63 65 20 61 6c 6c 20 74 68 65 20 6f 74   Once all the ot
32e0: 68 65 72 20 64 61 74 61 62 61 73 65 73 20 68 61  her databases ha
32f0: 76 65 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69  ve been initiali
3300: 73 65 64 2c 20 6c 6f 61 64 20 74 68 65 20 73 63  sed, load the sc
3310: 68 65 6d 61 0a 20 20 2a 2a 20 66 6f 72 20 74 68  hema.  ** for th
3320: 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 2e  e TEMP database.
3330: 20 54 68 69 73 20 69 73 20 6c 6f 61 64 65 64 20   This is loaded 
3340: 6c 61 73 74 2c 20 61 73 20 74 68 65 20 54 45 4d  last, as the TEM
3350: 50 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20  P database.  ** 
3360: 73 63 68 65 6d 61 20 6d 61 79 20 63 6f 6e 74 61  schema may conta
3370: 69 6e 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f  in references to
3380: 20 6f 62 6a 65 63 74 73 20 69 6e 20 6f 74 68 65   objects in othe
3390: 72 20 64 61 74 61 62 61 73 65 73 2e 0a 20 20 2a  r databases..  *
33a0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
33b0: 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 20 20 69  _OMIT_TEMPDB.  i
33c0: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
33d0: 20 26 26 20 64 62 2d 3e 6e 44 62 3e 31 20 26 26   && db->nDb>1 &&
33e0: 20 21 44 62 48 61 73 50 72 6f 70 65 72 74 79 28   !DbHasProperty(
33f0: 64 62 2c 20 31 2c 20 44 42 5f 53 63 68 65 6d 61  db, 1, DB_Schema
3400: 4c 6f 61 64 65 64 29 20 29 7b 0a 20 20 20 20 72  Loaded) ){.    r
3410: 63 20 3d 20 73 71 6c 69 74 65 33 49 6e 69 74 4f  c = sqlite3InitO
3420: 6e 65 28 64 62 2c 20 31 2c 20 70 7a 45 72 72 4d  ne(db, 1, pzErrM
3430: 73 67 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20  sg);.    if( rc 
3440: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
3450: 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68  ResetInternalSch
3460: 65 6d 61 28 64 62 2c 20 31 29 3b 0a 20 20 20 20  ema(db, 1);.    
3470: 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  }.  }.#endif..  
3480: 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20  db->init.busy = 
3490: 30 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  0;.  if( rc==SQL
34a0: 49 54 45 5f 4f 4b 20 26 26 20 63 6f 6d 6d 69 74  ITE_OK && commit
34b0: 5f 69 6e 74 65 72 6e 61 6c 20 29 7b 0a 20 20 20  _internal ){.   
34c0: 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e   sqlite3CommitIn
34d0: 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 64 62  ternalChanges(db
34e0: 29 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e  );.  }..  return
34f0: 20 72 63 3b 20 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54   rc; .}../*.** T
3500: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61  his routine is a
3510: 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20 64 61   no-op if the da
3520: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73  tabase schema is
3530: 20 61 6c 72 65 61 64 79 20 69 6e 69 74 69 61 6c   already initial
3540: 69 73 65 64 2e 0a 2a 2a 20 4f 74 68 65 72 77 69  ised..** Otherwi
3550: 73 65 2c 20 74 68 65 20 73 63 68 65 6d 61 20 69  se, the schema i
3560: 73 20 6c 6f 61 64 65 64 2e 20 41 6e 20 65 72 72  s loaded. An err
3570: 6f 72 20 63 6f 64 65 20 69 73 20 72 65 74 75 72  or code is retur
3580: 6e 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ned..*/.int sqli
3590: 74 65 33 52 65 61 64 53 63 68 65 6d 61 28 50 61  te3ReadSchema(Pa
35a0: 72 73 65 20 2a 70 50 61 72 73 65 29 7b 0a 20 20  rse *pParse){.  
35b0: 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  int rc = SQLITE_
35c0: 4f 4b 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  OK;.  sqlite3 *d
35d0: 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a  b = pParse->db;.
35e0: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
35f0: 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 64 62 2d  3_mutex_held(db-
3600: 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 69 66 28  >mutex) );.  if(
3610: 20 21 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20   !db->init.busy 
3620: 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
3630: 74 65 33 49 6e 69 74 28 64 62 2c 20 26 70 50 61  te3Init(db, &pPa
3640: 72 73 65 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  rse->zErrMsg);. 
3650: 20 7d 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c   }.  if( rc!=SQL
3660: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 70 50  ITE_OK ){.    pP
3670: 61 72 73 65 2d 3e 72 63 20 3d 20 72 63 3b 0a 20  arse->rc = rc;. 
3680: 20 20 20 70 50 61 72 73 65 2d 3e 6e 45 72 72 2b     pParse->nErr+
3690: 2b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  +;.  }.  return 
36a0: 72 63 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 43 68  rc;.}.../*.** Ch
36b0: 65 63 6b 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  eck schema cooki
36c0: 65 73 20 69 6e 20 61 6c 6c 20 64 61 74 61 62 61  es in all databa
36d0: 73 65 73 2e 20 20 49 66 20 61 6e 79 20 63 6f 6f  ses.  If any coo
36e0: 6b 69 65 20 69 73 20 6f 75 74 0a 2a 2a 20 6f 66  kie is out.** of
36f0: 20 64 61 74 65 2c 20 72 65 74 75 72 6e 20 30 2e   date, return 0.
3700: 20 20 49 66 20 61 6c 6c 20 73 63 68 65 6d 61 20    If all schema 
3710: 63 6f 6f 6b 69 65 73 20 61 72 65 20 63 75 72 72  cookies are curr
3720: 65 6e 74 2c 20 72 65 74 75 72 6e 20 31 2e 0a 2a  ent, return 1..*
3730: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 63 68  /.static int sch
3740: 65 6d 61 49 73 56 61 6c 69 64 28 73 71 6c 69 74  emaIsValid(sqlit
3750: 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20 69  e3 *db){.  int i
3760: 44 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  Db;.  int rc;.  
3770: 42 74 43 75 72 73 6f 72 20 2a 63 75 72 54 65 6d  BtCursor *curTem
3780: 70 3b 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65 3b  p;.  int cookie;
3790: 0a 20 20 69 6e 74 20 61 6c 6c 4f 6b 20 3d 20 31  .  int allOk = 1
37a0: 3b 0a 0a 20 20 63 75 72 54 65 6d 70 20 3d 20 28  ;..  curTemp = (
37b0: 42 74 43 75 72 73 6f 72 20 2a 29 73 71 6c 69 74  BtCursor *)sqlit
37c0: 65 33 4d 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33  e3Malloc(sqlite3
37d0: 42 74 72 65 65 43 75 72 73 6f 72 53 69 7a 65 28  BtreeCursorSize(
37e0: 29 29 3b 0a 20 20 69 66 28 20 63 75 72 54 65 6d  ));.  if( curTem
37f0: 70 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  p ){.    assert(
3800: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68   sqlite3_mutex_h
3810: 65 6c 64 28 64 62 2d 3e 6d 75 74 65 78 29 20 29  eld(db->mutex) )
3820: 3b 0a 20 20 20 20 66 6f 72 28 69 44 62 3d 30 3b  ;.    for(iDb=0;
3830: 20 61 6c 6c 4f 6b 20 26 26 20 69 44 62 3c 64 62   allOk && iDb<db
3840: 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b 29 7b 0a 20  ->nDb; iDb++){. 
3850: 20 20 20 20 20 42 74 72 65 65 20 2a 70 42 74 3b       Btree *pBt;
3860: 0a 20 20 20 20 20 20 70 42 74 20 3d 20 64 62 2d  .      pBt = db-
3870: 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 3b 0a 20  >aDb[iDb].pBt;. 
3880: 20 20 20 20 20 69 66 28 20 70 42 74 3d 3d 30 20       if( pBt==0 
3890: 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20  ) continue;.    
38a0: 20 20 6d 65 6d 73 65 74 28 63 75 72 54 65 6d 70    memset(curTemp
38b0: 2c 20 30 2c 20 73 71 6c 69 74 65 33 42 74 72 65  , 0, sqlite3Btre
38c0: 65 43 75 72 73 6f 72 53 69 7a 65 28 29 29 3b 0a  eCursorSize());.
38d0: 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
38e0: 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 42  e3BtreeCursor(pB
38f0: 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20  t, MASTER_ROOT, 
3900: 30 2c 20 30 2c 20 63 75 72 54 65 6d 70 29 3b 0a  0, 0, curTemp);.
3910: 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
3920: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
3930: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
3940: 74 72 65 65 47 65 74 4d 65 74 61 28 70 42 74 2c  treeGetMeta(pBt,
3950: 20 31 2c 20 28 75 33 32 20 2a 29 26 63 6f 6f 6b   1, (u32 *)&cook
3960: 69 65 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ie);.        if(
3970: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
3980: 26 20 63 6f 6f 6b 69 65 21 3d 64 62 2d 3e 61 44  & cookie!=db->aD
3990: 62 5b 69 44 62 5d 2e 70 53 63 68 65 6d 61 2d 3e  b[iDb].pSchema->
39a0: 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 29 7b  schema_cookie ){
39b0: 0a 20 20 20 20 20 20 20 20 20 20 61 6c 6c 4f 6b  .          allOk
39c0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a   = 0;.        }.
39d0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42          sqlite3B
39e0: 74 72 65 65 43 6c 6f 73 65 43 75 72 73 6f 72 28  treeCloseCursor(
39f0: 63 75 72 54 65 6d 70 29 3b 0a 20 20 20 20 20 20  curTemp);.      
3a00: 7d 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  }.      if( rc==
3a10: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 7c 7c 20  SQLITE_NOMEM || 
3a20: 72 63 3d 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52  rc==SQLITE_IOERR
3a30: 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20  _NOMEM ){.      
3a40: 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c    db->mallocFail
3a50: 65 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 0a  ed = 1;.      }.
3a60: 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
3a70: 33 5f 66 72 65 65 28 63 75 72 54 65 6d 70 29 3b  3_free(curTemp);
3a80: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 6c  .  }else{.    al
3a90: 6c 4f 6b 20 3d 20 30 3b 0a 20 20 20 20 64 62 2d  lOk = 0;.    db-
3aa0: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20  >mallocFailed = 
3ab0: 31 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e  1;.  }..  return
3ac0: 20 61 6c 6c 4f 6b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a   allOk;.}../*.**
3ad0: 20 43 6f 6e 76 65 72 74 20 61 20 73 63 68 65 6d   Convert a schem
3ae0: 61 20 70 6f 69 6e 74 65 72 20 69 6e 74 6f 20 74  a pointer into t
3af0: 68 65 20 69 44 62 20 69 6e 64 65 78 20 74 68 61  he iDb index tha
3b00: 74 20 69 6e 64 69 63 61 74 65 73 0a 2a 2a 20 77  t indicates.** w
3b10: 68 69 63 68 20 64 61 74 61 62 61 73 65 20 66 69  hich database fi
3b20: 6c 65 20 69 6e 20 64 62 2d 3e 61 44 62 5b 5d 20  le in db->aDb[] 
3b30: 74 68 65 20 73 63 68 65 6d 61 20 72 65 66 65 72  the schema refer
3b40: 73 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  s to..**.** If t
3b50: 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
3b60: 20 69 73 20 61 74 74 61 63 68 65 64 20 6d 6f 72   is attached mor
3b70: 65 20 74 68 61 6e 20 6f 6e 63 65 2c 20 74 68 65  e than once, the
3b80: 20 66 69 72 73 74 0a 2a 2a 20 61 74 74 61 63 68   first.** attach
3b90: 65 64 20 64 61 74 61 62 61 73 65 20 69 73 20 72  ed database is r
3ba0: 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a 69 6e 74 20  eturned..*/.int 
3bb0: 73 71 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49  sqlite3SchemaToI
3bc0: 6e 64 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62  ndex(sqlite3 *db
3bd0: 2c 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d  , Schema *pSchem
3be0: 61 29 7b 0a 20 20 69 6e 74 20 69 20 3d 20 2d 31  a){.  int i = -1
3bf0: 30 30 30 30 30 30 3b 0a 0a 20 20 2f 2a 20 49 66  000000;..  /* If
3c00: 20 70 53 63 68 65 6d 61 20 69 73 20 4e 55 4c 4c   pSchema is NULL
3c10: 2c 20 74 68 65 6e 20 72 65 74 75 72 6e 20 2d 31  , then return -1
3c20: 30 30 30 30 30 30 2e 20 54 68 69 73 20 68 61 70  000000. This hap
3c30: 70 65 6e 73 20 77 68 65 6e 20 63 6f 64 65 20 69  pens when code i
3c40: 6e 20 0a 20 20 2a 2a 20 65 78 70 72 2e 63 20 69  n .  ** expr.c i
3c50: 73 20 74 72 79 69 6e 67 20 74 6f 20 72 65 73 6f  s trying to reso
3c60: 6c 76 65 20 61 20 72 65 66 65 72 65 6e 63 65 20  lve a reference 
3c70: 74 6f 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74  to a transient t
3c80: 61 62 6c 65 20 28 69 2e 65 2e 20 6f 6e 65 0a 20  able (i.e. one. 
3c90: 20 2a 2a 20 63 72 65 61 74 65 64 20 62 79 20 61   ** created by a
3ca0: 20 73 75 62 2d 73 65 6c 65 63 74 29 2e 20 49 6e   sub-select). In
3cb0: 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20 72   this case the r
3cc0: 65 74 75 72 6e 20 76 61 6c 75 65 20 6f 66 20 74  eturn value of t
3cd0: 68 69 73 20 0a 20 20 2a 2a 20 66 75 6e 63 74 69  his .  ** functi
3ce0: 6f 6e 20 73 68 6f 75 6c 64 20 6e 65 76 65 72 20  on should never 
3cf0: 62 65 20 75 73 65 64 2e 0a 20 20 2a 2a 0a 20 20  be used..  **.  
3d00: 2a 2a 20 57 65 20 72 65 74 75 72 6e 20 2d 31 30  ** We return -10
3d10: 30 30 30 30 30 20 69 6e 73 74 65 61 64 20 6f 66  00000 instead of
3d20: 20 74 68 65 20 6d 6f 72 65 20 75 73 75 61 6c 20   the more usual 
3d30: 2d 31 20 73 69 6d 70 6c 79 20 62 65 63 61 75 73  -1 simply becaus
3d40: 65 20 75 73 69 6e 67 0a 20 20 2a 2a 20 2d 31 30  e using.  ** -10
3d50: 30 30 30 30 30 20 61 73 20 69 6e 63 6f 72 72 65  00000 as incorre
3d60: 63 74 6c 79 20 75 73 69 6e 67 20 2d 31 30 30 30  ctly using -1000
3d70: 30 30 30 20 69 6e 64 65 78 20 69 6e 74 6f 20 64  000 index into d
3d80: 62 2d 3e 61 44 62 5b 5d 20 69 73 20 6d 75 63 68  b->aDb[] is much
3d90: 20 0a 20 20 2a 2a 20 6d 6f 72 65 20 6c 69 6b 65   .  ** more like
3da0: 6c 79 20 74 6f 20 63 61 75 73 65 20 61 20 73 65  ly to cause a se
3db0: 67 66 61 75 6c 74 20 74 68 61 6e 20 2d 31 20 28  gfault than -1 (
3dc0: 6f 66 20 63 6f 75 72 73 65 20 74 68 65 72 65 20  of course there 
3dd0: 61 72 65 20 61 73 73 65 72 74 28 29 0a 20 20 2a  are assert().  *
3de0: 2a 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 6f  * statements too
3df0: 2c 20 62 75 74 20 69 74 20 6e 65 76 65 72 20 68  , but it never h
3e00: 75 72 74 73 20 74 6f 20 70 6c 61 79 20 74 68 65  urts to play the
3e10: 20 6f 64 64 73 29 2e 0a 20 20 2a 2f 0a 20 20 61   odds)..  */.  a
3e20: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d  ssert( sqlite3_m
3e30: 75 74 65 78 5f 68 65 6c 64 28 64 62 2d 3e 6d 75  utex_held(db->mu
3e40: 74 65 78 29 20 29 3b 0a 20 20 69 66 28 20 70 53  tex) );.  if( pS
3e50: 63 68 65 6d 61 20 29 7b 0a 20 20 20 20 66 6f 72  chema ){.    for
3e60: 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b  (i=0; i<db->nDb;
3e70: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28   i++){.      if(
3e80: 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 53 63 68   db->aDb[i].pSch
3e90: 65 6d 61 3d 3d 70 53 63 68 65 6d 61 20 29 7b 0a  ema==pSchema ){.
3ea0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
3eb0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
3ec0: 20 61 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26   assert( i>=0 &&
3ed0: 69 3e 3d 30 20 26 26 20 20 69 3c 64 62 2d 3e 6e  i>=0 &&  i<db->n
3ee0: 44 62 20 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  Db );.  }.  retu
3ef0: 72 6e 20 69 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43  rn i;.}../*.** C
3f00: 6f 6d 70 69 6c 65 20 74 68 65 20 55 54 46 2d 38  ompile the UTF-8
3f10: 20 65 6e 63 6f 64 65 64 20 53 51 4c 20 73 74 61   encoded SQL sta
3f20: 74 65 6d 65 6e 74 20 7a 53 71 6c 20 69 6e 74 6f  tement zSql into
3f30: 20 61 20 73 74 61 74 65 6d 65 6e 74 20 68 61 6e   a statement han
3f40: 64 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  dle..*/.static i
3f50: 6e 74 20 73 71 6c 69 74 65 33 50 72 65 70 61 72  nt sqlite3Prepar
3f60: 65 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  e(.  sqlite3 *db
3f70: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
3f80: 2a 20 44 61 74 61 62 61 73 65 20 68 61 6e 64 6c  * Database handl
3f90: 65 2e 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  e. */.  const ch
3fa0: 61 72 20 2a 7a 53 71 6c 2c 20 20 20 20 20 20 20  ar *zSql,       
3fb0: 20 20 2f 2a 20 55 54 46 2d 38 20 65 6e 63 6f 64    /* UTF-8 encod
3fc0: 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  ed SQL statement
3fd0: 2e 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65  . */.  int nByte
3fe0: 73 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s,              
3ff0: 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 7a 53   /* Length of zS
4000: 71 6c 20 69 6e 20 62 79 74 65 73 2e 20 2a 2f 0a  ql in bytes. */.
4010: 20 20 69 6e 74 20 73 61 76 65 53 71 6c 46 6c 61    int saveSqlFla
4020: 67 2c 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  g,          /* T
4030: 72 75 65 20 74 6f 20 63 6f 70 79 20 53 51 4c 20  rue to copy SQL 
4040: 74 65 78 74 20 69 6e 74 6f 20 74 68 65 20 73 71  text into the sq
4050: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2f 0a 20 20  lite3_stmt */.  
4060: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2a 70  sqlite3_stmt **p
4070: 70 53 74 6d 74 2c 20 20 20 20 2f 2a 20 4f 55 54  pStmt,    /* OUT
4080: 3a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  : A pointer to t
4090: 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74  he prepared stat
40a0: 65 6d 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73 74  ement */.  const
40b0: 20 63 68 61 72 20 2a 2a 70 7a 54 61 69 6c 20 20   char **pzTail  
40c0: 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20 45 6e 64       /* OUT: End
40d0: 20 6f 66 20 70 61 72 73 65 64 20 73 74 72 69 6e   of parsed strin
40e0: 67 20 2a 2f 0a 29 7b 0a 20 20 50 61 72 73 65 20  g */.){.  Parse 
40f0: 73 50 61 72 73 65 3b 0a 20 20 63 68 61 72 20 2a  sParse;.  char *
4100: 7a 45 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 69  zErrMsg = 0;.  i
4110: 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  nt rc = SQLITE_O
4120: 4b 3b 0a 20 20 69 6e 74 20 69 3b 0a 0a 20 20 61  K;.  int i;..  a
4130: 73 73 65 72 74 28 20 70 70 53 74 6d 74 20 29 3b  ssert( ppStmt );
4140: 0a 20 20 2a 70 70 53 74 6d 74 20 3d 20 30 3b 0a  .  *ppStmt = 0;.
4150: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66    if( sqlite3Saf
4160: 65 74 79 4f 6e 28 64 62 29 20 29 7b 0a 20 20 20  etyOn(db) ){.   
4170: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d   return SQLITE_M
4180: 49 53 55 53 45 3b 0a 20 20 7d 0a 20 20 61 73 73  ISUSE;.  }.  ass
4190: 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63  ert( !db->malloc
41a0: 46 61 69 6c 65 64 20 29 3b 0a 20 20 61 73 73 65  Failed );.  asse
41b0: 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  rt( sqlite3_mute
41c0: 78 5f 68 65 6c 64 28 64 62 2d 3e 6d 75 74 65 78  x_held(db->mutex
41d0: 29 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 61 6e  ) );..  /* If an
41e0: 79 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  y attached datab
41f0: 61 73 65 20 73 63 68 65 6d 61 73 20 61 72 65 20  ase schemas are 
4200: 6c 6f 63 6b 65 64 2c 20 64 6f 20 6e 6f 74 20 70  locked, do not p
4210: 72 6f 63 65 65 64 20 77 69 74 68 0a 20 20 2a 2a  roceed with.  **
4220: 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 2e 20 49 6e   compilation. In
4230: 73 74 65 61 64 20 72 65 74 75 72 6e 20 53 51 4c  stead return SQL
4240: 49 54 45 5f 4c 4f 43 4b 45 44 20 69 6d 6d 65 64  ITE_LOCKED immed
4250: 69 61 74 65 6c 79 2e 0a 20 20 2a 2f 0a 20 20 66  iately..  */.  f
4260: 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44  or(i=0; i<db->nD
4270: 62 3b 20 69 2b 2b 29 20 7b 0a 20 20 20 20 42 74  b; i++) {.    Bt
4280: 72 65 65 20 2a 70 42 74 20 3d 20 64 62 2d 3e 61  ree *pBt = db->a
4290: 44 62 5b 69 5d 2e 70 42 74 3b 0a 20 20 20 20 69  Db[i].pBt;.    i
42a0: 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20 20 20  f( pBt ){.      
42b0: 69 6e 74 20 72 63 3b 0a 20 20 20 20 20 20 72 63  int rc;.      rc
42c0: 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53   = sqlite3BtreeS
42d0: 63 68 65 6d 61 4c 6f 63 6b 65 64 28 70 42 74 29  chemaLocked(pBt)
42e0: 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 20 29  ;.      if( rc )
42f0: 7b 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20  {.        const 
4300: 63 68 61 72 20 2a 7a 44 62 20 3d 20 64 62 2d 3e  char *zDb = db->
4310: 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 3b 0a 20 20  aDb[i].zName;.  
4320: 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72        sqlite3Err
4330: 6f 72 28 64 62 2c 20 53 51 4c 49 54 45 5f 4c 4f  or(db, SQLITE_LO
4340: 43 4b 45 44 2c 20 22 64 61 74 61 62 61 73 65 20  CKED, "database 
4350: 73 63 68 65 6d 61 20 69 73 20 6c 6f 63 6b 65 64  schema is locked
4360: 3a 20 25 73 22 2c 20 7a 44 62 29 3b 0a 20 20 20  : %s", zDb);.   
4370: 20 20 20 20 20 28 76 6f 69 64 29 73 71 6c 69 74       (void)sqlit
4380: 65 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 3b  e3SafetyOff(db);
4390: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
43a0: 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 64  sqlite3ApiExit(d
43b0: 62 2c 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  b, SQLITE_LOCKED
43c0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
43d0: 0a 20 20 7d 0a 20 20 0a 20 20 6d 65 6d 73 65 74  .  }.  .  memset
43e0: 28 26 73 50 61 72 73 65 2c 20 30 2c 20 73 69 7a  (&sParse, 0, siz
43f0: 65 6f 66 28 73 50 61 72 73 65 29 29 3b 0a 20 20  eof(sParse));.  
4400: 73 50 61 72 73 65 2e 64 62 20 3d 20 64 62 3b 0a  sParse.db = db;.
4410: 20 20 69 66 28 20 6e 42 79 74 65 73 3e 3d 30 20    if( nBytes>=0 
4420: 26 26 20 28 6e 42 79 74 65 73 3d 3d 30 20 7c 7c  && (nBytes==0 ||
4430: 20 7a 53 71 6c 5b 6e 42 79 74 65 73 2d 31 5d 21   zSql[nBytes-1]!
4440: 3d 30 29 20 29 7b 0a 20 20 20 20 63 68 61 72 20  =0) ){.    char 
4450: 2a 7a 53 71 6c 43 6f 70 79 3b 0a 20 20 20 20 69  *zSqlCopy;.    i
4460: 6e 74 20 6d 78 4c 65 6e 20 3d 20 64 62 2d 3e 61  nt mxLen = db->a
4470: 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
4480: 49 54 5f 53 51 4c 5f 4c 45 4e 47 54 48 5d 3b 0a  IT_SQL_LENGTH];.
4490: 20 20 20 20 69 66 28 20 6e 42 79 74 65 73 3e 6d      if( nBytes>m
44a0: 78 4c 65 6e 20 29 7b 0a 20 20 20 20 20 20 73 71  xLen ){.      sq
44b0: 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20 53  lite3Error(db, S
44c0: 51 4c 49 54 45 5f 54 4f 4f 42 49 47 2c 20 22 73  QLITE_TOOBIG, "s
44d0: 74 61 74 65 6d 65 6e 74 20 74 6f 6f 20 6c 6f 6e  tatement too lon
44e0: 67 22 29 3b 0a 20 20 20 20 20 20 28 76 6f 69 64  g");.      (void
44f0: 29 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66  )sqlite3SafetyOf
4500: 66 28 64 62 29 3b 0a 20 20 20 20 20 20 72 65 74  f(db);.      ret
4510: 75 72 6e 20 73 71 6c 69 74 65 33 41 70 69 45 78  urn sqlite3ApiEx
4520: 69 74 28 64 62 2c 20 53 51 4c 49 54 45 5f 54 4f  it(db, SQLITE_TO
4530: 4f 42 49 47 29 3b 0a 20 20 20 20 7d 0a 20 20 20  OBIG);.    }.   
4540: 20 7a 53 71 6c 43 6f 70 79 20 3d 20 73 71 6c 69   zSqlCopy = sqli
4550: 74 65 33 44 62 53 74 72 4e 44 75 70 28 64 62 2c  te3DbStrNDup(db,
4560: 20 7a 53 71 6c 2c 20 6e 42 79 74 65 73 29 3b 0a   zSql, nBytes);.
4570: 20 20 20 20 69 66 28 20 7a 53 71 6c 43 6f 70 79      if( zSqlCopy
4580: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
4590: 33 52 75 6e 50 61 72 73 65 72 28 26 73 50 61 72  3RunParser(&sPar
45a0: 73 65 2c 20 7a 53 71 6c 43 6f 70 79 2c 20 26 7a  se, zSqlCopy, &z
45b0: 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 20 20 73  ErrMsg);.      s
45c0: 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
45d0: 20 7a 53 71 6c 43 6f 70 79 29 3b 0a 20 20 20 20   zSqlCopy);.    
45e0: 20 20 73 50 61 72 73 65 2e 7a 54 61 69 6c 20 3d    sParse.zTail =
45f0: 20 26 7a 53 71 6c 5b 73 50 61 72 73 65 2e 7a 54   &zSql[sParse.zT
4600: 61 69 6c 2d 7a 53 71 6c 43 6f 70 79 5d 3b 0a 20  ail-zSqlCopy];. 
4610: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
4620: 73 50 61 72 73 65 2e 7a 54 61 69 6c 20 3d 20 26  sParse.zTail = &
4630: 7a 53 71 6c 5b 6e 42 79 74 65 73 5d 3b 0a 20 20  zSql[nBytes];.  
4640: 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
4650: 20 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65   sqlite3RunParse
4660: 72 28 26 73 50 61 72 73 65 2c 20 7a 53 71 6c 2c  r(&sParse, zSql,
4670: 20 26 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a   &zErrMsg);.  }.
4680: 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f  .  if( db->mallo
4690: 63 46 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 73  cFailed ){.    s
46a0: 50 61 72 73 65 2e 72 63 20 3d 20 53 51 4c 49 54  Parse.rc = SQLIT
46b0: 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d 0a 20 20 69  E_NOMEM;.  }.  i
46c0: 66 28 20 73 50 61 72 73 65 2e 72 63 3d 3d 53 51  f( sParse.rc==SQ
46d0: 4c 49 54 45 5f 44 4f 4e 45 20 29 20 73 50 61 72  LITE_DONE ) sPar
46e0: 73 65 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  se.rc = SQLITE_O
46f0: 4b 3b 0a 20 20 69 66 28 20 73 50 61 72 73 65 2e  K;.  if( sParse.
4700: 63 68 65 63 6b 53 63 68 65 6d 61 20 26 26 20 21  checkSchema && !
4710: 73 63 68 65 6d 61 49 73 56 61 6c 69 64 28 64 62  schemaIsValid(db
4720: 29 20 29 7b 0a 20 20 20 20 73 50 61 72 73 65 2e  ) ){.    sParse.
4730: 72 63 20 3d 20 53 51 4c 49 54 45 5f 53 43 48 45  rc = SQLITE_SCHE
4740: 4d 41 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 50  MA;.  }.  if( sP
4750: 61 72 73 65 2e 72 63 3d 3d 53 51 4c 49 54 45 5f  arse.rc==SQLITE_
4760: 53 43 48 45 4d 41 20 29 7b 0a 20 20 20 20 73 71  SCHEMA ){.    sq
4770: 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e  lite3ResetIntern
4780: 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 30 29 3b  alSchema(db, 0);
4790: 0a 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d  .  }.  if( db->m
47a0: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20  allocFailed ){. 
47b0: 20 20 20 73 50 61 72 73 65 2e 72 63 20 3d 20 53     sParse.rc = S
47c0: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 7d  QLITE_NOMEM;.  }
47d0: 0a 20 20 69 66 28 20 70 7a 54 61 69 6c 20 29 7b  .  if( pzTail ){
47e0: 0a 20 20 20 20 2a 70 7a 54 61 69 6c 20 3d 20 73  .    *pzTail = s
47f0: 50 61 72 73 65 2e 7a 54 61 69 6c 3b 0a 20 20 7d  Parse.zTail;.  }
4800: 0a 20 20 72 63 20 3d 20 73 50 61 72 73 65 2e 72  .  rc = sParse.r
4810: 63 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  c;..#ifndef SQLI
4820: 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a  TE_OMIT_EXPLAIN.
4830: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
4840: 5f 4f 4b 20 26 26 20 73 50 61 72 73 65 2e 70 56  _OK && sParse.pV
4850: 64 62 65 20 26 26 20 73 50 61 72 73 65 2e 65 78  dbe && sParse.ex
4860: 70 6c 61 69 6e 20 29 7b 0a 20 20 20 20 69 66 28  plain ){.    if(
4870: 20 73 50 61 72 73 65 2e 65 78 70 6c 61 69 6e 3d   sParse.explain=
4880: 3d 32 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =2 ){.      sqli
4890: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
48a0: 73 28 73 50 61 72 73 65 2e 70 56 64 62 65 2c 20  s(sParse.pVdbe, 
48b0: 33 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  3);.      sqlite
48c0: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
48d0: 73 50 61 72 73 65 2e 70 56 64 62 65 2c 20 30 2c  sParse.pVdbe, 0,
48e0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
48f0: 6f 72 64 65 72 22 2c 20 53 51 4c 49 54 45 5f 53  order", SQLITE_S
4900: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71  TATIC);.      sq
4910: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
4920: 61 6d 65 28 73 50 61 72 73 65 2e 70 56 64 62 65  ame(sParse.pVdbe
4930: 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 1, COLNAME_NAM
4940: 45 2c 20 22 66 72 6f 6d 22 2c 20 53 51 4c 49 54  E, "from", SQLIT
4950: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
4960: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
4970: 6f 6c 4e 61 6d 65 28 73 50 61 72 73 65 2e 70 56  olName(sParse.pV
4980: 64 62 65 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f  dbe, 2, COLNAME_
4990: 4e 41 4d 45 2c 20 22 64 65 74 61 69 6c 22 2c 20  NAME, "detail", 
49a0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
49b0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
49c0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
49d0: 75 6d 43 6f 6c 73 28 73 50 61 72 73 65 2e 70 56  umCols(sParse.pV
49e0: 64 62 65 2c 20 38 29 3b 0a 20 20 20 20 20 20 73  dbe, 8);.      s
49f0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
4a00: 4e 61 6d 65 28 73 50 61 72 73 65 2e 70 56 64 62  Name(sParse.pVdb
4a10: 65 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  e, 0, COLNAME_NA
4a20: 4d 45 2c 20 22 61 64 64 72 22 2c 20 53 51 4c 49  ME, "addr", SQLI
4a30: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
4a40: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
4a50: 43 6f 6c 4e 61 6d 65 28 73 50 61 72 73 65 2e 70  ColName(sParse.p
4a60: 56 64 62 65 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45  Vdbe, 1, COLNAME
4a70: 5f 4e 41 4d 45 2c 20 22 6f 70 63 6f 64 65 22 2c  _NAME, "opcode",
4a80: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
4a90: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
4aa0: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 73 50 61  beSetColName(sPa
4ab0: 72 73 65 2e 70 56 64 62 65 2c 20 32 2c 20 43 4f  rse.pVdbe, 2, CO
4ac0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 70 31 22  LNAME_NAME, "p1"
4ad0: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
4ae0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
4af0: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 73 50  dbeSetColName(sP
4b00: 61 72 73 65 2e 70 56 64 62 65 2c 20 33 2c 20 43  arse.pVdbe, 3, C
4b10: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 70 32  OLNAME_NAME, "p2
4b20: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
4b30: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
4b40: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 73  VdbeSetColName(s
4b50: 50 61 72 73 65 2e 70 56 64 62 65 2c 20 34 2c 20  Parse.pVdbe, 4, 
4b60: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 70  COLNAME_NAME, "p
4b70: 33 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  3", SQLITE_STATI
4b80: 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  C);.      sqlite
4b90: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
4ba0: 73 50 61 72 73 65 2e 70 56 64 62 65 2c 20 35 2c  sParse.pVdbe, 5,
4bb0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
4bc0: 70 34 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  p4", SQLITE_STAT
4bd0: 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
4be0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
4bf0: 28 73 50 61 72 73 65 2e 70 56 64 62 65 2c 20 36  (sParse.pVdbe, 6
4c00: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
4c10: 22 70 35 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  "p5", SQLITE_STA
4c20: 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  TIC);.      sqli
4c30: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
4c40: 65 28 73 50 61 72 73 65 2e 70 56 64 62 65 2c 20  e(sParse.pVdbe, 
4c50: 37 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  7, COLNAME_NAME,
4c60: 20 22 63 6f 6d 6d 65 6e 74 22 2c 20 53 51 4c 49   "comment", SQLI
4c70: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
4c80: 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  }.  }.#endif..  
4c90: 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
4ca0: 79 4f 66 66 28 64 62 29 20 29 7b 0a 20 20 20 20  yOff(db) ){.    
4cb0: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 55  rc = SQLITE_MISU
4cc0: 53 45 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 73  SE;.  }..  if( s
4cd0: 61 76 65 53 71 6c 46 6c 61 67 20 29 7b 0a 20 20  aveSqlFlag ){.  
4ce0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
4cf0: 53 71 6c 28 73 50 61 72 73 65 2e 70 56 64 62 65  Sql(sParse.pVdbe
4d00: 2c 20 7a 53 71 6c 2c 20 73 50 61 72 73 65 2e 7a  , zSql, sParse.z
4d10: 54 61 69 6c 20 2d 20 7a 53 71 6c 29 3b 0a 20 20  Tail - zSql);.  
4d20: 7d 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  }.  if( rc!=SQLI
4d30: 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6d 61 6c  TE_OK || db->mal
4d40: 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20 20 20  locFailed ){.   
4d50: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
4d60: 65 28 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a  e((sqlite3_stmt*
4d70: 29 73 50 61 72 73 65 2e 70 56 64 62 65 29 3b 0a  )sParse.pVdbe);.
4d80: 20 20 20 20 61 73 73 65 72 74 28 21 28 2a 70 70      assert(!(*pp
4d90: 53 74 6d 74 29 29 3b 0a 20 20 7d 65 6c 73 65 7b  Stmt));.  }else{
4da0: 0a 20 20 20 20 2a 70 70 53 74 6d 74 20 3d 20 28  .    *ppStmt = (
4db0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 29 73 50  sqlite3_stmt*)sP
4dc0: 61 72 73 65 2e 70 56 64 62 65 3b 0a 20 20 7d 0a  arse.pVdbe;.  }.
4dd0: 0a 20 20 69 66 28 20 7a 45 72 72 4d 73 67 20 29  .  if( zErrMsg )
4de0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45 72 72  {.    sqlite3Err
4df0: 6f 72 28 64 62 2c 20 72 63 2c 20 22 25 73 22 2c  or(db, rc, "%s",
4e00: 20 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 73   zErrMsg);.    s
4e10: 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
4e20: 20 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 65 6c   zErrMsg);.  }el
4e30: 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45  se{.    sqlite3E
4e40: 72 72 6f 72 28 64 62 2c 20 72 63 2c 20 30 29 3b  rror(db, rc, 0);
4e50: 0a 20 20 7d 0a 0a 20 20 72 63 20 3d 20 73 71 6c  .  }..  rc = sql
4e60: 69 74 65 33 41 70 69 45 78 69 74 28 64 62 2c 20  ite3ApiExit(db, 
4e70: 72 63 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  rc);.  assert( (
4e80: 72 63 26 64 62 2d 3e 65 72 72 4d 61 73 6b 29 3d  rc&db->errMask)=
4e90: 3d 72 63 20 29 3b 0a 20 20 72 65 74 75 72 6e 20  =rc );.  return 
4ea0: 72 63 3b 0a 7d 0a 73 74 61 74 69 63 20 69 6e 74  rc;.}.static int
4eb0: 20 73 71 6c 69 74 65 33 4c 6f 63 6b 41 6e 64 50   sqlite3LockAndP
4ec0: 72 65 70 61 72 65 28 0a 20 20 73 71 6c 69 74 65  repare(.  sqlite
4ed0: 33 20 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20  3 *db,          
4ee0: 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
4ef0: 68 61 6e 64 6c 65 2e 20 2a 2f 0a 20 20 63 6f 6e  handle. */.  con
4f00: 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 2c 20 20  st char *zSql,  
4f10: 20 20 20 20 20 20 20 2f 2a 20 55 54 46 2d 38 20         /* UTF-8 
4f20: 65 6e 63 6f 64 65 64 20 53 51 4c 20 73 74 61 74  encoded SQL stat
4f30: 65 6d 65 6e 74 2e 20 2a 2f 0a 20 20 69 6e 74 20  ement. */.  int 
4f40: 6e 42 79 74 65 73 2c 20 20 20 20 20 20 20 20 20  nBytes,         
4f50: 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20        /* Length 
4f60: 6f 66 20 7a 53 71 6c 20 69 6e 20 62 79 74 65 73  of zSql in bytes
4f70: 2e 20 2a 2f 0a 20 20 69 6e 74 20 73 61 76 65 53  . */.  int saveS
4f80: 71 6c 46 6c 61 67 2c 20 20 20 20 20 20 20 20 20  qlFlag,         
4f90: 20 2f 2a 20 54 72 75 65 20 74 6f 20 63 6f 70 79   /* True to copy
4fa0: 20 53 51 4c 20 74 65 78 74 20 69 6e 74 6f 20 74   SQL text into t
4fb0: 68 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  he sqlite3_stmt 
4fc0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  */.  sqlite3_stm
4fd0: 74 20 2a 2a 70 70 53 74 6d 74 2c 20 20 20 20 2f  t **ppStmt,    /
4fe0: 2a 20 4f 55 54 3a 20 41 20 70 6f 69 6e 74 65 72  * OUT: A pointer
4ff0: 20 74 6f 20 74 68 65 20 70 72 65 70 61 72 65 64   to the prepared
5000: 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20   statement */.  
5010: 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 70 7a 54  const char **pzT
5020: 61 69 6c 20 20 20 20 20 20 20 2f 2a 20 4f 55 54  ail       /* OUT
5030: 3a 20 45 6e 64 20 6f 66 20 70 61 72 73 65 64 20  : End of parsed 
5040: 73 74 72 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69  string */.){.  i
5050: 6e 74 20 72 63 3b 0a 20 20 69 66 28 20 21 73 71  nt rc;.  if( !sq
5060: 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
5070: 4f 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65  Ok(db) ){.    re
5080: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  turn SQLITE_MISU
5090: 53 45 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  SE;.  }.  sqlite
50a0: 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 64 62  3_mutex_enter(db
50b0: 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 73 71 6c 69  ->mutex);.  sqli
50c0: 74 65 33 42 74 72 65 65 45 6e 74 65 72 41 6c 6c  te3BtreeEnterAll
50d0: 28 64 62 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  (db);.  rc = sql
50e0: 69 74 65 33 50 72 65 70 61 72 65 28 64 62 2c 20  ite3Prepare(db, 
50f0: 7a 53 71 6c 2c 20 6e 42 79 74 65 73 2c 20 73 61  zSql, nBytes, sa
5100: 76 65 53 71 6c 46 6c 61 67 2c 20 70 70 53 74 6d  veSqlFlag, ppStm
5110: 74 2c 20 70 7a 54 61 69 6c 29 3b 0a 20 20 73 71  t, pzTail);.  sq
5120: 6c 69 74 65 33 42 74 72 65 65 4c 65 61 76 65 41  lite3BtreeLeaveA
5130: 6c 6c 28 64 62 29 3b 0a 20 20 73 71 6c 69 74 65  ll(db);.  sqlite
5140: 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64 62  3_mutex_leave(db
5150: 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65 74 75  ->mutex);.  retu
5160: 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  rn rc;.}../*.** 
5170: 52 65 72 75 6e 20 74 68 65 20 63 6f 6d 70 69 6c  Rerun the compil
5180: 61 74 69 6f 6e 20 6f 66 20 61 20 73 74 61 74 65  ation of a state
5190: 6d 65 6e 74 20 61 66 74 65 72 20 61 20 73 63 68  ment after a sch
51a0: 65 6d 61 20 63 68 61 6e 67 65 2e 0a 2a 2a 20 52  ema change..** R
51b0: 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 74 68  eturn true if th
51c0: 65 20 73 74 61 74 65 6d 65 6e 74 20 77 61 73 20  e statement was 
51d0: 72 65 63 6f 6d 70 69 6c 65 64 20 73 75 63 63 65  recompiled succe
51e0: 73 73 66 75 6c 6c 79 2e 0a 2a 2a 20 52 65 74 75  ssfully..** Retu
51f0: 72 6e 20 66 61 6c 73 65 20 69 66 20 74 68 65 72  rn false if ther
5200: 65 20 69 73 20 61 6e 20 65 72 72 6f 72 20 6f 66  e is an error of
5210: 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 2a 2f 0a 69   some kind..*/.i
5220: 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72 65 70  nt sqlite3Reprep
5230: 61 72 65 28 56 64 62 65 20 2a 70 29 7b 0a 20 20  are(Vdbe *p){.  
5240: 69 6e 74 20 72 63 3b 0a 20 20 73 71 6c 69 74 65  int rc;.  sqlite
5250: 33 5f 73 74 6d 74 20 2a 70 4e 65 77 3b 0a 20 20  3_stmt *pNew;.  
5260: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c  const char *zSql
5270: 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  ;.  sqlite3 *db;
5280: 0a 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  ..  assert( sqli
5290: 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 73  te3_mutex_held(s
52a0: 71 6c 69 74 65 33 56 64 62 65 44 62 28 70 29 2d  qlite3VdbeDb(p)-
52b0: 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 7a 53 71  >mutex) );.  zSq
52c0: 6c 20 3d 20 73 71 6c 69 74 65 33 5f 73 71 6c 28  l = sqlite3_sql(
52d0: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29  (sqlite3_stmt *)
52e0: 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 53  p);.  assert( zS
52f0: 71 6c 21 3d 30 20 29 3b 20 20 2f 2a 20 52 65 70  ql!=0 );  /* Rep
5300: 72 65 70 61 72 65 20 6f 6e 6c 79 20 63 61 6c 6c  repare only call
5310: 65 64 20 66 6f 72 20 70 72 65 70 61 72 65 5f 76  ed for prepare_v
5320: 32 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 2a  2() statements *
5330: 2f 0a 20 20 64 62 20 3d 20 73 71 6c 69 74 65 33  /.  db = sqlite3
5340: 56 64 62 65 44 62 28 70 29 3b 0a 20 20 61 73 73  VdbeDb(p);.  ass
5350: 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74  ert( sqlite3_mut
5360: 65 78 5f 68 65 6c 64 28 64 62 2d 3e 6d 75 74 65  ex_held(db->mute
5370: 78 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  x) );.  rc = sql
5380: 69 74 65 33 4c 6f 63 6b 41 6e 64 50 72 65 70 61  ite3LockAndPrepa
5390: 72 65 28 64 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c  re(db, zSql, -1,
53a0: 20 30 2c 20 26 70 4e 65 77 2c 20 30 29 3b 0a 20   0, &pNew, 0);. 
53b0: 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 69   if( rc ){.    i
53c0: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f  f( rc==SQLITE_NO
53d0: 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 64 62 2d  MEM ){.      db-
53e0: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20  >mallocFailed = 
53f0: 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73  1;.    }.    ass
5400: 65 72 74 28 20 70 4e 65 77 3d 3d 30 20 29 3b 0a  ert( pNew==0 );.
5410: 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
5420: 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
5430: 74 28 20 70 4e 65 77 21 3d 30 20 29 3b 0a 20 20  t( pNew!=0 );.  
5440: 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53  }.  sqlite3VdbeS
5450: 77 61 70 28 28 56 64 62 65 2a 29 70 4e 65 77 2c  wap((Vdbe*)pNew,
5460: 20 70 29 3b 0a 20 20 73 71 6c 69 74 65 33 54 72   p);.  sqlite3Tr
5470: 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 28 70  ansferBindings(p
5480: 4e 65 77 2c 20 28 73 71 6c 69 74 65 33 5f 73 74  New, (sqlite3_st
5490: 6d 74 2a 29 70 29 3b 0a 20 20 73 71 6c 69 74 65  mt*)p);.  sqlite
54a0: 33 56 64 62 65 52 65 73 65 74 53 74 65 70 52 65  3VdbeResetStepRe
54b0: 73 75 6c 74 28 28 56 64 62 65 2a 29 70 4e 65 77  sult((Vdbe*)pNew
54c0: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
54d0: 46 69 6e 61 6c 69 7a 65 28 28 56 64 62 65 2a 29  Finalize((Vdbe*)
54e0: 70 4e 65 77 29 3b 0a 20 20 72 65 74 75 72 6e 20  pNew);.  return 
54f0: 31 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 54 77 6f  1;.}.../*.** Two
5500: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 65   versions of the
5510: 20 6f 66 66 69 63 69 61 6c 20 41 50 49 2e 20 20   official API.  
5520: 4c 65 67 61 63 79 20 61 6e 64 20 6e 65 77 20 75  Legacy and new u
5530: 73 65 2e 20 20 49 6e 20 74 68 65 20 6c 65 67 61  se.  In the lega
5540: 63 79 0a 2a 2a 20 76 65 72 73 69 6f 6e 2c 20 74  cy.** version, t
5550: 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 20  he original SQL 
5560: 74 65 78 74 20 69 73 20 6e 6f 74 20 73 61 76 65  text is not save
5570: 64 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65  d in the prepare
5580: 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 61  d statement.** a
5590: 6e 64 20 73 6f 20 69 66 20 61 20 73 63 68 65 6d  nd so if a schem
55a0: 61 20 63 68 61 6e 67 65 20 6f 63 63 75 72 73 2c  a change occurs,
55b0: 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 69   SQLITE_SCHEMA i
55c0: 73 20 72 65 74 75 72 6e 65 64 20 62 79 0a 2a 2a  s returned by.**
55d0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 2e   sqlite3_step().
55e0: 20 20 49 6e 20 74 68 65 20 6e 65 77 20 76 65 72    In the new ver
55f0: 73 69 6f 6e 2c 20 74 68 65 20 6f 72 69 67 69 6e  sion, the origin
5600: 61 6c 20 53 51 4c 20 74 65 78 74 20 69 73 20 72  al SQL text is r
5610: 65 74 61 69 6e 65 64 0a 2a 2a 20 61 6e 64 20 74  etained.** and t
5620: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  he statement is 
5630: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 72 65  automatically re
5640: 63 6f 6d 70 69 6c 65 64 20 69 66 20 61 6e 20 73  compiled if an s
5650: 63 68 65 6d 61 20 63 68 61 6e 67 65 0a 2a 2a 20  chema change.** 
5660: 6f 63 63 75 72 73 2e 0a 2a 2f 0a 69 6e 74 20 73  occurs..*/.int s
5670: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 0a  qlite3_prepare(.
5680: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20    sqlite3 *db,  
5690: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
56a0: 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20  atabase handle. 
56b0: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
56c0: 2a 7a 53 71 6c 2c 20 20 20 20 20 20 20 20 20 2f  *zSql,         /
56d0: 2a 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20  * UTF-8 encoded 
56e0: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20 2a  SQL statement. *
56f0: 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 73 2c 20  /.  int nBytes, 
5700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
5710: 20 4c 65 6e 67 74 68 20 6f 66 20 7a 53 71 6c 20   Length of zSql 
5720: 69 6e 20 62 79 74 65 73 2e 20 2a 2f 0a 20 20 73  in bytes. */.  s
5730: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2a 70 70  qlite3_stmt **pp
5740: 53 74 6d 74 2c 20 20 20 20 2f 2a 20 4f 55 54 3a  Stmt,    /* OUT:
5750: 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   A pointer to th
5760: 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
5770: 6d 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ment */.  const 
5780: 63 68 61 72 20 2a 2a 70 7a 54 61 69 6c 20 20 20  char **pzTail   
5790: 20 20 20 20 2f 2a 20 4f 55 54 3a 20 45 6e 64 20      /* OUT: End 
57a0: 6f 66 20 70 61 72 73 65 64 20 73 74 72 69 6e 67  of parsed string
57b0: 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b   */.){.  int rc;
57c0: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4c  .  rc = sqlite3L
57d0: 6f 63 6b 41 6e 64 50 72 65 70 61 72 65 28 64 62  ockAndPrepare(db
57e0: 2c 7a 53 71 6c 2c 6e 42 79 74 65 73 2c 30 2c 70  ,zSql,nBytes,0,p
57f0: 70 53 74 6d 74 2c 70 7a 54 61 69 6c 29 3b 0a 20  pStmt,pzTail);. 
5800: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
5810: 49 54 45 5f 4f 4b 20 7c 7c 20 70 70 53 74 6d 74  ITE_OK || ppStmt
5820: 3d 3d 30 20 7c 7c 20 2a 70 70 53 74 6d 74 3d 3d  ==0 || *ppStmt==
5830: 30 20 29 3b 20 20 2f 2a 20 56 45 52 49 46 59 3a  0 );  /* VERIFY:
5840: 20 46 31 33 30 32 31 20 2a 2f 0a 20 20 72 65 74   F13021 */.  ret
5850: 75 72 6e 20 72 63 3b 0a 7d 0a 69 6e 74 20 73 71  urn rc;.}.int sq
5860: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32  lite3_prepare_v2
5870: 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c  (.  sqlite3 *db,
5880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
5890: 20 44 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   Database handle
58a0: 2e 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  . */.  const cha
58b0: 72 20 2a 7a 53 71 6c 2c 20 20 20 20 20 20 20 20  r *zSql,        
58c0: 20 2f 2a 20 55 54 46 2d 38 20 65 6e 63 6f 64 65   /* UTF-8 encode
58d0: 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e  d SQL statement.
58e0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 73   */.  int nBytes
58f0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
5900: 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 7a 53 71  /* Length of zSq
5910: 6c 20 69 6e 20 62 79 74 65 73 2e 20 2a 2f 0a 20  l in bytes. */. 
5920: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2a   sqlite3_stmt **
5930: 70 70 53 74 6d 74 2c 20 20 20 20 2f 2a 20 4f 55  ppStmt,    /* OU
5940: 54 3a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  T: A pointer to 
5950: 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
5960: 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73  tement */.  cons
5970: 74 20 63 68 61 72 20 2a 2a 70 7a 54 61 69 6c 20  t char **pzTail 
5980: 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20 45 6e        /* OUT: En
5990: 64 20 6f 66 20 70 61 72 73 65 64 20 73 74 72 69  d of parsed stri
59a0: 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 72  ng */.){.  int r
59b0: 63 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  c;.  rc = sqlite
59c0: 33 4c 6f 63 6b 41 6e 64 50 72 65 70 61 72 65 28  3LockAndPrepare(
59d0: 64 62 2c 7a 53 71 6c 2c 6e 42 79 74 65 73 2c 31  db,zSql,nBytes,1
59e0: 2c 70 70 53 74 6d 74 2c 70 7a 54 61 69 6c 29 3b  ,ppStmt,pzTail);
59f0: 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
5a00: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70 70 53 74  QLITE_OK || ppSt
5a10: 6d 74 3d 3d 30 20 7c 7c 20 2a 70 70 53 74 6d 74  mt==0 || *ppStmt
5a20: 3d 3d 30 20 29 3b 20 20 2f 2a 20 56 45 52 49 46  ==0 );  /* VERIF
5a30: 59 3a 20 46 31 33 30 32 31 20 2a 2f 0a 20 20 72  Y: F13021 */.  r
5a40: 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 0a 23 69  eturn rc;.}...#i
5a50: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
5a60: 54 5f 55 54 46 31 36 0a 2f 2a 0a 2a 2a 20 43 6f  T_UTF16./*.** Co
5a70: 6d 70 69 6c 65 20 74 68 65 20 55 54 46 2d 31 36  mpile the UTF-16
5a80: 20 65 6e 63 6f 64 65 64 20 53 51 4c 20 73 74 61   encoded SQL sta
5a90: 74 65 6d 65 6e 74 20 7a 53 71 6c 20 69 6e 74 6f  tement zSql into
5aa0: 20 61 20 73 74 61 74 65 6d 65 6e 74 20 68 61 6e   a statement han
5ab0: 64 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  dle..*/.static i
5ac0: 6e 74 20 73 71 6c 69 74 65 33 50 72 65 70 61 72  nt sqlite3Prepar
5ad0: 65 31 36 28 0a 20 20 73 71 6c 69 74 65 33 20 2a  e16(.  sqlite3 *
5ae0: 64 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  db,             
5af0: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 68 61 6e   /* Database han
5b00: 64 6c 65 2e 20 2a 2f 20 0a 20 20 63 6f 6e 73 74  dle. */ .  const
5b10: 20 76 6f 69 64 20 2a 7a 53 71 6c 2c 20 20 20 20   void *zSql,    
5b20: 20 20 20 20 20 2f 2a 20 55 54 46 2d 38 20 65 6e       /* UTF-8 en
5b30: 63 6f 64 65 64 20 53 51 4c 20 73 74 61 74 65 6d  coded SQL statem
5b40: 65 6e 74 2e 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  ent. */.  int nB
5b50: 79 74 65 73 2c 20 20 20 20 20 20 20 20 20 20 20  ytes,           
5b60: 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66      /* Length of
5b70: 20 7a 53 71 6c 20 69 6e 20 62 79 74 65 73 2e 20   zSql in bytes. 
5b80: 2a 2f 0a 20 20 69 6e 74 20 73 61 76 65 53 71 6c  */.  int saveSql
5b90: 46 6c 61 67 2c 20 20 20 20 20 20 20 20 20 20 2f  Flag,          /
5ba0: 2a 20 54 72 75 65 20 74 6f 20 73 61 76 65 20 53  * True to save S
5bb0: 51 4c 20 74 65 78 74 20 69 6e 74 6f 20 74 68 65  QL text into the
5bc0: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2f   sqlite3_stmt */
5bd0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
5be0: 2a 2a 70 70 53 74 6d 74 2c 20 20 20 20 2f 2a 20  **ppStmt,    /* 
5bf0: 4f 55 54 3a 20 41 20 70 6f 69 6e 74 65 72 20 74  OUT: A pointer t
5c00: 6f 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  o the prepared s
5c10: 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 63 6f  tatement */.  co
5c20: 6e 73 74 20 76 6f 69 64 20 2a 2a 70 7a 54 61 69  nst void **pzTai
5c30: 6c 20 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20  l       /* OUT: 
5c40: 45 6e 64 20 6f 66 20 70 61 72 73 65 64 20 73 74  End of parsed st
5c50: 72 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 2f 2a 20  ring */.){.  /* 
5c60: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 63 75  This function cu
5c70: 72 72 65 6e 74 6c 79 20 77 6f 72 6b 73 20 62 79  rrently works by
5c80: 20 66 69 72 73 74 20 74 72 61 6e 73 66 6f 72 6d   first transform
5c90: 69 6e 67 20 74 68 65 20 55 54 46 2d 31 36 0a 20  ing the UTF-16. 
5ca0: 20 2a 2a 20 65 6e 63 6f 64 65 64 20 73 74 72 69   ** encoded stri
5cb0: 6e 67 20 74 6f 20 55 54 46 2d 38 2c 20 74 68 65  ng to UTF-8, the
5cc0: 6e 20 69 6e 76 6f 6b 69 6e 67 20 73 71 6c 69 74  n invoking sqlit
5cd0: 65 33 5f 70 72 65 70 61 72 65 28 29 2e 20 54 68  e3_prepare(). Th
5ce0: 65 0a 20 20 2a 2a 20 74 72 69 63 6b 79 20 62 69  e.  ** tricky bi
5cf0: 74 20 69 73 20 66 69 67 75 72 69 6e 67 20 6f 75  t is figuring ou
5d00: 74 20 74 68 65 20 70 6f 69 6e 74 65 72 20 74 6f  t the pointer to
5d10: 20 72 65 74 75 72 6e 20 69 6e 20 2a 70 7a 54 61   return in *pzTa
5d20: 69 6c 2e 0a 20 20 2a 2f 0a 20 20 63 68 61 72 20  il..  */.  char 
5d30: 2a 7a 53 71 6c 38 3b 0a 20 20 63 6f 6e 73 74 20  *zSql8;.  const 
5d40: 63 68 61 72 20 2a 7a 54 61 69 6c 38 20 3d 20 30  char *zTail8 = 0
5d50: 3b 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c  ;.  int rc = SQL
5d60: 49 54 45 5f 4f 4b 3b 0a 0a 20 20 69 66 28 20 21  ITE_OK;..  if( !
5d70: 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
5d80: 63 6b 4f 6b 28 64 62 29 20 29 7b 0a 20 20 20 20  ckOk(db) ){.    
5d90: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49  return SQLITE_MI
5da0: 53 55 53 45 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  SUSE;.  }.  sqli
5db0: 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28  te3_mutex_enter(
5dc0: 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 7a 53  db->mutex);.  zS
5dd0: 71 6c 38 20 3d 20 73 71 6c 69 74 65 33 55 74 66  ql8 = sqlite3Utf
5de0: 31 36 74 6f 38 28 64 62 2c 20 7a 53 71 6c 2c 20  16to8(db, zSql, 
5df0: 6e 42 79 74 65 73 29 3b 0a 20 20 69 66 28 20 7a  nBytes);.  if( z
5e00: 53 71 6c 38 20 29 7b 0a 20 20 20 20 72 63 20 3d  Sql8 ){.    rc =
5e10: 20 73 71 6c 69 74 65 33 4c 6f 63 6b 41 6e 64 50   sqlite3LockAndP
5e20: 72 65 70 61 72 65 28 64 62 2c 20 7a 53 71 6c 38  repare(db, zSql8
5e30: 2c 20 2d 31 2c 20 73 61 76 65 53 71 6c 46 6c 61  , -1, saveSqlFla
5e40: 67 2c 20 70 70 53 74 6d 74 2c 20 26 7a 54 61 69  g, ppStmt, &zTai
5e50: 6c 38 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  l8);.  }..  if( 
5e60: 7a 54 61 69 6c 38 20 26 26 20 70 7a 54 61 69 6c  zTail8 && pzTail
5e70: 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 73 71   ){.    /* If sq
5e80: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 72 65  lite3_prepare re
5e90: 74 75 72 6e 73 20 61 20 74 61 69 6c 20 70 6f 69  turns a tail poi
5ea0: 6e 74 65 72 2c 20 77 65 20 63 61 6c 63 75 6c 61  nter, we calcula
5eb0: 74 65 20 74 68 65 0a 20 20 20 20 2a 2a 20 65 71  te the.    ** eq
5ec0: 75 69 76 61 6c 65 6e 74 20 70 6f 69 6e 74 65 72  uivalent pointer
5ed0: 20 69 6e 74 6f 20 74 68 65 20 55 54 46 2d 31 36   into the UTF-16
5ee0: 20 73 74 72 69 6e 67 20 62 79 20 63 6f 75 6e 74   string by count
5ef0: 69 6e 67 20 74 68 65 20 75 6e 69 63 6f 64 65 0a  ing the unicode.
5f00: 20 20 20 20 2a 2a 20 63 68 61 72 61 63 74 65 72      ** character
5f10: 73 20 62 65 74 77 65 65 6e 20 7a 53 71 6c 38 20  s between zSql8 
5f20: 61 6e 64 20 7a 54 61 69 6c 38 2c 20 61 6e 64 20  and zTail8, and 
5f30: 74 68 65 6e 20 72 65 74 75 72 6e 69 6e 67 20 61  then returning a
5f40: 20 70 6f 69 6e 74 65 72 0a 20 20 20 20 2a 2a 20   pointer.    ** 
5f50: 74 68 65 20 73 61 6d 65 20 6e 75 6d 62 65 72 20  the same number 
5f60: 6f 66 20 63 68 61 72 61 63 74 65 72 73 20 69 6e  of characters in
5f70: 74 6f 20 74 68 65 20 55 54 46 2d 31 36 20 73 74  to the UTF-16 st
5f80: 72 69 6e 67 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  ring..    */.   
5f90: 20 69 6e 74 20 63 68 61 72 73 5f 70 61 72 73 65   int chars_parse
5fa0: 64 20 3d 20 73 71 6c 69 74 65 33 55 74 66 38 43  d = sqlite3Utf8C
5fb0: 68 61 72 4c 65 6e 28 7a 53 71 6c 38 2c 20 7a 54  harLen(zSql8, zT
5fc0: 61 69 6c 38 2d 7a 53 71 6c 38 29 3b 0a 20 20 20  ail8-zSql8);.   
5fd0: 20 2a 70 7a 54 61 69 6c 20 3d 20 28 75 38 20 2a   *pzTail = (u8 *
5fe0: 29 7a 53 71 6c 20 2b 20 73 71 6c 69 74 65 33 55  )zSql + sqlite3U
5ff0: 74 66 31 36 42 79 74 65 4c 65 6e 28 7a 53 71 6c  tf16ByteLen(zSql
6000: 2c 20 63 68 61 72 73 5f 70 61 72 73 65 64 29 3b  , chars_parsed);
6010: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 44 62  .  }.  sqlite3Db
6020: 46 72 65 65 28 64 62 2c 20 7a 53 71 6c 38 29 3b  Free(db, zSql8);
6030: 20 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33   .  rc = sqlite3
6040: 41 70 69 45 78 69 74 28 64 62 2c 20 72 63 29 3b  ApiExit(db, rc);
6050: 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
6060: 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78  _leave(db->mutex
6070: 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a  );.  return rc;.
6080: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 77 6f 20 76 65 72  }../*.** Two ver
6090: 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 6f 66 66  sions of the off
60a0: 69 63 69 61 6c 20 41 50 49 2e 20 20 4c 65 67 61  icial API.  Lega
60b0: 63 79 20 61 6e 64 20 6e 65 77 20 75 73 65 2e 20  cy and new use. 
60c0: 20 49 6e 20 74 68 65 20 6c 65 67 61 63 79 0a 2a   In the legacy.*
60d0: 2a 20 76 65 72 73 69 6f 6e 2c 20 74 68 65 20 6f  * version, the o
60e0: 72 69 67 69 6e 61 6c 20 53 51 4c 20 74 65 78 74  riginal SQL text
60f0: 20 69 73 20 6e 6f 74 20 73 61 76 65 64 20 69 6e   is not saved in
6100: 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74   the prepared st
6110: 61 74 65 6d 65 6e 74 0a 2a 2a 20 61 6e 64 20 73  atement.** and s
6120: 6f 20 69 66 20 61 20 73 63 68 65 6d 61 20 63 68  o if a schema ch
6130: 61 6e 67 65 20 6f 63 63 75 72 73 2c 20 53 51 4c  ange occurs, SQL
6140: 49 54 45 5f 53 43 48 45 4d 41 20 69 73 20 72 65  ITE_SCHEMA is re
6150: 74 75 72 6e 65 64 20 62 79 0a 2a 2a 20 73 71 6c  turned by.** sql
6160: 69 74 65 33 5f 73 74 65 70 28 29 2e 20 20 49 6e  ite3_step().  In
6170: 20 74 68 65 20 6e 65 77 20 76 65 72 73 69 6f 6e   the new version
6180: 2c 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53  , the original S
6190: 51 4c 20 74 65 78 74 20 69 73 20 72 65 74 61 69  QL text is retai
61a0: 6e 65 64 0a 2a 2a 20 61 6e 64 20 74 68 65 20 73  ned.** and the s
61b0: 74 61 74 65 6d 65 6e 74 20 69 73 20 61 75 74 6f  tatement is auto
61c0: 6d 61 74 69 63 61 6c 6c 79 20 72 65 63 6f 6d 70  matically recomp
61d0: 69 6c 65 64 20 69 66 20 61 6e 20 73 63 68 65 6d  iled if an schem
61e0: 61 20 63 68 61 6e 67 65 0a 2a 2a 20 6f 63 63 75  a change.** occu
61f0: 72 73 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  rs..*/.int sqlit
6200: 65 33 5f 70 72 65 70 61 72 65 31 36 28 0a 20 20  e3_prepare16(.  
6210: 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20  sqlite3 *db,    
6220: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
6230: 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 2a 2f  abase handle. */
6240: 20 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a   .  const void *
6250: 7a 53 71 6c 2c 20 20 20 20 20 20 20 20 20 2f 2a  zSql,         /*
6260: 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 53   UTF-8 encoded S
6270: 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20 2a 2f  QL statement. */
6280: 0a 20 20 69 6e 74 20 6e 42 79 74 65 73 2c 20 20  .  int nBytes,  
6290: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
62a0: 4c 65 6e 67 74 68 20 6f 66 20 7a 53 71 6c 20 69  Length of zSql i
62b0: 6e 20 62 79 74 65 73 2e 20 2a 2f 0a 20 20 73 71  n bytes. */.  sq
62c0: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2a 70 70 53  lite3_stmt **ppS
62d0: 74 6d 74 2c 20 20 20 20 2f 2a 20 4f 55 54 3a 20  tmt,    /* OUT: 
62e0: 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  A pointer to the
62f0: 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
6300: 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 76  ent */.  const v
6310: 6f 69 64 20 2a 2a 70 7a 54 61 69 6c 20 20 20 20  oid **pzTail    
6320: 20 20 20 2f 2a 20 4f 55 54 3a 20 45 6e 64 20 6f     /* OUT: End o
6330: 66 20 70 61 72 73 65 64 20 73 74 72 69 6e 67 20  f parsed string 
6340: 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a  */.){.  int rc;.
6350: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 50 72    rc = sqlite3Pr
6360: 65 70 61 72 65 31 36 28 64 62 2c 7a 53 71 6c 2c  epare16(db,zSql,
6370: 6e 42 79 74 65 73 2c 30 2c 70 70 53 74 6d 74 2c  nBytes,0,ppStmt,
6380: 70 7a 54 61 69 6c 29 3b 0a 20 20 61 73 73 65 72  pzTail);.  asser
6390: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
63a0: 20 7c 7c 20 70 70 53 74 6d 74 3d 3d 30 20 7c 7c   || ppStmt==0 ||
63b0: 20 2a 70 70 53 74 6d 74 3d 3d 30 20 29 3b 20 20   *ppStmt==0 );  
63c0: 2f 2a 20 56 45 52 49 46 59 3a 20 46 31 33 30 32  /* VERIFY: F1302
63d0: 31 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 72 63  1 */.  return rc
63e0: 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  ;.}.int sqlite3_
63f0: 70 72 65 70 61 72 65 31 36 5f 76 32 28 0a 20 20  prepare16_v2(.  
6400: 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20  sqlite3 *db,    
6410: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
6420: 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 2a 2f  abase handle. */
6430: 20 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a   .  const void *
6440: 7a 53 71 6c 2c 20 20 20 20 20 20 20 20 20 2f 2a  zSql,         /*
6450: 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 53   UTF-8 encoded S
6460: 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20 2a 2f  QL statement. */
6470: 0a 20 20 69 6e 74 20 6e 42 79 74 65 73 2c 20 20  .  int nBytes,  
6480: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
6490: 4c 65 6e 67 74 68 20 6f 66 20 7a 53 71 6c 20 69  Length of zSql i
64a0: 6e 20 62 79 74 65 73 2e 20 2a 2f 0a 20 20 73 71  n bytes. */.  sq
64b0: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2a 70 70 53  lite3_stmt **ppS
64c0: 74 6d 74 2c 20 20 20 20 2f 2a 20 4f 55 54 3a 20  tmt,    /* OUT: 
64d0: 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  A pointer to the
64e0: 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
64f0: 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 76  ent */.  const v
6500: 6f 69 64 20 2a 2a 70 7a 54 61 69 6c 20 20 20 20  oid **pzTail    
6510: 20 20 20 2f 2a 20 4f 55 54 3a 20 45 6e 64 20 6f     /* OUT: End o
6520: 66 20 70 61 72 73 65 64 20 73 74 72 69 6e 67 20  f parsed string 
6530: 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a  */.){.  int rc;.
6540: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 50 72    rc = sqlite3Pr
6550: 65 70 61 72 65 31 36 28 64 62 2c 7a 53 71 6c 2c  epare16(db,zSql,
6560: 6e 42 79 74 65 73 2c 31 2c 70 70 53 74 6d 74 2c  nBytes,1,ppStmt,
6570: 70 7a 54 61 69 6c 29 3b 0a 20 20 61 73 73 65 72  pzTail);.  asser
6580: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
6590: 20 7c 7c 20 70 70 53 74 6d 74 3d 3d 30 20 7c 7c   || ppStmt==0 ||
65a0: 20 2a 70 70 53 74 6d 74 3d 3d 30 20 29 3b 20 20   *ppStmt==0 );  
65b0: 2f 2a 20 56 45 52 49 46 59 3a 20 46 31 33 30 32  /* VERIFY: F1302
65c0: 31 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 72 63  1 */.  return rc
65d0: 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53  ;.}..#endif /* S
65e0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
65f0: 20 2a 2f 0a                                       */.