/ Hex Artifact Content
Login

Artifact 706efe9fb08b2f01c14c8077dce8ab8450c47cfb:


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 31 39 20 32 30 30 39 2f 30 36 2f  v 1.119 2009/06/
0230: 30 31 20 31 38 3a 31 38 3a 32 31 20 64 72 68 20  01 18:18:21 drh 
0240: 45 78 70 20 24 0a 2a 2f 0a 23 69 6e 63 6c 75 64  Exp $.*/.#includ
0250: 65 20 22 73 71 6c 69 74 65 49 6e 74 2e 68 22 0a  e "sqliteInt.h".
0260: 0a 2f 2a 0a 2a 2a 20 46 69 6c 6c 20 74 68 65 20  ./*.** Fill the 
0270: 49 6e 69 74 44 61 74 61 20 73 74 72 75 63 74 75  InitData structu
0280: 72 65 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72  re with an error
0290: 20 6d 65 73 73 61 67 65 20 74 68 61 74 20 69 6e   message that in
02a0: 64 69 63 61 74 65 73 0a 2a 2a 20 74 68 61 74 20  dicates.** that 
02b0: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
02c0: 63 6f 72 72 75 70 74 2e 0a 2a 2f 0a 73 74 61 74  corrupt..*/.stat
02d0: 69 63 20 76 6f 69 64 20 63 6f 72 72 75 70 74 53  ic void corruptS
02e0: 63 68 65 6d 61 28 0a 20 20 49 6e 69 74 44 61 74  chema(.  InitDat
02f0: 61 20 2a 70 44 61 74 61 2c 20 20 20 20 20 2f 2a  a *pData,     /*
0300: 20 49 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   Initialization 
0310: 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e  context */.  con
0320: 73 74 20 63 68 61 72 20 2a 7a 4f 62 6a 2c 20 20  st char *zObj,  
0330: 20 20 2f 2a 20 4f 62 6a 65 63 74 20 62 65 69 6e    /* Object bein
0340: 67 20 70 61 72 73 65 64 20 61 74 20 74 68 65 20  g parsed at the 
0350: 70 6f 69 6e 74 20 6f 66 20 65 72 72 6f 72 20 2a  point of error *
0360: 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
0370: 7a 45 78 74 72 61 20 20 20 2f 2a 20 45 72 72 6f  zExtra   /* Erro
0380: 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f  r information */
0390: 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  .){.  sqlite3 *d
03a0: 62 20 3d 20 70 44 61 74 61 2d 3e 64 62 3b 0a 20  b = pData->db;. 
03b0: 20 69 66 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63   if( !db->malloc
03c0: 46 61 69 6c 65 64 20 26 26 20 28 64 62 2d 3e 66  Failed && (db->f
03d0: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 52 65  lags & SQLITE_Re
03e0: 63 6f 76 65 72 79 4d 6f 64 65 29 3d 3d 30 20 29  coveryMode)==0 )
03f0: 7b 0a 20 20 20 20 69 66 28 20 7a 4f 62 6a 3d 3d  {.    if( zObj==
0400: 30 20 29 20 7a 4f 62 6a 20 3d 20 22 3f 22 3b 0a  0 ) zObj = "?";.
0410: 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
0420: 72 69 6e 67 28 70 44 61 74 61 2d 3e 70 7a 45 72  ring(pData->pzEr
0430: 72 4d 73 67 2c 20 70 44 61 74 61 2d 3e 64 62 2c  rMsg, pData->db,
0440: 0a 20 20 20 20 20 20 20 22 6d 61 6c 66 6f 72 6d  .       "malform
0450: 65 64 20 64 61 74 61 62 61 73 65 20 73 63 68 65  ed database sche
0460: 6d 61 20 28 25 73 29 22 2c 20 7a 4f 62 6a 29 3b  ma (%s)", zObj);
0470: 0a 20 20 20 20 69 66 28 20 7a 45 78 74 72 61 20  .    if( zExtra 
0480: 26 26 20 7a 45 78 74 72 61 5b 30 5d 20 29 7b 0a  && zExtra[0] ){.
0490: 20 20 20 20 20 20 2a 70 44 61 74 61 2d 3e 70 7a        *pData->pz
04a0: 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33  ErrMsg = sqlite3
04b0: 4d 41 70 70 65 6e 64 66 28 70 44 61 74 61 2d 3e  MAppendf(pData->
04c0: 64 62 2c 20 2a 70 44 61 74 61 2d 3e 70 7a 45 72  db, *pData->pzEr
04d0: 72 4d 73 67 2c 20 22 25 73 20 2d 20 25 73 22 2c  rMsg, "%s - %s",
04e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 20 20 2a 70 44 61 74 61 2d 3e 70 7a 45 72 72     *pData->pzErr
0510: 4d 73 67 2c 20 7a 45 78 74 72 61 29 3b 0a 20 20  Msg, zExtra);.  
0520: 20 20 7d 0a 20 20 7d 0a 20 20 70 44 61 74 61 2d    }.  }.  pData-
0530: 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52  >rc = SQLITE_COR
0540: 52 55 50 54 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  RUPT;.}../*.** T
0550: 68 69 73 20 69 73 20 74 68 65 20 63 61 6c 6c 62  his is the callb
0560: 61 63 6b 20 72 6f 75 74 69 6e 65 20 66 6f 72 20  ack routine for 
0570: 74 68 65 20 63 6f 64 65 20 74 68 61 74 20 69 6e  the code that in
0580: 69 74 69 61 6c 69 7a 65 73 20 74 68 65 0a 2a 2a  itializes the.**
0590: 20 64 61 74 61 62 61 73 65 2e 20 20 53 65 65 20   database.  See 
05a0: 73 71 6c 69 74 65 33 49 6e 69 74 28 29 20 62 65  sqlite3Init() be
05b0: 6c 6f 77 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  low for addition
05c0: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
05d0: 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  ** This routine 
05e0: 69 73 20 61 6c 73 6f 20 63 61 6c 6c 65 64 20 66  is also called f
05f0: 72 6f 6d 20 74 68 65 20 4f 50 5f 50 61 72 73 65  rom the OP_Parse
0600: 53 63 68 65 6d 61 20 6f 70 63 6f 64 65 20 6f 66  Schema opcode of
0610: 20 74 68 65 20 56 44 42 45 2e 0a 2a 2a 0a 2a 2a   the VDBE..**.**
0620: 20 45 61 63 68 20 63 61 6c 6c 62 61 63 6b 20 63   Each callback c
0630: 6f 6e 74 61 69 6e 73 20 74 68 65 20 66 6f 6c 6c  ontains the foll
0640: 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f  owing informatio
0650: 6e 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 72 67  n:.**.**     arg
0660: 76 5b 30 5d 20 3d 20 6e 61 6d 65 20 6f 66 20 74  v[0] = name of t
0670: 68 69 6e 67 20 62 65 69 6e 67 20 63 72 65 61 74  hing being creat
0680: 65 64 0a 2a 2a 20 20 20 20 20 61 72 67 76 5b 31  ed.**     argv[1
0690: 5d 20 3d 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  ] = root page nu
06a0: 6d 62 65 72 20 66 6f 72 20 74 61 62 6c 65 20 6f  mber for table o
06b0: 72 20 69 6e 64 65 78 2e 20 30 20 66 6f 72 20 74  r index. 0 for t
06c0: 72 69 67 67 65 72 20 6f 72 20 76 69 65 77 2e 0a  rigger or view..
06d0: 2a 2a 20 20 20 20 20 61 72 67 76 5b 32 5d 20 3d  **     argv[2] =
06e0: 20 53 51 4c 20 74 65 78 74 20 66 6f 72 20 74 68   SQL text for th
06f0: 65 20 43 52 45 41 54 45 20 73 74 61 74 65 6d 65  e CREATE stateme
0700: 6e 74 2e 0a 2a 2a 0a 2a 2f 0a 69 6e 74 20 73 71  nt..**.*/.int sq
0710: 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
0720: 6b 28 76 6f 69 64 20 2a 70 49 6e 69 74 2c 20 69  k(void *pInit, i
0730: 6e 74 20 61 72 67 63 2c 20 63 68 61 72 20 2a 2a  nt argc, char **
0740: 61 72 67 76 2c 20 63 68 61 72 20 2a 2a 4e 6f 74  argv, char **Not
0750: 55 73 65 64 29 7b 0a 20 20 49 6e 69 74 44 61 74  Used){.  InitDat
0760: 61 20 2a 70 44 61 74 61 20 3d 20 28 49 6e 69 74  a *pData = (Init
0770: 44 61 74 61 2a 29 70 49 6e 69 74 3b 0a 20 20 73  Data*)pInit;.  s
0780: 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 44 61  qlite3 *db = pDa
0790: 74 61 2d 3e 64 62 3b 0a 20 20 69 6e 74 20 69 44  ta->db;.  int iD
07a0: 62 20 3d 20 70 44 61 74 61 2d 3e 69 44 62 3b 0a  b = pData->iDb;.
07b0: 0a 20 20 61 73 73 65 72 74 28 20 61 72 67 63 3d  .  assert( argc=
07c0: 3d 33 20 29 3b 0a 20 20 55 4e 55 53 45 44 5f 50  =3 );.  UNUSED_P
07d0: 41 52 41 4d 45 54 45 52 32 28 4e 6f 74 55 73 65  ARAMETER2(NotUse
07e0: 64 2c 20 61 72 67 63 29 3b 0a 20 20 61 73 73 65  d, argc);.  asse
07f0: 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  rt( sqlite3_mute
0800: 78 5f 68 65 6c 64 28 64 62 2d 3e 6d 75 74 65 78  x_held(db->mutex
0810: 29 20 29 3b 0a 20 20 44 62 43 6c 65 61 72 50 72  ) );.  DbClearPr
0820: 6f 70 65 72 74 79 28 64 62 2c 20 69 44 62 2c 20  operty(db, iDb, 
0830: 44 42 5f 45 6d 70 74 79 29 3b 0a 20 20 69 66 28  DB_Empty);.  if(
0840: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
0850: 64 20 29 7b 0a 20 20 20 20 63 6f 72 72 75 70 74  d ){.    corrupt
0860: 53 63 68 65 6d 61 28 70 44 61 74 61 2c 20 61 72  Schema(pData, ar
0870: 67 76 5b 30 5d 2c 20 30 29 3b 0a 20 20 20 20 72  gv[0], 0);.    r
0880: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d  eturn SQLITE_NOM
0890: 45 4d 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72  EM;.  }..  asser
08a0: 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62  t( iDb>=0 && iDb
08b0: 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 69 66  <db->nDb );.  if
08c0: 28 20 61 72 67 76 3d 3d 30 20 29 20 72 65 74 75  ( argv==0 ) retu
08d0: 72 6e 20 30 3b 20 20 20 2f 2a 20 4d 69 67 68 74  rn 0;   /* Might
08e0: 20 68 61 70 70 65 6e 20 69 66 20 45 4d 50 54 59   happen if EMPTY
08f0: 5f 52 45 53 55 4c 54 5f 43 41 4c 4c 42 41 43 4b  _RESULT_CALLBACK
0900: 53 20 61 72 65 20 6f 6e 20 2a 2f 0a 20 20 69 66  S are on */.  if
0910: 28 20 61 72 67 76 5b 31 5d 3d 3d 30 20 29 7b 0a  ( argv[1]==0 ){.
0920: 20 20 20 20 63 6f 72 72 75 70 74 53 63 68 65 6d      corruptSchem
0930: 61 28 70 44 61 74 61 2c 20 61 72 67 76 5b 30 5d  a(pData, argv[0]
0940: 2c 20 30 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  , 0);.  }else if
0950: 28 20 61 72 67 76 5b 32 5d 20 26 26 20 61 72 67  ( argv[2] && arg
0960: 76 5b 32 5d 5b 30 5d 20 29 7b 0a 20 20 20 20 2f  v[2][0] ){.    /
0970: 2a 20 43 61 6c 6c 20 74 68 65 20 70 61 72 73 65  * Call the parse
0980: 72 20 74 6f 20 70 72 6f 63 65 73 73 20 61 20 43  r to process a C
0990: 52 45 41 54 45 20 54 41 42 4c 45 2c 20 49 4e 44  REATE TABLE, IND
09a0: 45 58 20 6f 72 20 56 49 45 57 2e 0a 20 20 20 20  EX or VIEW..    
09b0: 2a 2a 20 42 75 74 20 62 65 63 61 75 73 65 20 64  ** But because d
09c0: 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 69 73 20  b->init.busy is 
09d0: 73 65 74 20 74 6f 20 31 2c 20 6e 6f 20 56 44 42  set to 1, no VDB
09e0: 45 20 63 6f 64 65 20 69 73 20 67 65 6e 65 72 61  E code is genera
09f0: 74 65 64 0a 20 20 20 20 2a 2a 20 6f 72 20 65 78  ted.    ** or ex
0a00: 65 63 75 74 65 64 2e 20 20 41 6c 6c 20 74 68 65  ecuted.  All the
0a10: 20 70 61 72 73 65 72 20 64 6f 65 73 20 69 73 20   parser does is 
0a20: 62 75 69 6c 64 20 74 68 65 20 69 6e 74 65 72 6e  build the intern
0a30: 61 6c 20 64 61 74 61 0a 20 20 20 20 2a 2a 20 73  al data.    ** s
0a40: 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64  tructures that d
0a50: 65 73 63 72 69 62 65 20 74 68 65 20 74 61 62 6c  escribe the tabl
0a60: 65 2c 20 69 6e 64 65 78 2c 20 6f 72 20 76 69 65  e, index, or vie
0a70: 77 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 63 68  w..    */.    ch
0a80: 61 72 20 2a 7a 45 72 72 3b 0a 20 20 20 20 69 6e  ar *zErr;.    in
0a90: 74 20 72 63 3b 0a 20 20 20 20 61 73 73 65 72 74  t rc;.    assert
0aa0: 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20  ( db->init.busy 
0ab0: 29 3b 0a 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e  );.    db->init.
0ac0: 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20 20 64  iDb = iDb;.    d
0ad0: 62 2d 3e 69 6e 69 74 2e 6e 65 77 54 6e 75 6d 20  b->init.newTnum 
0ae0: 3d 20 61 74 6f 69 28 61 72 67 76 5b 31 5d 29 3b  = atoi(argv[1]);
0af0: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
0b00: 33 5f 65 78 65 63 28 64 62 2c 20 61 72 67 76 5b  3_exec(db, argv[
0b10: 32 5d 2c 20 30 2c 20 30 2c 20 26 7a 45 72 72 29  2], 0, 0, &zErr)
0b20: 3b 0a 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 69  ;.    db->init.i
0b30: 44 62 20 3d 20 30 3b 0a 20 20 20 20 61 73 73 65  Db = 0;.    asse
0b40: 72 74 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  rt( rc!=SQLITE_O
0b50: 4b 20 7c 7c 20 7a 45 72 72 3d 3d 30 20 29 3b 0a  K || zErr==0 );.
0b60: 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f      if( SQLITE_O
0b70: 4b 21 3d 72 63 20 29 7b 0a 20 20 20 20 20 20 70  K!=rc ){.      p
0b80: 44 61 74 61 2d 3e 72 63 20 3d 20 72 63 3b 0a 20  Data->rc = rc;. 
0b90: 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
0ba0: 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20  ITE_NOMEM ){.   
0bb0: 20 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46       db->mallocF
0bc0: 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20 20  ailed = 1;.     
0bd0: 20 7d 65 6c 73 65 20 69 66 28 20 72 63 21 3d 53   }else if( rc!=S
0be0: 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 20  QLITE_INTERRUPT 
0bf0: 26 26 20 28 72 63 26 30 78 66 66 29 21 3d 53 51  && (rc&0xff)!=SQ
0c00: 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20  LITE_LOCKED ){. 
0c10: 20 20 20 20 20 20 20 63 6f 72 72 75 70 74 53 63         corruptSc
0c20: 68 65 6d 61 28 70 44 61 74 61 2c 20 61 72 67 76  hema(pData, argv
0c30: 5b 30 5d 2c 20 7a 45 72 72 29 3b 0a 20 20 20 20  [0], zErr);.    
0c40: 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
0c50: 33 44 62 46 72 65 65 28 64 62 2c 20 7a 45 72 72  3DbFree(db, zErr
0c60: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  );.    }.  }else
0c70: 20 69 66 28 20 61 72 67 76 5b 30 5d 3d 3d 30 20   if( argv[0]==0 
0c80: 29 7b 0a 20 20 20 20 63 6f 72 72 75 70 74 53 63  ){.    corruptSc
0c90: 68 65 6d 61 28 70 44 61 74 61 2c 20 30 2c 20 30  hema(pData, 0, 0
0ca0: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
0cb0: 2f 2a 20 49 66 20 74 68 65 20 53 51 4c 20 63 6f  /* If the SQL co
0cc0: 6c 75 6d 6e 20 69 73 20 62 6c 61 6e 6b 20 69 74  lumn is blank it
0cd0: 20 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20 61   means this is a
0ce0: 6e 20 69 6e 64 65 78 20 74 68 61 74 0a 20 20 20  n index that.   
0cf0: 20 2a 2a 20 77 61 73 20 63 72 65 61 74 65 64 20   ** was created 
0d00: 74 6f 20 62 65 20 74 68 65 20 50 52 49 4d 41 52  to be the PRIMAR
0d10: 59 20 4b 45 59 20 6f 72 20 74 6f 20 66 75 6c 66  Y KEY or to fulf
0d20: 69 6c 6c 20 61 20 55 4e 49 51 55 45 0a 20 20 20  ill a UNIQUE.   
0d30: 20 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20 66   ** constraint f
0d40: 6f 72 20 61 20 43 52 45 41 54 45 20 54 41 42 4c  or a CREATE TABL
0d50: 45 2e 20 20 54 68 65 20 69 6e 64 65 78 20 73 68  E.  The index sh
0d60: 6f 75 6c 64 20 68 61 76 65 20 61 6c 72 65 61 64  ould have alread
0d70: 79 0a 20 20 20 20 2a 2a 20 62 65 65 6e 20 63 72  y.    ** been cr
0d80: 65 61 74 65 64 20 77 68 65 6e 20 77 65 20 70 72  eated when we pr
0d90: 6f 63 65 73 73 65 64 20 74 68 65 20 43 52 45 41  ocessed the CREA
0da0: 54 45 20 54 41 42 4c 45 2e 20 20 41 6c 6c 20 77  TE TABLE.  All w
0db0: 65 20 68 61 76 65 0a 20 20 20 20 2a 2a 20 74 6f  e have.    ** to
0dc0: 20 64 6f 20 68 65 72 65 20 69 73 20 72 65 63 6f   do here is reco
0dd0: 72 64 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  rd the root page
0de0: 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74   number for that
0df0: 20 69 6e 64 65 78 2e 0a 20 20 20 20 2a 2f 0a 20   index..    */. 
0e00: 20 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78     Index *pIndex
0e10: 3b 0a 20 20 20 20 70 49 6e 64 65 78 20 3d 20 73  ;.    pIndex = s
0e20: 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28  qlite3FindIndex(
0e30: 64 62 2c 20 61 72 67 76 5b 30 5d 2c 20 64 62 2d  db, argv[0], db-
0e40: 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65 29  >aDb[iDb].zName)
0e50: 3b 0a 20 20 20 20 69 66 28 20 70 49 6e 64 65 78  ;.    if( pIndex
0e60: 3d 3d 30 20 7c 7c 20 70 49 6e 64 65 78 2d 3e 74  ==0 || pIndex->t
0e70: 6e 75 6d 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  num!=0 ){.      
0e80: 2f 2a 20 54 68 69 73 20 63 61 6e 20 6f 63 63 75  /* This can occu
0e90: 72 20 69 66 20 74 68 65 72 65 20 65 78 69 73 74  r if there exist
0ea0: 73 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20 61 20  s an index on a 
0eb0: 54 45 4d 50 20 74 61 62 6c 65 20 77 68 69 63 68  TEMP table which
0ec0: 0a 20 20 20 20 20 20 2a 2a 20 68 61 73 20 74 68  .      ** has th
0ed0: 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 73 20 61  e same name as a
0ee0: 6e 6f 74 68 65 72 20 69 6e 64 65 78 20 6f 6e 20  nother index on 
0ef0: 61 20 70 65 72 6d 61 6e 65 6e 74 20 69 6e 64 65  a permanent inde
0f00: 78 2e 20 20 53 69 6e 63 65 0a 20 20 20 20 20 20  x.  Since.      
0f10: 2a 2a 20 74 68 65 20 70 65 72 6d 61 6e 65 6e 74  ** the permanent
0f20: 20 74 61 62 6c 65 20 69 73 20 68 69 64 64 65 6e   table is hidden
0f30: 20 62 79 20 74 68 65 20 54 45 4d 50 20 74 61 62   by the TEMP tab
0f40: 6c 65 2c 20 77 65 20 63 61 6e 20 61 6c 73 6f 0a  le, we can also.
0f50: 20 20 20 20 20 20 2a 2a 20 73 61 66 65 6c 79 20        ** safely 
0f60: 69 67 6e 6f 72 65 20 74 68 65 20 69 6e 64 65 78  ignore the index
0f70: 20 6f 6e 20 74 68 65 20 70 65 72 6d 61 6e 65 6e   on the permanen
0f80: 74 20 74 61 62 6c 65 2e 0a 20 20 20 20 20 20 2a  t table..      *
0f90: 2f 0a 20 20 20 20 20 20 2f 2a 20 44 6f 20 4e 6f  /.      /* Do No
0fa0: 74 68 69 6e 67 20 2a 2f 3b 0a 20 20 20 20 7d 65  thing */;.    }e
0fb0: 6c 73 65 7b 0a 20 20 20 20 20 20 70 49 6e 64 65  lse{.      pInde
0fc0: 78 2d 3e 74 6e 75 6d 20 3d 20 61 74 6f 69 28 61  x->tnum = atoi(a
0fd0: 72 67 76 5b 31 5d 29 3b 0a 20 20 20 20 7d 0a 20  rgv[1]);.    }. 
0fe0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d   }.  return 0;.}
0ff0: 0a 0a 2f 2a 0a 2a 2a 20 41 74 74 65 6d 70 74 20  ../*.** Attempt 
1000: 74 6f 20 72 65 61 64 20 74 68 65 20 64 61 74 61  to read the data
1010: 62 61 73 65 20 73 63 68 65 6d 61 20 61 6e 64 20  base schema and 
1020: 69 6e 69 74 69 61 6c 69 7a 65 20 69 6e 74 65 72  initialize inter
1030: 6e 61 6c 0a 2a 2a 20 64 61 74 61 20 73 74 72 75  nal.** data stru
1040: 63 74 75 72 65 73 20 66 6f 72 20 61 20 73 69 6e  ctures for a sin
1050: 67 6c 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  gle database fil
1060: 65 2e 20 20 54 68 65 20 69 6e 64 65 78 20 6f 66  e.  The index of
1070: 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65   the.** database
1080: 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62   file is given b
1090: 79 20 69 44 62 2e 20 20 69 44 62 3d 3d 30 20 69  y iDb.  iDb==0 i
10a0: 73 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 6d  s used for the m
10b0: 61 69 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e  ain.** database.
10c0: 20 20 69 44 62 3d 3d 31 20 73 68 6f 75 6c 64 20    iDb==1 should 
10d0: 6e 65 76 65 72 20 62 65 20 75 73 65 64 2e 20 20  never be used.  
10e0: 69 44 62 3e 3d 32 20 69 73 20 75 73 65 64 20 66  iDb>=2 is used f
10f0: 6f 72 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20  or.** auxiliary 
1100: 64 61 74 61 62 61 73 65 73 2e 20 20 52 65 74 75  databases.  Retu
1110: 72 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51  rn one of the SQ
1120: 4c 49 54 45 5f 20 65 72 72 6f 72 20 63 6f 64 65  LITE_ error code
1130: 73 20 74 6f 0a 2a 2a 20 69 6e 64 69 63 61 74 65  s to.** indicate
1140: 20 73 75 63 63 65 73 73 20 6f 72 20 66 61 69 6c   success or fail
1150: 75 72 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ure..*/.static i
1160: 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 4f 6e  nt sqlite3InitOn
1170: 65 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69  e(sqlite3 *db, i
1180: 6e 74 20 69 44 62 2c 20 63 68 61 72 20 2a 2a 70  nt iDb, char **p
1190: 7a 45 72 72 4d 73 67 29 7b 0a 20 20 69 6e 74 20  zErrMsg){.  int 
11a0: 72 63 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 42  rc;.  int i;.  B
11b0: 74 43 75 72 73 6f 72 20 2a 63 75 72 4d 61 69 6e  tCursor *curMain
11c0: 3b 0a 20 20 69 6e 74 20 73 69 7a 65 3b 0a 20 20  ;.  int size;.  
11d0: 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 44  Table *pTab;.  D
11e0: 62 20 2a 70 44 62 3b 0a 20 20 63 68 61 72 20 63  b *pDb;.  char c
11f0: 6f 6e 73 74 20 2a 61 7a 41 72 67 5b 34 5d 3b 0a  onst *azArg[4];.
1200: 20 20 69 6e 74 20 6d 65 74 61 5b 31 30 5d 3b 0a    int meta[10];.
1210: 20 20 49 6e 69 74 44 61 74 61 20 69 6e 69 74 44    InitData initD
1220: 61 74 61 3b 0a 20 20 63 68 61 72 20 63 6f 6e 73  ata;.  char cons
1230: 74 20 2a 7a 4d 61 73 74 65 72 53 63 68 65 6d 61  t *zMasterSchema
1240: 3b 0a 20 20 63 68 61 72 20 63 6f 6e 73 74 20 2a  ;.  char const *
1250: 7a 4d 61 73 74 65 72 4e 61 6d 65 20 3d 20 53 43  zMasterName = SC
1260: 48 45 4d 41 5f 54 41 42 4c 45 28 69 44 62 29 3b  HEMA_TABLE(iDb);
1270: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 54 68 65 20  ..  /*.  ** The 
1280: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
1290: 74 61 62 6c 65 20 68 61 73 20 61 20 73 74 72 75  table has a stru
12a0: 63 74 75 72 65 20 6c 69 6b 65 20 74 68 69 73 0a  cture like this.
12b0: 20 20 2a 2f 0a 20 20 73 74 61 74 69 63 20 63 6f    */.  static co
12c0: 6e 73 74 20 63 68 61 72 20 6d 61 73 74 65 72 5f  nst char master_
12d0: 73 63 68 65 6d 61 5b 5d 20 3d 20 0a 20 20 20 20  schema[] = .    
12e0: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 73   "CREATE TABLE s
12f0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 28 5c 6e 22  qlite_master(\n"
1300: 0a 20 20 20 20 20 22 20 20 74 79 70 65 20 74 65  .     "  type te
1310: 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20 6e  xt,\n".     "  n
1320: 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20 20  ame text,\n".   
1330: 20 20 22 20 20 74 62 6c 5f 6e 61 6d 65 20 74 65    "  tbl_name te
1340: 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20 72  xt,\n".     "  r
1350: 6f 6f 74 70 61 67 65 20 69 6e 74 65 67 65 72 2c  ootpage integer,
1360: 5c 6e 22 0a 20 20 20 20 20 22 20 20 73 71 6c 20  \n".     "  sql 
1370: 74 65 78 74 5c 6e 22 0a 20 20 20 20 20 22 29 22  text\n".     ")"
1380: 0a 20 20 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  .  ;.#ifndef SQL
1390: 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a  ITE_OMIT_TEMPDB.
13a0: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63    static const c
13b0: 68 61 72 20 74 65 6d 70 5f 6d 61 73 74 65 72 5f  har temp_master_
13c0: 73 63 68 65 6d 61 5b 5d 20 3d 20 0a 20 20 20 20  schema[] = .    
13d0: 20 22 43 52 45 41 54 45 20 54 45 4d 50 20 54 41   "CREATE TEMP TA
13e0: 42 4c 45 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  BLE sqlite_temp_
13f0: 6d 61 73 74 65 72 28 5c 6e 22 0a 20 20 20 20 20  master(\n".     
1400: 22 20 20 74 79 70 65 20 74 65 78 74 2c 5c 6e 22  "  type text,\n"
1410: 0a 20 20 20 20 20 22 20 20 6e 61 6d 65 20 74 65  .     "  name te
1420: 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20 74  xt,\n".     "  t
1430: 62 6c 5f 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22  bl_name text,\n"
1440: 0a 20 20 20 20 20 22 20 20 72 6f 6f 74 70 61 67  .     "  rootpag
1450: 65 20 69 6e 74 65 67 65 72 2c 5c 6e 22 0a 20 20  e integer,\n".  
1460: 20 20 20 22 20 20 73 71 6c 20 74 65 78 74 5c 6e     "  sql text\n
1470: 22 0a 20 20 20 20 20 22 29 22 0a 20 20 3b 0a 23  ".     ")".  ;.#
1480: 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 74  else.  #define t
1490: 65 6d 70 5f 6d 61 73 74 65 72 5f 73 63 68 65 6d  emp_master_schem
14a0: 61 20 30 0a 23 65 6e 64 69 66 0a 0a 20 20 61 73  a 0.#endif..  as
14b0: 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20  sert( iDb>=0 && 
14c0: 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  iDb<db->nDb );. 
14d0: 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62   assert( db->aDb
14e0: 5b 69 44 62 5d 2e 70 53 63 68 65 6d 61 20 29 3b  [iDb].pSchema );
14f0: 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
1500: 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 64 62  e3_mutex_held(db
1510: 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 61 73  ->mutex) );.  as
1520: 73 65 72 74 28 20 69 44 62 3d 3d 31 20 7c 7c 20  sert( iDb==1 || 
1530: 73 71 6c 69 74 65 33 42 74 72 65 65 48 6f 6c 64  sqlite3BtreeHold
1540: 73 4d 75 74 65 78 28 64 62 2d 3e 61 44 62 5b 69  sMutex(db->aDb[i
1550: 44 62 5d 2e 70 42 74 29 20 29 3b 0a 0a 20 20 2f  Db].pBt) );..  /
1560: 2a 20 7a 4d 61 73 74 65 72 53 63 68 65 6d 61 20  * zMasterSchema 
1570: 61 6e 64 20 7a 49 6e 69 74 53 63 72 69 70 74 20  and zInitScript 
1580: 61 72 65 20 73 65 74 20 74 6f 20 70 6f 69 6e 74  are set to point
1590: 20 61 74 20 74 68 65 20 6d 61 73 74 65 72 20 73   at the master s
15a0: 63 68 65 6d 61 0a 20 20 2a 2a 20 61 6e 64 20 69  chema.  ** and i
15b0: 6e 69 74 69 61 6c 69 73 61 74 69 6f 6e 20 73 63  nitialisation sc
15c0: 72 69 70 74 20 61 70 70 72 6f 70 72 69 61 74 65  ript appropriate
15d0: 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73   for the databas
15e0: 65 20 62 65 69 6e 67 0a 20 20 2a 2a 20 69 6e 69  e being.  ** ini
15f0: 74 69 61 6c 69 73 65 64 2e 20 7a 4d 61 73 74 65  tialised. zMaste
1600: 72 4e 61 6d 65 20 69 73 20 74 68 65 20 6e 61 6d  rName is the nam
1610: 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20  e of the master 
1620: 74 61 62 6c 65 2e 0a 20 20 2a 2f 0a 20 20 69 66  table..  */.  if
1630: 28 20 21 4f 4d 49 54 5f 54 45 4d 50 44 42 20 26  ( !OMIT_TEMPDB &
1640: 26 20 69 44 62 3d 3d 31 20 29 7b 0a 20 20 20 20  & iDb==1 ){.    
1650: 7a 4d 61 73 74 65 72 53 63 68 65 6d 61 20 3d 20  zMasterSchema = 
1660: 74 65 6d 70 5f 6d 61 73 74 65 72 5f 73 63 68 65  temp_master_sche
1670: 6d 61 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ma;.  }else{.   
1680: 20 7a 4d 61 73 74 65 72 53 63 68 65 6d 61 20 3d   zMasterSchema =
1690: 20 6d 61 73 74 65 72 5f 73 63 68 65 6d 61 3b 0a   master_schema;.
16a0: 20 20 7d 0a 20 20 7a 4d 61 73 74 65 72 4e 61 6d    }.  zMasterNam
16b0: 65 20 3d 20 53 43 48 45 4d 41 5f 54 41 42 4c 45  e = SCHEMA_TABLE
16c0: 28 69 44 62 29 3b 0a 0a 20 20 2f 2a 20 43 6f 6e  (iDb);..  /* Con
16d0: 73 74 72 75 63 74 20 74 68 65 20 73 63 68 65 6d  struct the schem
16e0: 61 20 74 61 62 6c 65 73 2e 20 20 2a 2f 0a 20 20  a tables.  */.  
16f0: 61 7a 41 72 67 5b 30 5d 20 3d 20 7a 4d 61 73 74  azArg[0] = zMast
1700: 65 72 4e 61 6d 65 3b 0a 20 20 61 7a 41 72 67 5b  erName;.  azArg[
1710: 31 5d 20 3d 20 22 31 22 3b 0a 20 20 61 7a 41 72  1] = "1";.  azAr
1720: 67 5b 32 5d 20 3d 20 7a 4d 61 73 74 65 72 53 63  g[2] = zMasterSc
1730: 68 65 6d 61 3b 0a 20 20 61 7a 41 72 67 5b 33 5d  hema;.  azArg[3]
1740: 20 3d 20 30 3b 0a 20 20 69 6e 69 74 44 61 74 61   = 0;.  initData
1750: 2e 64 62 20 3d 20 64 62 3b 0a 20 20 69 6e 69 74  .db = db;.  init
1760: 44 61 74 61 2e 69 44 62 20 3d 20 69 44 62 3b 0a  Data.iDb = iDb;.
1770: 20 20 69 6e 69 74 44 61 74 61 2e 72 63 20 3d 20    initData.rc = 
1780: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 69 6e 69  SQLITE_OK;.  ini
1790: 74 44 61 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d  tData.pzErrMsg =
17a0: 20 70 7a 45 72 72 4d 73 67 3b 0a 20 20 28 76 6f   pzErrMsg;.  (vo
17b0: 69 64 29 73 71 6c 69 74 65 33 53 61 66 65 74 79  id)sqlite3Safety
17c0: 4f 66 66 28 64 62 29 3b 0a 20 20 73 71 6c 69 74  Off(db);.  sqlit
17d0: 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 26  e3InitCallback(&
17e0: 69 6e 69 74 44 61 74 61 2c 20 33 2c 20 28 63 68  initData, 3, (ch
17f0: 61 72 20 2a 2a 29 61 7a 41 72 67 2c 20 30 29 3b  ar **)azArg, 0);
1800: 0a 20 20 28 76 6f 69 64 29 73 71 6c 69 74 65 33  .  (void)sqlite3
1810: 53 61 66 65 74 79 4f 6e 28 64 62 29 3b 0a 20 20  SafetyOn(db);.  
1820: 69 66 28 20 69 6e 69 74 44 61 74 61 2e 72 63 20  if( initData.rc 
1830: 29 7b 0a 20 20 20 20 72 63 20 3d 20 69 6e 69 74  ){.    rc = init
1840: 44 61 74 61 2e 72 63 3b 0a 20 20 20 20 67 6f 74  Data.rc;.    got
1850: 6f 20 65 72 72 6f 72 5f 6f 75 74 3b 0a 20 20 7d  o error_out;.  }
1860: 0a 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65  .  pTab = sqlite
1870: 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a  3FindTable(db, z
1880: 4d 61 73 74 65 72 4e 61 6d 65 2c 20 64 62 2d 3e  MasterName, db->
1890: 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65 29 3b  aDb[iDb].zName);
18a0: 0a 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20  .  if( pTab ){. 
18b0: 20 20 20 70 54 61 62 2d 3e 74 61 62 46 6c 61 67     pTab->tabFlag
18c0: 73 20 7c 3d 20 54 46 5f 52 65 61 64 6f 6e 6c 79  s |= TF_Readonly
18d0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 72 65 61  ;.  }..  /* Crea
18e0: 74 65 20 61 20 63 75 72 73 6f 72 20 74 6f 20 68  te a cursor to h
18f0: 6f 6c 64 20 74 68 65 20 64 61 74 61 62 61 73 65  old the database
1900: 20 6f 70 65 6e 0a 20 20 2a 2f 0a 20 20 70 44 62   open.  */.  pDb
1910: 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d   = &db->aDb[iDb]
1920: 3b 0a 20 20 69 66 28 20 70 44 62 2d 3e 70 42 74  ;.  if( pDb->pBt
1930: 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 21  ==0 ){.    if( !
1940: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 26 26 20 69  OMIT_TEMPDB && i
1950: 44 62 3d 3d 31 20 29 7b 0a 20 20 20 20 20 20 44  Db==1 ){.      D
1960: 62 53 65 74 50 72 6f 70 65 72 74 79 28 64 62 2c  bSetProperty(db,
1970: 20 31 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61   1, DB_SchemaLoa
1980: 64 65 64 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ded);.    }.    
1990: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
19a0: 3b 0a 20 20 7d 0a 20 20 63 75 72 4d 61 69 6e 20  ;.  }.  curMain 
19b0: 3d 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a  = sqlite3MallocZ
19c0: 65 72 6f 28 73 71 6c 69 74 65 33 42 74 72 65 65  ero(sqlite3Btree
19d0: 43 75 72 73 6f 72 53 69 7a 65 28 29 29 3b 0a 20  CursorSize());. 
19e0: 20 69 66 28 20 21 63 75 72 4d 61 69 6e 20 29 7b   if( !curMain ){
19f0: 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
1a00: 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 67 6f 74 6f  _NOMEM;.    goto
1a10: 20 65 72 72 6f 72 5f 6f 75 74 3b 0a 20 20 7d 0a   error_out;.  }.
1a20: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 45 6e    sqlite3BtreeEn
1a30: 74 65 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20  ter(pDb->pBt);. 
1a40: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1a50: 65 65 43 75 72 73 6f 72 28 70 44 62 2d 3e 70 42  eeCursor(pDb->pB
1a60: 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20  t, MASTER_ROOT, 
1a70: 30 2c 20 30 2c 20 63 75 72 4d 61 69 6e 29 3b 0a  0, 0, curMain);.
1a80: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1a90: 5f 45 4d 50 54 59 20 29 20 72 63 20 3d 20 53 51  _EMPTY ) rc = SQ
1aa0: 4c 49 54 45 5f 4f 4b 3b 0a 20 20 69 66 28 20 72  LITE_OK;.  if( r
1ab0: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
1ac0: 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
1ad0: 72 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20 64  ring(pzErrMsg, d
1ae0: 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  b, "%s", sqlite3
1af0: 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20 20 20  ErrStr(rc));.   
1b00: 20 67 6f 74 6f 20 69 6e 69 74 6f 6e 65 5f 65 72   goto initone_er
1b10: 72 6f 72 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20  ror_out;.  }..  
1b20: 2f 2a 20 47 65 74 20 74 68 65 20 64 61 74 61 62  /* Get the datab
1b30: 61 73 65 20 6d 65 74 61 20 69 6e 66 6f 72 6d 61  ase meta informa
1b40: 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  tion..  **.  ** 
1b50: 4d 65 74 61 20 76 61 6c 75 65 73 20 61 72 65 20  Meta values are 
1b60: 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 20 2a 2a  as follows:.  **
1b70: 20 20 20 20 6d 65 74 61 5b 30 5d 20 20 20 53 63      meta[0]   Sc
1b80: 68 65 6d 61 20 63 6f 6f 6b 69 65 2e 20 20 43 68  hema cookie.  Ch
1b90: 61 6e 67 65 73 20 77 69 74 68 20 65 61 63 68 20  anges with each 
1ba0: 73 63 68 65 6d 61 20 63 68 61 6e 67 65 2e 0a 20  schema change.. 
1bb0: 20 2a 2a 20 20 20 20 6d 65 74 61 5b 31 5d 20 20   **    meta[1]  
1bc0: 20 46 69 6c 65 20 66 6f 72 6d 61 74 20 6f 66 20   File format of 
1bd0: 73 63 68 65 6d 61 20 6c 61 79 65 72 2e 0a 20 20  schema layer..  
1be0: 2a 2a 20 20 20 20 6d 65 74 61 5b 32 5d 20 20 20  **    meta[2]   
1bf0: 53 69 7a 65 20 6f 66 20 74 68 65 20 70 61 67 65  Size of the page
1c00: 20 63 61 63 68 65 2e 0a 20 20 2a 2a 20 20 20 20   cache..  **    
1c10: 6d 65 74 61 5b 33 5d 20 20 20 55 73 65 20 66 72  meta[3]   Use fr
1c20: 65 65 6c 69 73 74 20 69 66 20 30 2e 20 20 41 75  eelist if 0.  Au
1c30: 74 6f 76 61 63 75 75 6d 20 69 66 20 67 72 65 61  tovacuum if grea
1c40: 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2e 0a 20  ter than zero.. 
1c50: 20 2a 2a 20 20 20 20 6d 65 74 61 5b 34 5d 20 20   **    meta[4]  
1c60: 20 44 62 20 74 65 78 74 20 65 6e 63 6f 64 69 6e   Db text encodin
1c70: 67 2e 20 31 3a 55 54 46 2d 38 20 32 3a 55 54 46  g. 1:UTF-8 2:UTF
1c80: 2d 31 36 4c 45 20 33 3a 55 54 46 2d 31 36 42 45  -16LE 3:UTF-16BE
1c90: 0a 20 20 2a 2a 20 20 20 20 6d 65 74 61 5b 35 5d  .  **    meta[5]
1ca0: 20 20 20 54 68 65 20 75 73 65 72 20 63 6f 6f 6b     The user cook
1cb0: 69 65 2e 20 55 73 65 64 20 62 79 20 74 68 65 20  ie. Used by the 
1cc0: 61 70 70 6c 69 63 61 74 69 6f 6e 2e 0a 20 20 2a  application..  *
1cd0: 2a 20 20 20 20 6d 65 74 61 5b 36 5d 20 20 20 49  *    meta[6]   I
1ce0: 6e 63 72 65 6d 65 6e 74 61 6c 2d 76 61 63 75 75  ncremental-vacuu
1cf0: 6d 20 66 6c 61 67 2e 0a 20 20 2a 2a 20 20 20 20  m flag..  **    
1d00: 6d 65 74 61 5b 37 5d 0a 20 20 2a 2a 20 20 20 20  meta[7].  **    
1d10: 6d 65 74 61 5b 38 5d 0a 20 20 2a 2a 20 20 20 20  meta[8].  **    
1d20: 6d 65 74 61 5b 39 5d 0a 20 20 2a 2a 0a 20 20 2a  meta[9].  **.  *
1d30: 2a 20 4e 6f 74 65 3a 20 54 68 65 20 23 64 65 66  * Note: The #def
1d40: 69 6e 65 64 20 53 51 4c 49 54 45 5f 55 54 46 2a  ined SQLITE_UTF*
1d50: 20 73 79 6d 62 6f 6c 73 20 69 6e 20 73 71 6c 69   symbols in sqli
1d60: 74 65 49 6e 74 2e 68 20 63 6f 72 72 65 73 70 6f  teInt.h correspo
1d70: 6e 64 20 74 6f 0a 20 20 2a 2a 20 74 68 65 20 70  nd to.  ** the p
1d80: 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 6f  ossible values o
1d90: 66 20 6d 65 74 61 5b 34 5d 2e 0a 20 20 2a 2f 0a  f meta[4]..  */.
1da0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72    for(i=0; i<Arr
1db0: 61 79 53 69 7a 65 28 6d 65 74 61 29 3b 20 69 2b  aySize(meta); i+
1dc0: 2b 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  +){.    rc = sql
1dd0: 69 74 65 33 42 74 72 65 65 47 65 74 4d 65 74 61  ite3BtreeGetMeta
1de0: 28 70 44 62 2d 3e 70 42 74 2c 20 69 2b 31 2c 20  (pDb->pBt, i+1, 
1df0: 28 75 33 32 20 2a 29 26 6d 65 74 61 5b 69 5d 29  (u32 *)&meta[i])
1e00: 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a  ;.    if( rc ){.
1e10: 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
1e20: 53 74 72 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c  String(pzErrMsg,
1e30: 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69 74   db, "%s", sqlit
1e40: 65 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20  e3ErrStr(rc));. 
1e50: 20 20 20 20 20 67 6f 74 6f 20 69 6e 69 74 6f 6e       goto initon
1e60: 65 5f 65 72 72 6f 72 5f 6f 75 74 3b 0a 20 20 20  e_error_out;.   
1e70: 20 7d 0a 20 20 7d 0a 20 20 70 44 62 2d 3e 70 53   }.  }.  pDb->pS
1e80: 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f  chema->schema_co
1e90: 6f 6b 69 65 20 3d 20 6d 65 74 61 5b 30 5d 3b 0a  okie = meta[0];.
1ea0: 0a 20 20 2f 2a 20 49 66 20 6f 70 65 6e 69 6e 67  .  /* If opening
1eb0: 20 61 20 6e 6f 6e 2d 65 6d 70 74 79 20 64 61 74   a non-empty dat
1ec0: 61 62 61 73 65 2c 20 63 68 65 63 6b 20 74 68 65  abase, check the
1ed0: 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e 20   text encoding. 
1ee0: 46 6f 72 20 74 68 65 0a 20 20 2a 2a 20 6d 61 69  For the.  ** mai
1ef0: 6e 20 64 61 74 61 62 61 73 65 2c 20 73 65 74 20  n database, set 
1f00: 73 71 6c 69 74 65 33 2e 65 6e 63 20 74 6f 20 74  sqlite3.enc to t
1f10: 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 74  he encoding of t
1f20: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
1f30: 2e 0a 20 20 2a 2a 20 46 6f 72 20 61 6e 20 61 74  ..  ** For an at
1f40: 74 61 63 68 65 64 20 64 62 2c 20 69 74 20 69 73  tached db, it is
1f50: 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65   an error if the
1f60: 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 6e 6f 74   encoding is not
1f70: 20 74 68 65 20 73 61 6d 65 0a 20 20 2a 2a 20 61   the same.  ** a
1f80: 73 20 73 71 6c 69 74 65 33 2e 65 6e 63 2e 0a 20  s sqlite3.enc.. 
1f90: 20 2a 2f 0a 20 20 69 66 28 20 6d 65 74 61 5b 34   */.  if( meta[4
1fa0: 5d 20 29 7b 20 20 2f 2a 20 74 65 78 74 20 65 6e  ] ){  /* text en
1fb0: 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 20 20 69 66  coding */.    if
1fc0: 28 20 69 44 62 3d 3d 30 20 29 7b 0a 20 20 20 20  ( iDb==0 ){.    
1fd0: 20 20 2f 2a 20 49 66 20 6f 70 65 6e 69 6e 67 20    /* If opening 
1fe0: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
1ff0: 65 2c 20 73 65 74 20 45 4e 43 28 64 62 29 2e 20  e, set ENC(db). 
2000: 2a 2f 0a 20 20 20 20 20 20 45 4e 43 28 64 62 29  */.      ENC(db)
2010: 20 3d 20 28 75 38 29 6d 65 74 61 5b 34 5d 3b 0a   = (u8)meta[4];.
2020: 20 20 20 20 20 20 64 62 2d 3e 70 44 66 6c 74 43        db->pDfltC
2030: 6f 6c 6c 20 3d 20 73 71 6c 69 74 65 33 46 69 6e  oll = sqlite3Fin
2040: 64 43 6f 6c 6c 53 65 71 28 64 62 2c 20 53 51 4c  dCollSeq(db, SQL
2050: 49 54 45 5f 55 54 46 38 2c 20 22 42 49 4e 41 52  ITE_UTF8, "BINAR
2060: 59 22 2c 20 30 29 3b 0a 20 20 20 20 7d 65 6c 73  Y", 0);.    }els
2070: 65 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 6f  e{.      /* If o
2080: 70 65 6e 69 6e 67 20 61 6e 20 61 74 74 61 63 68  pening an attach
2090: 65 64 20 64 61 74 61 62 61 73 65 2c 20 74 68 65  ed database, the
20a0: 20 65 6e 63 6f 64 69 6e 67 20 6d 75 63 68 20 6d   encoding much m
20b0: 61 74 63 68 20 45 4e 43 28 64 62 29 20 2a 2f 0a  atch ENC(db) */.
20c0: 20 20 20 20 20 20 69 66 28 20 6d 65 74 61 5b 34        if( meta[4
20d0: 5d 21 3d 45 4e 43 28 64 62 29 20 29 7b 0a 20 20  ]!=ENC(db) ){.  
20e0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
20f0: 53 74 72 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c  String(pzErrMsg,
2100: 20 64 62 2c 20 22 61 74 74 61 63 68 65 64 20 64   db, "attached d
2110: 61 74 61 62 61 73 65 73 20 6d 75 73 74 20 75 73  atabases must us
2120: 65 20 74 68 65 20 73 61 6d 65 22 0a 20 20 20 20  e the same".    
2130: 20 20 20 20 20 20 20 20 22 20 74 65 78 74 20 65          " text e
2140: 6e 63 6f 64 69 6e 67 20 61 73 20 6d 61 69 6e 20  ncoding as main 
2150: 64 61 74 61 62 61 73 65 22 29 3b 0a 20 20 20 20  database");.    
2160: 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
2170: 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 20 20 67  ERROR;.        g
2180: 6f 74 6f 20 69 6e 69 74 6f 6e 65 5f 65 72 72 6f  oto initone_erro
2190: 72 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20  r_out;.      }. 
21a0: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
21b0: 20 20 44 62 53 65 74 50 72 6f 70 65 72 74 79 28    DbSetProperty(
21c0: 64 62 2c 20 69 44 62 2c 20 44 42 5f 45 6d 70 74  db, iDb, DB_Empt
21d0: 79 29 3b 0a 20 20 7d 0a 20 20 70 44 62 2d 3e 70  y);.  }.  pDb->p
21e0: 53 63 68 65 6d 61 2d 3e 65 6e 63 20 3d 20 45 4e  Schema->enc = EN
21f0: 43 28 64 62 29 3b 0a 0a 20 20 69 66 28 20 70 44  C(db);..  if( pD
2200: 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63 68  b->pSchema->cach
2210: 65 5f 73 69 7a 65 3d 3d 30 20 29 7b 0a 20 20 20  e_size==0 ){.   
2220: 20 73 69 7a 65 20 3d 20 6d 65 74 61 5b 32 5d 3b   size = meta[2];
2230: 0a 20 20 20 20 69 66 28 20 73 69 7a 65 3d 3d 30  .    if( size==0
2240: 20 29 7b 20 73 69 7a 65 20 3d 20 53 51 4c 49 54   ){ size = SQLIT
2250: 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f  E_DEFAULT_CACHE_
2260: 53 49 5a 45 3b 20 7d 0a 20 20 20 20 69 66 28 20  SIZE; }.    if( 
2270: 73 69 7a 65 3c 30 20 29 20 73 69 7a 65 20 3d 20  size<0 ) size = 
2280: 2d 73 69 7a 65 3b 0a 20 20 20 20 70 44 62 2d 3e  -size;.    pDb->
2290: 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73  pSchema->cache_s
22a0: 69 7a 65 20 3d 20 73 69 7a 65 3b 0a 20 20 20 20  ize = size;.    
22b0: 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43  sqlite3BtreeSetC
22c0: 61 63 68 65 53 69 7a 65 28 70 44 62 2d 3e 70 42  acheSize(pDb->pB
22d0: 74 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d  t, pDb->pSchema-
22e0: 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20  >cache_size);.  
22f0: 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 66 69 6c  }..  /*.  ** fil
2300: 65 5f 66 6f 72 6d 61 74 3d 3d 31 20 20 20 20 56  e_format==1    V
2310: 65 72 73 69 6f 6e 20 33 2e 30 2e 30 2e 0a 20 20  ersion 3.0.0..  
2320: 2a 2a 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3d 3d  ** file_format==
2330: 32 20 20 20 20 56 65 72 73 69 6f 6e 20 33 2e 31  2    Version 3.1
2340: 2e 33 2e 20 20 2f 2f 20 41 4c 54 45 52 20 54 41  .3.  // ALTER TA
2350: 42 4c 45 20 41 44 44 20 43 4f 4c 55 4d 4e 0a 20  BLE ADD COLUMN. 
2360: 20 2a 2a 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3d   ** file_format=
2370: 3d 33 20 20 20 20 56 65 72 73 69 6f 6e 20 33 2e  =3    Version 3.
2380: 31 2e 34 2e 20 20 2f 2f 20 64 69 74 74 6f 20 62  1.4.  // ditto b
2390: 75 74 20 77 69 74 68 20 6e 6f 6e 2d 4e 55 4c 4c  ut with non-NULL
23a0: 20 64 65 66 61 75 6c 74 73 0a 20 20 2a 2a 20 66   defaults.  ** f
23b0: 69 6c 65 5f 66 6f 72 6d 61 74 3d 3d 34 20 20 20  ile_format==4   
23c0: 20 56 65 72 73 69 6f 6e 20 33 2e 33 2e 30 2e 20   Version 3.3.0. 
23d0: 20 2f 2f 20 44 45 53 43 20 69 6e 64 69 63 65 73   // DESC indices
23e0: 2e 20 20 42 6f 6f 6c 65 61 6e 20 63 6f 6e 73 74  .  Boolean const
23f0: 61 6e 74 73 0a 20 20 2a 2f 0a 20 20 70 44 62 2d  ants.  */.  pDb-
2400: 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66  >pSchema->file_f
2410: 6f 72 6d 61 74 20 3d 20 28 75 38 29 6d 65 74 61  ormat = (u8)meta
2420: 5b 31 5d 3b 0a 20 20 69 66 28 20 70 44 62 2d 3e  [1];.  if( pDb->
2430: 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f  pSchema->file_fo
2440: 72 6d 61 74 3d 3d 30 20 29 7b 0a 20 20 20 20 70  rmat==0 ){.    p
2450: 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c  Db->pSchema->fil
2460: 65 5f 66 6f 72 6d 61 74 20 3d 20 31 3b 0a 20 20  e_format = 1;.  
2470: 7d 0a 20 20 69 66 28 20 70 44 62 2d 3e 70 53 63  }.  if( pDb->pSc
2480: 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61  hema->file_forma
2490: 74 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c  t>SQLITE_MAX_FIL
24a0: 45 5f 46 4f 52 4d 41 54 20 29 7b 0a 20 20 20 20  E_FORMAT ){.    
24b0: 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
24c0: 28 70 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  (pzErrMsg, db, "
24d0: 75 6e 73 75 70 70 6f 72 74 65 64 20 66 69 6c 65  unsupported file
24e0: 20 66 6f 72 6d 61 74 22 29 3b 0a 20 20 20 20 72   format");.    r
24f0: 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
2500: 3b 0a 20 20 20 20 67 6f 74 6f 20 69 6e 69 74 6f  ;.    goto inito
2510: 6e 65 5f 65 72 72 6f 72 5f 6f 75 74 3b 0a 20 20  ne_error_out;.  
2520: 7d 0a 0a 20 20 2f 2a 20 54 69 63 6b 65 74 20 23  }..  /* Ticket #
2530: 32 38 30 34 3a 20 20 57 68 65 6e 20 77 65 20 6f  2804:  When we o
2540: 70 65 6e 20 61 20 64 61 74 61 62 61 73 65 20 69  pen a database i
2550: 6e 20 74 68 65 20 6e 65 77 65 72 20 66 69 6c 65  n the newer file
2560: 20 66 6f 72 6d 61 74 2c 0a 20 20 2a 2a 20 63 6c   format,.  ** cl
2570: 65 61 72 20 74 68 65 20 6c 65 67 61 63 79 5f 66  ear the legacy_f
2580: 69 6c 65 5f 66 6f 72 6d 61 74 20 70 72 61 67 6d  ile_format pragm
2590: 61 20 66 6c 61 67 20 73 6f 20 74 68 61 74 20 61  a flag so that a
25a0: 20 56 41 43 55 55 4d 20 77 69 6c 6c 0a 20 20 2a   VACUUM will.  *
25b0: 2a 20 6e 6f 74 20 64 6f 77 6e 67 72 61 64 65 20  * not downgrade 
25c0: 74 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64  the database and
25d0: 20 74 68 75 73 20 69 6e 76 61 6c 69 64 61 74 65   thus invalidate
25e0: 20 61 6e 79 20 64 65 73 63 65 6e 64 69 6e 67 0a   any descending.
25f0: 20 20 2a 2a 20 69 6e 64 69 63 65 73 20 74 68 61    ** indices tha
2600: 74 20 74 68 65 20 75 73 65 72 20 6d 69 67 68 74  t the user might
2610: 20 68 61 76 65 20 63 72 65 61 74 65 64 2e 0a 20   have created.. 
2620: 20 2a 2f 0a 20 20 69 66 28 20 69 44 62 3d 3d 30   */.  if( iDb==0
2630: 20 26 26 20 6d 65 74 61 5b 31 5d 3e 3d 34 20 29   && meta[1]>=4 )
2640: 7b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20  {.    db->flags 
2650: 26 3d 20 7e 53 51 4c 49 54 45 5f 4c 65 67 61 63  &= ~SQLITE_Legac
2660: 79 46 69 6c 65 46 6d 74 3b 0a 20 20 7d 0a 0a 20  yFileFmt;.  }.. 
2670: 20 2f 2a 20 52 65 61 64 20 74 68 65 20 73 63 68   /* Read the sch
2680: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ema information 
2690: 6f 75 74 20 6f 66 20 74 68 65 20 73 63 68 65 6d  out of the schem
26a0: 61 20 74 61 62 6c 65 73 0a 20 20 2a 2f 0a 20 20  a tables.  */.  
26b0: 61 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74  assert( db->init
26c0: 2e 62 75 73 79 20 29 3b 0a 20 20 69 66 28 20 72  .busy );.  if( r
26d0: 63 3d 3d 53 51 4c 49 54 45 5f 45 4d 50 54 59 20  c==SQLITE_EMPTY 
26e0: 29 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20 61 6e  ){.    /* For an
26f0: 20 65 6d 70 74 79 20 64 61 74 61 62 61 73 65 2c   empty database,
2700: 20 74 68 65 72 65 20 69 73 20 6e 6f 74 68 69 6e   there is nothin
2710: 67 20 74 6f 20 72 65 61 64 20 2a 2f 0a 20 20 20  g to read */.   
2720: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
2730: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63 68  .  }else{.    ch
2740: 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 20 20 7a 53  ar *zSql;.    zS
2750: 71 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69  ql = sqlite3MPri
2760: 6e 74 66 28 64 62 2c 20 0a 20 20 20 20 20 20 20  ntf(db, .       
2770: 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 72   "SELECT name, r
2780: 6f 6f 74 70 61 67 65 2c 20 73 71 6c 20 46 52 4f  ootpage, sql FRO
2790: 4d 20 27 25 71 27 2e 25 73 22 2c 0a 20 20 20 20  M '%q'.%s",.    
27a0: 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d      db->aDb[iDb]
27b0: 2e 7a 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72 4e  .zName, zMasterN
27c0: 61 6d 65 29 3b 0a 20 20 20 20 28 76 6f 69 64 29  ame);.    (void)
27d0: 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66  sqlite3SafetyOff
27e0: 28 64 62 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  (db);.#ifndef SQ
27f0: 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52  LITE_OMIT_AUTHOR
2800: 49 5a 41 54 49 4f 4e 0a 20 20 20 20 7b 0a 20 20  IZATION.    {.  
2810: 20 20 20 20 69 6e 74 20 28 2a 78 41 75 74 68 29      int (*xAuth)
2820: 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74  (void*,int,const
2830: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
2840: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  r*,const char*,c
2850: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 20  onst char*);.   
2860: 20 20 20 78 41 75 74 68 20 3d 20 64 62 2d 3e 78     xAuth = db->x
2870: 41 75 74 68 3b 0a 20 20 20 20 20 20 64 62 2d 3e  Auth;.      db->
2880: 78 41 75 74 68 20 3d 20 30 3b 0a 23 65 6e 64 69  xAuth = 0;.#endi
2890: 66 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  f.      rc = sql
28a0: 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53  ite3_exec(db, zS
28b0: 71 6c 2c 20 73 71 6c 69 74 65 33 49 6e 69 74 43  ql, sqlite3InitC
28c0: 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44 61  allback, &initDa
28d0: 74 61 2c 20 30 29 3b 0a 23 69 66 6e 64 65 66 20  ta, 0);.#ifndef 
28e0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
28f0: 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 20 20 20 20  ORIZATION.      
2900: 64 62 2d 3e 78 41 75 74 68 20 3d 20 78 41 75 74  db->xAuth = xAut
2910: 68 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  h;.    }.#endif.
2920: 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
2930: 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69  TE_OK ) rc = ini
2940: 74 44 61 74 61 2e 72 63 3b 0a 20 20 20 20 28 76  tData.rc;.    (v
2950: 6f 69 64 29 73 71 6c 69 74 65 33 53 61 66 65 74  oid)sqlite3Safet
2960: 79 4f 6e 28 64 62 29 3b 0a 20 20 20 20 73 71 6c  yOn(db);.    sql
2970: 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a  ite3DbFree(db, z
2980: 53 71 6c 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  Sql);.#ifndef SQ
2990: 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a  LITE_OMIT_ANALYZ
29a0: 45 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  E.    if( rc==SQ
29b0: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
29c0: 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73   sqlite3Analysis
29d0: 4c 6f 61 64 28 64 62 2c 20 69 44 62 29 3b 0a 20  Load(db, iDb);. 
29e0: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a     }.#endif.  }.
29f0: 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
2a00: 46 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 72 63  Failed ){.    rc
2a10: 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b   = SQLITE_NOMEM;
2a20: 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65  .    sqlite3Rese
2a30: 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28  tInternalSchema(
2a40: 64 62 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66  db, 0);.  }.  if
2a50: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
2a60: 7c 7c 20 28 64 62 2d 3e 66 6c 61 67 73 26 53 51  || (db->flags&SQ
2a70: 4c 49 54 45 5f 52 65 63 6f 76 65 72 79 4d 6f 64  LITE_RecoveryMod
2a80: 65 29 29 7b 0a 20 20 20 20 2f 2a 20 42 6c 61 63  e)){.    /* Blac
2a90: 6b 20 6d 61 67 69 63 3a 20 49 66 20 74 68 65 20  k magic: If the 
2aa0: 53 51 4c 49 54 45 5f 52 65 63 6f 76 65 72 79 4d  SQLITE_RecoveryM
2ab0: 6f 64 65 20 66 6c 61 67 20 69 73 20 73 65 74 2c  ode flag is set,
2ac0: 20 74 68 65 6e 20 63 6f 6e 73 69 64 65 72 0a 20   then consider. 
2ad0: 20 20 20 2a 2a 20 74 68 65 20 73 63 68 65 6d 61     ** the schema
2ae0: 20 6c 6f 61 64 65 64 2c 20 65 76 65 6e 20 69 66   loaded, even if
2af0: 20 65 72 72 6f 72 73 20 6f 63 63 75 72 72 65 64   errors occurred
2b00: 2e 20 49 6e 20 74 68 69 73 20 73 69 74 75 61 74  . In this situat
2b10: 69 6f 6e 20 74 68 65 20 0a 20 20 20 20 2a 2a 20  ion the .    ** 
2b20: 63 75 72 72 65 6e 74 20 73 71 6c 69 74 65 33 5f  current sqlite3_
2b30: 70 72 65 70 61 72 65 28 29 20 6f 70 65 72 61 74  prepare() operat
2b40: 69 6f 6e 20 77 69 6c 6c 20 66 61 69 6c 2c 20 62  ion will fail, b
2b50: 75 74 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ut the following
2b60: 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 77 69 6c 6c   one.    ** will
2b70: 20 61 74 74 65 6d 70 74 20 74 6f 20 63 6f 6d 70   attempt to comp
2b80: 69 6c 65 20 74 68 65 20 73 75 70 70 6c 69 65 64  ile the supplied
2b90: 20 73 74 61 74 65 6d 65 6e 74 20 61 67 61 69 6e   statement again
2ba0: 73 74 20 77 68 61 74 65 76 65 72 20 73 75 62 73  st whatever subs
2bb0: 65 74 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65  et.    ** of the
2bc0: 20 73 63 68 65 6d 61 20 77 61 73 20 6c 6f 61 64   schema was load
2bd0: 65 64 20 62 65 66 6f 72 65 20 74 68 65 20 65 72  ed before the er
2be0: 72 6f 72 20 6f 63 63 75 72 72 65 64 2e 20 54 68  ror occurred. Th
2bf0: 65 20 70 72 69 6d 61 72 79 0a 20 20 20 20 2a 2a  e primary.    **
2c00: 20 70 75 72 70 6f 73 65 20 6f 66 20 74 68 69 73   purpose of this
2c10: 20 69 73 20 74 6f 20 61 6c 6c 6f 77 20 61 63 63   is to allow acc
2c20: 65 73 73 20 74 6f 20 74 68 65 20 73 71 6c 69 74  ess to the sqlit
2c30: 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 0a 20  e_master table. 
2c40: 20 20 20 2a 2a 20 65 76 65 6e 20 77 68 65 6e 20     ** even when 
2c50: 69 74 73 20 63 6f 6e 74 65 6e 74 73 20 68 61 76  its contents hav
2c60: 65 20 62 65 65 6e 20 63 6f 72 72 75 70 74 65 64  e been corrupted
2c70: 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 44 62 53  ..    */.    DbS
2c80: 65 74 50 72 6f 70 65 72 74 79 28 64 62 2c 20 69  etProperty(db, i
2c90: 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  Db, DB_SchemaLoa
2ca0: 64 65 64 29 3b 0a 20 20 20 20 72 63 20 3d 20 53  ded);.    rc = S
2cb0: 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a 0a 20  QLITE_OK;.  }.. 
2cc0: 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20 66 6f   /* Jump here fo
2cd0: 72 20 61 6e 20 65 72 72 6f 72 20 74 68 61 74 20  r an error that 
2ce0: 6f 63 63 75 72 73 20 61 66 74 65 72 20 73 75 63  occurs after suc
2cf0: 63 65 73 73 66 75 6c 6c 79 20 61 6c 6c 6f 63 61  cessfully alloca
2d00: 74 69 6e 67 0a 20 20 2a 2a 20 63 75 72 4d 61 69  ting.  ** curMai
2d10: 6e 20 61 6e 64 20 63 61 6c 6c 69 6e 67 20 73 71  n and calling sq
2d20: 6c 69 74 65 33 42 74 72 65 65 45 6e 74 65 72 28  lite3BtreeEnter(
2d30: 29 2e 20 46 6f 72 20 61 6e 20 65 72 72 6f 72 20  ). For an error 
2d40: 74 68 61 74 20 6f 63 63 75 72 73 0a 20 20 2a 2a  that occurs.  **
2d50: 20 62 65 66 6f 72 65 20 74 68 61 74 20 70 6f 69   before that poi
2d60: 6e 74 2c 20 6a 75 6d 70 20 74 6f 20 65 72 72 6f  nt, jump to erro
2d70: 72 5f 6f 75 74 2e 0a 20 20 2a 2f 0a 69 6e 69 74  r_out..  */.init
2d80: 6f 6e 65 5f 65 72 72 6f 72 5f 6f 75 74 3a 0a 20  one_error_out:. 
2d90: 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 6f   sqlite3BtreeClo
2da0: 73 65 43 75 72 73 6f 72 28 63 75 72 4d 61 69 6e  seCursor(curMain
2db0: 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65  );.  sqlite3_fre
2dc0: 65 28 63 75 72 4d 61 69 6e 29 3b 0a 20 20 73 71  e(curMain);.  sq
2dd0: 6c 69 74 65 33 42 74 72 65 65 4c 65 61 76 65 28  lite3BtreeLeave(
2de0: 70 44 62 2d 3e 70 42 74 29 3b 0a 0a 65 72 72 6f  pDb->pBt);..erro
2df0: 72 5f 6f 75 74 3a 0a 20 20 69 66 28 20 72 63 3d  r_out:.  if( rc=
2e00: 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 7c 7c  =SQLITE_NOMEM ||
2e10: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 49 4f 45 52   rc==SQLITE_IOER
2e20: 52 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 64  R_NOMEM ){.    d
2e30: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
2e40: 3d 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  = 1;.  }.  retur
2e50: 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49  n rc;.}../*.** I
2e60: 6e 69 74 69 61 6c 69 7a 65 20 61 6c 6c 20 64 61  nitialize all da
2e70: 74 61 62 61 73 65 20 66 69 6c 65 73 20 2d 20 74  tabase files - t
2e80: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
2e90: 20 66 69 6c 65 2c 20 74 68 65 20 66 69 6c 65 0a   file, the file.
2ea0: 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  ** used to store
2eb0: 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
2ec0: 73 2c 20 61 6e 64 20 61 6e 79 20 61 64 64 69 74  s, and any addit
2ed0: 69 6f 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66  ional database f
2ee0: 69 6c 65 73 0a 2a 2a 20 63 72 65 61 74 65 64 20  iles.** created 
2ef0: 75 73 69 6e 67 20 41 54 54 41 43 48 20 73 74 61  using ATTACH sta
2f00: 74 65 6d 65 6e 74 73 2e 20 20 52 65 74 75 72 6e  tements.  Return
2f10: 20 61 20 73 75 63 63 65 73 73 20 63 6f 64 65 2e   a success code.
2f20: 20 20 49 66 20 61 6e 0a 2a 2a 20 65 72 72 6f 72    If an.** error
2f30: 20 6f 63 63 75 72 73 2c 20 77 72 69 74 65 20 61   occurs, write a
2f40: 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
2f50: 69 6e 74 6f 20 2a 70 7a 45 72 72 4d 73 67 2e 0a  into *pzErrMsg..
2f60: 2a 2a 0a 2a 2a 20 41 66 74 65 72 20 61 20 64 61  **.** After a da
2f70: 74 61 62 61 73 65 20 69 73 20 69 6e 69 74 69 61  tabase is initia
2f80: 6c 69 7a 65 64 2c 20 74 68 65 20 44 42 5f 53 63  lized, the DB_Sc
2f90: 68 65 6d 61 4c 6f 61 64 65 64 20 62 69 74 20 69  hemaLoaded bit i
2fa0: 73 20 73 65 74 0a 2a 2a 20 62 69 74 20 69 73 20  s set.** bit is 
2fb0: 73 65 74 20 69 6e 20 74 68 65 20 66 6c 61 67 73  set in the flags
2fc0: 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 44 62   field of the Db
2fd0: 20 73 74 72 75 63 74 75 72 65 2e 20 49 66 20 74   structure. If t
2fe0: 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66  he database.** f
2ff0: 69 6c 65 20 77 61 73 20 6f 66 20 7a 65 72 6f 2d  ile was of zero-
3000: 6c 65 6e 67 74 68 2c 20 74 68 65 6e 20 74 68 65  length, then the
3010: 20 44 42 5f 45 6d 70 74 79 20 66 6c 61 67 20 69   DB_Empty flag i
3020: 73 20 61 6c 73 6f 20 73 65 74 2e 0a 2a 2f 0a 69  s also set..*/.i
3030: 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 28 73  nt sqlite3Init(s
3040: 71 6c 69 74 65 33 20 2a 64 62 2c 20 63 68 61 72  qlite3 *db, char
3050: 20 2a 2a 70 7a 45 72 72 4d 73 67 29 7b 0a 20 20   **pzErrMsg){.  
3060: 69 6e 74 20 69 2c 20 72 63 3b 0a 20 20 69 6e 74  int i, rc;.  int
3070: 20 63 6f 6d 6d 69 74 5f 69 6e 74 65 72 6e 61 6c   commit_internal
3080: 20 3d 20 21 28 64 62 2d 3e 66 6c 61 67 73 26 53   = !(db->flags&S
3090: 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e  QLITE_InternChan
30a0: 67 65 73 29 3b 0a 20 20 0a 20 20 61 73 73 65 72  ges);.  .  asser
30b0: 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  t( sqlite3_mutex
30c0: 5f 68 65 6c 64 28 64 62 2d 3e 6d 75 74 65 78 29  _held(db->mutex)
30d0: 20 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e 69 6e   );.  if( db->in
30e0: 69 74 2e 62 75 73 79 20 29 20 72 65 74 75 72 6e  it.busy ) return
30f0: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 72 63   SQLITE_OK;.  rc
3100: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
3110: 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20  db->init.busy = 
3120: 31 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 72 63  1;.  for(i=0; rc
3130: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69  ==SQLITE_OK && i
3140: 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a  <db->nDb; i++){.
3150: 20 20 20 20 69 66 28 20 44 62 48 61 73 50 72 6f      if( DbHasPro
3160: 70 65 72 74 79 28 64 62 2c 20 69 2c 20 44 42 5f  perty(db, i, DB_
3170: 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 20 7c 7c  SchemaLoaded) ||
3180: 20 69 3d 3d 31 20 29 20 63 6f 6e 74 69 6e 75 65   i==1 ) continue
3190: 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
31a0: 65 33 49 6e 69 74 4f 6e 65 28 64 62 2c 20 69 2c  e3InitOne(db, i,
31b0: 20 70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20   pzErrMsg);.    
31c0: 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20  if( rc ){.      
31d0: 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65  sqlite3ResetInte
31e0: 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 69  rnalSchema(db, i
31f0: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20  );.    }.  }..  
3200: 2f 2a 20 4f 6e 63 65 20 61 6c 6c 20 74 68 65 20  /* Once all the 
3210: 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 73 20  other databases 
3220: 68 61 76 65 20 62 65 65 6e 20 69 6e 69 74 69 61  have been initia
3230: 6c 69 73 65 64 2c 20 6c 6f 61 64 20 74 68 65 20  lised, load the 
3240: 73 63 68 65 6d 61 0a 20 20 2a 2a 20 66 6f 72 20  schema.  ** for 
3250: 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73  the TEMP databas
3260: 65 2e 20 54 68 69 73 20 69 73 20 6c 6f 61 64 65  e. This is loade
3270: 64 20 6c 61 73 74 2c 20 61 73 20 74 68 65 20 54  d last, as the T
3280: 45 4d 50 20 64 61 74 61 62 61 73 65 0a 20 20 2a  EMP database.  *
3290: 2a 20 73 63 68 65 6d 61 20 6d 61 79 20 63 6f 6e  * schema may con
32a0: 74 61 69 6e 20 72 65 66 65 72 65 6e 63 65 73 20  tain references 
32b0: 74 6f 20 6f 62 6a 65 63 74 73 20 69 6e 20 6f 74  to objects in ot
32c0: 68 65 72 20 64 61 74 61 62 61 73 65 73 2e 0a 20  her databases.. 
32d0: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
32e0: 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 20  TE_OMIT_TEMPDB. 
32f0: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
3300: 4f 4b 20 26 26 20 64 62 2d 3e 6e 44 62 3e 31 20  OK && db->nDb>1 
3310: 26 26 20 21 44 62 48 61 73 50 72 6f 70 65 72 74  && !DbHasPropert
3320: 79 28 64 62 2c 20 31 2c 20 44 42 5f 53 63 68 65  y(db, 1, DB_Sche
3330: 6d 61 4c 6f 61 64 65 64 29 20 29 7b 0a 20 20 20  maLoaded) ){.   
3340: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 49 6e 69   rc = sqlite3Ini
3350: 74 4f 6e 65 28 64 62 2c 20 31 2c 20 70 7a 45 72  tOne(db, 1, pzEr
3360: 72 4d 73 67 29 3b 0a 20 20 20 20 69 66 28 20 72  rMsg);.    if( r
3370: 63 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  c ){.      sqlit
3380: 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53  e3ResetInternalS
3390: 63 68 65 6d 61 28 64 62 2c 20 31 29 3b 0a 20 20  chema(db, 1);.  
33a0: 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a    }.  }.#endif..
33b0: 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20    db->init.busy 
33c0: 3d 20 30 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  = 0;.  if( rc==S
33d0: 51 4c 49 54 45 5f 4f 4b 20 26 26 20 63 6f 6d 6d  QLITE_OK && comm
33e0: 69 74 5f 69 6e 74 65 72 6e 61 6c 20 29 7b 0a 20  it_internal ){. 
33f0: 20 20 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74     sqlite3Commit
3400: 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28  InternalChanges(
3410: 64 62 29 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75  db);.  }..  retu
3420: 72 6e 20 72 63 3b 20 0a 7d 0a 0a 2f 2a 0a 2a 2a  rn rc; .}../*.**
3430: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73   This routine is
3440: 20 61 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20   a no-op if the 
3450: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
3460: 69 73 20 61 6c 72 65 61 64 79 20 69 6e 69 74 69  is already initi
3470: 61 6c 69 73 65 64 2e 0a 2a 2a 20 4f 74 68 65 72  alised..** Other
3480: 77 69 73 65 2c 20 74 68 65 20 73 63 68 65 6d 61  wise, the schema
3490: 20 69 73 20 6c 6f 61 64 65 64 2e 20 41 6e 20 65   is loaded. An e
34a0: 72 72 6f 72 20 63 6f 64 65 20 69 73 20 72 65 74  rror code is ret
34b0: 75 72 6e 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71  urned..*/.int sq
34c0: 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28  lite3ReadSchema(
34d0: 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 7b 0a  Parse *pParse){.
34e0: 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54    int rc = SQLIT
34f0: 45 5f 4f 4b 3b 0a 20 20 73 71 6c 69 74 65 33 20  E_OK;.  sqlite3 
3500: 2a 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62  *db = pParse->db
3510: 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  ;.  assert( sqli
3520: 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 64  te3_mutex_held(d
3530: 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 69  b->mutex) );.  i
3540: 66 28 20 21 64 62 2d 3e 69 6e 69 74 2e 62 75 73  f( !db->init.bus
3550: 79 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  y ){.    rc = sq
3560: 6c 69 74 65 33 49 6e 69 74 28 64 62 2c 20 26 70  lite3Init(db, &p
3570: 50 61 72 73 65 2d 3e 7a 45 72 72 4d 73 67 29 3b  Parse->zErrMsg);
3580: 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 21 3d 53  .  }.  if( rc!=S
3590: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
35a0: 70 50 61 72 73 65 2d 3e 72 63 20 3d 20 72 63 3b  pParse->rc = rc;
35b0: 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 45 72  .    pParse->nEr
35c0: 72 2b 2b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  r++;.  }.  retur
35d0: 6e 20 72 63 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  n rc;.}.../*.** 
35e0: 43 68 65 63 6b 20 73 63 68 65 6d 61 20 63 6f 6f  Check schema coo
35f0: 6b 69 65 73 20 69 6e 20 61 6c 6c 20 64 61 74 61  kies in all data
3600: 62 61 73 65 73 2e 20 20 49 66 20 61 6e 79 20 63  bases.  If any c
3610: 6f 6f 6b 69 65 20 69 73 20 6f 75 74 0a 2a 2a 20  ookie is out.** 
3620: 6f 66 20 64 61 74 65 2c 20 72 65 74 75 72 6e 20  of date, return 
3630: 30 2e 20 20 49 66 20 61 6c 6c 20 73 63 68 65 6d  0.  If all schem
3640: 61 20 63 6f 6f 6b 69 65 73 20 61 72 65 20 63 75  a cookies are cu
3650: 72 72 65 6e 74 2c 20 72 65 74 75 72 6e 20 31 2e  rrent, return 1.
3660: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73  .*/.static int s
3670: 63 68 65 6d 61 49 73 56 61 6c 69 64 28 73 71 6c  chemaIsValid(sql
3680: 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74  ite3 *db){.  int
3690: 20 69 44 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a   iDb;.  int rc;.
36a0: 20 20 42 74 43 75 72 73 6f 72 20 2a 63 75 72 54    BtCursor *curT
36b0: 65 6d 70 3b 0a 20 20 69 6e 74 20 63 6f 6f 6b 69  emp;.  int cooki
36c0: 65 3b 0a 20 20 69 6e 74 20 61 6c 6c 4f 6b 20 3d  e;.  int allOk =
36d0: 20 31 3b 0a 0a 20 20 63 75 72 54 65 6d 70 20 3d   1;..  curTemp =
36e0: 20 28 42 74 43 75 72 73 6f 72 20 2a 29 73 71 6c   (BtCursor *)sql
36f0: 69 74 65 33 4d 61 6c 6c 6f 63 28 73 71 6c 69 74  ite3Malloc(sqlit
3700: 65 33 42 74 72 65 65 43 75 72 73 6f 72 53 69 7a  e3BtreeCursorSiz
3710: 65 28 29 29 3b 0a 20 20 69 66 28 20 63 75 72 54  e());.  if( curT
3720: 65 6d 70 20 29 7b 0a 20 20 20 20 61 73 73 65 72  emp ){.    asser
3730: 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  t( sqlite3_mutex
3740: 5f 68 65 6c 64 28 64 62 2d 3e 6d 75 74 65 78 29  _held(db->mutex)
3750: 20 29 3b 0a 20 20 20 20 66 6f 72 28 69 44 62 3d   );.    for(iDb=
3760: 30 3b 20 61 6c 6c 4f 6b 20 26 26 20 69 44 62 3c  0; allOk && iDb<
3770: 64 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b 29 7b  db->nDb; iDb++){
3780: 0a 20 20 20 20 20 20 42 74 72 65 65 20 2a 70 42  .      Btree *pB
3790: 74 3b 0a 20 20 20 20 20 20 70 42 74 20 3d 20 64  t;.      pBt = d
37a0: 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 3b  b->aDb[iDb].pBt;
37b0: 0a 20 20 20 20 20 20 69 66 28 20 70 42 74 3d 3d  .      if( pBt==
37c0: 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  0 ) continue;.  
37d0: 20 20 20 20 6d 65 6d 73 65 74 28 63 75 72 54 65      memset(curTe
37e0: 6d 70 2c 20 30 2c 20 73 71 6c 69 74 65 33 42 74  mp, 0, sqlite3Bt
37f0: 72 65 65 43 75 72 73 6f 72 53 69 7a 65 28 29 29  reeCursorSize())
3800: 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
3810: 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
3820: 70 42 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54  pBt, MASTER_ROOT
3830: 2c 20 30 2c 20 30 2c 20 63 75 72 54 65 6d 70 29  , 0, 0, curTemp)
3840: 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  ;.      if( rc==
3850: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
3860: 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
3870: 33 42 74 72 65 65 47 65 74 4d 65 74 61 28 70 42  3BtreeGetMeta(pB
3880: 74 2c 20 31 2c 20 28 75 33 32 20 2a 29 26 63 6f  t, 1, (u32 *)&co
3890: 6f 6b 69 65 29 3b 0a 20 20 20 20 20 20 20 20 69  okie);.        i
38a0: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
38b0: 20 26 26 20 63 6f 6f 6b 69 65 21 3d 64 62 2d 3e   && cookie!=db->
38c0: 61 44 62 5b 69 44 62 5d 2e 70 53 63 68 65 6d 61  aDb[iDb].pSchema
38d0: 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20  ->schema_cookie 
38e0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61 6c 6c  ){.          all
38f0: 4f 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  Ok = 0;.        
3900: 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  }.        sqlite
3910: 33 42 74 72 65 65 43 6c 6f 73 65 43 75 72 73 6f  3BtreeCloseCurso
3920: 72 28 63 75 72 54 65 6d 70 29 3b 0a 20 20 20 20  r(curTemp);.    
3930: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72 63    }.      if( rc
3940: 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 7c  ==SQLITE_NOMEM |
3950: 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 49 4f 45  | rc==SQLITE_IOE
3960: 52 52 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20  RR_NOMEM ){.    
3970: 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61      db->mallocFa
3980: 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20 20 20  iled = 1;.      
3990: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  }.    }.    sqli
39a0: 74 65 33 5f 66 72 65 65 28 63 75 72 54 65 6d 70  te3_free(curTemp
39b0: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
39c0: 61 6c 6c 4f 6b 20 3d 20 30 3b 0a 20 20 20 20 64  allOk = 0;.    d
39d0: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
39e0: 3d 20 31 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75  = 1;.  }..  retu
39f0: 72 6e 20 61 6c 6c 4f 6b 3b 0a 7d 0a 0a 2f 2a 0a  rn allOk;.}../*.
3a00: 2a 2a 20 43 6f 6e 76 65 72 74 20 61 20 73 63 68  ** Convert a sch
3a10: 65 6d 61 20 70 6f 69 6e 74 65 72 20 69 6e 74 6f  ema pointer into
3a20: 20 74 68 65 20 69 44 62 20 69 6e 64 65 78 20 74   the iDb index t
3a30: 68 61 74 20 69 6e 64 69 63 61 74 65 73 0a 2a 2a  hat indicates.**
3a40: 20 77 68 69 63 68 20 64 61 74 61 62 61 73 65 20   which database 
3a50: 66 69 6c 65 20 69 6e 20 64 62 2d 3e 61 44 62 5b  file in db->aDb[
3a60: 5d 20 74 68 65 20 73 63 68 65 6d 61 20 72 65 66  ] the schema ref
3a70: 65 72 73 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 49 66  ers to..**.** If
3a80: 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
3a90: 73 65 20 69 73 20 61 74 74 61 63 68 65 64 20 6d  se is attached m
3aa0: 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 2c 20 74  ore than once, t
3ab0: 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 74 74 61  he first.** atta
3ac0: 63 68 65 64 20 64 61 74 61 62 61 73 65 20 69 73  ched database is
3ad0: 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a 69 6e   returned..*/.in
3ae0: 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 54  t sqlite3SchemaT
3af0: 6f 49 6e 64 65 78 28 73 71 6c 69 74 65 33 20 2a  oIndex(sqlite3 *
3b00: 64 62 2c 20 53 63 68 65 6d 61 20 2a 70 53 63 68  db, Schema *pSch
3b10: 65 6d 61 29 7b 0a 20 20 69 6e 74 20 69 20 3d 20  ema){.  int i = 
3b20: 2d 31 30 30 30 30 30 30 3b 0a 0a 20 20 2f 2a 20  -1000000;..  /* 
3b30: 49 66 20 70 53 63 68 65 6d 61 20 69 73 20 4e 55  If pSchema is NU
3b40: 4c 4c 2c 20 74 68 65 6e 20 72 65 74 75 72 6e 20  LL, then return 
3b50: 2d 31 30 30 30 30 30 30 2e 20 54 68 69 73 20 68  -1000000. This h
3b60: 61 70 70 65 6e 73 20 77 68 65 6e 20 63 6f 64 65  appens when code
3b70: 20 69 6e 20 0a 20 20 2a 2a 20 65 78 70 72 2e 63   in .  ** expr.c
3b80: 20 69 73 20 74 72 79 69 6e 67 20 74 6f 20 72 65   is trying to re
3b90: 73 6f 6c 76 65 20 61 20 72 65 66 65 72 65 6e 63  solve a referenc
3ba0: 65 20 74 6f 20 61 20 74 72 61 6e 73 69 65 6e 74  e to a transient
3bb0: 20 74 61 62 6c 65 20 28 69 2e 65 2e 20 6f 6e 65   table (i.e. one
3bc0: 0a 20 20 2a 2a 20 63 72 65 61 74 65 64 20 62 79  .  ** created by
3bd0: 20 61 20 73 75 62 2d 73 65 6c 65 63 74 29 2e 20   a sub-select). 
3be0: 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65  In this case the
3bf0: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 6f 66   return value of
3c00: 20 74 68 69 73 20 0a 20 20 2a 2a 20 66 75 6e 63   this .  ** func
3c10: 74 69 6f 6e 20 73 68 6f 75 6c 64 20 6e 65 76 65  tion should neve
3c20: 72 20 62 65 20 75 73 65 64 2e 0a 20 20 2a 2a 0a  r be used..  **.
3c30: 20 20 2a 2a 20 57 65 20 72 65 74 75 72 6e 20 2d    ** We return -
3c40: 31 30 30 30 30 30 30 20 69 6e 73 74 65 61 64 20  1000000 instead 
3c50: 6f 66 20 74 68 65 20 6d 6f 72 65 20 75 73 75 61  of the more usua
3c60: 6c 20 2d 31 20 73 69 6d 70 6c 79 20 62 65 63 61  l -1 simply beca
3c70: 75 73 65 20 75 73 69 6e 67 0a 20 20 2a 2a 20 2d  use using.  ** -
3c80: 31 30 30 30 30 30 30 20 61 73 20 74 68 65 20 69  1000000 as the i
3c90: 6e 63 6f 72 72 65 63 74 20 69 6e 64 65 78 20 69  ncorrect index i
3ca0: 6e 74 6f 20 64 62 2d 3e 61 44 62 5b 5d 20 69 73  nto db->aDb[] is
3cb0: 20 6d 75 63 68 20 0a 20 20 2a 2a 20 6d 6f 72 65   much .  ** more
3cc0: 20 6c 69 6b 65 6c 79 20 74 6f 20 63 61 75 73 65   likely to cause
3cd0: 20 61 20 73 65 67 66 61 75 6c 74 20 74 68 61 6e   a segfault than
3ce0: 20 2d 31 20 28 6f 66 20 63 6f 75 72 73 65 20 74   -1 (of course t
3cf0: 68 65 72 65 20 61 72 65 20 61 73 73 65 72 74 28  here are assert(
3d00: 29 0a 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74  ).  ** statement
3d10: 73 20 74 6f 6f 2c 20 62 75 74 20 69 74 20 6e 65  s too, but it ne
3d20: 76 65 72 20 68 75 72 74 73 20 74 6f 20 70 6c 61  ver hurts to pla
3d30: 79 20 74 68 65 20 6f 64 64 73 29 2e 0a 20 20 2a  y the odds)..  *
3d40: 2f 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  /.  assert( sqli
3d50: 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 64  te3_mutex_held(d
3d60: 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 69  b->mutex) );.  i
3d70: 66 28 20 70 53 63 68 65 6d 61 20 29 7b 0a 20 20  f( pSchema ){.  
3d80: 20 20 66 6f 72 28 69 3d 30 3b 20 41 4c 57 41 59    for(i=0; ALWAY
3d90: 53 28 69 3c 64 62 2d 3e 6e 44 62 29 3b 20 69 2b  S(i<db->nDb); i+
3da0: 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 64 62  +){.      if( db
3db0: 2d 3e 61 44 62 5b 69 5d 2e 70 53 63 68 65 6d 61  ->aDb[i].pSchema
3dc0: 3d 3d 70 53 63 68 65 6d 61 20 29 7b 0a 20 20 20  ==pSchema ){.   
3dd0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
3de0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73    }.    }.    as
3df0: 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69 3c  sert( i>=0 && i<
3e00: 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 7d 0a 20  db->nDb );.  }. 
3e10: 20 72 65 74 75 72 6e 20 69 3b 0a 7d 0a 0a 2f 2a   return i;.}../*
3e20: 0a 2a 2a 20 43 6f 6d 70 69 6c 65 20 74 68 65 20  .** Compile the 
3e30: 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 53 51  UTF-8 encoded SQ
3e40: 4c 20 73 74 61 74 65 6d 65 6e 74 20 7a 53 71 6c  L statement zSql
3e50: 20 69 6e 74 6f 20 61 20 73 74 61 74 65 6d 65 6e   into a statemen
3e60: 74 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 73 74 61  t handle..*/.sta
3e70: 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33 50  tic int sqlite3P
3e80: 72 65 70 61 72 65 28 0a 20 20 73 71 6c 69 74 65  repare(.  sqlite
3e90: 33 20 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20  3 *db,          
3ea0: 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
3eb0: 68 61 6e 64 6c 65 2e 20 2a 2f 0a 20 20 63 6f 6e  handle. */.  con
3ec0: 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 2c 20 20  st char *zSql,  
3ed0: 20 20 20 20 20 20 20 2f 2a 20 55 54 46 2d 38 20         /* UTF-8 
3ee0: 65 6e 63 6f 64 65 64 20 53 51 4c 20 73 74 61 74  encoded SQL stat
3ef0: 65 6d 65 6e 74 2e 20 2a 2f 0a 20 20 69 6e 74 20  ement. */.  int 
3f00: 6e 42 79 74 65 73 2c 20 20 20 20 20 20 20 20 20  nBytes,         
3f10: 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20        /* Length 
3f20: 6f 66 20 7a 53 71 6c 20 69 6e 20 62 79 74 65 73  of zSql in bytes
3f30: 2e 20 2a 2f 0a 20 20 69 6e 74 20 73 61 76 65 53  . */.  int saveS
3f40: 71 6c 46 6c 61 67 2c 20 20 20 20 20 20 20 20 20  qlFlag,         
3f50: 20 2f 2a 20 54 72 75 65 20 74 6f 20 63 6f 70 79   /* True to copy
3f60: 20 53 51 4c 20 74 65 78 74 20 69 6e 74 6f 20 74   SQL text into t
3f70: 68 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  he sqlite3_stmt 
3f80: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  */.  sqlite3_stm
3f90: 74 20 2a 2a 70 70 53 74 6d 74 2c 20 20 20 20 2f  t **ppStmt,    /
3fa0: 2a 20 4f 55 54 3a 20 41 20 70 6f 69 6e 74 65 72  * OUT: A pointer
3fb0: 20 74 6f 20 74 68 65 20 70 72 65 70 61 72 65 64   to the prepared
3fc0: 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20   statement */.  
3fd0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 70 7a 54  const char **pzT
3fe0: 61 69 6c 20 20 20 20 20 20 20 2f 2a 20 4f 55 54  ail       /* OUT
3ff0: 3a 20 45 6e 64 20 6f 66 20 70 61 72 73 65 64 20  : End of parsed 
4000: 73 74 72 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 50  string */.){.  P
4010: 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
4020: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 73           /* Pars
4030: 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20  ing context */. 
4040: 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 20 3d   char *zErrMsg =
4050: 20 30 3b 20 20 20 20 20 20 20 20 2f 2a 20 45 72   0;        /* Er
4060: 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20  ror message */. 
4070: 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45   int rc = SQLITE
4080: 5f 4f 4b 3b 20 20 20 20 20 20 20 2f 2a 20 52 65  _OK;       /* Re
4090: 73 75 6c 74 20 63 6f 64 65 20 2a 2f 0a 20 20 69  sult code */.  i
40a0: 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20  nt i;           
40b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
40c0: 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 0a 20 20 2f   counter */..  /
40d0: 2a 20 41 6c 6c 6f 63 61 74 65 20 74 68 65 20 70  * Allocate the p
40e0: 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a  arsing context *
40f0: 2f 0a 20 20 70 50 61 72 73 65 20 3d 20 73 71 6c  /.  pParse = sql
4100: 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65  ite3StackAllocZe
4110: 72 6f 28 64 62 2c 20 73 69 7a 65 6f 66 28 2a 70  ro(db, sizeof(*p
4120: 50 61 72 73 65 29 29 3b 0a 20 20 69 66 28 20 70  Parse));.  if( p
4130: 50 61 72 73 65 3d 3d 30 20 29 7b 0a 20 20 20 20  Parse==0 ){.    
4140: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  rc = SQLITE_NOME
4150: 4d 3b 0a 20 20 20 20 67 6f 74 6f 20 65 6e 64 5f  M;.    goto end_
4160: 70 72 65 70 61 72 65 3b 0a 20 20 7d 0a 0a 20 20  prepare;.  }..  
4170: 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65 74  if( sqlite3Safet
4180: 79 4f 6e 28 64 62 29 20 29 7b 0a 20 20 20 20 72  yOn(db) ){.    r
4190: 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  c = SQLITE_MISUS
41a0: 45 3b 0a 20 20 20 20 67 6f 74 6f 20 65 6e 64 5f  E;.    goto end_
41b0: 70 72 65 70 61 72 65 3b 0a 20 20 7d 0a 20 20 61  prepare;.  }.  a
41c0: 73 73 65 72 74 28 20 70 70 53 74 6d 74 20 26 26  ssert( ppStmt &&
41d0: 20 2a 70 70 53 74 6d 74 3d 3d 30 20 29 3b 0a 20   *ppStmt==0 );. 
41e0: 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61   assert( !db->ma
41f0: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20  llocFailed );.  
4200: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f  assert( sqlite3_
4210: 6d 75 74 65 78 5f 68 65 6c 64 28 64 62 2d 3e 6d  mutex_held(db->m
4220: 75 74 65 78 29 20 29 3b 0a 0a 20 20 2f 2a 20 43  utex) );..  /* C
4230: 68 65 63 6b 20 74 6f 20 76 65 72 69 66 79 20 74  heck to verify t
4240: 68 61 74 20 69 74 20 69 73 20 70 6f 73 73 69 62  hat it is possib
4250: 6c 65 20 74 6f 20 67 65 74 20 61 20 72 65 61 64  le to get a read
4260: 20 6c 6f 63 6b 20 6f 6e 20 61 6c 6c 0a 20 20 2a   lock on all.  *
4270: 2a 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  * database schem
4280: 61 73 2e 20 20 54 68 65 20 69 6e 61 62 69 6c 69  as.  The inabili
4290: 74 79 20 74 6f 20 67 65 74 20 61 20 72 65 61 64  ty to get a read
42a0: 20 6c 6f 63 6b 20 69 6e 64 69 63 61 74 65 73 20   lock indicates 
42b0: 74 68 61 74 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f  that.  ** some o
42c0: 74 68 65 72 20 64 61 74 61 62 61 73 65 20 63 6f  ther database co
42d0: 6e 6e 65 63 74 69 6f 6e 20 69 73 20 68 6f 6c 64  nnection is hold
42e0: 69 6e 67 20 61 20 77 72 69 74 65 2d 6c 6f 63 6b  ing a write-lock
42f0: 2c 20 77 68 69 63 68 20 69 6e 0a 20 20 2a 2a 20  , which in.  ** 
4300: 74 75 72 6e 20 6d 65 61 6e 73 20 74 68 61 74 20  turn means that 
4310: 74 68 65 20 6f 74 68 65 72 20 63 6f 6e 6e 65 63  the other connec
4320: 74 69 6f 6e 20 68 61 73 20 6d 61 64 65 20 75 6e  tion has made un
4330: 63 6f 6d 6d 69 74 74 65 64 20 63 68 61 6e 67 65  committed change
4340: 73 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 73 63  s.  ** to the sc
4350: 68 65 6d 61 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  hema..  **.  ** 
4360: 57 65 72 65 20 77 65 20 74 6f 20 70 72 6f 63 65  Were we to proce
4370: 65 64 20 61 6e 64 20 70 72 65 70 61 72 65 20 74  ed and prepare t
4380: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 61 67 61  he statement aga
4390: 69 6e 73 74 20 74 68 65 20 75 6e 63 6f 6d 6d 69  inst the uncommi
43a0: 74 74 65 64 0a 20 20 2a 2a 20 73 63 68 65 6d 61  tted.  ** schema
43b0: 20 63 68 61 6e 67 65 73 20 61 6e 64 20 69 66 20   changes and if 
43c0: 74 68 6f 73 65 20 73 63 68 65 6d 61 20 63 68 61  those schema cha
43d0: 6e 67 65 73 20 61 72 65 20 73 75 62 73 65 71 75  nges are subsequ
43e0: 65 6e 74 6c 79 20 72 6f 6c 6c 65 64 0a 20 20 2a  ently rolled.  *
43f0: 2a 20 62 61 63 6b 20 61 6e 64 20 64 69 66 66 65  * back and diffe
4400: 72 65 6e 74 20 63 68 61 6e 67 65 73 20 61 72 65  rent changes are
4410: 20 6d 61 64 65 20 69 6e 20 74 68 65 69 72 20 70   made in their p
4420: 6c 61 63 65 2c 20 74 68 65 6e 20 77 68 65 6e 20  lace, then when 
4430: 74 68 69 73 0a 20 20 2a 2a 20 70 72 65 70 61 72  this.  ** prepar
4440: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 67 6f 65  ed statement goe
4450: 73 20 74 6f 20 72 75 6e 20 74 68 65 20 73 63 68  s to run the sch
4460: 65 6d 61 20 63 6f 6f 6b 69 65 20 77 6f 75 6c 64  ema cookie would
4470: 20 66 61 69 6c 20 74 6f 20 64 65 74 65 63 74 0a   fail to detect.
4480: 20 20 2a 2a 20 74 68 65 20 73 63 68 65 6d 61 20    ** the schema 
4490: 63 68 61 6e 67 65 2e 20 20 44 69 73 61 73 74 65  change.  Disaste
44a0: 72 20 77 6f 75 6c 64 20 66 6f 6c 6c 6f 77 2e 0a  r would follow..
44b0: 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 74    **.  ** This t
44c0: 68 72 65 61 64 20 69 73 20 63 75 72 72 65 6e 74  hread is current
44d0: 6c 79 20 68 6f 6c 64 69 6e 67 20 6d 75 74 65 78  ly holding mutex
44e0: 65 73 20 6f 6e 20 61 6c 6c 20 42 74 72 65 65 73  es on all Btrees
44f0: 20 28 62 65 63 61 75 73 65 0a 20 20 2a 2a 20 6f   (because.  ** o
4500: 66 20 74 68 65 20 73 71 6c 69 74 65 33 42 74 72  f the sqlite3Btr
4510: 65 65 45 6e 74 65 72 41 6c 6c 28 29 20 69 6e 20  eeEnterAll() in 
4520: 73 71 6c 69 74 65 33 4c 6f 63 6b 41 6e 64 50 72  sqlite3LockAndPr
4530: 65 70 61 72 65 28 29 29 20 73 6f 20 69 74 0a 20  epare()) so it. 
4540: 20 2a 2a 20 69 73 20 6e 6f 74 20 70 6f 73 73 69   ** is not possi
4550: 62 6c 65 20 66 6f 72 20 61 6e 6f 74 68 65 72 20  ble for another 
4560: 74 68 72 65 61 64 20 74 6f 20 73 74 61 72 74 20  thread to start 
4570: 61 20 6e 65 77 20 73 63 68 65 6d 61 20 63 68 61  a new schema cha
4580: 6e 67 65 0a 20 20 2a 2a 20 77 68 69 6c 65 20 74  nge.  ** while t
4590: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 72  his routine is r
45a0: 75 6e 6e 69 6e 67 2e 20 20 48 65 6e 63 65 2c 20  unning.  Hence, 
45b0: 77 65 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74  we do not need t
45c0: 6f 20 68 6f 6c 64 20 0a 20 20 2a 2a 20 6c 6f 63  o hold .  ** loc
45d0: 6b 73 20 6f 6e 20 74 68 65 20 73 63 68 65 6d 61  ks on the schema
45e0: 2c 20 77 65 20 6a 75 73 74 20 6e 65 65 64 20 74  , we just need t
45f0: 6f 20 6d 61 6b 65 20 73 75 72 65 20 6e 6f 62 6f  o make sure nobo
4600: 64 79 20 65 6c 73 65 20 69 73 20 0a 20 20 2a 2a  dy else is .  **
4610: 20 68 6f 6c 64 69 6e 67 20 74 68 65 6d 2e 0a 20   holding them.. 
4620: 20 2a 2a 0a 20 20 2a 2a 20 4e 6f 74 65 20 74 68   **.  ** Note th
4630: 61 74 20 73 65 74 74 69 6e 67 20 52 45 41 44 5f  at setting READ_
4640: 55 4e 43 4f 4d 4d 49 54 54 45 44 20 6f 76 65 72  UNCOMMITTED over
4650: 72 69 64 65 73 20 6d 6f 73 74 20 6c 6f 63 6b 20  rides most lock 
4660: 64 65 74 65 63 74 69 6f 6e 2c 0a 20 20 2a 2a 20  detection,.  ** 
4670: 62 75 74 20 69 74 20 64 6f 65 73 20 2a 6e 6f 74  but it does *not
4680: 2a 20 6f 76 65 72 72 69 64 65 20 73 63 68 65 6d  * override schem
4690: 61 20 6c 6f 63 6b 20 64 65 74 65 63 74 69 6f 6e  a lock detection
46a0: 2c 20 73 6f 20 74 68 69 73 20 61 6c 6c 20 73 74  , so this all st
46b0: 69 6c 6c 0a 20 20 2a 2a 20 77 6f 72 6b 73 20 65  ill.  ** works e
46c0: 76 65 6e 20 69 66 20 52 45 41 44 5f 55 4e 43 4f  ven if READ_UNCO
46d0: 4d 4d 49 54 54 45 44 20 69 73 20 73 65 74 2e 0a  MMITTED is set..
46e0: 20 20 2a 2f 0a 20 20 66 6f 72 28 69 3d 30 3b 20    */.  for(i=0; 
46f0: 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 20  i<db->nDb; i++) 
4700: 7b 0a 20 20 20 20 42 74 72 65 65 20 2a 70 42 74  {.    Btree *pBt
4710: 20 3d 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42   = db->aDb[i].pB
4720: 74 3b 0a 20 20 20 20 69 66 28 20 70 42 74 20 29  t;.    if( pBt )
4730: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
4740: 73 71 6c 69 74 65 33 42 74 72 65 65 48 6f 6c 64  sqlite3BtreeHold
4750: 73 4d 75 74 65 78 28 70 42 74 29 20 29 3b 0a 20  sMutex(pBt) );. 
4760: 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
4770: 33 42 74 72 65 65 53 63 68 65 6d 61 4c 6f 63 6b  3BtreeSchemaLock
4780: 65 64 28 70 42 74 29 3b 0a 20 20 20 20 20 20 69  ed(pBt);.      i
4790: 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 20  f( rc ){.       
47a0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
47b0: 20 3d 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e   = db->aDb[i].zN
47c0: 61 6d 65 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  ame;.        sql
47d0: 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20 72 63  ite3Error(db, rc
47e0: 2c 20 22 64 61 74 61 62 61 73 65 20 73 63 68 65  , "database sche
47f0: 6d 61 20 69 73 20 6c 6f 63 6b 65 64 3a 20 25 73  ma is locked: %s
4800: 22 2c 20 7a 44 62 29 3b 0a 20 20 20 20 20 20 20  ", zDb);.       
4810: 20 28 76 6f 69 64 29 73 71 6c 69 74 65 33 53 61   (void)sqlite3Sa
4820: 66 65 74 79 4f 66 66 28 64 62 29 3b 0a 20 20 20  fetyOff(db);.   
4830: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 64       testcase( d
4840: 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
4850: 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65  E_ReadUncommitte
4860: 64 20 29 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  d );.        got
4870: 6f 20 65 6e 64 5f 70 72 65 70 61 72 65 3b 0a 20  o end_prepare;. 
4880: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
4890: 0a 0a 0a 20 20 70 50 61 72 73 65 2d 3e 64 62 20  ...  pParse->db 
48a0: 3d 20 64 62 3b 0a 20 20 69 66 28 20 6e 42 79 74  = db;.  if( nByt
48b0: 65 73 3e 3d 30 20 26 26 20 28 6e 42 79 74 65 73  es>=0 && (nBytes
48c0: 3d 3d 30 20 7c 7c 20 7a 53 71 6c 5b 6e 42 79 74  ==0 || zSql[nByt
48d0: 65 73 2d 31 5d 21 3d 30 29 20 29 7b 0a 20 20 20  es-1]!=0) ){.   
48e0: 20 63 68 61 72 20 2a 7a 53 71 6c 43 6f 70 79 3b   char *zSqlCopy;
48f0: 0a 20 20 20 20 69 6e 74 20 6d 78 4c 65 6e 20 3d  .    int mxLen =
4900: 20 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49   db->aLimit[SQLI
4910: 54 45 5f 4c 49 4d 49 54 5f 53 51 4c 5f 4c 45 4e  TE_LIMIT_SQL_LEN
4920: 47 54 48 5d 3b 0a 20 20 20 20 69 66 28 20 6e 42  GTH];.    if( nB
4930: 79 74 65 73 3e 6d 78 4c 65 6e 20 29 7b 0a 20 20  ytes>mxLen ){.  
4940: 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72      sqlite3Error
4950: 28 64 62 2c 20 53 51 4c 49 54 45 5f 54 4f 4f 42  (db, SQLITE_TOOB
4960: 49 47 2c 20 22 73 74 61 74 65 6d 65 6e 74 20 74  IG, "statement t
4970: 6f 6f 20 6c 6f 6e 67 22 29 3b 0a 20 20 20 20 20  oo long");.     
4980: 20 28 76 6f 69 64 29 73 71 6c 69 74 65 33 53 61   (void)sqlite3Sa
4990: 66 65 74 79 4f 66 66 28 64 62 29 3b 0a 20 20 20  fetyOff(db);.   
49a0: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 41     rc = sqlite3A
49b0: 70 69 45 78 69 74 28 64 62 2c 20 53 51 4c 49 54  piExit(db, SQLIT
49c0: 45 5f 54 4f 4f 42 49 47 29 3b 0a 20 20 20 20 20  E_TOOBIG);.     
49d0: 20 67 6f 74 6f 20 65 6e 64 5f 70 72 65 70 61 72   goto end_prepar
49e0: 65 3b 0a 20 20 20 20 7d 0a 20 20 20 20 7a 53 71  e;.    }.    zSq
49f0: 6c 43 6f 70 79 20 3d 20 73 71 6c 69 74 65 33 44  lCopy = sqlite3D
4a00: 62 53 74 72 4e 44 75 70 28 64 62 2c 20 7a 53 71  bStrNDup(db, zSq
4a10: 6c 2c 20 6e 42 79 74 65 73 29 3b 0a 20 20 20 20  l, nBytes);.    
4a20: 69 66 28 20 7a 53 71 6c 43 6f 70 79 20 29 7b 0a  if( zSqlCopy ){.
4a30: 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 75 6e        sqlite3Run
4a40: 50 61 72 73 65 72 28 70 50 61 72 73 65 2c 20 7a  Parser(pParse, z
4a50: 53 71 6c 43 6f 70 79 2c 20 26 7a 45 72 72 4d 73  SqlCopy, &zErrMs
4a60: 67 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  g);.      sqlite
4a70: 33 44 62 46 72 65 65 28 64 62 2c 20 7a 53 71 6c  3DbFree(db, zSql
4a80: 43 6f 70 79 29 3b 0a 20 20 20 20 20 20 70 50 61  Copy);.      pPa
4a90: 72 73 65 2d 3e 7a 54 61 69 6c 20 3d 20 26 7a 53  rse->zTail = &zS
4aa0: 71 6c 5b 70 50 61 72 73 65 2d 3e 7a 54 61 69 6c  ql[pParse->zTail
4ab0: 2d 7a 53 71 6c 43 6f 70 79 5d 3b 0a 20 20 20 20  -zSqlCopy];.    
4ac0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 50 61  }else{.      pPa
4ad0: 72 73 65 2d 3e 7a 54 61 69 6c 20 3d 20 26 7a 53  rse->zTail = &zS
4ae0: 71 6c 5b 6e 42 79 74 65 73 5d 3b 0a 20 20 20 20  ql[nBytes];.    
4af0: 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  }.  }else{.    s
4b00: 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72 28  qlite3RunParser(
4b10: 70 50 61 72 73 65 2c 20 7a 53 71 6c 2c 20 26 7a  pParse, zSql, &z
4b20: 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 0a 20 20  ErrMsg);.  }..  
4b30: 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  if( db->mallocFa
4b40: 69 6c 65 64 20 29 7b 0a 20 20 20 20 70 50 61 72  iled ){.    pPar
4b50: 73 65 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f  se->rc = SQLITE_
4b60: 4e 4f 4d 45 4d 3b 0a 20 20 7d 0a 20 20 69 66 28  NOMEM;.  }.  if(
4b70: 20 70 50 61 72 73 65 2d 3e 72 63 3d 3d 53 51 4c   pParse->rc==SQL
4b80: 49 54 45 5f 44 4f 4e 45 20 29 20 70 50 61 72 73  ITE_DONE ) pPars
4b90: 65 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  e->rc = SQLITE_O
4ba0: 4b 3b 0a 20 20 69 66 28 20 70 50 61 72 73 65 2d  K;.  if( pParse-
4bb0: 3e 63 68 65 63 6b 53 63 68 65 6d 61 20 26 26 20  >checkSchema && 
4bc0: 21 73 63 68 65 6d 61 49 73 56 61 6c 69 64 28 64  !schemaIsValid(d
4bd0: 62 29 20 29 7b 0a 20 20 20 20 70 50 61 72 73 65  b) ){.    pParse
4be0: 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 53 43  ->rc = SQLITE_SC
4bf0: 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 69 66 28 20  HEMA;.  }.  if( 
4c00: 70 50 61 72 73 65 2d 3e 72 63 3d 3d 53 51 4c 49  pParse->rc==SQLI
4c10: 54 45 5f 53 43 48 45 4d 41 20 29 7b 0a 20 20 20  TE_SCHEMA ){.   
4c20: 20 73 71 6c 69 74 65 33 52 65 73 65 74 49 6e 74   sqlite3ResetInt
4c30: 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62 2c 20  ernalSchema(db, 
4c40: 30 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62  0);.  }.  if( db
4c50: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
4c60: 7b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 72 63  {.    pParse->rc
4c70: 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b   = SQLITE_NOMEM;
4c80: 0a 20 20 7d 0a 20 20 69 66 28 20 70 7a 54 61 69  .  }.  if( pzTai
4c90: 6c 20 29 7b 0a 20 20 20 20 2a 70 7a 54 61 69 6c  l ){.    *pzTail
4ca0: 20 3d 20 70 50 61 72 73 65 2d 3e 7a 54 61 69 6c   = pParse->zTail
4cb0: 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 70 50 61  ;.  }.  rc = pPa
4cc0: 72 73 65 2d 3e 72 63 3b 0a 0a 23 69 66 6e 64 65  rse->rc;..#ifnde
4cd0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
4ce0: 50 4c 41 49 4e 0a 20 20 69 66 28 20 72 63 3d 3d  PLAIN.  if( rc==
4cf0: 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 50 61  SQLITE_OK && pPa
4d00: 72 73 65 2d 3e 70 56 64 62 65 20 26 26 20 70 50  rse->pVdbe && pP
4d10: 61 72 73 65 2d 3e 65 78 70 6c 61 69 6e 20 29 7b  arse->explain ){
4d20: 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
4d30: 74 20 63 68 61 72 20 2a 20 63 6f 6e 73 74 20 61  t char * const a
4d40: 7a 43 6f 6c 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20  zColName[] = {. 
4d50: 20 20 20 20 20 20 22 61 64 64 72 22 2c 20 22 6f        "addr", "o
4d60: 70 63 6f 64 65 22 2c 20 22 70 31 22 2c 20 22 70  pcode", "p1", "p
4d70: 32 22 2c 20 22 70 33 22 2c 20 22 70 34 22 2c 20  2", "p3", "p4", 
4d80: 22 70 35 22 2c 20 22 63 6f 6d 6d 65 6e 74 22 2c  "p5", "comment",
4d90: 0a 20 20 20 20 20 20 20 22 6f 72 64 65 72 22 2c  .       "order",
4da0: 20 22 66 72 6f 6d 22 2c 20 22 64 65 74 61 69 6c   "from", "detail
4db0: 22 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69 6e 74  ".    };.    int
4dc0: 20 69 46 69 72 73 74 2c 20 6d 78 3b 0a 20 20 20   iFirst, mx;.   
4dd0: 20 69 66 28 20 70 50 61 72 73 65 2d 3e 65 78 70   if( pParse->exp
4de0: 6c 61 69 6e 3d 3d 32 20 29 7b 0a 20 20 20 20 20  lain==2 ){.     
4df0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
4e00: 75 6d 43 6f 6c 73 28 70 50 61 72 73 65 2d 3e 70  umCols(pParse->p
4e10: 56 64 62 65 2c 20 33 29 3b 0a 20 20 20 20 20 20  Vdbe, 3);.      
4e20: 69 46 69 72 73 74 20 3d 20 38 3b 0a 20 20 20 20  iFirst = 8;.    
4e30: 20 20 6d 78 20 3d 20 31 31 3b 0a 20 20 20 20 7d    mx = 11;.    }
4e40: 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69  else{.      sqli
4e50: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
4e60: 73 28 70 50 61 72 73 65 2d 3e 70 56 64 62 65 2c  s(pParse->pVdbe,
4e70: 20 38 29 3b 0a 20 20 20 20 20 20 69 46 69 72 73   8);.      iFirs
4e80: 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 6d 78 20  t = 0;.      mx 
4e90: 3d 20 38 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66  = 8;.    }.    f
4ea0: 6f 72 28 69 3d 69 46 69 72 73 74 3b 20 69 3c 6d  or(i=iFirst; i<m
4eb0: 78 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73  x; i++){.      s
4ec0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
4ed0: 4e 61 6d 65 28 70 50 61 72 73 65 2d 3e 70 56 64  Name(pParse->pVd
4ee0: 62 65 2c 20 69 2d 69 46 69 72 73 74 2c 20 43 4f  be, i-iFirst, CO
4ef0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 0a 20 20 20 20  LNAME_NAME,.    
4f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f10: 20 20 20 20 20 20 20 20 61 7a 43 6f 6c 4e 61 6d          azColNam
4f20: 65 5b 69 5d 2c 20 53 51 4c 49 54 45 5f 53 54 41  e[i], SQLITE_STA
4f30: 54 49 43 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  TIC);.    }.  }.
4f40: 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 73 71  #endif..  if( sq
4f50: 6c 69 74 65 33 53 61 66 65 74 79 4f 66 66 28 64  lite3SafetyOff(d
4f60: 62 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  b) ){.    rc = S
4f70: 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20  QLITE_MISUSE;.  
4f80: 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  }..  assert( db-
4f90: 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20 7c 7c  >init.busy==0 ||
4fa0: 20 73 61 76 65 53 71 6c 46 6c 61 67 3d 3d 30 20   saveSqlFlag==0 
4fb0: 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e 69 6e 69  );.  if( db->ini
4fc0: 74 2e 62 75 73 79 3d 3d 30 20 29 7b 0a 20 20 20  t.busy==0 ){.   
4fd0: 20 56 64 62 65 20 2a 70 56 64 62 65 20 3d 20 70   Vdbe *pVdbe = p
4fe0: 50 61 72 73 65 2d 3e 70 56 64 62 65 3b 0a 20 20  Parse->pVdbe;.  
4ff0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
5000: 53 71 6c 28 70 56 64 62 65 2c 20 7a 53 71 6c 2c  Sql(pVdbe, zSql,
5010: 20 28 69 6e 74 29 28 70 50 61 72 73 65 2d 3e 7a   (int)(pParse->z
5020: 54 61 69 6c 2d 7a 53 71 6c 29 2c 20 73 61 76 65  Tail-zSql), save
5030: 53 71 6c 46 6c 61 67 29 3b 0a 20 20 7d 0a 20 20  SqlFlag);.  }.  
5040: 69 66 28 20 70 50 61 72 73 65 2d 3e 70 56 64 62  if( pParse->pVdb
5050: 65 20 26 26 20 28 72 63 21 3d 53 51 4c 49 54 45  e && (rc!=SQLITE
5060: 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f  _OK || db->mallo
5070: 63 46 61 69 6c 65 64 29 20 29 7b 0a 20 20 20 20  cFailed) ){.    
5080: 73 71 6c 69 74 65 33 56 64 62 65 46 69 6e 61 6c  sqlite3VdbeFinal
5090: 69 7a 65 28 70 50 61 72 73 65 2d 3e 70 56 64 62  ize(pParse->pVdb
50a0: 65 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 21  e);.    assert(!
50b0: 28 2a 70 70 53 74 6d 74 29 29 3b 0a 20 20 7d 65  (*ppStmt));.  }e
50c0: 6c 73 65 7b 0a 20 20 20 20 2a 70 70 53 74 6d 74  lse{.    *ppStmt
50d0: 20 3d 20 28 73 71 6c 69 74 65 33 5f 73 74 6d 74   = (sqlite3_stmt
50e0: 2a 29 70 50 61 72 73 65 2d 3e 70 56 64 62 65 3b  *)pParse->pVdbe;
50f0: 0a 20 20 7d 0a 0a 20 20 69 66 28 20 7a 45 72 72  .  }..  if( zErr
5100: 4d 73 67 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  Msg ){.    sqlit
5110: 65 33 45 72 72 6f 72 28 64 62 2c 20 72 63 2c 20  e3Error(db, rc, 
5120: 22 25 73 22 2c 20 7a 45 72 72 4d 73 67 29 3b 0a  "%s", zErrMsg);.
5130: 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
5140: 65 28 64 62 2c 20 7a 45 72 72 4d 73 67 29 3b 0a  e(db, zErrMsg);.
5150: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c    }else{.    sql
5160: 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20 72 63  ite3Error(db, rc
5170: 2c 20 30 29 3b 0a 20 20 7d 0a 0a 65 6e 64 5f 70  , 0);.  }..end_p
5180: 72 65 70 61 72 65 3a 0a 0a 20 20 73 71 6c 69 74  repare:..  sqlit
5190: 65 33 53 74 61 63 6b 46 72 65 65 28 64 62 2c 20  e3StackFree(db, 
51a0: 70 50 61 72 73 65 29 3b 0a 20 20 72 63 20 3d 20  pParse);.  rc = 
51b0: 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 64  sqlite3ApiExit(d
51c0: 62 2c 20 72 63 29 3b 0a 20 20 61 73 73 65 72 74  b, rc);.  assert
51d0: 28 20 28 72 63 26 64 62 2d 3e 65 72 72 4d 61 73  ( (rc&db->errMas
51e0: 6b 29 3d 3d 72 63 20 29 3b 0a 20 20 72 65 74 75  k)==rc );.  retu
51f0: 72 6e 20 72 63 3b 0a 7d 0a 73 74 61 74 69 63 20  rn rc;.}.static 
5200: 69 6e 74 20 73 71 6c 69 74 65 33 4c 6f 63 6b 41  int sqlite3LockA
5210: 6e 64 50 72 65 70 61 72 65 28 0a 20 20 73 71 6c  ndPrepare(.  sql
5220: 69 74 65 33 20 2a 64 62 2c 20 20 20 20 20 20 20  ite3 *db,       
5230: 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
5240: 73 65 20 68 61 6e 64 6c 65 2e 20 2a 2f 0a 20 20  se handle. */.  
5250: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c  const char *zSql
5260: 2c 20 20 20 20 20 20 20 20 20 2f 2a 20 55 54 46  ,         /* UTF
5270: 2d 38 20 65 6e 63 6f 64 65 64 20 53 51 4c 20 73  -8 encoded SQL s
5280: 74 61 74 65 6d 65 6e 74 2e 20 2a 2f 0a 20 20 69  tatement. */.  i
5290: 6e 74 20 6e 42 79 74 65 73 2c 20 20 20 20 20 20  nt nBytes,      
52a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67           /* Leng
52b0: 74 68 20 6f 66 20 7a 53 71 6c 20 69 6e 20 62 79  th of zSql in by
52c0: 74 65 73 2e 20 2a 2f 0a 20 20 69 6e 74 20 73 61  tes. */.  int sa
52d0: 76 65 53 71 6c 46 6c 61 67 2c 20 20 20 20 20 20  veSqlFlag,      
52e0: 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 63      /* True to c
52f0: 6f 70 79 20 53 51 4c 20 74 65 78 74 20 69 6e 74  opy SQL text int
5300: 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74  o the sqlite3_st
5310: 6d 74 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  mt */.  sqlite3_
5320: 73 74 6d 74 20 2a 2a 70 70 53 74 6d 74 2c 20 20  stmt **ppStmt,  
5330: 20 20 2f 2a 20 4f 55 54 3a 20 41 20 70 6f 69 6e    /* OUT: A poin
5340: 74 65 72 20 74 6f 20 74 68 65 20 70 72 65 70 61  ter to the prepa
5350: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f  red statement */
5360: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a  .  const char **
5370: 70 7a 54 61 69 6c 20 20 20 20 20 20 20 2f 2a 20  pzTail       /* 
5380: 4f 55 54 3a 20 45 6e 64 20 6f 66 20 70 61 72 73  OUT: End of pars
5390: 65 64 20 73 74 72 69 6e 67 20 2a 2f 0a 29 7b 0a  ed string */.){.
53a0: 20 20 69 6e 74 20 72 63 3b 0a 20 20 61 73 73 65    int rc;.  asse
53b0: 72 74 28 20 70 70 53 74 6d 74 21 3d 30 20 29 3b  rt( ppStmt!=0 );
53c0: 0a 20 20 2a 70 70 53 74 6d 74 20 3d 20 30 3b 0a  .  *ppStmt = 0;.
53d0: 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 53 61    if( !sqlite3Sa
53e0: 66 65 74 79 43 68 65 63 6b 4f 6b 28 64 62 29 20  fetyCheckOk(db) 
53f0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51  ){.    return SQ
5400: 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d  LITE_MISUSE;.  }
5410: 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
5420: 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65 78  _enter(db->mutex
5430: 29 3b 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65  );.  sqlite3Btre
5440: 65 45 6e 74 65 72 41 6c 6c 28 64 62 29 3b 0a 20  eEnterAll(db);. 
5450: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 50 72 65   rc = sqlite3Pre
5460: 70 61 72 65 28 64 62 2c 20 7a 53 71 6c 2c 20 6e  pare(db, zSql, n
5470: 42 79 74 65 73 2c 20 73 61 76 65 53 71 6c 46 6c  Bytes, saveSqlFl
5480: 61 67 2c 20 70 70 53 74 6d 74 2c 20 70 7a 54 61  ag, ppStmt, pzTa
5490: 69 6c 29 3b 0a 20 20 73 71 6c 69 74 65 33 42 74  il);.  sqlite3Bt
54a0: 72 65 65 4c 65 61 76 65 41 6c 6c 28 64 62 29 3b  reeLeaveAll(db);
54b0: 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
54c0: 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78  _leave(db->mutex
54d0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a  );.  return rc;.
54e0: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 72 75 6e 20 74  }../*.** Rerun t
54f0: 68 65 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f  he compilation o
5500: 66 20 61 20 73 74 61 74 65 6d 65 6e 74 20 61 66  f a statement af
5510: 74 65 72 20 61 20 73 63 68 65 6d 61 20 63 68 61  ter a schema cha
5520: 6e 67 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  nge..**.** If th
5530: 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73  e statement is s
5540: 75 63 63 65 73 73 66 75 6c 6c 79 20 72 65 63 6f  uccessfully reco
5550: 6d 70 69 6c 65 64 2c 20 72 65 74 75 72 6e 20 53  mpiled, return S
5560: 51 4c 49 54 45 5f 4f 4b 2e 20 4f 74 68 65 72 77  QLITE_OK. Otherw
5570: 69 73 65 2c 0a 2a 2a 20 69 66 20 74 68 65 20 73  ise,.** if the s
5580: 74 61 74 65 6d 65 6e 74 20 63 61 6e 6e 6f 74 20  tatement cannot 
5590: 62 65 20 72 65 63 6f 6d 70 69 6c 65 64 20 62 65  be recompiled be
55a0: 63 61 75 73 65 20 61 6e 6f 74 68 65 72 20 63 6f  cause another co
55b0: 6e 6e 65 63 74 69 6f 6e 20 68 61 73 0a 2a 2a 20  nnection has.** 
55c0: 6c 6f 63 6b 65 64 20 74 68 65 20 73 71 6c 69 74  locked the sqlit
55d0: 65 33 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 2c  e3_master table,
55e0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4c   return SQLITE_L
55f0: 4f 43 4b 45 44 2e 20 49 66 20 61 6e 79 20 6f 74  OCKED. If any ot
5600: 68 65 72 20 65 72 72 6f 72 0a 2a 2a 20 6f 63 63  her error.** occ
5610: 75 72 73 2c 20 72 65 74 75 72 6e 20 53 51 4c 49  urs, return SQLI
5620: 54 45 5f 53 43 48 45 4d 41 2e 0a 2a 2f 0a 69 6e  TE_SCHEMA..*/.in
5630: 74 20 73 71 6c 69 74 65 33 52 65 70 72 65 70 61  t sqlite3Reprepa
5640: 72 65 28 56 64 62 65 20 2a 70 29 7b 0a 20 20 69  re(Vdbe *p){.  i
5650: 6e 74 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33  nt rc;.  sqlite3
5660: 5f 73 74 6d 74 20 2a 70 4e 65 77 3b 0a 20 20 63  _stmt *pNew;.  c
5670: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 3b  onst char *zSql;
5680: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a  .  sqlite3 *db;.
5690: 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
56a0: 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 73 71  e3_mutex_held(sq
56b0: 6c 69 74 65 33 56 64 62 65 44 62 28 70 29 2d 3e  lite3VdbeDb(p)->
56c0: 6d 75 74 65 78 29 20 29 3b 0a 20 20 7a 53 71 6c  mutex) );.  zSql
56d0: 20 3d 20 73 71 6c 69 74 65 33 5f 73 71 6c 28 28   = sqlite3_sql((
56e0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29 70  sqlite3_stmt *)p
56f0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 53 71  );.  assert( zSq
5700: 6c 21 3d 30 20 29 3b 20 20 2f 2a 20 52 65 70 72  l!=0 );  /* Repr
5710: 65 70 61 72 65 20 6f 6e 6c 79 20 63 61 6c 6c 65  epare only calle
5720: 64 20 66 6f 72 20 70 72 65 70 61 72 65 5f 76 32  d for prepare_v2
5730: 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 2a 2f  () statements */
5740: 0a 20 20 64 62 20 3d 20 73 71 6c 69 74 65 33 56  .  db = sqlite3V
5750: 64 62 65 44 62 28 70 29 3b 0a 20 20 61 73 73 65  dbeDb(p);.  asse
5760: 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  rt( sqlite3_mute
5770: 78 5f 68 65 6c 64 28 64 62 2d 3e 6d 75 74 65 78  x_held(db->mutex
5780: 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ) );.  rc = sqli
5790: 74 65 33 4c 6f 63 6b 41 6e 64 50 72 65 70 61 72  te3LockAndPrepar
57a0: 65 28 64 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20  e(db, zSql, -1, 
57b0: 30 2c 20 26 70 4e 65 77 2c 20 30 29 3b 0a 20 20  0, &pNew, 0);.  
57c0: 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 69 66  if( rc ){.    if
57d0: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d  ( rc==SQLITE_NOM
57e0: 45 4d 20 29 7b 0a 20 20 20 20 20 20 64 62 2d 3e  EM ){.      db->
57f0: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31  mallocFailed = 1
5800: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65  ;.    }.    asse
5810: 72 74 28 20 70 4e 65 77 3d 3d 30 20 29 3b 0a 20  rt( pNew==0 );. 
5820: 20 20 20 72 65 74 75 72 6e 20 28 72 63 3d 3d 53     return (rc==S
5830: 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 29 20 3f 20  QLITE_LOCKED) ? 
5840: 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 3a 20  SQLITE_LOCKED : 
5850: 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20  SQLITE_SCHEMA;. 
5860: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
5870: 72 74 28 20 70 4e 65 77 21 3d 30 20 29 3b 0a 20  rt( pNew!=0 );. 
5880: 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65   }.  sqlite3Vdbe
5890: 53 77 61 70 28 28 56 64 62 65 2a 29 70 4e 65 77  Swap((Vdbe*)pNew
58a0: 2c 20 70 29 3b 0a 20 20 73 71 6c 69 74 65 33 54  , p);.  sqlite3T
58b0: 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 28  ransferBindings(
58c0: 70 4e 65 77 2c 20 28 73 71 6c 69 74 65 33 5f 73  pNew, (sqlite3_s
58d0: 74 6d 74 2a 29 70 29 3b 0a 20 20 73 71 6c 69 74  tmt*)p);.  sqlit
58e0: 65 33 56 64 62 65 52 65 73 65 74 53 74 65 70 52  e3VdbeResetStepR
58f0: 65 73 75 6c 74 28 28 56 64 62 65 2a 29 70 4e 65  esult((Vdbe*)pNe
5900: 77 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  w);.  sqlite3Vdb
5910: 65 46 69 6e 61 6c 69 7a 65 28 28 56 64 62 65 2a  eFinalize((Vdbe*
5920: 29 70 4e 65 77 29 3b 0a 20 20 72 65 74 75 72 6e  )pNew);.  return
5930: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 0a   SQLITE_OK;.}...
5940: 2f 2a 0a 2a 2a 20 54 77 6f 20 76 65 72 73 69 6f  /*.** Two versio
5950: 6e 73 20 6f 66 20 74 68 65 20 6f 66 66 69 63 69  ns of the offici
5960: 61 6c 20 41 50 49 2e 20 20 4c 65 67 61 63 79 20  al API.  Legacy 
5970: 61 6e 64 20 6e 65 77 20 75 73 65 2e 20 20 49 6e  and new use.  In
5980: 20 74 68 65 20 6c 65 67 61 63 79 0a 2a 2a 20 76   the legacy.** v
5990: 65 72 73 69 6f 6e 2c 20 74 68 65 20 6f 72 69 67  ersion, the orig
59a0: 69 6e 61 6c 20 53 51 4c 20 74 65 78 74 20 69 73  inal SQL text is
59b0: 20 6e 6f 74 20 73 61 76 65 64 20 69 6e 20 74 68   not saved in th
59c0: 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
59d0: 6d 65 6e 74 0a 2a 2a 20 61 6e 64 20 73 6f 20 69  ment.** and so i
59e0: 66 20 61 20 73 63 68 65 6d 61 20 63 68 61 6e 67  f a schema chang
59f0: 65 20 6f 63 63 75 72 73 2c 20 53 51 4c 49 54 45  e occurs, SQLITE
5a00: 5f 53 43 48 45 4d 41 20 69 73 20 72 65 74 75 72  _SCHEMA is retur
5a10: 6e 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65  ned by.** sqlite
5a20: 33 5f 73 74 65 70 28 29 2e 20 20 49 6e 20 74 68  3_step().  In th
5a30: 65 20 6e 65 77 20 76 65 72 73 69 6f 6e 2c 20 74  e new version, t
5a40: 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 20  he original SQL 
5a50: 74 65 78 74 20 69 73 20 72 65 74 61 69 6e 65 64  text is retained
5a60: 0a 2a 2a 20 61 6e 64 20 74 68 65 20 73 74 61 74  .** and the stat
5a70: 65 6d 65 6e 74 20 69 73 20 61 75 74 6f 6d 61 74  ement is automat
5a80: 69 63 61 6c 6c 79 20 72 65 63 6f 6d 70 69 6c 65  ically recompile
5a90: 64 20 69 66 20 61 6e 20 73 63 68 65 6d 61 20 63  d if an schema c
5aa0: 68 61 6e 67 65 0a 2a 2a 20 6f 63 63 75 72 73 2e  hange.** occurs.
5ab0: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
5ac0: 70 72 65 70 61 72 65 28 0a 20 20 73 71 6c 69 74  prepare(.  sqlit
5ad0: 65 33 20 2a 64 62 2c 20 20 20 20 20 20 20 20 20  e3 *db,         
5ae0: 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65       /* Database
5af0: 20 68 61 6e 64 6c 65 2e 20 2a 2f 0a 20 20 63 6f   handle. */.  co
5b00: 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 2c 20  nst char *zSql, 
5b10: 20 20 20 20 20 20 20 20 2f 2a 20 55 54 46 2d 38          /* UTF-8
5b20: 20 65 6e 63 6f 64 65 64 20 53 51 4c 20 73 74 61   encoded SQL sta
5b30: 74 65 6d 65 6e 74 2e 20 2a 2f 0a 20 20 69 6e 74  tement. */.  int
5b40: 20 6e 42 79 74 65 73 2c 20 20 20 20 20 20 20 20   nBytes,        
5b50: 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68         /* Length
5b60: 20 6f 66 20 7a 53 71 6c 20 69 6e 20 62 79 74 65   of zSql in byte
5b70: 73 2e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  s. */.  sqlite3_
5b80: 73 74 6d 74 20 2a 2a 70 70 53 74 6d 74 2c 20 20  stmt **ppStmt,  
5b90: 20 20 2f 2a 20 4f 55 54 3a 20 41 20 70 6f 69 6e    /* OUT: A poin
5ba0: 74 65 72 20 74 6f 20 74 68 65 20 70 72 65 70 61  ter to the prepa
5bb0: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f  red statement */
5bc0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a  .  const char **
5bd0: 70 7a 54 61 69 6c 20 20 20 20 20 20 20 2f 2a 20  pzTail       /* 
5be0: 4f 55 54 3a 20 45 6e 64 20 6f 66 20 70 61 72 73  OUT: End of pars
5bf0: 65 64 20 73 74 72 69 6e 67 20 2a 2f 0a 29 7b 0a  ed string */.){.
5c00: 20 20 69 6e 74 20 72 63 3b 0a 20 20 72 63 20 3d    int rc;.  rc =
5c10: 20 73 71 6c 69 74 65 33 4c 6f 63 6b 41 6e 64 50   sqlite3LockAndP
5c20: 72 65 70 61 72 65 28 64 62 2c 7a 53 71 6c 2c 6e  repare(db,zSql,n
5c30: 42 79 74 65 73 2c 30 2c 70 70 53 74 6d 74 2c 70  Bytes,0,ppStmt,p
5c40: 7a 54 61 69 6c 29 3b 0a 20 20 61 73 73 65 72 74  zTail);.  assert
5c50: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
5c60: 7c 7c 20 70 70 53 74 6d 74 3d 3d 30 20 7c 7c 20  || ppStmt==0 || 
5c70: 2a 70 70 53 74 6d 74 3d 3d 30 20 29 3b 20 20 2f  *ppStmt==0 );  /
5c80: 2a 20 56 45 52 49 46 59 3a 20 46 31 33 30 32 31  * VERIFY: F13021
5c90: 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 72 63 3b   */.  return rc;
5ca0: 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 70  .}.int sqlite3_p
5cb0: 72 65 70 61 72 65 5f 76 32 28 0a 20 20 73 71 6c  repare_v2(.  sql
5cc0: 69 74 65 33 20 2a 64 62 2c 20 20 20 20 20 20 20  ite3 *db,       
5cd0: 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
5ce0: 73 65 20 68 61 6e 64 6c 65 2e 20 2a 2f 0a 20 20  se handle. */.  
5cf0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c  const char *zSql
5d00: 2c 20 20 20 20 20 20 20 20 20 2f 2a 20 55 54 46  ,         /* UTF
5d10: 2d 38 20 65 6e 63 6f 64 65 64 20 53 51 4c 20 73  -8 encoded SQL s
5d20: 74 61 74 65 6d 65 6e 74 2e 20 2a 2f 0a 20 20 69  tatement. */.  i
5d30: 6e 74 20 6e 42 79 74 65 73 2c 20 20 20 20 20 20  nt nBytes,      
5d40: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67           /* Leng
5d50: 74 68 20 6f 66 20 7a 53 71 6c 20 69 6e 20 62 79  th of zSql in by
5d60: 74 65 73 2e 20 2a 2f 0a 20 20 73 71 6c 69 74 65  tes. */.  sqlite
5d70: 33 5f 73 74 6d 74 20 2a 2a 70 70 53 74 6d 74 2c  3_stmt **ppStmt,
5d80: 20 20 20 20 2f 2a 20 4f 55 54 3a 20 41 20 70 6f      /* OUT: A po
5d90: 69 6e 74 65 72 20 74 6f 20 74 68 65 20 70 72 65  inter to the pre
5da0: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
5db0: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
5dc0: 2a 2a 70 7a 54 61 69 6c 20 20 20 20 20 20 20 2f  **pzTail       /
5dd0: 2a 20 4f 55 54 3a 20 45 6e 64 20 6f 66 20 70 61  * OUT: End of pa
5de0: 72 73 65 64 20 73 74 72 69 6e 67 20 2a 2f 0a 29  rsed string */.)
5df0: 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 72 63  {.  int rc;.  rc
5e00: 20 3d 20 73 71 6c 69 74 65 33 4c 6f 63 6b 41 6e   = sqlite3LockAn
5e10: 64 50 72 65 70 61 72 65 28 64 62 2c 7a 53 71 6c  dPrepare(db,zSql
5e20: 2c 6e 42 79 74 65 73 2c 31 2c 70 70 53 74 6d 74  ,nBytes,1,ppStmt
5e30: 2c 70 7a 54 61 69 6c 29 3b 0a 20 20 61 73 73 65  ,pzTail);.  asse
5e40: 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
5e50: 4b 20 7c 7c 20 70 70 53 74 6d 74 3d 3d 30 20 7c  K || ppStmt==0 |
5e60: 7c 20 2a 70 70 53 74 6d 74 3d 3d 30 20 29 3b 20  | *ppStmt==0 ); 
5e70: 20 2f 2a 20 56 45 52 49 46 59 3a 20 46 31 33 30   /* VERIFY: F130
5e80: 32 31 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 72  21 */.  return r
5e90: 63 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53  c;.}...#ifndef S
5ea0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
5eb0: 0a 2f 2a 0a 2a 2a 20 43 6f 6d 70 69 6c 65 20 74  ./*.** Compile t
5ec0: 68 65 20 55 54 46 2d 31 36 20 65 6e 63 6f 64 65  he UTF-16 encode
5ed0: 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  d SQL statement 
5ee0: 7a 53 71 6c 20 69 6e 74 6f 20 61 20 73 74 61 74  zSql into a stat
5ef0: 65 6d 65 6e 74 20 68 61 6e 64 6c 65 2e 0a 2a 2f  ement handle..*/
5f00: 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69  .static int sqli
5f10: 74 65 33 50 72 65 70 61 72 65 31 36 28 0a 20 20  te3Prepare16(.  
5f20: 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20  sqlite3 *db,    
5f30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
5f40: 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 2a 2f  abase handle. */
5f50: 20 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a   .  const void *
5f60: 7a 53 71 6c 2c 20 20 20 20 20 20 20 20 20 2f 2a  zSql,         /*
5f70: 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 53   UTF-8 encoded S
5f80: 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20 2a 2f  QL statement. */
5f90: 0a 20 20 69 6e 74 20 6e 42 79 74 65 73 2c 20 20  .  int nBytes,  
5fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
5fb0: 4c 65 6e 67 74 68 20 6f 66 20 7a 53 71 6c 20 69  Length of zSql i
5fc0: 6e 20 62 79 74 65 73 2e 20 2a 2f 0a 20 20 69 6e  n bytes. */.  in
5fd0: 74 20 73 61 76 65 53 71 6c 46 6c 61 67 2c 20 20  t saveSqlFlag,  
5fe0: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
5ff0: 74 6f 20 73 61 76 65 20 53 51 4c 20 74 65 78 74  to save SQL text
6000: 20 69 6e 74 6f 20 74 68 65 20 73 71 6c 69 74 65   into the sqlite
6010: 33 5f 73 74 6d 74 20 2a 2f 0a 20 20 73 71 6c 69  3_stmt */.  sqli
6020: 74 65 33 5f 73 74 6d 74 20 2a 2a 70 70 53 74 6d  te3_stmt **ppStm
6030: 74 2c 20 20 20 20 2f 2a 20 4f 55 54 3a 20 41 20  t,    /* OUT: A 
6040: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 70  pointer to the p
6050: 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
6060: 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 76 6f 69  t */.  const voi
6070: 64 20 2a 2a 70 7a 54 61 69 6c 20 20 20 20 20 20  d **pzTail      
6080: 20 2f 2a 20 4f 55 54 3a 20 45 6e 64 20 6f 66 20   /* OUT: End of 
6090: 70 61 72 73 65 64 20 73 74 72 69 6e 67 20 2a 2f  parsed string */
60a0: 0a 29 7b 0a 20 20 2f 2a 20 54 68 69 73 20 66 75  .){.  /* This fu
60b0: 6e 63 74 69 6f 6e 20 63 75 72 72 65 6e 74 6c 79  nction currently
60c0: 20 77 6f 72 6b 73 20 62 79 20 66 69 72 73 74 20   works by first 
60d0: 74 72 61 6e 73 66 6f 72 6d 69 6e 67 20 74 68 65  transforming the
60e0: 20 55 54 46 2d 31 36 0a 20 20 2a 2a 20 65 6e 63   UTF-16.  ** enc
60f0: 6f 64 65 64 20 73 74 72 69 6e 67 20 74 6f 20 55  oded string to U
6100: 54 46 2d 38 2c 20 74 68 65 6e 20 69 6e 76 6f 6b  TF-8, then invok
6110: 69 6e 67 20 73 71 6c 69 74 65 33 5f 70 72 65 70  ing sqlite3_prep
6120: 61 72 65 28 29 2e 20 54 68 65 0a 20 20 2a 2a 20  are(). The.  ** 
6130: 74 72 69 63 6b 79 20 62 69 74 20 69 73 20 66 69  tricky bit is fi
6140: 67 75 72 69 6e 67 20 6f 75 74 20 74 68 65 20 70  guring out the p
6150: 6f 69 6e 74 65 72 20 74 6f 20 72 65 74 75 72 6e  ointer to return
6160: 20 69 6e 20 2a 70 7a 54 61 69 6c 2e 0a 20 20 2a   in *pzTail..  *
6170: 2f 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 38 3b  /.  char *zSql8;
6180: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
6190: 54 61 69 6c 38 20 3d 20 30 3b 0a 20 20 69 6e 74  Tail8 = 0;.  int
61a0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
61b0: 0a 0a 20 20 61 73 73 65 72 74 28 20 70 70 53 74  ..  assert( ppSt
61c0: 6d 74 20 29 3b 0a 20 20 2a 70 70 53 74 6d 74 20  mt );.  *ppStmt 
61d0: 3d 20 30 3b 0a 20 20 69 66 28 20 21 73 71 6c 69  = 0;.  if( !sqli
61e0: 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b  te3SafetyCheckOk
61f0: 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75  (db) ){.    retu
6200: 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  rn SQLITE_MISUSE
6210: 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f  ;.  }.  sqlite3_
6220: 6d 75 74 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e  mutex_enter(db->
6230: 6d 75 74 65 78 29 3b 0a 20 20 7a 53 71 6c 38 20  mutex);.  zSql8 
6240: 3d 20 73 71 6c 69 74 65 33 55 74 66 31 36 74 6f  = sqlite3Utf16to
6250: 38 28 64 62 2c 20 7a 53 71 6c 2c 20 6e 42 79 74  8(db, zSql, nByt
6260: 65 73 29 3b 0a 20 20 69 66 28 20 7a 53 71 6c 38  es);.  if( zSql8
6270: 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
6280: 69 74 65 33 4c 6f 63 6b 41 6e 64 50 72 65 70 61  ite3LockAndPrepa
6290: 72 65 28 64 62 2c 20 7a 53 71 6c 38 2c 20 2d 31  re(db, zSql8, -1
62a0: 2c 20 73 61 76 65 53 71 6c 46 6c 61 67 2c 20 70  , saveSqlFlag, p
62b0: 70 53 74 6d 74 2c 20 26 7a 54 61 69 6c 38 29 3b  pStmt, &zTail8);
62c0: 0a 20 20 7d 0a 0a 20 20 69 66 28 20 7a 54 61 69  .  }..  if( zTai
62d0: 6c 38 20 26 26 20 70 7a 54 61 69 6c 20 29 7b 0a  l8 && pzTail ){.
62e0: 20 20 20 20 2f 2a 20 49 66 20 73 71 6c 69 74 65      /* If sqlite
62f0: 33 5f 70 72 65 70 61 72 65 20 72 65 74 75 72 6e  3_prepare return
6300: 73 20 61 20 74 61 69 6c 20 70 6f 69 6e 74 65 72  s a tail pointer
6310: 2c 20 77 65 20 63 61 6c 63 75 6c 61 74 65 20 74  , we calculate t
6320: 68 65 0a 20 20 20 20 2a 2a 20 65 71 75 69 76 61  he.    ** equiva
6330: 6c 65 6e 74 20 70 6f 69 6e 74 65 72 20 69 6e 74  lent pointer int
6340: 6f 20 74 68 65 20 55 54 46 2d 31 36 20 73 74 72  o the UTF-16 str
6350: 69 6e 67 20 62 79 20 63 6f 75 6e 74 69 6e 67 20  ing by counting 
6360: 74 68 65 20 75 6e 69 63 6f 64 65 0a 20 20 20 20  the unicode.    
6370: 2a 2a 20 63 68 61 72 61 63 74 65 72 73 20 62 65  ** characters be
6380: 74 77 65 65 6e 20 7a 53 71 6c 38 20 61 6e 64 20  tween zSql8 and 
6390: 7a 54 61 69 6c 38 2c 20 61 6e 64 20 74 68 65 6e  zTail8, and then
63a0: 20 72 65 74 75 72 6e 69 6e 67 20 61 20 70 6f 69   returning a poi
63b0: 6e 74 65 72 0a 20 20 20 20 2a 2a 20 74 68 65 20  nter.    ** the 
63c0: 73 61 6d 65 20 6e 75 6d 62 65 72 20 6f 66 20 63  same number of c
63d0: 68 61 72 61 63 74 65 72 73 20 69 6e 74 6f 20 74  haracters into t
63e0: 68 65 20 55 54 46 2d 31 36 20 73 74 72 69 6e 67  he UTF-16 string
63f0: 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 6e 74  ..    */.    int
6400: 20 63 68 61 72 73 5f 70 61 72 73 65 64 20 3d 20   chars_parsed = 
6410: 73 71 6c 69 74 65 33 55 74 66 38 43 68 61 72 4c  sqlite3Utf8CharL
6420: 65 6e 28 7a 53 71 6c 38 2c 20 28 69 6e 74 29 28  en(zSql8, (int)(
6430: 7a 54 61 69 6c 38 2d 7a 53 71 6c 38 29 29 3b 0a  zTail8-zSql8));.
6440: 20 20 20 20 2a 70 7a 54 61 69 6c 20 3d 20 28 75      *pzTail = (u
6450: 38 20 2a 29 7a 53 71 6c 20 2b 20 73 71 6c 69 74  8 *)zSql + sqlit
6460: 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28 7a  e3Utf16ByteLen(z
6470: 53 71 6c 2c 20 63 68 61 72 73 5f 70 61 72 73 65  Sql, chars_parse
6480: 64 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  d);.  }.  sqlite
6490: 33 44 62 46 72 65 65 28 64 62 2c 20 7a 53 71 6c  3DbFree(db, zSql
64a0: 38 29 3b 20 0a 20 20 72 63 20 3d 20 73 71 6c 69  8); .  rc = sqli
64b0: 74 65 33 41 70 69 45 78 69 74 28 64 62 2c 20 72  te3ApiExit(db, r
64c0: 63 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  c);.  sqlite3_mu
64d0: 74 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75  tex_leave(db->mu
64e0: 74 65 78 29 3b 0a 20 20 72 65 74 75 72 6e 20 72  tex);.  return r
64f0: 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 77 6f 20  c;.}../*.** Two 
6500: 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 65 20  versions of the 
6510: 6f 66 66 69 63 69 61 6c 20 41 50 49 2e 20 20 4c  official API.  L
6520: 65 67 61 63 79 20 61 6e 64 20 6e 65 77 20 75 73  egacy and new us
6530: 65 2e 20 20 49 6e 20 74 68 65 20 6c 65 67 61 63  e.  In the legac
6540: 79 0a 2a 2a 20 76 65 72 73 69 6f 6e 2c 20 74 68  y.** version, th
6550: 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 20 74  e original SQL t
6560: 65 78 74 20 69 73 20 6e 6f 74 20 73 61 76 65 64  ext is not saved
6570: 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
6580: 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 61 6e   statement.** an
6590: 64 20 73 6f 20 69 66 20 61 20 73 63 68 65 6d 61  d so if a schema
65a0: 20 63 68 61 6e 67 65 20 6f 63 63 75 72 73 2c 20   change occurs, 
65b0: 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 69 73  SQLITE_SCHEMA is
65c0: 20 72 65 74 75 72 6e 65 64 20 62 79 0a 2a 2a 20   returned by.** 
65d0: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 2e 20  sqlite3_step(). 
65e0: 20 49 6e 20 74 68 65 20 6e 65 77 20 76 65 72 73   In the new vers
65f0: 69 6f 6e 2c 20 74 68 65 20 6f 72 69 67 69 6e 61  ion, the origina
6600: 6c 20 53 51 4c 20 74 65 78 74 20 69 73 20 72 65  l SQL text is re
6610: 74 61 69 6e 65 64 0a 2a 2a 20 61 6e 64 20 74 68  tained.** and th
6620: 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61  e statement is a
6630: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 72 65 63  utomatically rec
6640: 6f 6d 70 69 6c 65 64 20 69 66 20 61 6e 20 73 63  ompiled if an sc
6650: 68 65 6d 61 20 63 68 61 6e 67 65 0a 2a 2a 20 6f  hema change.** o
6660: 63 63 75 72 73 2e 0a 2a 2f 0a 69 6e 74 20 73 71  ccurs..*/.int sq
6670: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 28  lite3_prepare16(
6680: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  .  sqlite3 *db, 
6690: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
66a0: 44 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e  Database handle.
66b0: 20 2a 2f 20 0a 20 20 63 6f 6e 73 74 20 76 6f 69   */ .  const voi
66c0: 64 20 2a 7a 53 71 6c 2c 20 20 20 20 20 20 20 20  d *zSql,        
66d0: 20 2f 2a 20 55 54 46 2d 38 20 65 6e 63 6f 64 65   /* UTF-8 encode
66e0: 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e  d SQL statement.
66f0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 73   */.  int nBytes
6700: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
6710: 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 7a 53 71  /* Length of zSq
6720: 6c 20 69 6e 20 62 79 74 65 73 2e 20 2a 2f 0a 20  l in bytes. */. 
6730: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2a   sqlite3_stmt **
6740: 70 70 53 74 6d 74 2c 20 20 20 20 2f 2a 20 4f 55  ppStmt,    /* OU
6750: 54 3a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  T: A pointer to 
6760: 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
6770: 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73  tement */.  cons
6780: 74 20 76 6f 69 64 20 2a 2a 70 7a 54 61 69 6c 20  t void **pzTail 
6790: 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20 45 6e        /* OUT: En
67a0: 64 20 6f 66 20 70 61 72 73 65 64 20 73 74 72 69  d of parsed stri
67b0: 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 72  ng */.){.  int r
67c0: 63 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  c;.  rc = sqlite
67d0: 33 50 72 65 70 61 72 65 31 36 28 64 62 2c 7a 53  3Prepare16(db,zS
67e0: 71 6c 2c 6e 42 79 74 65 73 2c 30 2c 70 70 53 74  ql,nBytes,0,ppSt
67f0: 6d 74 2c 70 7a 54 61 69 6c 29 3b 0a 20 20 61 73  mt,pzTail);.  as
6800: 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
6810: 5f 4f 4b 20 7c 7c 20 70 70 53 74 6d 74 3d 3d 30  _OK || ppStmt==0
6820: 20 7c 7c 20 2a 70 70 53 74 6d 74 3d 3d 30 20 29   || *ppStmt==0 )
6830: 3b 20 20 2f 2a 20 56 45 52 49 46 59 3a 20 46 31  ;  /* VERIFY: F1
6840: 33 30 32 31 20 2a 2f 0a 20 20 72 65 74 75 72 6e  3021 */.  return
6850: 20 72 63 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74   rc;.}.int sqlit
6860: 65 33 5f 70 72 65 70 61 72 65 31 36 5f 76 32 28  e3_prepare16_v2(
6870: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  .  sqlite3 *db, 
6880: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
6890: 44 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e  Database handle.
68a0: 20 2a 2f 20 0a 20 20 63 6f 6e 73 74 20 76 6f 69   */ .  const voi
68b0: 64 20 2a 7a 53 71 6c 2c 20 20 20 20 20 20 20 20  d *zSql,        
68c0: 20 2f 2a 20 55 54 46 2d 38 20 65 6e 63 6f 64 65   /* UTF-8 encode
68d0: 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e  d SQL statement.
68e0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 73   */.  int nBytes
68f0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
6900: 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 7a 53 71  /* Length of zSq
6910: 6c 20 69 6e 20 62 79 74 65 73 2e 20 2a 2f 0a 20  l in bytes. */. 
6920: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2a   sqlite3_stmt **
6930: 70 70 53 74 6d 74 2c 20 20 20 20 2f 2a 20 4f 55  ppStmt,    /* OU
6940: 54 3a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  T: A pointer to 
6950: 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
6960: 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73  tement */.  cons
6970: 74 20 76 6f 69 64 20 2a 2a 70 7a 54 61 69 6c 20  t void **pzTail 
6980: 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20 45 6e        /* OUT: En
6990: 64 20 6f 66 20 70 61 72 73 65 64 20 73 74 72 69  d of parsed stri
69a0: 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 72  ng */.){.  int r
69b0: 63 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  c;.  rc = sqlite
69c0: 33 50 72 65 70 61 72 65 31 36 28 64 62 2c 7a 53  3Prepare16(db,zS
69d0: 71 6c 2c 6e 42 79 74 65 73 2c 31 2c 70 70 53 74  ql,nBytes,1,ppSt
69e0: 6d 74 2c 70 7a 54 61 69 6c 29 3b 0a 20 20 61 73  mt,pzTail);.  as
69f0: 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
6a00: 5f 4f 4b 20 7c 7c 20 70 70 53 74 6d 74 3d 3d 30  _OK || ppStmt==0
6a10: 20 7c 7c 20 2a 70 70 53 74 6d 74 3d 3d 30 20 29   || *ppStmt==0 )
6a20: 3b 20 20 2f 2a 20 56 45 52 49 46 59 3a 20 46 31  ;  /* VERIFY: F1
6a30: 33 30 32 31 20 2a 2f 0a 20 20 72 65 74 75 72 6e  3021 */.  return
6a40: 20 72 63 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f   rc;.}..#endif /
6a50: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  * SQLITE_OMIT_UT
6a60: 46 31 36 20 2a 2f 0a                             F16 */.