/ Hex Artifact Content
Login

Artifact b086fea6a1952db88beca31fdd621201ee5e4ce3f02905248cc3035a8174aa89:


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 2f 0a 23 69  from disk..*/.#i
0210: 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65 49 6e  nclude "sqliteIn
0220: 74 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 46 69 6c 6c  t.h"../*.** Fill
0230: 20 74 68 65 20 49 6e 69 74 44 61 74 61 20 73 74   the InitData st
0240: 72 75 63 74 75 72 65 20 77 69 74 68 20 61 6e 20  ructure with an 
0250: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 74 68  error message th
0260: 61 74 20 69 6e 64 69 63 61 74 65 73 0a 2a 2a 20  at indicates.** 
0270: 74 68 61 74 20 74 68 65 20 64 61 74 61 62 61 73  that the databas
0280: 65 20 69 73 20 63 6f 72 72 75 70 74 2e 0a 2a 2f  e is corrupt..*/
0290: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 63 6f 72  .static void cor
02a0: 72 75 70 74 53 63 68 65 6d 61 28 0a 20 20 49 6e  ruptSchema(.  In
02b0: 69 74 44 61 74 61 20 2a 70 44 61 74 61 2c 20 20  itData *pData,  
02c0: 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 61     /* Initializa
02d0: 74 69 6f 6e 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  tion context */.
02e0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4f    const char *zO
02f0: 62 6a 2c 20 20 20 20 2f 2a 20 4f 62 6a 65 63 74  bj,    /* Object
0300: 20 62 65 69 6e 67 20 70 61 72 73 65 64 20 61 74   being parsed at
0310: 20 74 68 65 20 70 6f 69 6e 74 20 6f 66 20 65 72   the point of er
0320: 72 6f 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ror */.  const c
0330: 68 61 72 20 2a 7a 45 78 74 72 61 20 20 20 2f 2a  har *zExtra   /*
0340: 20 45 72 72 6f 72 20 69 6e 66 6f 72 6d 61 74 69   Error informati
0350: 6f 6e 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74  on */.){.  sqlit
0360: 65 33 20 2a 64 62 20 3d 20 70 44 61 74 61 2d 3e  e3 *db = pData->
0370: 64 62 3b 0a 20 20 69 66 28 20 21 64 62 2d 3e 6d  db;.  if( !db->m
0380: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 26 26 20 28  allocFailed && (
0390: 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
03a0: 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61 29 3d  TE_WriteSchema)=
03b0: 3d 30 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a  =0 ){.    char *
03c0: 7a 3b 0a 20 20 20 20 69 66 28 20 7a 4f 62 6a 3d  z;.    if( zObj=
03d0: 3d 30 20 29 20 7a 4f 62 6a 20 3d 20 22 3f 22 3b  =0 ) zObj = "?";
03e0: 0a 20 20 20 20 7a 20 3d 20 73 71 6c 69 74 65 33  .    z = sqlite3
03f0: 4d 50 72 69 6e 74 66 28 64 62 2c 20 22 6d 61 6c  MPrintf(db, "mal
0400: 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 20  formed database 
0410: 73 63 68 65 6d 61 20 28 25 73 29 22 2c 20 7a 4f  schema (%s)", zO
0420: 62 6a 29 3b 0a 20 20 20 20 69 66 28 20 7a 45 78  bj);.    if( zEx
0430: 74 72 61 20 26 26 20 7a 45 78 74 72 61 5b 30 5d  tra && zExtra[0]
0440: 20 29 20 7a 20 3d 20 73 71 6c 69 74 65 33 4d 50   ) z = sqlite3MP
0450: 72 69 6e 74 66 28 64 62 2c 20 22 25 7a 20 2d 20  rintf(db, "%z - 
0460: 25 73 22 2c 20 7a 2c 20 7a 45 78 74 72 61 29 3b  %s", z, zExtra);
0470: 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72  .    sqlite3DbFr
0480: 65 65 28 64 62 2c 20 2a 70 44 61 74 61 2d 3e 70  ee(db, *pData->p
0490: 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 2a 70  zErrMsg);.    *p
04a0: 44 61 74 61 2d 3e 70 7a 45 72 72 4d 73 67 20 3d  Data->pzErrMsg =
04b0: 20 7a 3b 0a 20 20 7d 0a 20 20 70 44 61 74 61 2d   z;.  }.  pData-
04c0: 3e 72 63 20 3d 20 64 62 2d 3e 6d 61 6c 6c 6f 63  >rc = db->malloc
04d0: 46 61 69 6c 65 64 20 3f 20 53 51 4c 49 54 45 5f  Failed ? SQLITE_
04e0: 4e 4f 4d 45 4d 5f 42 4b 50 54 20 3a 20 53 51 4c  NOMEM_BKPT : SQL
04f0: 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
0500: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  ;.}../*.** This 
0510: 69 73 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20  is the callback 
0520: 72 6f 75 74 69 6e 65 20 66 6f 72 20 74 68 65 20  routine for the 
0530: 63 6f 64 65 20 74 68 61 74 20 69 6e 69 74 69 61  code that initia
0540: 6c 69 7a 65 73 20 74 68 65 0a 2a 2a 20 64 61 74  lizes the.** dat
0550: 61 62 61 73 65 2e 20 20 53 65 65 20 73 71 6c 69  abase.  See sqli
0560: 74 65 33 49 6e 69 74 28 29 20 62 65 6c 6f 77 20  te3Init() below 
0570: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
0580: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 20 54  nformation..** T
0590: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61  his routine is a
05a0: 6c 73 6f 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20  lso called from 
05b0: 74 68 65 20 4f 50 5f 50 61 72 73 65 53 63 68 65  the OP_ParseSche
05c0: 6d 61 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65  ma opcode of the
05d0: 20 56 44 42 45 2e 0a 2a 2a 0a 2a 2a 20 45 61 63   VDBE..**.** Eac
05e0: 68 20 63 61 6c 6c 62 61 63 6b 20 63 6f 6e 74 61  h callback conta
05f0: 69 6e 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ins the followin
0600: 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 3a 0a 2a  g information:.*
0610: 2a 0a 2a 2a 20 20 20 20 20 61 72 67 76 5b 30 5d  *.**     argv[0]
0620: 20 3d 20 6e 61 6d 65 20 6f 66 20 74 68 69 6e 67   = name of thing
0630: 20 62 65 69 6e 67 20 63 72 65 61 74 65 64 0a 2a   being created.*
0640: 2a 20 20 20 20 20 61 72 67 76 5b 31 5d 20 3d 20  *     argv[1] = 
0650: 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
0660: 20 66 6f 72 20 74 61 62 6c 65 20 6f 72 20 69 6e   for table or in
0670: 64 65 78 2e 20 30 20 66 6f 72 20 74 72 69 67 67  dex. 0 for trigg
0680: 65 72 20 6f 72 20 76 69 65 77 2e 0a 2a 2a 20 20  er or view..**  
0690: 20 20 20 61 72 67 76 5b 32 5d 20 3d 20 53 51 4c     argv[2] = SQL
06a0: 20 74 65 78 74 20 66 6f 72 20 74 68 65 20 43 52   text for the CR
06b0: 45 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a  EATE statement..
06c0: 2a 2a 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  **.*/.int sqlite
06d0: 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f  3InitCallback(vo
06e0: 69 64 20 2a 70 49 6e 69 74 2c 20 69 6e 74 20 61  id *pInit, int a
06f0: 72 67 63 2c 20 63 68 61 72 20 2a 2a 61 72 67 76  rgc, char **argv
0700: 2c 20 63 68 61 72 20 2a 2a 4e 6f 74 55 73 65 64  , char **NotUsed
0710: 29 7b 0a 20 20 49 6e 69 74 44 61 74 61 20 2a 70  ){.  InitData *p
0720: 44 61 74 61 20 3d 20 28 49 6e 69 74 44 61 74 61  Data = (InitData
0730: 2a 29 70 49 6e 69 74 3b 0a 20 20 73 71 6c 69 74  *)pInit;.  sqlit
0740: 65 33 20 2a 64 62 20 3d 20 70 44 61 74 61 2d 3e  e3 *db = pData->
0750: 64 62 3b 0a 20 20 69 6e 74 20 69 44 62 20 3d 20  db;.  int iDb = 
0760: 70 44 61 74 61 2d 3e 69 44 62 3b 0a 0a 20 20 61  pData->iDb;..  a
0770: 73 73 65 72 74 28 20 61 72 67 63 3d 3d 33 20 29  ssert( argc==3 )
0780: 3b 0a 20 20 55 4e 55 53 45 44 5f 50 41 52 41 4d  ;.  UNUSED_PARAM
0790: 45 54 45 52 32 28 4e 6f 74 55 73 65 64 2c 20 61  ETER2(NotUsed, a
07a0: 72 67 63 29 3b 0a 20 20 61 73 73 65 72 74 28 20  rgc);.  assert( 
07b0: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65  sqlite3_mutex_he
07c0: 6c 64 28 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b  ld(db->mutex) );
07d0: 0a 20 20 44 62 43 6c 65 61 72 50 72 6f 70 65 72  .  DbClearProper
07e0: 74 79 28 64 62 2c 20 69 44 62 2c 20 44 42 5f 45  ty(db, iDb, DB_E
07f0: 6d 70 74 79 29 3b 0a 20 20 69 66 28 20 64 62 2d  mpty);.  if( db-
0800: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b  >mallocFailed ){
0810: 0a 20 20 20 20 63 6f 72 72 75 70 74 53 63 68 65  .    corruptSche
0820: 6d 61 28 70 44 61 74 61 2c 20 61 72 67 76 5b 30  ma(pData, argv[0
0830: 5d 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ], 0);.    retur
0840: 6e 20 31 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65  n 1;.  }..  asse
0850: 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44  rt( iDb>=0 && iD
0860: 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 69  b<db->nDb );.  i
0870: 66 28 20 61 72 67 76 3d 3d 30 20 29 20 72 65 74  f( argv==0 ) ret
0880: 75 72 6e 20 30 3b 20 20 20 2f 2a 20 4d 69 67 68  urn 0;   /* Migh
0890: 74 20 68 61 70 70 65 6e 20 69 66 20 45 4d 50 54  t happen if EMPT
08a0: 59 5f 52 45 53 55 4c 54 5f 43 41 4c 4c 42 41 43  Y_RESULT_CALLBAC
08b0: 4b 53 20 61 72 65 20 6f 6e 20 2a 2f 0a 20 20 69  KS are on */.  i
08c0: 66 28 20 61 72 67 76 5b 31 5d 3d 3d 30 20 29 7b  f( argv[1]==0 ){
08d0: 0a 20 20 20 20 63 6f 72 72 75 70 74 53 63 68 65  .    corruptSche
08e0: 6d 61 28 70 44 61 74 61 2c 20 61 72 67 76 5b 30  ma(pData, argv[0
08f0: 5d 2c 20 30 29 3b 0a 20 20 7d 65 6c 73 65 20 69  ], 0);.  }else i
0900: 66 28 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69  f( sqlite3_strni
0910: 63 6d 70 28 61 72 67 76 5b 32 5d 2c 22 63 72 65  cmp(argv[2],"cre
0920: 61 74 65 20 22 2c 37 29 3d 3d 30 20 29 7b 0a 20  ate ",7)==0 ){. 
0930: 20 20 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70     /* Call the p
0940: 61 72 73 65 72 20 74 6f 20 70 72 6f 63 65 73 73  arser to process
0950: 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 2c   a CREATE TABLE,
0960: 20 49 4e 44 45 58 20 6f 72 20 56 49 45 57 2e 0a   INDEX or VIEW..
0970: 20 20 20 20 2a 2a 20 42 75 74 20 62 65 63 61 75      ** But becau
0980: 73 65 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79  se db->init.busy
0990: 20 69 73 20 73 65 74 20 74 6f 20 31 2c 20 6e 6f   is set to 1, no
09a0: 20 56 44 42 45 20 63 6f 64 65 20 69 73 20 67 65   VDBE code is ge
09b0: 6e 65 72 61 74 65 64 0a 20 20 20 20 2a 2a 20 6f  nerated.    ** o
09c0: 72 20 65 78 65 63 75 74 65 64 2e 20 20 41 6c 6c  r executed.  All
09d0: 20 74 68 65 20 70 61 72 73 65 72 20 64 6f 65 73   the parser does
09e0: 20 69 73 20 62 75 69 6c 64 20 74 68 65 20 69 6e   is build the in
09f0: 74 65 72 6e 61 6c 20 64 61 74 61 0a 20 20 20 20  ternal data.    
0a00: 2a 2a 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ** structures th
0a10: 61 74 20 64 65 73 63 72 69 62 65 20 74 68 65 20  at describe the 
0a20: 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20 6f 72  table, index, or
0a30: 20 76 69 65 77 2e 0a 20 20 20 20 2a 2f 0a 20 20   view..    */.  
0a40: 20 20 69 6e 74 20 72 63 3b 0a 20 20 20 20 75 38    int rc;.    u8
0a50: 20 73 61 76 65 64 5f 69 44 62 20 3d 20 64 62 2d   saved_iDb = db-
0a60: 3e 69 6e 69 74 2e 69 44 62 3b 0a 20 20 20 20 73  >init.iDb;.    s
0a70: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
0a80: 6d 74 3b 0a 20 20 20 20 54 45 53 54 4f 4e 4c 59  mt;.    TESTONLY
0a90: 28 69 6e 74 20 72 63 70 29 3b 20 20 20 20 20 20  (int rcp);      
0aa0: 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20        /* Return 
0ab0: 63 6f 64 65 20 66 72 6f 6d 20 73 71 6c 69 74 65  code from sqlite
0ac0: 33 5f 70 72 65 70 61 72 65 28 29 20 2a 2f 0a 0a  3_prepare() */..
0ad0: 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
0ae0: 69 6e 69 74 2e 62 75 73 79 20 29 3b 0a 20 20 20  init.busy );.   
0af0: 20 64 62 2d 3e 69 6e 69 74 2e 69 44 62 20 3d 20   db->init.iDb = 
0b00: 69 44 62 3b 0a 20 20 20 20 64 62 2d 3e 69 6e 69  iDb;.    db->ini
0b10: 74 2e 6e 65 77 54 6e 75 6d 20 3d 20 73 71 6c 69  t.newTnum = sqli
0b20: 74 65 33 41 74 6f 69 28 61 72 67 76 5b 31 5d 29  te3Atoi(argv[1])
0b30: 3b 0a 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 6f  ;.    db->init.o
0b40: 72 70 68 61 6e 54 72 69 67 67 65 72 20 3d 20 30  rphanTrigger = 0
0b50: 3b 0a 20 20 20 20 54 45 53 54 4f 4e 4c 59 28 72  ;.    TESTONLY(r
0b60: 63 70 20 3d 20 29 20 73 71 6c 69 74 65 33 5f 70  cp = ) sqlite3_p
0b70: 72 65 70 61 72 65 28 64 62 2c 20 61 72 67 76 5b  repare(db, argv[
0b80: 32 5d 2c 20 2d 31 2c 20 26 70 53 74 6d 74 2c 20  2], -1, &pStmt, 
0b90: 30 29 3b 0a 20 20 20 20 72 63 20 3d 20 64 62 2d  0);.    rc = db-
0ba0: 3e 65 72 72 43 6f 64 65 3b 0a 20 20 20 20 61 73  >errCode;.    as
0bb0: 73 65 72 74 28 20 28 72 63 26 30 78 46 46 29 3d  sert( (rc&0xFF)=
0bc0: 3d 28 72 63 70 26 30 78 46 46 29 20 29 3b 0a 20  =(rcp&0xFF) );. 
0bd0: 20 20 20 64 62 2d 3e 69 6e 69 74 2e 69 44 62 20     db->init.iDb 
0be0: 3d 20 73 61 76 65 64 5f 69 44 62 3b 0a 20 20 20  = saved_iDb;.   
0bf0: 20 61 73 73 65 72 74 28 20 73 61 76 65 64 5f 69   assert( saved_i
0c00: 44 62 3d 3d 30 20 7c 7c 20 28 64 62 2d 3e 6d 44  Db==0 || (db->mD
0c10: 62 46 6c 61 67 73 20 26 20 44 42 46 4c 41 47 5f  bFlags & DBFLAG_
0c20: 56 61 63 75 75 6d 29 21 3d 30 20 29 3b 0a 20 20  Vacuum)!=0 );.  
0c30: 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21    if( SQLITE_OK!
0c40: 3d 72 63 20 29 7b 0a 20 20 20 20 20 20 69 66 28  =rc ){.      if(
0c50: 20 64 62 2d 3e 69 6e 69 74 2e 6f 72 70 68 61 6e   db->init.orphan
0c60: 54 72 69 67 67 65 72 20 29 7b 0a 20 20 20 20 20  Trigger ){.     
0c70: 20 20 20 61 73 73 65 72 74 28 20 69 44 62 3d 3d     assert( iDb==
0c80: 31 20 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  1 );.      }else
0c90: 7b 0a 20 20 20 20 20 20 20 20 70 44 61 74 61 2d  {.        pData-
0ca0: 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20 20 20 20  >rc = rc;.      
0cb0: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
0cc0: 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20  _NOMEM ){.      
0cd0: 20 20 20 20 73 71 6c 69 74 65 33 4f 6f 6d 46 61      sqlite3OomFa
0ce0: 75 6c 74 28 64 62 29 3b 0a 20 20 20 20 20 20 20  ult(db);.       
0cf0: 20 7d 65 6c 73 65 20 69 66 28 20 72 63 21 3d 53   }else if( rc!=S
0d00: 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 20  QLITE_INTERRUPT 
0d10: 26 26 20 28 72 63 26 30 78 46 46 29 21 3d 53 51  && (rc&0xFF)!=SQ
0d20: 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20  LITE_LOCKED ){. 
0d30: 20 20 20 20 20 20 20 20 20 63 6f 72 72 75 70 74           corrupt
0d40: 53 63 68 65 6d 61 28 70 44 61 74 61 2c 20 61 72  Schema(pData, ar
0d50: 67 76 5b 30 5d 2c 20 73 71 6c 69 74 65 33 5f 65  gv[0], sqlite3_e
0d60: 72 72 6d 73 67 28 64 62 29 29 3b 0a 20 20 20 20  rrmsg(db));.    
0d70: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
0d80: 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f    }.    sqlite3_
0d90: 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b  finalize(pStmt);
0da0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 61 72 67  .  }else if( arg
0db0: 76 5b 30 5d 3d 3d 30 20 7c 7c 20 28 61 72 67 76  v[0]==0 || (argv
0dc0: 5b 32 5d 21 3d 30 20 26 26 20 61 72 67 76 5b 32  [2]!=0 && argv[2
0dd0: 5d 5b 30 5d 21 3d 30 29 20 29 7b 0a 20 20 20 20  ][0]!=0) ){.    
0de0: 63 6f 72 72 75 70 74 53 63 68 65 6d 61 28 70 44  corruptSchema(pD
0df0: 61 74 61 2c 20 61 72 67 76 5b 30 5d 2c 20 30 29  ata, argv[0], 0)
0e00: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  ;.  }else{.    /
0e10: 2a 20 49 66 20 74 68 65 20 53 51 4c 20 63 6f 6c  * If the SQL col
0e20: 75 6d 6e 20 69 73 20 62 6c 61 6e 6b 20 69 74 20  umn is blank it 
0e30: 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20 61 6e  means this is an
0e40: 20 69 6e 64 65 78 20 74 68 61 74 0a 20 20 20 20   index that.    
0e50: 2a 2a 20 77 61 73 20 63 72 65 61 74 65 64 20 74  ** was created t
0e60: 6f 20 62 65 20 74 68 65 20 50 52 49 4d 41 52 59  o be the PRIMARY
0e70: 20 4b 45 59 20 6f 72 20 74 6f 20 66 75 6c 66 69   KEY or to fulfi
0e80: 6c 6c 20 61 20 55 4e 49 51 55 45 0a 20 20 20 20  ll a UNIQUE.    
0e90: 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 6f  ** constraint fo
0ea0: 72 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45  r a CREATE TABLE
0eb0: 2e 20 20 54 68 65 20 69 6e 64 65 78 20 73 68 6f  .  The index sho
0ec0: 75 6c 64 20 68 61 76 65 20 61 6c 72 65 61 64 79  uld have already
0ed0: 0a 20 20 20 20 2a 2a 20 62 65 65 6e 20 63 72 65  .    ** been cre
0ee0: 61 74 65 64 20 77 68 65 6e 20 77 65 20 70 72 6f  ated when we pro
0ef0: 63 65 73 73 65 64 20 74 68 65 20 43 52 45 41 54  cessed the CREAT
0f00: 45 20 54 41 42 4c 45 2e 20 20 41 6c 6c 20 77 65  E TABLE.  All we
0f10: 20 68 61 76 65 0a 20 20 20 20 2a 2a 20 74 6f 20   have.    ** to 
0f20: 64 6f 20 68 65 72 65 20 69 73 20 72 65 63 6f 72  do here is recor
0f30: 64 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20  d the root page 
0f40: 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20  number for that 
0f50: 69 6e 64 65 78 2e 0a 20 20 20 20 2a 2f 0a 20 20  index..    */.  
0f60: 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b    Index *pIndex;
0f70: 0a 20 20 20 20 70 49 6e 64 65 78 20 3d 20 73 71  .    pIndex = sq
0f80: 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 64  lite3FindIndex(d
0f90: 62 2c 20 61 72 67 76 5b 30 5d 2c 20 64 62 2d 3e  b, argv[0], db->
0fa0: 61 44 62 5b 69 44 62 5d 2e 7a 44 62 53 4e 61 6d  aDb[iDb].zDbSNam
0fb0: 65 29 3b 0a 20 20 20 20 69 66 28 20 70 49 6e 64  e);.    if( pInd
0fc0: 65 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f  ex==0 ){.      /
0fd0: 2a 20 54 68 69 73 20 63 61 6e 20 6f 63 63 75 72  * This can occur
0fe0: 20 69 66 20 74 68 65 72 65 20 65 78 69 73 74 73   if there exists
0ff0: 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20 61 20 54   an index on a T
1000: 45 4d 50 20 74 61 62 6c 65 20 77 68 69 63 68 0a  EMP table which.
1010: 20 20 20 20 20 20 2a 2a 20 68 61 73 20 74 68 65        ** has the
1020: 20 73 61 6d 65 20 6e 61 6d 65 20 61 73 20 61 6e   same name as an
1030: 6f 74 68 65 72 20 69 6e 64 65 78 20 6f 6e 20 61  other index on a
1040: 20 70 65 72 6d 61 6e 65 6e 74 20 69 6e 64 65 78   permanent index
1050: 2e 20 20 53 69 6e 63 65 0a 20 20 20 20 20 20 2a  .  Since.      *
1060: 2a 20 74 68 65 20 70 65 72 6d 61 6e 65 6e 74 20  * the permanent 
1070: 74 61 62 6c 65 20 69 73 20 68 69 64 64 65 6e 20  table is hidden 
1080: 62 79 20 74 68 65 20 54 45 4d 50 20 74 61 62 6c  by the TEMP tabl
1090: 65 2c 20 77 65 20 63 61 6e 20 61 6c 73 6f 0a 20  e, we can also. 
10a0: 20 20 20 20 20 2a 2a 20 73 61 66 65 6c 79 20 69       ** safely i
10b0: 67 6e 6f 72 65 20 74 68 65 20 69 6e 64 65 78 20  gnore the index 
10c0: 6f 6e 20 74 68 65 20 70 65 72 6d 61 6e 65 6e 74  on the permanent
10d0: 20 74 61 62 6c 65 2e 0a 20 20 20 20 20 20 2a 2f   table..      */
10e0: 0a 20 20 20 20 20 20 2f 2a 20 44 6f 20 4e 6f 74  .      /* Do Not
10f0: 68 69 6e 67 20 2a 2f 3b 0a 20 20 20 20 7d 65 6c  hing */;.    }el
1100: 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 47 65  se if( sqlite3Ge
1110: 74 49 6e 74 33 32 28 61 72 67 76 5b 31 5d 2c 20  tInt32(argv[1], 
1120: 26 70 49 6e 64 65 78 2d 3e 74 6e 75 6d 29 3d 3d  &pIndex->tnum)==
1130: 30 20 29 7b 0a 20 20 20 20 20 20 63 6f 72 72 75  0 ){.      corru
1140: 70 74 53 63 68 65 6d 61 28 70 44 61 74 61 2c 20  ptSchema(pData, 
1150: 61 72 67 76 5b 30 5d 2c 20 22 69 6e 76 61 6c 69  argv[0], "invali
1160: 64 20 72 6f 6f 74 70 61 67 65 22 29 3b 0a 20 20  d rootpage");.  
1170: 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e    }.  }.  return
1180: 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 74 74   0;.}../*.** Att
1190: 65 6d 70 74 20 74 6f 20 72 65 61 64 20 74 68 65  empt to read the
11a0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
11b0: 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20   and initialize 
11c0: 69 6e 74 65 72 6e 61 6c 0a 2a 2a 20 64 61 74 61  internal.** data
11d0: 20 73 74 72 75 63 74 75 72 65 73 20 66 6f 72 20   structures for 
11e0: 61 20 73 69 6e 67 6c 65 20 64 61 74 61 62 61 73  a single databas
11f0: 65 20 66 69 6c 65 2e 20 20 54 68 65 20 69 6e 64  e file.  The ind
1200: 65 78 20 6f 66 20 74 68 65 0a 2a 2a 20 64 61 74  ex of the.** dat
1210: 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 67 69  abase file is gi
1220: 76 65 6e 20 62 79 20 69 44 62 2e 20 20 69 44 62  ven by iDb.  iDb
1230: 3d 3d 30 20 69 73 20 75 73 65 64 20 66 6f 72 20  ==0 is used for 
1240: 74 68 65 20 6d 61 69 6e 0a 2a 2a 20 64 61 74 61  the main.** data
1250: 62 61 73 65 2e 20 20 69 44 62 3d 3d 31 20 73 68  base.  iDb==1 sh
1260: 6f 75 6c 64 20 6e 65 76 65 72 20 62 65 20 75 73  ould never be us
1270: 65 64 2e 20 20 69 44 62 3e 3d 32 20 69 73 20 75  ed.  iDb>=2 is u
1280: 73 65 64 20 66 6f 72 0a 2a 2a 20 61 75 78 69 6c  sed for.** auxil
1290: 69 61 72 79 20 64 61 74 61 62 61 73 65 73 2e 20  iary databases. 
12a0: 20 52 65 74 75 72 6e 20 6f 6e 65 20 6f 66 20 74   Return one of t
12b0: 68 65 20 53 51 4c 49 54 45 5f 20 65 72 72 6f 72  he SQLITE_ error
12c0: 20 63 6f 64 65 73 20 74 6f 0a 2a 2a 20 69 6e 64   codes to.** ind
12d0: 69 63 61 74 65 20 73 75 63 63 65 73 73 20 6f 72  icate success or
12e0: 20 66 61 69 6c 75 72 65 2e 0a 2a 2f 0a 73 74 61   failure..*/.sta
12f0: 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33 49  tic int sqlite3I
1300: 6e 69 74 4f 6e 65 28 73 71 6c 69 74 65 33 20 2a  nitOne(sqlite3 *
1310: 64 62 2c 20 69 6e 74 20 69 44 62 2c 20 63 68 61  db, int iDb, cha
1320: 72 20 2a 2a 70 7a 45 72 72 4d 73 67 29 7b 0a 20  r **pzErrMsg){. 
1330: 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20 69   int rc;.  int i
1340: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
1350: 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44  _OMIT_DEPRECATED
1360: 0a 20 20 69 6e 74 20 73 69 7a 65 3b 0a 23 65 6e  .  int size;.#en
1370: 64 69 66 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20  dif.  Db *pDb;. 
1380: 20 63 68 61 72 20 63 6f 6e 73 74 20 2a 61 7a 41   char const *azA
1390: 72 67 5b 34 5d 3b 0a 20 20 69 6e 74 20 6d 65 74  rg[4];.  int met
13a0: 61 5b 35 5d 3b 0a 20 20 49 6e 69 74 44 61 74 61  a[5];.  InitData
13b0: 20 69 6e 69 74 44 61 74 61 3b 0a 20 20 63 6f 6e   initData;.  con
13c0: 73 74 20 63 68 61 72 20 2a 7a 4d 61 73 74 65 72  st char *zMaster
13d0: 4e 61 6d 65 3b 0a 20 20 69 6e 74 20 6f 70 65 6e  Name;.  int open
13e0: 65 64 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20  edTransaction = 
13f0: 30 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 44  0;..  assert( iD
1400: 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e  b>=0 && iDb<db->
1410: 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
1420: 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 53   db->aDb[iDb].pS
1430: 63 68 65 6d 61 20 29 3b 0a 20 20 61 73 73 65 72  chema );.  asser
1440: 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  t( sqlite3_mutex
1450: 5f 68 65 6c 64 28 64 62 2d 3e 6d 75 74 65 78 29  _held(db->mutex)
1460: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44   );.  assert( iD
1470: 62 3d 3d 31 20 7c 7c 20 73 71 6c 69 74 65 33 42  b==1 || sqlite3B
1480: 74 72 65 65 48 6f 6c 64 73 4d 75 74 65 78 28 64  treeHoldsMutex(d
1490: 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 29  b->aDb[iDb].pBt)
14a0: 20 29 3b 0a 0a 20 20 64 62 2d 3e 69 6e 69 74 2e   );..  db->init.
14b0: 62 75 73 79 20 3d 20 31 3b 0a 0a 20 20 2f 2a 20  busy = 1;..  /* 
14c0: 43 6f 6e 73 74 72 75 63 74 20 74 68 65 20 69 6e  Construct the in
14d0: 2d 6d 65 6d 6f 72 79 20 72 65 70 72 65 73 65 6e  -memory represen
14e0: 74 61 74 69 6f 6e 20 73 63 68 65 6d 61 20 74 61  tation schema ta
14f0: 62 6c 65 73 20 28 73 71 6c 69 74 65 5f 6d 61 73  bles (sqlite_mas
1500: 74 65 72 20 6f 72 0a 20 20 2a 2a 20 73 71 6c 69  ter or.  ** sqli
1510: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 29 20  te_temp_master) 
1520: 62 79 20 69 6e 76 6f 6b 69 6e 67 20 74 68 65 20  by invoking the 
1530: 70 61 72 73 65 72 20 64 69 72 65 63 74 6c 79 2e  parser directly.
1540: 20 20 54 68 65 20 61 70 70 72 6f 70 72 69 61 74    The appropriat
1550: 65 0a 20 20 2a 2a 20 74 61 62 6c 65 20 6e 61 6d  e.  ** table nam
1560: 65 20 77 69 6c 6c 20 62 65 20 69 6e 73 65 72 74  e will be insert
1570: 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ed automatically
1580: 20 62 79 20 74 68 65 20 70 61 72 73 65 72 20 73   by the parser s
1590: 6f 20 77 65 20 63 61 6e 20 6a 75 73 74 0a 20 20  o we can just.  
15a0: 2a 2a 20 75 73 65 20 74 68 65 20 61 62 62 72 65  ** use the abbre
15b0: 76 69 61 74 69 6f 6e 20 22 78 22 20 68 65 72 65  viation "x" here
15c0: 2e 20 20 54 68 65 20 70 61 72 73 65 72 20 77 69  .  The parser wi
15d0: 6c 6c 20 61 6c 73 6f 20 61 75 74 6f 6d 61 74 69  ll also automati
15e0: 63 61 6c 6c 79 20 74 61 67 0a 20 20 2a 2a 20 74  cally tag.  ** t
15f0: 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65 20  he schema table 
1600: 61 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 2a 2f  as read-only. */
1610: 0a 20 20 61 7a 41 72 67 5b 30 5d 20 3d 20 7a 4d  .  azArg[0] = zM
1620: 61 73 74 65 72 4e 61 6d 65 20 3d 20 53 43 48 45  asterName = SCHE
1630: 4d 41 5f 54 41 42 4c 45 28 69 44 62 29 3b 0a 20  MA_TABLE(iDb);. 
1640: 20 61 7a 41 72 67 5b 31 5d 20 3d 20 22 31 22 3b   azArg[1] = "1";
1650: 0a 20 20 61 7a 41 72 67 5b 32 5d 20 3d 20 22 43  .  azArg[2] = "C
1660: 52 45 41 54 45 20 54 41 42 4c 45 20 78 28 74 79  REATE TABLE x(ty
1670: 70 65 20 74 65 78 74 2c 6e 61 6d 65 20 74 65 78  pe text,name tex
1680: 74 2c 74 62 6c 5f 6e 61 6d 65 20 74 65 78 74 2c  t,tbl_name text,
1690: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
16a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 72                "r
16b0: 6f 6f 74 70 61 67 65 20 69 6e 74 2c 73 71 6c 20  ootpage int,sql 
16c0: 74 65 78 74 29 22 3b 0a 20 20 61 7a 41 72 67 5b  text)";.  azArg[
16d0: 33 5d 20 3d 20 30 3b 0a 20 20 69 6e 69 74 44 61  3] = 0;.  initDa
16e0: 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20 69 6e  ta.db = db;.  in
16f0: 69 74 44 61 74 61 2e 69 44 62 20 3d 20 69 44 62  itData.iDb = iDb
1700: 3b 0a 20 20 69 6e 69 74 44 61 74 61 2e 72 63 20  ;.  initData.rc 
1710: 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 69  = SQLITE_OK;.  i
1720: 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d 73 67  nitData.pzErrMsg
1730: 20 3d 20 70 7a 45 72 72 4d 73 67 3b 0a 20 20 73   = pzErrMsg;.  s
1740: 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
1750: 63 6b 28 26 69 6e 69 74 44 61 74 61 2c 20 33 2c  ck(&initData, 3,
1760: 20 28 63 68 61 72 20 2a 2a 29 61 7a 41 72 67 2c   (char **)azArg,
1770: 20 30 29 3b 0a 20 20 69 66 28 20 69 6e 69 74 44   0);.  if( initD
1780: 61 74 61 2e 72 63 20 29 7b 0a 20 20 20 20 72 63  ata.rc ){.    rc
1790: 20 3d 20 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a   = initData.rc;.
17a0: 20 20 20 20 67 6f 74 6f 20 65 72 72 6f 72 5f 6f      goto error_o
17b0: 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 72  ut;.  }..  /* Cr
17c0: 65 61 74 65 20 61 20 63 75 72 73 6f 72 20 74 6f  eate a cursor to
17d0: 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61 62 61   hold the databa
17e0: 73 65 20 6f 70 65 6e 0a 20 20 2a 2f 0a 20 20 70  se open.  */.  p
17f0: 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44  Db = &db->aDb[iD
1800: 62 5d 3b 0a 20 20 69 66 28 20 70 44 62 2d 3e 70  b];.  if( pDb->p
1810: 42 74 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73  Bt==0 ){.    ass
1820: 65 72 74 28 20 69 44 62 3d 3d 31 20 29 3b 0a 20  ert( iDb==1 );. 
1830: 20 20 20 44 62 53 65 74 50 72 6f 70 65 72 74 79     DbSetProperty
1840: 28 64 62 2c 20 31 2c 20 44 42 5f 53 63 68 65 6d  (db, 1, DB_Schem
1850: 61 4c 6f 61 64 65 64 29 3b 0a 20 20 20 20 72 63  aLoaded);.    rc
1860: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
1870: 20 20 67 6f 74 6f 20 65 72 72 6f 72 5f 6f 75 74    goto error_out
1880: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74  ;.  }..  /* If t
1890: 68 65 72 65 20 69 73 20 6e 6f 74 20 61 6c 72 65  here is not alre
18a0: 61 64 79 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20  ady a read-only 
18b0: 28 6f 72 20 72 65 61 64 2d 77 72 69 74 65 29 20  (or read-write) 
18c0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 70 65 6e  transaction open
18d0: 65 64 0a 20 20 2a 2a 20 6f 6e 20 74 68 65 20 62  ed.  ** on the b
18e0: 2d 74 72 65 65 20 64 61 74 61 62 61 73 65 2c 20  -tree database, 
18f0: 6f 70 65 6e 20 6f 6e 65 20 6e 6f 77 2e 20 49 66  open one now. If
1900: 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69   a transaction i
1910: 73 20 6f 70 65 6e 65 64 2c 20 69 74 20 0a 20 20  s opened, it .  
1920: 2a 2a 20 77 69 6c 6c 20 62 65 20 63 6c 6f 73 65  ** will be close
1930: 64 20 62 65 66 6f 72 65 20 74 68 69 73 20 66 75  d before this fu
1940: 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 2e 20  nction returns. 
1950: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 42 74 72   */.  sqlite3Btr
1960: 65 65 45 6e 74 65 72 28 70 44 62 2d 3e 70 42 74  eeEnter(pDb->pBt
1970: 29 3b 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65  );.  if( !sqlite
1980: 33 42 74 72 65 65 49 73 49 6e 52 65 61 64 54 72  3BtreeIsInReadTr
1990: 61 6e 73 28 70 44 62 2d 3e 70 42 74 29 20 29 7b  ans(pDb->pBt) ){
19a0: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
19b0: 33 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73  3BtreeBeginTrans
19c0: 28 70 44 62 2d 3e 70 42 74 2c 20 30 29 3b 0a 20  (pDb->pBt, 0);. 
19d0: 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
19e0: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 73 71  E_OK ){.      sq
19f0: 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 70  lite3SetString(p
1a00: 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 73 71 6c  zErrMsg, db, sql
1a10: 69 74 65 33 45 72 72 53 74 72 28 72 63 29 29 3b  ite3ErrStr(rc));
1a20: 0a 20 20 20 20 20 20 67 6f 74 6f 20 69 6e 69 74  .      goto init
1a30: 6f 6e 65 5f 65 72 72 6f 72 5f 6f 75 74 3b 0a 20  one_error_out;. 
1a40: 20 20 20 7d 0a 20 20 20 20 6f 70 65 6e 65 64 54     }.    openedT
1a50: 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20 31 3b 0a  ransaction = 1;.
1a60: 20 20 7d 0a 0a 20 20 2f 2a 20 47 65 74 20 74 68    }..  /* Get th
1a70: 65 20 64 61 74 61 62 61 73 65 20 6d 65 74 61 20  e database meta 
1a80: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 20 20 2a  information..  *
1a90: 2a 0a 20 20 2a 2a 20 4d 65 74 61 20 76 61 6c 75  *.  ** Meta valu
1aa0: 65 73 20 61 72 65 20 61 73 20 66 6f 6c 6c 6f 77  es are as follow
1ab0: 73 3a 0a 20 20 2a 2a 20 20 20 20 6d 65 74 61 5b  s:.  **    meta[
1ac0: 30 5d 20 20 20 53 63 68 65 6d 61 20 63 6f 6f 6b  0]   Schema cook
1ad0: 69 65 2e 20 20 43 68 61 6e 67 65 73 20 77 69 74  ie.  Changes wit
1ae0: 68 20 65 61 63 68 20 73 63 68 65 6d 61 20 63 68  h each schema ch
1af0: 61 6e 67 65 2e 0a 20 20 2a 2a 20 20 20 20 6d 65  ange..  **    me
1b00: 74 61 5b 31 5d 20 20 20 46 69 6c 65 20 66 6f 72  ta[1]   File for
1b10: 6d 61 74 20 6f 66 20 73 63 68 65 6d 61 20 6c 61  mat of schema la
1b20: 79 65 72 2e 0a 20 20 2a 2a 20 20 20 20 6d 65 74  yer..  **    met
1b30: 61 5b 32 5d 20 20 20 53 69 7a 65 20 6f 66 20 74  a[2]   Size of t
1b40: 68 65 20 70 61 67 65 20 63 61 63 68 65 2e 0a 20  he page cache.. 
1b50: 20 2a 2a 20 20 20 20 6d 65 74 61 5b 33 5d 20 20   **    meta[3]  
1b60: 20 4c 61 72 67 65 73 74 20 72 6f 6f 74 70 61 67   Largest rootpag
1b70: 65 20 28 61 75 74 6f 2f 69 6e 63 72 5f 76 61 63  e (auto/incr_vac
1b80: 75 75 6d 20 6d 6f 64 65 29 0a 20 20 2a 2a 20 20  uum mode).  **  
1b90: 20 20 6d 65 74 61 5b 34 5d 20 20 20 44 62 20 74    meta[4]   Db t
1ba0: 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e 20 31 3a  ext encoding. 1:
1bb0: 55 54 46 2d 38 20 32 3a 55 54 46 2d 31 36 4c 45  UTF-8 2:UTF-16LE
1bc0: 20 33 3a 55 54 46 2d 31 36 42 45 0a 20 20 2a 2a   3:UTF-16BE.  **
1bd0: 20 20 20 20 6d 65 74 61 5b 35 5d 20 20 20 55 73      meta[5]   Us
1be0: 65 72 20 76 65 72 73 69 6f 6e 0a 20 20 2a 2a 20  er version.  ** 
1bf0: 20 20 20 6d 65 74 61 5b 36 5d 20 20 20 49 6e 63     meta[6]   Inc
1c00: 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 20  remental vacuum 
1c10: 6d 6f 64 65 0a 20 20 2a 2a 20 20 20 20 6d 65 74  mode.  **    met
1c20: 61 5b 37 5d 20 20 20 75 6e 75 73 65 64 0a 20 20  a[7]   unused.  
1c30: 2a 2a 20 20 20 20 6d 65 74 61 5b 38 5d 20 20 20  **    meta[8]   
1c40: 75 6e 75 73 65 64 0a 20 20 2a 2a 20 20 20 20 6d  unused.  **    m
1c50: 65 74 61 5b 39 5d 20 20 20 75 6e 75 73 65 64 0a  eta[9]   unused.
1c60: 20 20 2a 2a 0a 20 20 2a 2a 20 4e 6f 74 65 3a 20    **.  ** Note: 
1c70: 54 68 65 20 23 64 65 66 69 6e 65 64 20 53 51 4c  The #defined SQL
1c80: 49 54 45 5f 55 54 46 2a 20 73 79 6d 62 6f 6c 73  ITE_UTF* symbols
1c90: 20 69 6e 20 73 71 6c 69 74 65 49 6e 74 2e 68 20   in sqliteInt.h 
1ca0: 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 0a 20 20  correspond to.  
1cb0: 2a 2a 20 74 68 65 20 70 6f 73 73 69 62 6c 65 20  ** the possible 
1cc0: 76 61 6c 75 65 73 20 6f 66 20 6d 65 74 61 5b 34  values of meta[4
1cd0: 5d 2e 0a 20 20 2a 2f 0a 20 20 66 6f 72 28 69 3d  ]..  */.  for(i=
1ce0: 30 3b 20 69 3c 41 72 72 61 79 53 69 7a 65 28 6d  0; i<ArraySize(m
1cf0: 65 74 61 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  eta); i++){.    
1d00: 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d  sqlite3BtreeGetM
1d10: 65 74 61 28 70 44 62 2d 3e 70 42 74 2c 20 69 2b  eta(pDb->pBt, i+
1d20: 31 2c 20 28 75 33 32 20 2a 29 26 6d 65 74 61 5b  1, (u32 *)&meta[
1d30: 69 5d 29 3b 0a 20 20 7d 0a 20 20 70 44 62 2d 3e  i]);.  }.  pDb->
1d40: 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f  pSchema->schema_
1d50: 63 6f 6f 6b 69 65 20 3d 20 6d 65 74 61 5b 42 54  cookie = meta[BT
1d60: 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49  REE_SCHEMA_VERSI
1d70: 4f 4e 2d 31 5d 3b 0a 0a 20 20 2f 2a 20 49 66 20  ON-1];..  /* If 
1d80: 6f 70 65 6e 69 6e 67 20 61 20 6e 6f 6e 2d 65 6d  opening a non-em
1d90: 70 74 79 20 64 61 74 61 62 61 73 65 2c 20 63 68  pty database, ch
1da0: 65 63 6b 20 74 68 65 20 74 65 78 74 20 65 6e 63  eck the text enc
1db0: 6f 64 69 6e 67 2e 20 46 6f 72 20 74 68 65 0a 20  oding. For the. 
1dc0: 20 2a 2a 20 6d 61 69 6e 20 64 61 74 61 62 61 73   ** main databas
1dd0: 65 2c 20 73 65 74 20 73 71 6c 69 74 65 33 2e 65  e, set sqlite3.e
1de0: 6e 63 20 74 6f 20 74 68 65 20 65 6e 63 6f 64 69  nc to the encodi
1df0: 6e 67 20 6f 66 20 74 68 65 20 6d 61 69 6e 20 64  ng of the main d
1e00: 61 74 61 62 61 73 65 2e 0a 20 20 2a 2a 20 46 6f  atabase..  ** Fo
1e10: 72 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 62  r an attached db
1e20: 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72  , it is an error
1e30: 20 69 66 20 74 68 65 20 65 6e 63 6f 64 69 6e 67   if the encoding
1e40: 20 69 73 20 6e 6f 74 20 74 68 65 20 73 61 6d 65   is not the same
1e50: 0a 20 20 2a 2a 20 61 73 20 73 71 6c 69 74 65 33  .  ** as sqlite3
1e60: 2e 65 6e 63 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  .enc..  */.  if(
1e70: 20 6d 65 74 61 5b 42 54 52 45 45 5f 54 45 58 54   meta[BTREE_TEXT
1e80: 5f 45 4e 43 4f 44 49 4e 47 2d 31 5d 20 29 7b 20  _ENCODING-1] ){ 
1e90: 20 2f 2a 20 74 65 78 74 20 65 6e 63 6f 64 69 6e   /* text encodin
1ea0: 67 20 2a 2f 0a 20 20 20 20 69 66 28 20 69 44 62  g */.    if( iDb
1eb0: 3d 3d 30 20 29 7b 0a 23 69 66 6e 64 65 66 20 53  ==0 ){.#ifndef S
1ec0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
1ed0: 0a 20 20 20 20 20 20 75 38 20 65 6e 63 6f 64 69  .      u8 encodi
1ee0: 6e 67 3b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20  ng;.      /* If 
1ef0: 6f 70 65 6e 69 6e 67 20 74 68 65 20 6d 61 69 6e  opening the main
1f00: 20 64 61 74 61 62 61 73 65 2c 20 73 65 74 20 45   database, set E
1f10: 4e 43 28 64 62 29 2e 20 2a 2f 0a 20 20 20 20 20  NC(db). */.     
1f20: 20 65 6e 63 6f 64 69 6e 67 20 3d 20 28 75 38 29   encoding = (u8)
1f30: 6d 65 74 61 5b 42 54 52 45 45 5f 54 45 58 54 5f  meta[BTREE_TEXT_
1f40: 45 4e 43 4f 44 49 4e 47 2d 31 5d 20 26 20 33 3b  ENCODING-1] & 3;
1f50: 0a 20 20 20 20 20 20 69 66 28 20 65 6e 63 6f 64  .      if( encod
1f60: 69 6e 67 3d 3d 30 20 29 20 65 6e 63 6f 64 69 6e  ing==0 ) encodin
1f70: 67 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b  g = SQLITE_UTF8;
1f80: 0a 20 20 20 20 20 20 45 4e 43 28 64 62 29 20 3d  .      ENC(db) =
1f90: 20 65 6e 63 6f 64 69 6e 67 3b 0a 23 65 6c 73 65   encoding;.#else
1fa0: 0a 20 20 20 20 20 20 45 4e 43 28 64 62 29 20 3d  .      ENC(db) =
1fb0: 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 0a 23 65   SQLITE_UTF8;.#e
1fc0: 6e 64 69 66 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ndif.    }else{.
1fd0: 20 20 20 20 20 20 2f 2a 20 49 66 20 6f 70 65 6e        /* If open
1fe0: 69 6e 67 20 61 6e 20 61 74 74 61 63 68 65 64 20  ing an attached 
1ff0: 64 61 74 61 62 61 73 65 2c 20 74 68 65 20 65 6e  database, the en
2000: 63 6f 64 69 6e 67 20 6d 75 63 68 20 6d 61 74 63  coding much matc
2010: 68 20 45 4e 43 28 64 62 29 20 2a 2f 0a 20 20 20  h ENC(db) */.   
2020: 20 20 20 69 66 28 20 6d 65 74 61 5b 42 54 52 45     if( meta[BTRE
2030: 45 5f 54 45 58 54 5f 45 4e 43 4f 44 49 4e 47 2d  E_TEXT_ENCODING-
2040: 31 5d 21 3d 45 4e 43 28 64 62 29 20 29 7b 0a 20  1]!=ENC(db) ){. 
2050: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65         sqlite3Se
2060: 74 53 74 72 69 6e 67 28 70 7a 45 72 72 4d 73 67  tString(pzErrMsg
2070: 2c 20 64 62 2c 20 22 61 74 74 61 63 68 65 64 20  , db, "attached 
2080: 64 61 74 61 62 61 73 65 73 20 6d 75 73 74 20 75  databases must u
2090: 73 65 20 74 68 65 20 73 61 6d 65 22 0a 20 20 20  se the same".   
20a0: 20 20 20 20 20 20 20 20 20 22 20 74 65 78 74 20           " text 
20b0: 65 6e 63 6f 64 69 6e 67 20 61 73 20 6d 61 69 6e  encoding as main
20c0: 20 64 61 74 61 62 61 73 65 22 29 3b 0a 20 20 20   database");.   
20d0: 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
20e0: 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 20 20  _ERROR;.        
20f0: 67 6f 74 6f 20 69 6e 69 74 6f 6e 65 5f 65 72 72  goto initone_err
2100: 6f 72 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a  or_out;.      }.
2110: 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
2120: 20 20 20 44 62 53 65 74 50 72 6f 70 65 72 74 79     DbSetProperty
2130: 28 64 62 2c 20 69 44 62 2c 20 44 42 5f 45 6d 70  (db, iDb, DB_Emp
2140: 74 79 29 3b 0a 20 20 7d 0a 20 20 70 44 62 2d 3e  ty);.  }.  pDb->
2150: 70 53 63 68 65 6d 61 2d 3e 65 6e 63 20 3d 20 45  pSchema->enc = E
2160: 4e 43 28 64 62 29 3b 0a 0a 20 20 69 66 28 20 70  NC(db);..  if( p
2170: 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63  Db->pSchema->cac
2180: 68 65 5f 73 69 7a 65 3d 3d 30 20 29 7b 0a 23 69  he_size==0 ){.#i
2190: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
21a0: 54 5f 44 45 50 52 45 43 41 54 45 44 0a 20 20 20  T_DEPRECATED.   
21b0: 20 73 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 41   size = sqlite3A
21c0: 62 73 49 6e 74 33 32 28 6d 65 74 61 5b 42 54 52  bsInt32(meta[BTR
21d0: 45 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45  EE_DEFAULT_CACHE
21e0: 5f 53 49 5a 45 2d 31 5d 29 3b 0a 20 20 20 20 69  _SIZE-1]);.    i
21f0: 66 28 20 73 69 7a 65 3d 3d 30 20 29 7b 20 73 69  f( size==0 ){ si
2200: 7a 65 20 3d 20 53 51 4c 49 54 45 5f 44 45 46 41  ze = SQLITE_DEFA
2210: 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 3b 20  ULT_CACHE_SIZE; 
2220: 7d 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65  }.    pDb->pSche
2230: 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d  ma->cache_size =
2240: 20 73 69 7a 65 3b 0a 23 65 6c 73 65 0a 20 20 20   size;.#else.   
2250: 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63   pDb->pSchema->c
2260: 61 63 68 65 5f 73 69 7a 65 20 3d 20 53 51 4c 49  ache_size = SQLI
2270: 54 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45  TE_DEFAULT_CACHE
2280: 5f 53 49 5a 45 3b 0a 23 65 6e 64 69 66 0a 20 20  _SIZE;.#endif.  
2290: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65    sqlite3BtreeSe
22a0: 74 43 61 63 68 65 53 69 7a 65 28 70 44 62 2d 3e  tCacheSize(pDb->
22b0: 70 42 74 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d  pBt, pDb->pSchem
22c0: 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a  a->cache_size);.
22d0: 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 66    }..  /*.  ** f
22e0: 69 6c 65 5f 66 6f 72 6d 61 74 3d 3d 31 20 20 20  ile_format==1   
22f0: 20 56 65 72 73 69 6f 6e 20 33 2e 30 2e 30 2e 0a   Version 3.0.0..
2300: 20 20 2a 2a 20 66 69 6c 65 5f 66 6f 72 6d 61 74    ** file_format
2310: 3d 3d 32 20 20 20 20 56 65 72 73 69 6f 6e 20 33  ==2    Version 3
2320: 2e 31 2e 33 2e 20 20 2f 2f 20 41 4c 54 45 52 20  .1.3.  // ALTER 
2330: 54 41 42 4c 45 20 41 44 44 20 43 4f 4c 55 4d 4e  TABLE ADD COLUMN
2340: 0a 20 20 2a 2a 20 66 69 6c 65 5f 66 6f 72 6d 61  .  ** file_forma
2350: 74 3d 3d 33 20 20 20 20 56 65 72 73 69 6f 6e 20  t==3    Version 
2360: 33 2e 31 2e 34 2e 20 20 2f 2f 20 64 69 74 74 6f  3.1.4.  // ditto
2370: 20 62 75 74 20 77 69 74 68 20 6e 6f 6e 2d 4e 55   but with non-NU
2380: 4c 4c 20 64 65 66 61 75 6c 74 73 0a 20 20 2a 2a  LL defaults.  **
2390: 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3d 3d 34 20   file_format==4 
23a0: 20 20 20 56 65 72 73 69 6f 6e 20 33 2e 33 2e 30     Version 3.3.0
23b0: 2e 20 20 2f 2f 20 44 45 53 43 20 69 6e 64 69 63  .  // DESC indic
23c0: 65 73 2e 20 20 42 6f 6f 6c 65 61 6e 20 63 6f 6e  es.  Boolean con
23d0: 73 74 61 6e 74 73 0a 20 20 2a 2f 0a 20 20 70 44  stants.  */.  pD
23e0: 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65  b->pSchema->file
23f0: 5f 66 6f 72 6d 61 74 20 3d 20 28 75 38 29 6d 65  _format = (u8)me
2400: 74 61 5b 42 54 52 45 45 5f 46 49 4c 45 5f 46 4f  ta[BTREE_FILE_FO
2410: 52 4d 41 54 2d 31 5d 3b 0a 20 20 69 66 28 20 70  RMAT-1];.  if( p
2420: 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c  Db->pSchema->fil
2430: 65 5f 66 6f 72 6d 61 74 3d 3d 30 20 29 7b 0a 20  e_format==0 ){. 
2440: 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d     pDb->pSchema-
2450: 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 31  >file_format = 1
2460: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 44 62 2d  ;.  }.  if( pDb-
2470: 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66  >pSchema->file_f
2480: 6f 72 6d 61 74 3e 53 51 4c 49 54 45 5f 4d 41 58  ormat>SQLITE_MAX
2490: 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29 7b 0a  _FILE_FORMAT ){.
24a0: 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
24b0: 72 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20 64  ring(pzErrMsg, d
24c0: 62 2c 20 22 75 6e 73 75 70 70 6f 72 74 65 64 20  b, "unsupported 
24d0: 66 69 6c 65 20 66 6f 72 6d 61 74 22 29 3b 0a 20  file format");. 
24e0: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
24f0: 52 52 4f 52 3b 0a 20 20 20 20 67 6f 74 6f 20 69  RROR;.    goto i
2500: 6e 69 74 6f 6e 65 5f 65 72 72 6f 72 5f 6f 75 74  nitone_error_out
2510: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 69 63 6b  ;.  }..  /* Tick
2520: 65 74 20 23 32 38 30 34 3a 20 20 57 68 65 6e 20  et #2804:  When 
2530: 77 65 20 6f 70 65 6e 20 61 20 64 61 74 61 62 61  we open a databa
2540: 73 65 20 69 6e 20 74 68 65 20 6e 65 77 65 72 20  se in the newer 
2550: 66 69 6c 65 20 66 6f 72 6d 61 74 2c 0a 20 20 2a  file format,.  *
2560: 2a 20 63 6c 65 61 72 20 74 68 65 20 6c 65 67 61  * clear the lega
2570: 63 79 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 20 70  cy_file_format p
2580: 72 61 67 6d 61 20 66 6c 61 67 20 73 6f 20 74 68  ragma flag so th
2590: 61 74 20 61 20 56 41 43 55 55 4d 20 77 69 6c 6c  at a VACUUM will
25a0: 0a 20 20 2a 2a 20 6e 6f 74 20 64 6f 77 6e 67 72  .  ** not downgr
25b0: 61 64 65 20 74 68 65 20 64 61 74 61 62 61 73 65  ade the database
25c0: 20 61 6e 64 20 74 68 75 73 20 69 6e 76 61 6c 69   and thus invali
25d0: 64 61 74 65 20 61 6e 79 20 64 65 73 63 65 6e 64  date any descend
25e0: 69 6e 67 0a 20 20 2a 2a 20 69 6e 64 69 63 65 73  ing.  ** indices
25f0: 20 74 68 61 74 20 74 68 65 20 75 73 65 72 20 6d   that the user m
2600: 69 67 68 74 20 68 61 76 65 20 63 72 65 61 74 65  ight have create
2610: 64 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 69 44  d..  */.  if( iD
2620: 62 3d 3d 30 20 26 26 20 6d 65 74 61 5b 42 54 52  b==0 && meta[BTR
2630: 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 2d 31  EE_FILE_FORMAT-1
2640: 5d 3e 3d 34 20 29 7b 0a 20 20 20 20 64 62 2d 3e  ]>=4 ){.    db->
2650: 66 6c 61 67 73 20 26 3d 20 7e 53 51 4c 49 54 45  flags &= ~SQLITE
2660: 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d 74 3b 0a  _LegacyFileFmt;.
2670: 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 61 64 20 74    }..  /* Read t
2680: 68 65 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d  he schema inform
2690: 61 74 69 6f 6e 20 6f 75 74 20 6f 66 20 74 68 65  ation out of the
26a0: 20 73 63 68 65 6d 61 20 74 61 62 6c 65 73 0a 20   schema tables. 
26b0: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62   */.  assert( db
26c0: 2d 3e 69 6e 69 74 2e 62 75 73 79 20 29 3b 0a 20  ->init.busy );. 
26d0: 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 71   {.    char *zSq
26e0: 6c 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71  l;.    zSql = sq
26f0: 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c  lite3MPrintf(db,
2700: 20 0a 20 20 20 20 20 20 20 20 22 53 45 4c 45 43   .        "SELEC
2710: 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65  T name, rootpage
2720: 2c 20 73 71 6c 20 46 52 4f 4d 20 5c 22 25 77 5c  , sql FROM \"%w\
2730: 22 2e 25 73 20 4f 52 44 45 52 20 42 59 20 72 6f  ".%s ORDER BY ro
2740: 77 69 64 22 2c 0a 20 20 20 20 20 20 20 20 64 62  wid",.        db
2750: 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 44 62 53 4e  ->aDb[iDb].zDbSN
2760: 61 6d 65 2c 20 7a 4d 61 73 74 65 72 4e 61 6d 65  ame, zMasterName
2770: 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
2780: 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41  E_OMIT_AUTHORIZA
2790: 54 49 4f 4e 0a 20 20 20 20 7b 0a 20 20 20 20 20  TION.    {.     
27a0: 20 73 71 6c 69 74 65 33 5f 78 61 75 74 68 20 78   sqlite3_xauth x
27b0: 41 75 74 68 3b 0a 20 20 20 20 20 20 78 41 75 74  Auth;.      xAut
27c0: 68 20 3d 20 64 62 2d 3e 78 41 75 74 68 3b 0a 20  h = db->xAuth;. 
27d0: 20 20 20 20 20 64 62 2d 3e 78 41 75 74 68 20 3d       db->xAuth =
27e0: 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 20   0;.#endif.     
27f0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78   rc = sqlite3_ex
2800: 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c  ec(db, zSql, sql
2810: 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b  ite3InitCallback
2820: 2c 20 26 69 6e 69 74 44 61 74 61 2c 20 30 29 3b  , &initData, 0);
2830: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2840: 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49  OMIT_AUTHORIZATI
2850: 4f 4e 0a 20 20 20 20 20 20 64 62 2d 3e 78 41 75  ON.      db->xAu
2860: 74 68 20 3d 20 78 41 75 74 68 3b 0a 20 20 20 20  th = xAuth;.    
2870: 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28  }.#endif.    if(
2880: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
2890: 20 72 63 20 3d 20 69 6e 69 74 44 61 74 61 2e 72   rc = initData.r
28a0: 63 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62  c;.    sqlite3Db
28b0: 46 72 65 65 28 64 62 2c 20 7a 53 71 6c 29 3b 0a  Free(db, zSql);.
28c0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
28d0: 4d 49 54 5f 41 4e 41 4c 59 5a 45 0a 20 20 20 20  MIT_ANALYZE.    
28e0: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
28f0: 4b 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  K ){.      sqlit
2900: 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 64  e3AnalysisLoad(d
2910: 62 2c 20 69 44 62 29 3b 0a 20 20 20 20 7d 0a 23  b, iDb);.    }.#
2920: 65 6e 64 69 66 0a 20 20 7d 0a 20 20 69 66 28 20  endif.  }.  if( 
2930: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
2940: 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
2950: 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 3b 0a  ITE_NOMEM_BKPT;.
2960: 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
2970: 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e  AllSchemasOfConn
2980: 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 7d 0a  ection(db);.  }.
2990: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
29a0: 5f 4f 4b 20 7c 7c 20 28 64 62 2d 3e 66 6c 61 67  _OK || (db->flag
29b0: 73 26 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63  s&SQLITE_WriteSc
29c0: 68 65 6d 61 29 29 7b 0a 20 20 20 20 2f 2a 20 42  hema)){.    /* B
29d0: 6c 61 63 6b 20 6d 61 67 69 63 3a 20 49 66 20 74  lack magic: If t
29e0: 68 65 20 53 51 4c 49 54 45 5f 57 72 69 74 65 53  he SQLITE_WriteS
29f0: 63 68 65 6d 61 20 66 6c 61 67 20 69 73 20 73 65  chema flag is se
2a00: 74 2c 20 74 68 65 6e 20 63 6f 6e 73 69 64 65 72  t, then consider
2a10: 0a 20 20 20 20 2a 2a 20 74 68 65 20 73 63 68 65  .    ** the sche
2a20: 6d 61 20 6c 6f 61 64 65 64 2c 20 65 76 65 6e 20  ma loaded, even 
2a30: 69 66 20 65 72 72 6f 72 73 20 6f 63 63 75 72 72  if errors occurr
2a40: 65 64 2e 20 49 6e 20 74 68 69 73 20 73 69 74 75  ed. In this situ
2a50: 61 74 69 6f 6e 20 74 68 65 20 0a 20 20 20 20 2a  ation the .    *
2a60: 2a 20 63 75 72 72 65 6e 74 20 73 71 6c 69 74 65  * current sqlite
2a70: 33 5f 70 72 65 70 61 72 65 28 29 20 6f 70 65 72  3_prepare() oper
2a80: 61 74 69 6f 6e 20 77 69 6c 6c 20 66 61 69 6c 2c  ation will fail,
2a90: 20 62 75 74 20 74 68 65 20 66 6f 6c 6c 6f 77 69   but the followi
2aa0: 6e 67 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 77 69  ng one.    ** wi
2ab0: 6c 6c 20 61 74 74 65 6d 70 74 20 74 6f 20 63 6f  ll attempt to co
2ac0: 6d 70 69 6c 65 20 74 68 65 20 73 75 70 70 6c 69  mpile the suppli
2ad0: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 61 67 61  ed statement aga
2ae0: 69 6e 73 74 20 77 68 61 74 65 76 65 72 20 73 75  inst whatever su
2af0: 62 73 65 74 0a 20 20 20 20 2a 2a 20 6f 66 20 74  bset.    ** of t
2b00: 68 65 20 73 63 68 65 6d 61 20 77 61 73 20 6c 6f  he schema was lo
2b10: 61 64 65 64 20 62 65 66 6f 72 65 20 74 68 65 20  aded before the 
2b20: 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 2e 20  error occurred. 
2b30: 54 68 65 20 70 72 69 6d 61 72 79 0a 20 20 20 20  The primary.    
2b40: 2a 2a 20 70 75 72 70 6f 73 65 20 6f 66 20 74 68  ** purpose of th
2b50: 69 73 20 69 73 20 74 6f 20 61 6c 6c 6f 77 20 61  is is to allow a
2b60: 63 63 65 73 73 20 74 6f 20 74 68 65 20 73 71 6c  ccess to the sql
2b70: 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
2b80: 0a 20 20 20 20 2a 2a 20 65 76 65 6e 20 77 68 65  .    ** even whe
2b90: 6e 20 69 74 73 20 63 6f 6e 74 65 6e 74 73 20 68  n its contents h
2ba0: 61 76 65 20 62 65 65 6e 20 63 6f 72 72 75 70 74  ave been corrupt
2bb0: 65 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 44  ed..    */.    D
2bc0: 62 53 65 74 50 72 6f 70 65 72 74 79 28 64 62 2c  bSetProperty(db,
2bd0: 20 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c   iDb, DB_SchemaL
2be0: 6f 61 64 65 64 29 3b 0a 20 20 20 20 72 63 20 3d  oaded);.    rc =
2bf0: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a   SQLITE_OK;.  }.
2c00: 0a 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20  .  /* Jump here 
2c10: 66 6f 72 20 61 6e 20 65 72 72 6f 72 20 74 68 61  for an error tha
2c20: 74 20 6f 63 63 75 72 73 20 61 66 74 65 72 20 73  t occurs after s
2c30: 75 63 63 65 73 73 66 75 6c 6c 79 20 61 6c 6c 6f  uccessfully allo
2c40: 63 61 74 69 6e 67 0a 20 20 2a 2a 20 63 75 72 4d  cating.  ** curM
2c50: 61 69 6e 20 61 6e 64 20 63 61 6c 6c 69 6e 67 20  ain and calling 
2c60: 73 71 6c 69 74 65 33 42 74 72 65 65 45 6e 74 65  sqlite3BtreeEnte
2c70: 72 28 29 2e 20 46 6f 72 20 61 6e 20 65 72 72 6f  r(). For an erro
2c80: 72 20 74 68 61 74 20 6f 63 63 75 72 73 0a 20 20  r that occurs.  
2c90: 2a 2a 20 62 65 66 6f 72 65 20 74 68 61 74 20 70  ** before that p
2ca0: 6f 69 6e 74 2c 20 6a 75 6d 70 20 74 6f 20 65 72  oint, jump to er
2cb0: 72 6f 72 5f 6f 75 74 2e 0a 20 20 2a 2f 0a 69 6e  ror_out..  */.in
2cc0: 69 74 6f 6e 65 5f 65 72 72 6f 72 5f 6f 75 74 3a  itone_error_out:
2cd0: 0a 20 20 69 66 28 20 6f 70 65 6e 65 64 54 72 61  .  if( openedTra
2ce0: 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20  nsaction ){.    
2cf0: 73 71 6c 69 74 65 33 42 74 72 65 65 43 6f 6d 6d  sqlite3BtreeComm
2d00: 69 74 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20  it(pDb->pBt);.  
2d10: 7d 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65  }.  sqlite3Btree
2d20: 4c 65 61 76 65 28 70 44 62 2d 3e 70 42 74 29 3b  Leave(pDb->pBt);
2d30: 0a 0a 65 72 72 6f 72 5f 6f 75 74 3a 0a 20 20 69  ..error_out:.  i
2d40: 66 28 20 72 63 20 29 7b 0a 20 20 20 20 69 66 28  f( rc ){.    if(
2d50: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45   rc==SQLITE_NOME
2d60: 4d 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f  M || rc==SQLITE_
2d70: 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 7b 0a 20  IOERR_NOMEM ){. 
2d80: 20 20 20 20 20 73 71 6c 69 74 65 33 4f 6f 6d 46       sqlite3OomF
2d90: 61 75 6c 74 28 64 62 29 3b 0a 20 20 20 20 7d 0a  ault(db);.    }.
2da0: 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
2db0: 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c 20 69 44  OneSchema(db, iD
2dc0: 62 29 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 69 6e  b);.  }.  db->in
2dd0: 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20 72  it.busy = 0;.  r
2de0: 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a  eturn rc;.}../*.
2df0: 2a 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 61 6c  ** Initialize al
2e00: 6c 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  l database files
2e10: 20 2d 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61   - the main data
2e20: 62 61 73 65 20 66 69 6c 65 2c 20 74 68 65 20 66  base file, the f
2e30: 69 6c 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73  ile.** used to s
2e40: 74 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20 74  tore temporary t
2e50: 61 62 6c 65 73 2c 20 61 6e 64 20 61 6e 79 20 61  ables, and any a
2e60: 64 64 69 74 69 6f 6e 61 6c 20 64 61 74 61 62 61  dditional databa
2e70: 73 65 20 66 69 6c 65 73 0a 2a 2a 20 63 72 65 61  se files.** crea
2e80: 74 65 64 20 75 73 69 6e 67 20 41 54 54 41 43 48  ted using ATTACH
2e90: 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 52 65   statements.  Re
2ea0: 74 75 72 6e 20 61 20 73 75 63 63 65 73 73 20 63  turn a success c
2eb0: 6f 64 65 2e 20 20 49 66 20 61 6e 0a 2a 2a 20 65  ode.  If an.** e
2ec0: 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 77 72 69  rror occurs, wri
2ed0: 74 65 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  te an error mess
2ee0: 61 67 65 20 69 6e 74 6f 20 2a 70 7a 45 72 72 4d  age into *pzErrM
2ef0: 73 67 2e 0a 2a 2a 0a 2a 2a 20 41 66 74 65 72 20  sg..**.** After 
2f00: 61 20 64 61 74 61 62 61 73 65 20 69 73 20 69 6e  a database is in
2f10: 69 74 69 61 6c 69 7a 65 64 2c 20 74 68 65 20 44  itialized, the D
2f20: 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 62  B_SchemaLoaded b
2f30: 69 74 20 69 73 20 73 65 74 0a 2a 2a 20 62 69 74  it is set.** bit
2f40: 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 66   is set in the f
2f50: 6c 61 67 73 20 66 69 65 6c 64 20 6f 66 20 74 68  lags field of th
2f60: 65 20 44 62 20 73 74 72 75 63 74 75 72 65 2e 20  e Db structure. 
2f70: 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  If the database.
2f80: 2a 2a 20 66 69 6c 65 20 77 61 73 20 6f 66 20 7a  ** file was of z
2f90: 65 72 6f 2d 6c 65 6e 67 74 68 2c 20 74 68 65 6e  ero-length, then
2fa0: 20 74 68 65 20 44 42 5f 45 6d 70 74 79 20 66 6c   the DB_Empty fl
2fb0: 61 67 20 69 73 20 61 6c 73 6f 20 73 65 74 2e 0a  ag is also set..
2fc0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  */.int sqlite3In
2fd0: 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  it(sqlite3 *db, 
2fe0: 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 29  char **pzErrMsg)
2ff0: 7b 0a 20 20 69 6e 74 20 69 2c 20 72 63 3b 0a 20  {.  int i, rc;. 
3000: 20 69 6e 74 20 63 6f 6d 6d 69 74 5f 69 6e 74 65   int commit_inte
3010: 72 6e 61 6c 20 3d 20 21 28 64 62 2d 3e 6d 44 62  rnal = !(db->mDb
3020: 46 6c 61 67 73 26 44 42 46 4c 41 47 5f 53 63 68  Flags&DBFLAG_Sch
3030: 65 6d 61 43 68 61 6e 67 65 29 3b 0a 20 20 0a 20  emaChange);.  . 
3040: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
3050: 5f 6d 75 74 65 78 5f 68 65 6c 64 28 64 62 2d 3e  _mutex_held(db->
3060: 6d 75 74 65 78 29 20 29 3b 0a 20 20 61 73 73 65  mutex) );.  asse
3070: 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
3080: 48 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d 3e 61  HoldsMutex(db->a
3090: 44 62 5b 30 5d 2e 70 42 74 29 20 29 3b 0a 20 20  Db[0].pBt) );.  
30a0: 61 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74  assert( db->init
30b0: 2e 62 75 73 79 3d 3d 30 20 29 3b 0a 20 20 45 4e  .busy==0 );.  EN
30c0: 43 28 64 62 29 20 3d 20 53 43 48 45 4d 41 5f 45  C(db) = SCHEMA_E
30d0: 4e 43 28 64 62 29 3b 0a 20 20 61 73 73 65 72 74  NC(db);.  assert
30e0: 28 20 64 62 2d 3e 6e 44 62 3e 30 20 29 3b 0a 20  ( db->nDb>0 );. 
30f0: 20 2f 2a 20 44 6f 20 74 68 65 20 6d 61 69 6e 20   /* Do the main 
3100: 73 63 68 65 6d 61 20 66 69 72 73 74 20 2a 2f 0a  schema first */.
3110: 20 20 69 66 28 20 21 44 62 48 61 73 50 72 6f 70    if( !DbHasProp
3120: 65 72 74 79 28 64 62 2c 20 30 2c 20 44 42 5f 53  erty(db, 0, DB_S
3130: 63 68 65 6d 61 4c 6f 61 64 65 64 29 20 29 7b 0a  chemaLoaded) ){.
3140: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
3150: 49 6e 69 74 4f 6e 65 28 64 62 2c 20 30 2c 20 70  InitOne(db, 0, p
3160: 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 69 66  zErrMsg);.    if
3170: 28 20 72 63 20 29 20 72 65 74 75 72 6e 20 72 63  ( rc ) return rc
3180: 3b 0a 20 20 7d 0a 20 20 2f 2a 20 41 6c 6c 20 6f  ;.  }.  /* All o
3190: 74 68 65 72 20 73 63 68 65 6d 61 73 20 61 66 74  ther schemas aft
31a0: 65 72 20 74 68 65 20 6d 61 69 6e 20 73 63 68 65  er the main sche
31b0: 6d 61 2e 20 54 68 65 20 22 74 65 6d 70 22 20 73  ma. The "temp" s
31c0: 63 68 65 6d 61 20 6d 75 73 74 20 62 65 20 6c 61  chema must be la
31d0: 73 74 20 2a 2f 0a 20 20 66 6f 72 28 69 3d 64 62  st */.  for(i=db
31e0: 2d 3e 6e 44 62 2d 31 3b 20 69 3e 30 3b 20 69 2d  ->nDb-1; i>0; i-
31f0: 2d 29 7b 0a 20 20 20 20 69 66 28 20 21 44 62 48  -){.    if( !DbH
3200: 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20 69  asProperty(db, i
3210: 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65  , DB_SchemaLoade
3220: 64 29 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  d) ){.      rc =
3230: 20 73 71 6c 69 74 65 33 49 6e 69 74 4f 6e 65 28   sqlite3InitOne(
3240: 64 62 2c 20 69 2c 20 70 7a 45 72 72 4d 73 67 29  db, i, pzErrMsg)
3250: 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 20 29  ;.      if( rc )
3260: 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20 20 20   return rc;.    
3270: 7d 0a 20 20 7d 0a 20 20 69 66 28 20 63 6f 6d 6d  }.  }.  if( comm
3280: 69 74 5f 69 6e 74 65 72 6e 61 6c 20 29 7b 0a 20  it_internal ){. 
3290: 20 20 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74     sqlite3Commit
32a0: 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28  InternalChanges(
32b0: 64 62 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  db);.  }.  retur
32c0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a  n SQLITE_OK;.}..
32d0: 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69  /*.** This routi
32e0: 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69 66  ne is a no-op if
32f0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
3300: 68 65 6d 61 20 69 73 20 61 6c 72 65 61 64 79 20  hema is already 
3310: 69 6e 69 74 69 61 6c 69 7a 65 64 2e 0a 2a 2a 20  initialized..** 
3320: 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 20 73  Otherwise, the s
3330: 63 68 65 6d 61 20 69 73 20 6c 6f 61 64 65 64 2e  chema is loaded.
3340: 20 41 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 69   An error code i
3350: 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a 69  s returned..*/.i
3360: 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64 53 63  nt sqlite3ReadSc
3370: 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72  hema(Parse *pPar
3380: 73 65 29 7b 0a 20 20 69 6e 74 20 72 63 20 3d 20  se){.  int rc = 
3390: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 73 71 6c  SQLITE_OK;.  sql
33a0: 69 74 65 33 20 2a 64 62 20 3d 20 70 50 61 72 73  ite3 *db = pPars
33b0: 65 2d 3e 64 62 3b 0a 20 20 61 73 73 65 72 74 28  e->db;.  assert(
33c0: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68   sqlite3_mutex_h
33d0: 65 6c 64 28 64 62 2d 3e 6d 75 74 65 78 29 20 29  eld(db->mutex) )
33e0: 3b 0a 20 20 69 66 28 20 21 64 62 2d 3e 69 6e 69  ;.  if( !db->ini
33f0: 74 2e 62 75 73 79 20 29 7b 0a 20 20 20 20 72 63  t.busy ){.    rc
3400: 20 3d 20 73 71 6c 69 74 65 33 49 6e 69 74 28 64   = sqlite3Init(d
3410: 62 2c 20 26 70 50 61 72 73 65 2d 3e 7a 45 72 72  b, &pParse->zErr
3420: 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  Msg);.  }.  if( 
3430: 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
3440: 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 72 63 20  .    pParse->rc 
3450: 3d 20 72 63 3b 0a 20 20 20 20 70 50 61 72 73 65  = rc;.    pParse
3460: 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 7d 0a 20 20  ->nErr++;.  }.  
3470: 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 0a 2f  return rc;.}.../
3480: 2a 0a 2a 2a 20 43 68 65 63 6b 20 73 63 68 65 6d  *.** Check schem
3490: 61 20 63 6f 6f 6b 69 65 73 20 69 6e 20 61 6c 6c  a cookies in all
34a0: 20 64 61 74 61 62 61 73 65 73 2e 20 20 49 66 20   databases.  If 
34b0: 61 6e 79 20 63 6f 6f 6b 69 65 20 69 73 20 6f 75  any cookie is ou
34c0: 74 0a 2a 2a 20 6f 66 20 64 61 74 65 20 73 65 74  t.** of date set
34d0: 20 70 50 61 72 73 65 2d 3e 72 63 20 74 6f 20 53   pParse->rc to S
34e0: 51 4c 49 54 45 5f 53 43 48 45 4d 41 2e 20 20 49  QLITE_SCHEMA.  I
34f0: 66 20 61 6c 6c 20 73 63 68 65 6d 61 20 63 6f 6f  f all schema coo
3500: 6b 69 65 73 0a 2a 2a 20 6d 61 6b 65 20 6e 6f 20  kies.** make no 
3510: 63 68 61 6e 67 65 73 20 74 6f 20 70 50 61 72 73  changes to pPars
3520: 65 2d 3e 72 63 2e 0a 2a 2f 0a 73 74 61 74 69 63  e->rc..*/.static
3530: 20 76 6f 69 64 20 73 63 68 65 6d 61 49 73 56 61   void schemaIsVa
3540: 6c 69 64 28 50 61 72 73 65 20 2a 70 50 61 72 73  lid(Parse *pPars
3550: 65 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  e){.  sqlite3 *d
3560: 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a  b = pParse->db;.
3570: 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74    int iDb;.  int
3580: 20 72 63 3b 0a 20 20 69 6e 74 20 63 6f 6f 6b 69   rc;.  int cooki
3590: 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 50  e;..  assert( pP
35a0: 61 72 73 65 2d 3e 63 68 65 63 6b 53 63 68 65 6d  arse->checkSchem
35b0: 61 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73  a );.  assert( s
35c0: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c  qlite3_mutex_hel
35d0: 64 28 64 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a  d(db->mutex) );.
35e0: 20 20 66 6f 72 28 69 44 62 3d 30 3b 20 69 44 62    for(iDb=0; iDb
35f0: 3c 64 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b 29  <db->nDb; iDb++)
3600: 7b 0a 20 20 20 20 69 6e 74 20 6f 70 65 6e 65 64  {.    int opened
3610: 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20 30 3b  Transaction = 0;
3620: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
3630: 20 69 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f   if a transactio
3640: 6e 20 69 73 20 6f 70 65 6e 65 64 20 2a 2f 0a 20  n is opened */. 
3650: 20 20 20 42 74 72 65 65 20 2a 70 42 74 20 3d 20     Btree *pBt = 
3660: 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
3670: 3b 20 20 20 20 20 2f 2a 20 42 74 72 65 65 20 64  ;     /* Btree d
3680: 61 74 61 62 61 73 65 20 74 6f 20 72 65 61 64 20  atabase to read 
3690: 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 2a 2f 0a 20  cookie from */. 
36a0: 20 20 20 69 66 28 20 70 42 74 3d 3d 30 20 29 20     if( pBt==0 ) 
36b0: 63 6f 6e 74 69 6e 75 65 3b 0a 0a 20 20 20 20 2f  continue;..    /
36c0: 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f  * If there is no
36d0: 74 20 61 6c 72 65 61 64 79 20 61 20 72 65 61 64  t already a read
36e0: 2d 6f 6e 6c 79 20 28 6f 72 20 72 65 61 64 2d 77  -only (or read-w
36f0: 72 69 74 65 29 20 74 72 61 6e 73 61 63 74 69 6f  rite) transactio
3700: 6e 20 6f 70 65 6e 65 64 0a 20 20 20 20 2a 2a 20  n opened.    ** 
3710: 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20 64 61  on the b-tree da
3720: 74 61 62 61 73 65 2c 20 6f 70 65 6e 20 6f 6e 65  tabase, open one
3730: 20 6e 6f 77 2e 20 49 66 20 61 20 74 72 61 6e 73   now. If a trans
3740: 61 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64  action is opened
3750: 2c 20 69 74 20 0a 20 20 20 20 2a 2a 20 77 69 6c  , it .    ** wil
3760: 6c 20 62 65 20 63 6c 6f 73 65 64 20 69 6d 6d 65  l be closed imme
3770: 64 69 61 74 65 6c 79 20 61 66 74 65 72 20 72 65  diately after re
3780: 61 64 69 6e 67 20 74 68 65 20 6d 65 74 61 2d 76  ading the meta-v
3790: 61 6c 75 65 2e 20 2a 2f 0a 20 20 20 20 69 66 28  alue. */.    if(
37a0: 20 21 73 71 6c 69 74 65 33 42 74 72 65 65 49 73   !sqlite3BtreeIs
37b0: 49 6e 52 65 61 64 54 72 61 6e 73 28 70 42 74 29  InReadTrans(pBt)
37c0: 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   ){.      rc = s
37d0: 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e  qlite3BtreeBegin
37e0: 54 72 61 6e 73 28 70 42 74 2c 20 30 29 3b 0a 20  Trans(pBt, 0);. 
37f0: 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
3800: 49 54 45 5f 4e 4f 4d 45 4d 20 7c 7c 20 72 63 3d  ITE_NOMEM || rc=
3810: 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f  =SQLITE_IOERR_NO
3820: 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 20 20 73  MEM ){.        s
3830: 71 6c 69 74 65 33 4f 6f 6d 46 61 75 6c 74 28 64  qlite3OomFault(d
3840: 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  b);.      }.    
3850: 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
3860: 5f 4f 4b 20 29 20 72 65 74 75 72 6e 3b 0a 20 20  _OK ) return;.  
3870: 20 20 20 20 6f 70 65 6e 65 64 54 72 61 6e 73 61      openedTransa
3880: 63 74 69 6f 6e 20 3d 20 31 3b 0a 20 20 20 20 7d  ction = 1;.    }
3890: 0a 0a 20 20 20 20 2f 2a 20 52 65 61 64 20 74 68  ..    /* Read th
38a0: 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  e schema cookie 
38b0: 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
38c0: 65 2e 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f  e. If it does no
38d0: 74 20 6d 61 74 63 68 20 74 68 65 20 0a 20 20 20  t match the .   
38e0: 20 2a 2a 20 76 61 6c 75 65 20 73 74 6f 72 65 64   ** value stored
38f0: 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   as part of the 
3900: 69 6e 2d 6d 65 6d 6f 72 79 20 73 63 68 65 6d 61  in-memory schema
3910: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2c   representation,
3920: 0a 20 20 20 20 2a 2a 20 73 65 74 20 50 61 72 73  .    ** set Pars
3930: 65 2e 72 63 20 74 6f 20 53 51 4c 49 54 45 5f 53  e.rc to SQLITE_S
3940: 43 48 45 4d 41 2e 20 2a 2f 0a 20 20 20 20 73 71  CHEMA. */.    sq
3950: 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d 65 74  lite3BtreeGetMet
3960: 61 28 70 42 74 2c 20 42 54 52 45 45 5f 53 43 48  a(pBt, BTREE_SCH
3970: 45 4d 41 5f 56 45 52 53 49 4f 4e 2c 20 28 75 33  EMA_VERSION, (u3
3980: 32 20 2a 29 26 63 6f 6f 6b 69 65 29 3b 0a 20 20  2 *)&cookie);.  
3990: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
39a0: 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64  3SchemaMutexHeld
39b0: 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a  (db, iDb, 0) );.
39c0: 20 20 20 20 69 66 28 20 63 6f 6f 6b 69 65 21 3d      if( cookie!=
39d0: 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 53 63  db->aDb[iDb].pSc
39e0: 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f  hema->schema_coo
39f0: 6b 69 65 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  kie ){.      sql
3a00: 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65  ite3ResetOneSche
3a10: 6d 61 28 64 62 2c 20 69 44 62 29 3b 0a 20 20 20  ma(db, iDb);.   
3a20: 20 20 20 70 50 61 72 73 65 2d 3e 72 63 20 3d 20     pParse->rc = 
3a30: 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20  SQLITE_SCHEMA;. 
3a40: 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 43 6c 6f     }..    /* Clo
3a50: 73 65 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  se the transacti
3a60: 6f 6e 2c 20 69 66 20 6f 6e 65 20 77 61 73 20 6f  on, if one was o
3a70: 70 65 6e 65 64 2e 20 2a 2f 0a 20 20 20 20 69 66  pened. */.    if
3a80: 28 20 6f 70 65 6e 65 64 54 72 61 6e 73 61 63 74  ( openedTransact
3a90: 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ion ){.      sql
3aa0: 69 74 65 33 42 74 72 65 65 43 6f 6d 6d 69 74 28  ite3BtreeCommit(
3ab0: 70 42 74 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  pBt);.    }.  }.
3ac0: 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74  }../*.** Convert
3ad0: 20 61 20 73 63 68 65 6d 61 20 70 6f 69 6e 74 65   a schema pointe
3ae0: 72 20 69 6e 74 6f 20 74 68 65 20 69 44 62 20 69  r into the iDb i
3af0: 6e 64 65 78 20 74 68 61 74 20 69 6e 64 69 63 61  ndex that indica
3b00: 74 65 73 0a 2a 2a 20 77 68 69 63 68 20 64 61 74  tes.** which dat
3b10: 61 62 61 73 65 20 66 69 6c 65 20 69 6e 20 64 62  abase file in db
3b20: 2d 3e 61 44 62 5b 5d 20 74 68 65 20 73 63 68 65  ->aDb[] the sche
3b30: 6d 61 20 72 65 66 65 72 73 20 74 6f 2e 0a 2a 2a  ma refers to..**
3b40: 0a 2a 2a 20 49 66 20 74 68 65 20 73 61 6d 65 20  .** If the same 
3b50: 64 61 74 61 62 61 73 65 20 69 73 20 61 74 74 61  database is atta
3b60: 63 68 65 64 20 6d 6f 72 65 20 74 68 61 6e 20 6f  ched more than o
3b70: 6e 63 65 2c 20 74 68 65 20 66 69 72 73 74 0a 2a  nce, the first.*
3b80: 2a 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  * attached datab
3b90: 61 73 65 20 69 73 20 72 65 74 75 72 6e 65 64 2e  ase is returned.
3ba0: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  .*/.int sqlite3S
3bb0: 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c  chemaToIndex(sql
3bc0: 69 74 65 33 20 2a 64 62 2c 20 53 63 68 65 6d 61  ite3 *db, Schema
3bd0: 20 2a 70 53 63 68 65 6d 61 29 7b 0a 20 20 69 6e   *pSchema){.  in
3be0: 74 20 69 20 3d 20 2d 31 30 30 30 30 30 30 3b 0a  t i = -1000000;.
3bf0: 0a 20 20 2f 2a 20 49 66 20 70 53 63 68 65 6d 61  .  /* If pSchema
3c00: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 72   is NULL, then r
3c10: 65 74 75 72 6e 20 2d 31 30 30 30 30 30 30 2e 20  eturn -1000000. 
3c20: 54 68 69 73 20 68 61 70 70 65 6e 73 20 77 68 65  This happens whe
3c30: 6e 20 63 6f 64 65 20 69 6e 20 0a 20 20 2a 2a 20  n code in .  ** 
3c40: 65 78 70 72 2e 63 20 69 73 20 74 72 79 69 6e 67  expr.c is trying
3c50: 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 20 72 65   to resolve a re
3c60: 66 65 72 65 6e 63 65 20 74 6f 20 61 20 74 72 61  ference to a tra
3c70: 6e 73 69 65 6e 74 20 74 61 62 6c 65 20 28 69 2e  nsient table (i.
3c80: 65 2e 20 6f 6e 65 0a 20 20 2a 2a 20 63 72 65 61  e. one.  ** crea
3c90: 74 65 64 20 62 79 20 61 20 73 75 62 2d 73 65 6c  ted by a sub-sel
3ca0: 65 63 74 29 2e 20 49 6e 20 74 68 69 73 20 63 61  ect). In this ca
3cb0: 73 65 20 74 68 65 20 72 65 74 75 72 6e 20 76 61  se the return va
3cc0: 6c 75 65 20 6f 66 20 74 68 69 73 20 0a 20 20 2a  lue of this .  *
3cd0: 2a 20 66 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c  * function shoul
3ce0: 64 20 6e 65 76 65 72 20 62 65 20 75 73 65 64 2e  d never be used.
3cf0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 65 20 72 65  .  **.  ** We re
3d00: 74 75 72 6e 20 2d 31 30 30 30 30 30 30 20 69 6e  turn -1000000 in
3d10: 73 74 65 61 64 20 6f 66 20 74 68 65 20 6d 6f 72  stead of the mor
3d20: 65 20 75 73 75 61 6c 20 2d 31 20 73 69 6d 70 6c  e usual -1 simpl
3d30: 79 20 62 65 63 61 75 73 65 20 75 73 69 6e 67 0a  y because using.
3d40: 20 20 2a 2a 20 2d 31 30 30 30 30 30 30 20 61 73    ** -1000000 as
3d50: 20 74 68 65 20 69 6e 63 6f 72 72 65 63 74 20 69   the incorrect i
3d60: 6e 64 65 78 20 69 6e 74 6f 20 64 62 2d 3e 61 44  ndex into db->aD
3d70: 62 5b 5d 20 69 73 20 6d 75 63 68 20 0a 20 20 2a  b[] is much .  *
3d80: 2a 20 6d 6f 72 65 20 6c 69 6b 65 6c 79 20 74 6f  * more likely to
3d90: 20 63 61 75 73 65 20 61 20 73 65 67 66 61 75 6c   cause a segfaul
3da0: 74 20 74 68 61 6e 20 2d 31 20 28 6f 66 20 63 6f  t than -1 (of co
3db0: 75 72 73 65 20 74 68 65 72 65 20 61 72 65 20 61  urse there are a
3dc0: 73 73 65 72 74 28 29 0a 20 20 2a 2a 20 73 74 61  ssert().  ** sta
3dd0: 74 65 6d 65 6e 74 73 20 74 6f 6f 2c 20 62 75 74  tements too, but
3de0: 20 69 74 20 6e 65 76 65 72 20 68 75 72 74 73 20   it never hurts 
3df0: 74 6f 20 70 6c 61 79 20 74 68 65 20 6f 64 64 73  to play the odds
3e00: 29 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  )..  */.  assert
3e10: 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f  ( sqlite3_mutex_
3e20: 68 65 6c 64 28 64 62 2d 3e 6d 75 74 65 78 29 20  held(db->mutex) 
3e30: 29 3b 0a 20 20 69 66 28 20 70 53 63 68 65 6d 61  );.  if( pSchema
3e40: 20 29 7b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b   ){.    for(i=0;
3e50: 20 31 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20   1; i++){.      
3e60: 61 73 73 65 72 74 28 20 69 3c 64 62 2d 3e 6e 44  assert( i<db->nD
3e70: 62 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 64  b );.      if( d
3e80: 62 2d 3e 61 44 62 5b 69 5d 2e 70 53 63 68 65 6d  b->aDb[i].pSchem
3e90: 61 3d 3d 70 53 63 68 65 6d 61 20 29 7b 0a 20 20  a==pSchema ){.  
3ea0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
3eb0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61     }.    }.    a
3ec0: 73 73 65 72 74 28 20 69 3e 3d 30 20 26 26 20 69  ssert( i>=0 && i
3ed0: 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 7d 0a  <db->nDb );.  }.
3ee0: 20 20 72 65 74 75 72 6e 20 69 3b 0a 7d 0a 0a 2f    return i;.}../
3ef0: 2a 0a 2a 2a 20 46 72 65 65 20 61 6c 6c 20 6d 65  *.** Free all me
3f00: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  mory allocations
3f10: 20 69 6e 20 74 68 65 20 70 50 61 72 73 65 20 6f   in the pParse o
3f20: 62 6a 65 63 74 0a 2a 2f 0a 76 6f 69 64 20 73 71  bject.*/.void sq
3f30: 6c 69 74 65 33 50 61 72 73 65 72 52 65 73 65 74  lite3ParserReset
3f40: 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 7b  (Parse *pParse){
3f50: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d  .  sqlite3 *db =
3f60: 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a 20 20 73   pParse->db;.  s
3f70: 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
3f80: 20 70 50 61 72 73 65 2d 3e 61 4c 61 62 65 6c 29   pParse->aLabel)
3f90: 3b 0a 20 20 73 71 6c 69 74 65 33 45 78 70 72 4c  ;.  sqlite3ExprL
3fa0: 69 73 74 44 65 6c 65 74 65 28 64 62 2c 20 70 50  istDelete(db, pP
3fb0: 61 72 73 65 2d 3e 70 43 6f 6e 73 74 45 78 70 72  arse->pConstExpr
3fc0: 29 3b 0a 20 20 69 66 28 20 64 62 20 29 7b 0a 20  );.  if( db ){. 
3fd0: 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6c     assert( db->l
3fe0: 6f 6f 6b 61 73 69 64 65 2e 62 44 69 73 61 62 6c  ookaside.bDisabl
3ff0: 65 20 3e 3d 20 70 50 61 72 73 65 2d 3e 64 69 73  e >= pParse->dis
4000: 61 62 6c 65 4c 6f 6f 6b 61 73 69 64 65 20 29 3b  ableLookaside );
4010: 0a 20 20 20 20 64 62 2d 3e 6c 6f 6f 6b 61 73 69  .    db->lookasi
4020: 64 65 2e 62 44 69 73 61 62 6c 65 20 2d 3d 20 70  de.bDisable -= p
4030: 50 61 72 73 65 2d 3e 64 69 73 61 62 6c 65 4c 6f  Parse->disableLo
4040: 6f 6b 61 73 69 64 65 3b 0a 20 20 7d 0a 20 20 70  okaside;.  }.  p
4050: 50 61 72 73 65 2d 3e 64 69 73 61 62 6c 65 4c 6f  Parse->disableLo
4060: 6f 6b 61 73 69 64 65 20 3d 20 30 3b 0a 7d 0a 0a  okaside = 0;.}..
4070: 2f 2a 0a 2a 2a 20 43 6f 6d 70 69 6c 65 20 74 68  /*.** Compile th
4080: 65 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20  e UTF-8 encoded 
4090: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 7a 53  SQL statement zS
40a0: 71 6c 20 69 6e 74 6f 20 61 20 73 74 61 74 65 6d  ql into a statem
40b0: 65 6e 74 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 73  ent handle..*/.s
40c0: 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65  tatic int sqlite
40d0: 33 50 72 65 70 61 72 65 28 0a 20 20 73 71 6c 69  3Prepare(.  sqli
40e0: 74 65 33 20 2a 64 62 2c 20 20 20 20 20 20 20 20  te3 *db,        
40f0: 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73        /* Databas
4100: 65 20 68 61 6e 64 6c 65 2e 20 2a 2f 0a 20 20 63  e handle. */.  c
4110: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 2c  onst char *zSql,
4120: 20 20 20 20 20 20 20 20 20 2f 2a 20 55 54 46 2d           /* UTF-
4130: 38 20 65 6e 63 6f 64 65 64 20 53 51 4c 20 73 74  8 encoded SQL st
4140: 61 74 65 6d 65 6e 74 2e 20 2a 2f 0a 20 20 69 6e  atement. */.  in
4150: 74 20 6e 42 79 74 65 73 2c 20 20 20 20 20 20 20  t nBytes,       
4160: 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74          /* Lengt
4170: 68 20 6f 66 20 7a 53 71 6c 20 69 6e 20 62 79 74  h of zSql in byt
4180: 65 73 2e 20 2a 2f 0a 20 20 75 33 32 20 70 72 65  es. */.  u32 pre
4190: 70 46 6c 61 67 73 2c 20 20 20 20 20 20 20 20 20  pFlags,         
41a0: 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f     /* Zero or mo
41b0: 72 65 20 53 51 4c 49 54 45 5f 50 52 45 50 41 52  re SQLITE_PREPAR
41c0: 45 5f 2a 20 66 6c 61 67 73 20 2a 2f 0a 20 20 56  E_* flags */.  V
41d0: 64 62 65 20 2a 70 52 65 70 72 65 70 61 72 65 2c  dbe *pReprepare,
41e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 62           /* VM b
41f0: 65 69 6e 67 20 72 65 70 72 65 70 61 72 65 64 20  eing reprepared 
4200: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  */.  sqlite3_stm
4210: 74 20 2a 2a 70 70 53 74 6d 74 2c 20 20 20 20 2f  t **ppStmt,    /
4220: 2a 20 4f 55 54 3a 20 41 20 70 6f 69 6e 74 65 72  * OUT: A pointer
4230: 20 74 6f 20 74 68 65 20 70 72 65 70 61 72 65 64   to the prepared
4240: 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20   statement */.  
4250: 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 70 7a 54  const char **pzT
4260: 61 69 6c 20 20 20 20 20 20 20 2f 2a 20 4f 55 54  ail       /* OUT
4270: 3a 20 45 6e 64 20 6f 66 20 70 61 72 73 65 64 20  : End of parsed 
4280: 73 74 72 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 63  string */.){.  c
4290: 68 61 72 20 2a 7a 45 72 72 4d 73 67 20 3d 20 30  har *zErrMsg = 0
42a0: 3b 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f  ;        /* Erro
42b0: 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 69  r message */.  i
42c0: 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  nt rc = SQLITE_O
42d0: 4b 3b 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75  K;       /* Resu
42e0: 6c 74 20 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74  lt code */.  int
42f0: 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
4300: 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
4310: 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 50 61 72 73  ounter */.  Pars
4320: 65 20 73 50 61 72 73 65 3b 20 20 20 20 20 20 20  e sParse;       
4330: 20 20 20 20 20 20 2f 2a 20 50 61 72 73 69 6e 67        /* Parsing
4340: 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 0a 20 20 6d   context */..  m
4350: 65 6d 73 65 74 28 26 73 50 61 72 73 65 2c 20 30  emset(&sParse, 0
4360: 2c 20 50 41 52 53 45 5f 48 44 52 5f 53 5a 29 3b  , PARSE_HDR_SZ);
4370: 0a 20 20 6d 65 6d 73 65 74 28 50 41 52 53 45 5f  .  memset(PARSE_
4380: 54 41 49 4c 28 26 73 50 61 72 73 65 29 2c 20 30  TAIL(&sParse), 0
4390: 2c 20 50 41 52 53 45 5f 54 41 49 4c 5f 53 5a 29  , PARSE_TAIL_SZ)
43a0: 3b 0a 20 20 73 50 61 72 73 65 2e 70 52 65 70 72  ;.  sParse.pRepr
43b0: 65 70 61 72 65 20 3d 20 70 52 65 70 72 65 70 61  epare = pReprepa
43c0: 72 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 70  re;.  assert( pp
43d0: 53 74 6d 74 20 26 26 20 2a 70 70 53 74 6d 74 3d  Stmt && *ppStmt=
43e0: 3d 30 20 29 3b 0a 20 20 2f 2a 20 61 73 73 65 72  =0 );.  /* asser
43f0: 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  t( !db->mallocFa
4400: 69 6c 65 64 20 29 3b 20 2f 2f 20 6e 6f 74 20 74  iled ); // not t
4410: 72 75 65 20 77 69 74 68 20 53 51 4c 49 54 45 5f  rue with SQLITE_
4420: 55 53 45 5f 41 4c 4c 4f 43 41 20 2a 2f 0a 20 20  USE_ALLOCA */.  
4430: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f  assert( sqlite3_
4440: 6d 75 74 65 78 5f 68 65 6c 64 28 64 62 2d 3e 6d  mutex_held(db->m
4450: 75 74 65 78 29 20 29 3b 0a 0a 20 20 2f 2a 20 46  utex) );..  /* F
4460: 6f 72 20 61 20 6c 6f 6e 67 2d 74 65 72 6d 20 75  or a long-term u
4470: 73 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74  se prepared stat
4480: 65 6d 65 6e 74 20 61 76 6f 69 64 20 74 68 65 20  ement avoid the 
4490: 75 73 65 20 6f 66 0a 20 20 2a 2a 20 6c 6f 6f 6b  use of.  ** look
44a0: 61 73 69 64 65 20 6d 65 6d 6f 72 79 2e 0a 20 20  aside memory..  
44b0: 2a 2f 0a 20 20 69 66 28 20 70 72 65 70 46 6c 61  */.  if( prepFla
44c0: 67 73 20 26 20 53 51 4c 49 54 45 5f 50 52 45 50  gs & SQLITE_PREP
44d0: 41 52 45 5f 50 45 52 53 49 53 54 45 4e 54 20 29  ARE_PERSISTENT )
44e0: 7b 0a 20 20 20 20 73 50 61 72 73 65 2e 64 69 73  {.    sParse.dis
44f0: 61 62 6c 65 4c 6f 6f 6b 61 73 69 64 65 2b 2b 3b  ableLookaside++;
4500: 0a 20 20 20 20 64 62 2d 3e 6c 6f 6f 6b 61 73 69  .    db->lookasi
4510: 64 65 2e 62 44 69 73 61 62 6c 65 2b 2b 3b 0a 20  de.bDisable++;. 
4520: 20 7d 0a 0a 20 20 2f 2a 20 43 68 65 63 6b 20 74   }..  /* Check t
4530: 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 69 74  o verify that it
4540: 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 6f 20   is possible to 
4550: 67 65 74 20 61 20 72 65 61 64 20 6c 6f 63 6b 20  get a read lock 
4560: 6f 6e 20 61 6c 6c 0a 20 20 2a 2a 20 64 61 74 61  on all.  ** data
4570: 62 61 73 65 20 73 63 68 65 6d 61 73 2e 20 20 54  base schemas.  T
4580: 68 65 20 69 6e 61 62 69 6c 69 74 79 20 74 6f 20  he inability to 
4590: 67 65 74 20 61 20 72 65 61 64 20 6c 6f 63 6b 20  get a read lock 
45a0: 69 6e 64 69 63 61 74 65 73 20 74 68 61 74 0a 20  indicates that. 
45b0: 20 2a 2a 20 73 6f 6d 65 20 6f 74 68 65 72 20 64   ** some other d
45c0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
45d0: 6f 6e 20 69 73 20 68 6f 6c 64 69 6e 67 20 61 20  on is holding a 
45e0: 77 72 69 74 65 2d 6c 6f 63 6b 2c 20 77 68 69 63  write-lock, whic
45f0: 68 20 69 6e 0a 20 20 2a 2a 20 74 75 72 6e 20 6d  h in.  ** turn m
4600: 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 6f 74  eans that the ot
4610: 68 65 72 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  her connection h
4620: 61 73 20 6d 61 64 65 20 75 6e 63 6f 6d 6d 69 74  as made uncommit
4630: 74 65 64 20 63 68 61 6e 67 65 73 0a 20 20 2a 2a  ted changes.  **
4640: 20 74 6f 20 74 68 65 20 73 63 68 65 6d 61 2e 0a   to the schema..
4650: 20 20 2a 2a 0a 20 20 2a 2a 20 57 65 72 65 20 77    **.  ** Were w
4660: 65 20 74 6f 20 70 72 6f 63 65 65 64 20 61 6e 64  e to proceed and
4670: 20 70 72 65 70 61 72 65 20 74 68 65 20 73 74 61   prepare the sta
4680: 74 65 6d 65 6e 74 20 61 67 61 69 6e 73 74 20 74  tement against t
4690: 68 65 20 75 6e 63 6f 6d 6d 69 74 74 65 64 0a 20  he uncommitted. 
46a0: 20 2a 2a 20 73 63 68 65 6d 61 20 63 68 61 6e 67   ** schema chang
46b0: 65 73 20 61 6e 64 20 69 66 20 74 68 6f 73 65 20  es and if those 
46c0: 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 20 61  schema changes a
46d0: 72 65 20 73 75 62 73 65 71 75 65 6e 74 6c 79 20  re subsequently 
46e0: 72 6f 6c 6c 65 64 0a 20 20 2a 2a 20 62 61 63 6b  rolled.  ** back
46f0: 20 61 6e 64 20 64 69 66 66 65 72 65 6e 74 20 63   and different c
4700: 68 61 6e 67 65 73 20 61 72 65 20 6d 61 64 65 20  hanges are made 
4710: 69 6e 20 74 68 65 69 72 20 70 6c 61 63 65 2c 20  in their place, 
4720: 74 68 65 6e 20 77 68 65 6e 20 74 68 69 73 0a 20  then when this. 
4730: 20 2a 2a 20 70 72 65 70 61 72 65 64 20 73 74 61   ** prepared sta
4740: 74 65 6d 65 6e 74 20 67 6f 65 73 20 74 6f 20 72  tement goes to r
4750: 75 6e 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f  un the schema co
4760: 6f 6b 69 65 20 77 6f 75 6c 64 20 66 61 69 6c 20  okie would fail 
4770: 74 6f 20 64 65 74 65 63 74 0a 20 20 2a 2a 20 74  to detect.  ** t
4780: 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  he schema change
4790: 2e 20 20 44 69 73 61 73 74 65 72 20 77 6f 75 6c  .  Disaster woul
47a0: 64 20 66 6f 6c 6c 6f 77 2e 0a 20 20 2a 2a 0a 20  d follow..  **. 
47b0: 20 2a 2a 20 54 68 69 73 20 74 68 72 65 61 64 20   ** This thread 
47c0: 69 73 20 63 75 72 72 65 6e 74 6c 79 20 68 6f 6c  is currently hol
47d0: 64 69 6e 67 20 6d 75 74 65 78 65 73 20 6f 6e 20  ding mutexes on 
47e0: 61 6c 6c 20 42 74 72 65 65 73 20 28 62 65 63 61  all Btrees (beca
47f0: 75 73 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20  use.  ** of the 
4800: 73 71 6c 69 74 65 33 42 74 72 65 65 45 6e 74 65  sqlite3BtreeEnte
4810: 72 41 6c 6c 28 29 20 69 6e 20 73 71 6c 69 74 65  rAll() in sqlite
4820: 33 4c 6f 63 6b 41 6e 64 50 72 65 70 61 72 65 28  3LockAndPrepare(
4830: 29 29 20 73 6f 20 69 74 0a 20 20 2a 2a 20 69 73  )) so it.  ** is
4840: 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 66 6f   not possible fo
4850: 72 20 61 6e 6f 74 68 65 72 20 74 68 72 65 61 64  r another thread
4860: 20 74 6f 20 73 74 61 72 74 20 61 20 6e 65 77 20   to start a new 
4870: 73 63 68 65 6d 61 20 63 68 61 6e 67 65 0a 20 20  schema change.  
4880: 2a 2a 20 77 68 69 6c 65 20 74 68 69 73 20 72 6f  ** while this ro
4890: 75 74 69 6e 65 20 69 73 20 72 75 6e 6e 69 6e 67  utine is running
48a0: 2e 20 20 48 65 6e 63 65 2c 20 77 65 20 64 6f 20  .  Hence, we do 
48b0: 6e 6f 74 20 6e 65 65 64 20 74 6f 20 68 6f 6c 64  not need to hold
48c0: 20 0a 20 20 2a 2a 20 6c 6f 63 6b 73 20 6f 6e 20   .  ** locks on 
48d0: 74 68 65 20 73 63 68 65 6d 61 2c 20 77 65 20 6a  the schema, we j
48e0: 75 73 74 20 6e 65 65 64 20 74 6f 20 6d 61 6b 65  ust need to make
48f0: 20 73 75 72 65 20 6e 6f 62 6f 64 79 20 65 6c 73   sure nobody els
4900: 65 20 69 73 20 0a 20 20 2a 2a 20 68 6f 6c 64 69  e is .  ** holdi
4910: 6e 67 20 74 68 65 6d 2e 0a 20 20 2a 2a 0a 20 20  ng them..  **.  
4920: 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 73 65 74  ** Note that set
4930: 74 69 6e 67 20 52 45 41 44 5f 55 4e 43 4f 4d 4d  ting READ_UNCOMM
4940: 49 54 54 45 44 20 6f 76 65 72 72 69 64 65 73 20  ITTED overrides 
4950: 6d 6f 73 74 20 6c 6f 63 6b 20 64 65 74 65 63 74  most lock detect
4960: 69 6f 6e 2c 0a 20 20 2a 2a 20 62 75 74 20 69 74  ion,.  ** but it
4970: 20 64 6f 65 73 20 2a 6e 6f 74 2a 20 6f 76 65 72   does *not* over
4980: 72 69 64 65 20 73 63 68 65 6d 61 20 6c 6f 63 6b  ride schema lock
4990: 20 64 65 74 65 63 74 69 6f 6e 2c 20 73 6f 20 74   detection, so t
49a0: 68 69 73 20 61 6c 6c 20 73 74 69 6c 6c 0a 20 20  his all still.  
49b0: 2a 2a 20 77 6f 72 6b 73 20 65 76 65 6e 20 69 66  ** works even if
49c0: 20 52 45 41 44 5f 55 4e 43 4f 4d 4d 49 54 54 45   READ_UNCOMMITTE
49d0: 44 20 69 73 20 73 65 74 2e 0a 20 20 2a 2f 0a 20  D is set..  */. 
49e0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e   for(i=0; i<db->
49f0: 6e 44 62 3b 20 69 2b 2b 29 20 7b 0a 20 20 20 20  nDb; i++) {.    
4a00: 42 74 72 65 65 20 2a 70 42 74 20 3d 20 64 62 2d  Btree *pBt = db-
4a10: 3e 61 44 62 5b 69 5d 2e 70 42 74 3b 0a 20 20 20  >aDb[i].pBt;.   
4a20: 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20   if( pBt ){.    
4a30: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
4a40: 33 42 74 72 65 65 48 6f 6c 64 73 4d 75 74 65 78  3BtreeHoldsMutex
4a50: 28 70 42 74 29 20 29 3b 0a 20 20 20 20 20 20 72  (pBt) );.      r
4a60: 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
4a70: 53 63 68 65 6d 61 4c 6f 63 6b 65 64 28 70 42 74  SchemaLocked(pBt
4a80: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 20  );.      if( rc 
4a90: 29 7b 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74  ){.        const
4aa0: 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 64 62 2d   char *zDb = db-
4ab0: 3e 61 44 62 5b 69 5d 2e 7a 44 62 53 4e 61 6d 65  >aDb[i].zDbSName
4ac0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
4ad0: 33 45 72 72 6f 72 57 69 74 68 4d 73 67 28 64 62  3ErrorWithMsg(db
4ae0: 2c 20 72 63 2c 20 22 64 61 74 61 62 61 73 65 20  , rc, "database 
4af0: 73 63 68 65 6d 61 20 69 73 20 6c 6f 63 6b 65 64  schema is locked
4b00: 3a 20 25 73 22 2c 20 7a 44 62 29 3b 0a 20 20 20  : %s", zDb);.   
4b10: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 64       testcase( d
4b20: 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
4b30: 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 20 29  E_ReadUncommit )
4b40: 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 65  ;.        goto e
4b50: 6e 64 5f 70 72 65 70 61 72 65 3b 0a 20 20 20 20  nd_prepare;.    
4b60: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20    }.    }.  }.. 
4b70: 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
4b80: 63 6b 4c 69 73 74 28 64 62 29 3b 0a 0a 20 20 73  ckList(db);..  s
4b90: 50 61 72 73 65 2e 64 62 20 3d 20 64 62 3b 0a 20  Parse.db = db;. 
4ba0: 20 69 66 28 20 6e 42 79 74 65 73 3e 3d 30 20 26   if( nBytes>=0 &
4bb0: 26 20 28 6e 42 79 74 65 73 3d 3d 30 20 7c 7c 20  & (nBytes==0 || 
4bc0: 7a 53 71 6c 5b 6e 42 79 74 65 73 2d 31 5d 21 3d  zSql[nBytes-1]!=
4bd0: 30 29 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a  0) ){.    char *
4be0: 7a 53 71 6c 43 6f 70 79 3b 0a 20 20 20 20 69 6e  zSqlCopy;.    in
4bf0: 74 20 6d 78 4c 65 6e 20 3d 20 64 62 2d 3e 61 4c  t mxLen = db->aL
4c00: 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
4c10: 54 5f 53 51 4c 5f 4c 45 4e 47 54 48 5d 3b 0a 20  T_SQL_LENGTH];. 
4c20: 20 20 20 74 65 73 74 63 61 73 65 28 20 6e 42 79     testcase( nBy
4c30: 74 65 73 3d 3d 6d 78 4c 65 6e 20 29 3b 0a 20 20  tes==mxLen );.  
4c40: 20 20 74 65 73 74 63 61 73 65 28 20 6e 42 79 74    testcase( nByt
4c50: 65 73 3d 3d 6d 78 4c 65 6e 2b 31 20 29 3b 0a 20  es==mxLen+1 );. 
4c60: 20 20 20 69 66 28 20 6e 42 79 74 65 73 3e 6d 78     if( nBytes>mx
4c70: 4c 65 6e 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  Len ){.      sql
4c80: 69 74 65 33 45 72 72 6f 72 57 69 74 68 4d 73 67  ite3ErrorWithMsg
4c90: 28 64 62 2c 20 53 51 4c 49 54 45 5f 54 4f 4f 42  (db, SQLITE_TOOB
4ca0: 49 47 2c 20 22 73 74 61 74 65 6d 65 6e 74 20 74  IG, "statement t
4cb0: 6f 6f 20 6c 6f 6e 67 22 29 3b 0a 20 20 20 20 20  oo long");.     
4cc0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 41 70 69   rc = sqlite3Api
4cd0: 45 78 69 74 28 64 62 2c 20 53 51 4c 49 54 45 5f  Exit(db, SQLITE_
4ce0: 54 4f 4f 42 49 47 29 3b 0a 20 20 20 20 20 20 67  TOOBIG);.      g
4cf0: 6f 74 6f 20 65 6e 64 5f 70 72 65 70 61 72 65 3b  oto end_prepare;
4d00: 0a 20 20 20 20 7d 0a 20 20 20 20 7a 53 71 6c 43  .    }.    zSqlC
4d10: 6f 70 79 20 3d 20 73 71 6c 69 74 65 33 44 62 53  opy = sqlite3DbS
4d20: 74 72 4e 44 75 70 28 64 62 2c 20 7a 53 71 6c 2c  trNDup(db, zSql,
4d30: 20 6e 42 79 74 65 73 29 3b 0a 20 20 20 20 69 66   nBytes);.    if
4d40: 28 20 7a 53 71 6c 43 6f 70 79 20 29 7b 0a 20 20  ( zSqlCopy ){.  
4d50: 20 20 20 20 73 71 6c 69 74 65 33 52 75 6e 50 61      sqlite3RunPa
4d60: 72 73 65 72 28 26 73 50 61 72 73 65 2c 20 7a 53  rser(&sParse, zS
4d70: 71 6c 43 6f 70 79 2c 20 26 7a 45 72 72 4d 73 67  qlCopy, &zErrMsg
4d80: 29 3b 0a 20 20 20 20 20 20 73 50 61 72 73 65 2e  );.      sParse.
4d90: 7a 54 61 69 6c 20 3d 20 26 7a 53 71 6c 5b 73 50  zTail = &zSql[sP
4da0: 61 72 73 65 2e 7a 54 61 69 6c 2d 7a 53 71 6c 43  arse.zTail-zSqlC
4db0: 6f 70 79 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69  opy];.      sqli
4dc0: 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 53  te3DbFree(db, zS
4dd0: 71 6c 43 6f 70 79 29 3b 0a 20 20 20 20 7d 65 6c  qlCopy);.    }el
4de0: 73 65 7b 0a 20 20 20 20 20 20 73 50 61 72 73 65  se{.      sParse
4df0: 2e 7a 54 61 69 6c 20 3d 20 26 7a 53 71 6c 5b 6e  .zTail = &zSql[n
4e00: 42 79 74 65 73 5d 3b 0a 20 20 20 20 7d 0a 20 20  Bytes];.    }.  
4e10: 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
4e20: 65 33 52 75 6e 50 61 72 73 65 72 28 26 73 50 61  e3RunParser(&sPa
4e30: 72 73 65 2c 20 7a 53 71 6c 2c 20 26 7a 45 72 72  rse, zSql, &zErr
4e40: 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65  Msg);.  }.  asse
4e50: 72 74 28 20 30 3d 3d 73 50 61 72 73 65 2e 6e 51  rt( 0==sParse.nQ
4e60: 75 65 72 79 4c 6f 6f 70 20 29 3b 0a 0a 20 20 69  ueryLoop );..  i
4e70: 66 28 20 73 50 61 72 73 65 2e 72 63 3d 3d 53 51  f( sParse.rc==SQ
4e80: 4c 49 54 45 5f 44 4f 4e 45 20 29 20 73 50 61 72  LITE_DONE ) sPar
4e90: 73 65 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  se.rc = SQLITE_O
4ea0: 4b 3b 0a 20 20 69 66 28 20 73 50 61 72 73 65 2e  K;.  if( sParse.
4eb0: 63 68 65 63 6b 53 63 68 65 6d 61 20 29 7b 0a 20  checkSchema ){. 
4ec0: 20 20 20 73 63 68 65 6d 61 49 73 56 61 6c 69 64     schemaIsValid
4ed0: 28 26 73 50 61 72 73 65 29 3b 0a 20 20 7d 0a 20  (&sParse);.  }. 
4ee0: 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46   if( db->mallocF
4ef0: 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 73 50 61  ailed ){.    sPa
4f00: 72 73 65 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f  rse.rc = SQLITE_
4f10: 4e 4f 4d 45 4d 5f 42 4b 50 54 3b 0a 20 20 7d 0a  NOMEM_BKPT;.  }.
4f20: 20 20 69 66 28 20 70 7a 54 61 69 6c 20 29 7b 0a    if( pzTail ){.
4f30: 20 20 20 20 2a 70 7a 54 61 69 6c 20 3d 20 73 50      *pzTail = sP
4f40: 61 72 73 65 2e 7a 54 61 69 6c 3b 0a 20 20 7d 0a  arse.zTail;.  }.
4f50: 20 20 72 63 20 3d 20 73 50 61 72 73 65 2e 72 63    rc = sParse.rc
4f60: 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
4f70: 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20  E_OMIT_EXPLAIN. 
4f80: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
4f90: 4f 4b 20 26 26 20 73 50 61 72 73 65 2e 70 56 64  OK && sParse.pVd
4fa0: 62 65 20 26 26 20 73 50 61 72 73 65 2e 65 78 70  be && sParse.exp
4fb0: 6c 61 69 6e 20 29 7b 0a 20 20 20 20 73 74 61 74  lain ){.    stat
4fc0: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20  ic const char * 
4fd0: 63 6f 6e 73 74 20 61 7a 43 6f 6c 4e 61 6d 65 5b  const azColName[
4fe0: 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 22 61 64  ] = {.       "ad
4ff0: 64 72 22 2c 20 22 6f 70 63 6f 64 65 22 2c 20 22  dr", "opcode", "
5000: 70 31 22 2c 20 22 70 32 22 2c 20 22 70 33 22 2c  p1", "p2", "p3",
5010: 20 22 70 34 22 2c 20 22 70 35 22 2c 20 22 63 6f   "p4", "p5", "co
5020: 6d 6d 65 6e 74 22 2c 0a 20 20 20 20 20 20 20 22  mment",.       "
5030: 73 65 6c 65 63 74 69 64 22 2c 20 22 6f 72 64 65  selectid", "orde
5040: 72 22 2c 20 22 66 72 6f 6d 22 2c 20 22 64 65 74  r", "from", "det
5050: 61 69 6c 22 0a 20 20 20 20 7d 3b 0a 20 20 20 20  ail".    };.    
5060: 69 6e 74 20 69 46 69 72 73 74 2c 20 6d 78 3b 0a  int iFirst, mx;.
5070: 20 20 20 20 69 66 28 20 73 50 61 72 73 65 2e 65      if( sParse.e
5080: 78 70 6c 61 69 6e 3d 3d 32 20 29 7b 0a 20 20 20  xplain==2 ){.   
5090: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
50a0: 74 4e 75 6d 43 6f 6c 73 28 73 50 61 72 73 65 2e  tNumCols(sParse.
50b0: 70 56 64 62 65 2c 20 34 29 3b 0a 20 20 20 20 20  pVdbe, 4);.     
50c0: 20 69 46 69 72 73 74 20 3d 20 38 3b 0a 20 20 20   iFirst = 8;.   
50d0: 20 20 20 6d 78 20 3d 20 31 32 3b 0a 20 20 20 20     mx = 12;.    
50e0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c  }else{.      sql
50f0: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
5100: 6c 73 28 73 50 61 72 73 65 2e 70 56 64 62 65 2c  ls(sParse.pVdbe,
5110: 20 38 29 3b 0a 20 20 20 20 20 20 69 46 69 72 73   8);.      iFirs
5120: 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 6d 78 20  t = 0;.      mx 
5130: 3d 20 38 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66  = 8;.    }.    f
5140: 6f 72 28 69 3d 69 46 69 72 73 74 3b 20 69 3c 6d  or(i=iFirst; i<m
5150: 78 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73  x; i++){.      s
5160: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
5170: 4e 61 6d 65 28 73 50 61 72 73 65 2e 70 56 64 62  Name(sParse.pVdb
5180: 65 2c 20 69 2d 69 46 69 72 73 74 2c 20 43 4f 4c  e, i-iFirst, COL
5190: 4e 41 4d 45 5f 4e 41 4d 45 2c 0a 20 20 20 20 20  NAME_NAME,.     
51a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
51b0: 20 20 20 20 20 20 20 61 7a 43 6f 6c 4e 61 6d 65         azColName
51c0: 5b 69 5d 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  [i], SQLITE_STAT
51d0: 49 43 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23  IC);.    }.  }.#
51e0: 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 64 62 2d  endif..  if( db-
51f0: 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29 7b  >init.busy==0 ){
5200: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
5210: 53 65 74 53 71 6c 28 73 50 61 72 73 65 2e 70 56  SetSql(sParse.pV
5220: 64 62 65 2c 20 7a 53 71 6c 2c 20 28 69 6e 74 29  dbe, zSql, (int)
5230: 28 73 50 61 72 73 65 2e 7a 54 61 69 6c 2d 7a 53  (sParse.zTail-zS
5240: 71 6c 29 2c 20 70 72 65 70 46 6c 61 67 73 29 3b  ql), prepFlags);
5250: 0a 20 20 7d 0a 20 20 69 66 28 20 73 50 61 72 73  .  }.  if( sPars
5260: 65 2e 70 56 64 62 65 20 26 26 20 28 72 63 21 3d  e.pVdbe && (rc!=
5270: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d  SQLITE_OK || db-
5280: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 29 20 29  >mallocFailed) )
5290: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
52a0: 65 46 69 6e 61 6c 69 7a 65 28 73 50 61 72 73 65  eFinalize(sParse
52b0: 2e 70 56 64 62 65 29 3b 0a 20 20 20 20 61 73 73  .pVdbe);.    ass
52c0: 65 72 74 28 21 28 2a 70 70 53 74 6d 74 29 29 3b  ert(!(*ppStmt));
52d0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2a 70  .  }else{.    *p
52e0: 70 53 74 6d 74 20 3d 20 28 73 71 6c 69 74 65 33  pStmt = (sqlite3
52f0: 5f 73 74 6d 74 2a 29 73 50 61 72 73 65 2e 70 56  _stmt*)sParse.pV
5300: 64 62 65 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  dbe;.  }..  if( 
5310: 7a 45 72 72 4d 73 67 20 29 7b 0a 20 20 20 20 73  zErrMsg ){.    s
5320: 71 6c 69 74 65 33 45 72 72 6f 72 57 69 74 68 4d  qlite3ErrorWithM
5330: 73 67 28 64 62 2c 20 72 63 2c 20 22 25 73 22 2c  sg(db, rc, "%s",
5340: 20 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 73   zErrMsg);.    s
5350: 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
5360: 20 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 65 6c   zErrMsg);.  }el
5370: 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45  se{.    sqlite3E
5380: 72 72 6f 72 28 64 62 2c 20 72 63 29 3b 0a 20 20  rror(db, rc);.  
5390: 7d 0a 0a 20 20 2f 2a 20 44 65 6c 65 74 65 20 61  }..  /* Delete a
53a0: 6e 79 20 54 72 69 67 67 65 72 50 72 67 20 73 74  ny TriggerPrg st
53b0: 72 75 63 74 75 72 65 73 20 61 6c 6c 6f 63 61 74  ructures allocat
53c0: 65 64 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67  ed while parsing
53d0: 20 74 68 69 73 20 73 74 61 74 65 6d 65 6e 74 2e   this statement.
53e0: 20 2a 2f 0a 20 20 77 68 69 6c 65 28 20 73 50 61   */.  while( sPa
53f0: 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
5400: 29 7b 0a 20 20 20 20 54 72 69 67 67 65 72 50 72  ){.    TriggerPr
5410: 67 20 2a 70 54 20 3d 20 73 50 61 72 73 65 2e 70  g *pT = sParse.p
5420: 54 72 69 67 67 65 72 50 72 67 3b 0a 20 20 20 20  TriggerPrg;.    
5430: 73 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50  sParse.pTriggerP
5440: 72 67 20 3d 20 70 54 2d 3e 70 4e 65 78 74 3b 0a  rg = pT->pNext;.
5450: 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
5460: 65 28 64 62 2c 20 70 54 29 3b 0a 20 20 7d 0a 0a  e(db, pT);.  }..
5470: 65 6e 64 5f 70 72 65 70 61 72 65 3a 0a 0a 20 20  end_prepare:..  
5480: 73 71 6c 69 74 65 33 50 61 72 73 65 72 52 65 73  sqlite3ParserRes
5490: 65 74 28 26 73 50 61 72 73 65 29 3b 0a 20 20 72  et(&sParse);.  r
54a0: 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 73 74 61 74  eturn rc;.}.stat
54b0: 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33 4c 6f  ic int sqlite3Lo
54c0: 63 6b 41 6e 64 50 72 65 70 61 72 65 28 0a 20 20  ckAndPrepare(.  
54d0: 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20  sqlite3 *db,    
54e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
54f0: 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 2a 2f  abase handle. */
5500: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
5510: 53 71 6c 2c 20 20 20 20 20 20 20 20 20 2f 2a 20  Sql,         /* 
5520: 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 53 51  UTF-8 encoded SQ
5530: 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20 2a 2f 0a  L statement. */.
5540: 20 20 69 6e 74 20 6e 42 79 74 65 73 2c 20 20 20    int nBytes,   
5550: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
5560: 65 6e 67 74 68 20 6f 66 20 7a 53 71 6c 20 69 6e  ength of zSql in
5570: 20 62 79 74 65 73 2e 20 2a 2f 0a 20 20 75 33 32   bytes. */.  u32
5580: 20 70 72 65 70 46 6c 61 67 73 2c 20 20 20 20 20   prepFlags,     
5590: 20 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f         /* Zero o
55a0: 72 20 6d 6f 72 65 20 53 51 4c 49 54 45 5f 50 52  r more SQLITE_PR
55b0: 45 50 41 52 45 5f 2a 20 66 6c 61 67 73 20 2a 2f  EPARE_* flags */
55c0: 0a 20 20 56 64 62 65 20 2a 70 4f 6c 64 2c 20 20  .  Vdbe *pOld,  
55d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
55e0: 56 4d 20 62 65 69 6e 67 20 72 65 70 72 65 70 61  VM being reprepa
55f0: 72 65 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  red */.  sqlite3
5600: 5f 73 74 6d 74 20 2a 2a 70 70 53 74 6d 74 2c 20  _stmt **ppStmt, 
5610: 20 20 20 2f 2a 20 4f 55 54 3a 20 41 20 70 6f 69     /* OUT: A poi
5620: 6e 74 65 72 20 74 6f 20 74 68 65 20 70 72 65 70  nter to the prep
5630: 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 2a  ared statement *
5640: 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
5650: 2a 70 7a 54 61 69 6c 20 20 20 20 20 20 20 2f 2a  *pzTail       /*
5660: 20 4f 55 54 3a 20 45 6e 64 20 6f 66 20 70 61 72   OUT: End of par
5670: 73 65 64 20 73 74 72 69 6e 67 20 2a 2f 0a 29 7b  sed string */.){
5680: 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e 74  .  int rc;.  int
5690: 20 63 6e 74 20 3d 20 30 3b 0a 0a 23 69 66 64 65   cnt = 0;..#ifde
56a0: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
56b0: 41 50 49 5f 41 52 4d 4f 52 0a 20 20 69 66 28 20  API_ARMOR.  if( 
56c0: 70 70 53 74 6d 74 3d 3d 30 20 29 20 72 65 74 75  ppStmt==0 ) retu
56d0: 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  rn SQLITE_MISUSE
56e0: 5f 42 4b 50 54 3b 0a 23 65 6e 64 69 66 0a 20 20  _BKPT;.#endif.  
56f0: 2a 70 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20 69  *ppStmt = 0;.  i
5700: 66 28 20 21 73 71 6c 69 74 65 33 53 61 66 65 74  f( !sqlite3Safet
5710: 79 43 68 65 63 6b 4f 6b 28 64 62 29 7c 7c 7a 53  yCheckOk(db)||zS
5720: 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74  ql==0 ){.    ret
5730: 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  urn SQLITE_MISUS
5740: 45 5f 42 4b 50 54 3b 0a 20 20 7d 0a 20 20 73 71  E_BKPT;.  }.  sq
5750: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65  lite3_mutex_ente
5760: 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20  r(db->mutex);.  
5770: 73 71 6c 69 74 65 33 42 74 72 65 65 45 6e 74 65  sqlite3BtreeEnte
5780: 72 41 6c 6c 28 64 62 29 3b 0a 20 20 64 6f 7b 0a  rAll(db);.  do{.
5790: 20 20 20 20 2f 2a 20 4d 61 6b 65 20 6d 75 6c 74      /* Make mult
57a0: 69 70 6c 65 20 61 74 74 65 6d 70 74 73 20 74 6f  iple attempts to
57b0: 20 63 6f 6d 70 69 6c 65 20 74 68 65 20 53 51 4c   compile the SQL
57c0: 2c 20 75 6e 74 69 6c 20 69 74 20 65 69 74 68 65  , until it eithe
57d0: 72 20 73 75 63 63 65 65 64 73 0a 20 20 20 20 2a  r succeeds.    *
57e0: 2a 20 6f 72 20 65 6e 63 6f 75 6e 74 65 72 73 20  * or encounters 
57f0: 61 20 70 65 72 6d 61 6e 65 6e 74 20 65 72 72 6f  a permanent erro
5800: 72 2e 20 20 41 20 73 63 68 65 6d 61 20 70 72 6f  r.  A schema pro
5810: 62 6c 65 6d 20 61 66 74 65 72 20 6f 6e 65 20 73  blem after one s
5820: 63 68 65 6d 61 0a 20 20 20 20 2a 2a 20 72 65 73  chema.    ** res
5830: 65 74 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  et is considered
5840: 20 61 20 70 65 72 6d 61 6e 65 6e 74 20 65 72 72   a permanent err
5850: 6f 72 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20  or. */.    rc = 
5860: 73 71 6c 69 74 65 33 50 72 65 70 61 72 65 28 64  sqlite3Prepare(d
5870: 62 2c 20 7a 53 71 6c 2c 20 6e 42 79 74 65 73 2c  b, zSql, nBytes,
5880: 20 70 72 65 70 46 6c 61 67 73 2c 20 70 4f 6c 64   prepFlags, pOld
5890: 2c 20 70 70 53 74 6d 74 2c 20 70 7a 54 61 69 6c  , ppStmt, pzTail
58a0: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  );.    assert( r
58b0: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
58c0: 2a 70 70 53 74 6d 74 3d 3d 30 20 29 3b 0a 20 20  *ppStmt==0 );.  
58d0: 7d 77 68 69 6c 65 28 20 72 63 3d 3d 53 51 4c 49  }while( rc==SQLI
58e0: 54 45 5f 45 52 52 4f 52 5f 52 45 54 52 59 0a 20  TE_ERROR_RETRY. 
58f0: 20 20 20 20 20 20 7c 7c 20 28 72 63 3d 3d 53 51        || (rc==SQ
5900: 4c 49 54 45 5f 53 43 48 45 4d 41 20 26 26 20 28  LITE_SCHEMA && (
5910: 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53  sqlite3ResetOneS
5920: 63 68 65 6d 61 28 64 62 2c 2d 31 29 2c 20 63 6e  chema(db,-1), cn
5930: 74 2b 2b 29 3d 3d 30 29 20 29 3b 0a 20 20 73 71  t++)==0) );.  sq
5940: 6c 69 74 65 33 42 74 72 65 65 4c 65 61 76 65 41  lite3BtreeLeaveA
5950: 6c 6c 28 64 62 29 3b 0a 20 20 72 63 20 3d 20 73  ll(db);.  rc = s
5960: 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 64 62  qlite3ApiExit(db
5970: 2c 20 72 63 29 3b 0a 20 20 61 73 73 65 72 74 28  , rc);.  assert(
5980: 20 28 72 63 26 64 62 2d 3e 65 72 72 4d 61 73 6b   (rc&db->errMask
5990: 29 3d 3d 72 63 20 29 3b 0a 20 20 73 71 6c 69 74  )==rc );.  sqlit
59a0: 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64  e3_mutex_leave(d
59b0: 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65 74  b->mutex);.  ret
59c0: 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  urn rc;.}../*.**
59d0: 20 52 65 72 75 6e 20 74 68 65 20 63 6f 6d 70 69   Rerun the compi
59e0: 6c 61 74 69 6f 6e 20 6f 66 20 61 20 73 74 61 74  lation of a stat
59f0: 65 6d 65 6e 74 20 61 66 74 65 72 20 61 20 73 63  ement after a sc
5a00: 68 65 6d 61 20 63 68 61 6e 67 65 2e 0a 2a 2a 0a  hema change..**.
5a10: 2a 2a 20 49 66 20 74 68 65 20 73 74 61 74 65 6d  ** If the statem
5a20: 65 6e 74 20 69 73 20 73 75 63 63 65 73 73 66 75  ent is successfu
5a30: 6c 6c 79 20 72 65 63 6f 6d 70 69 6c 65 64 2c 20  lly recompiled, 
5a40: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
5a50: 2e 20 4f 74 68 65 72 77 69 73 65 2c 0a 2a 2a 20  . Otherwise,.** 
5a60: 69 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  if the statement
5a70: 20 63 61 6e 6e 6f 74 20 62 65 20 72 65 63 6f 6d   cannot be recom
5a80: 70 69 6c 65 64 20 62 65 63 61 75 73 65 20 61 6e  piled because an
5a90: 6f 74 68 65 72 20 63 6f 6e 6e 65 63 74 69 6f 6e  other connection
5aa0: 20 68 61 73 0a 2a 2a 20 6c 6f 63 6b 65 64 20 74   has.** locked t
5ab0: 68 65 20 73 71 6c 69 74 65 33 5f 6d 61 73 74 65  he sqlite3_maste
5ac0: 72 20 74 61 62 6c 65 2c 20 72 65 74 75 72 6e 20  r table, return 
5ad0: 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e 20 49  SQLITE_LOCKED. I
5ae0: 66 20 61 6e 79 20 6f 74 68 65 72 20 65 72 72 6f  f any other erro
5af0: 72 0a 2a 2a 20 6f 63 63 75 72 73 2c 20 72 65 74  r.** occurs, ret
5b00: 75 72 6e 20 53 51 4c 49 54 45 5f 53 43 48 45 4d  urn SQLITE_SCHEM
5b10: 41 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  A..*/.int sqlite
5b20: 33 52 65 70 72 65 70 61 72 65 28 56 64 62 65 20  3Reprepare(Vdbe 
5b30: 2a 70 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  *p){.  int rc;. 
5b40: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
5b50: 4e 65 77 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  New;.  const cha
5b60: 72 20 2a 7a 53 71 6c 3b 0a 20 20 73 71 6c 69 74  r *zSql;.  sqlit
5b70: 65 33 20 2a 64 62 3b 0a 20 20 75 38 20 70 72 65  e3 *db;.  u8 pre
5b80: 70 46 6c 61 67 73 3b 0a 0a 20 20 61 73 73 65 72  pFlags;..  asser
5b90: 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  t( sqlite3_mutex
5ba0: 5f 68 65 6c 64 28 73 71 6c 69 74 65 33 56 64 62  _held(sqlite3Vdb
5bb0: 65 44 62 28 70 29 2d 3e 6d 75 74 65 78 29 20 29  eDb(p)->mutex) )
5bc0: 3b 0a 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74  ;.  zSql = sqlit
5bd0: 65 33 5f 73 71 6c 28 28 73 71 6c 69 74 65 33 5f  e3_sql((sqlite3_
5be0: 73 74 6d 74 20 2a 29 70 29 3b 0a 20 20 61 73 73  stmt *)p);.  ass
5bf0: 65 72 74 28 20 7a 53 71 6c 21 3d 30 20 29 3b 20  ert( zSql!=0 ); 
5c00: 20 2f 2a 20 52 65 70 72 65 70 61 72 65 20 6f 6e   /* Reprepare on
5c10: 6c 79 20 63 61 6c 6c 65 64 20 66 6f 72 20 70 72  ly called for pr
5c20: 65 70 61 72 65 5f 76 32 28 29 20 73 74 61 74 65  epare_v2() state
5c30: 6d 65 6e 74 73 20 2a 2f 0a 20 20 64 62 20 3d 20  ments */.  db = 
5c40: 73 71 6c 69 74 65 33 56 64 62 65 44 62 28 70 29  sqlite3VdbeDb(p)
5c50: 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  ;.  assert( sqli
5c60: 74 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 64  te3_mutex_held(d
5c70: 62 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 20 20 70  b->mutex) );.  p
5c80: 72 65 70 46 6c 61 67 73 20 3d 20 73 71 6c 69 74  repFlags = sqlit
5c90: 65 33 56 64 62 65 50 72 65 70 61 72 65 46 6c 61  e3VdbePrepareFla
5ca0: 67 73 28 70 29 3b 0a 20 20 72 63 20 3d 20 73 71  gs(p);.  rc = sq
5cb0: 6c 69 74 65 33 4c 6f 63 6b 41 6e 64 50 72 65 70  lite3LockAndPrep
5cc0: 61 72 65 28 64 62 2c 20 7a 53 71 6c 2c 20 2d 31  are(db, zSql, -1
5cd0: 2c 20 70 72 65 70 46 6c 61 67 73 2c 20 70 2c 20  , prepFlags, p, 
5ce0: 26 70 4e 65 77 2c 20 30 29 3b 0a 20 20 69 66 28  &pNew, 0);.  if(
5cf0: 20 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20 72   rc ){.    if( r
5d00: 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20  c==SQLITE_NOMEM 
5d10: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
5d20: 4f 6f 6d 46 61 75 6c 74 28 64 62 29 3b 0a 20 20  OomFault(db);.  
5d30: 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20    }.    assert( 
5d40: 70 4e 65 77 3d 3d 30 20 29 3b 0a 20 20 20 20 72  pNew==0 );.    r
5d50: 65 74 75 72 6e 20 72 63 3b 0a 20 20 7d 65 6c 73  eturn rc;.  }els
5d60: 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
5d70: 4e 65 77 21 3d 30 20 29 3b 0a 20 20 7d 0a 20 20  New!=0 );.  }.  
5d80: 73 71 6c 69 74 65 33 56 64 62 65 53 77 61 70 28  sqlite3VdbeSwap(
5d90: 28 56 64 62 65 2a 29 70 4e 65 77 2c 20 70 29 3b  (Vdbe*)pNew, p);
5da0: 0a 20 20 73 71 6c 69 74 65 33 54 72 61 6e 73 66  .  sqlite3Transf
5db0: 65 72 42 69 6e 64 69 6e 67 73 28 70 4e 65 77 2c  erBindings(pNew,
5dc0: 20 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 29   (sqlite3_stmt*)
5dd0: 70 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  p);.  sqlite3Vdb
5de0: 65 52 65 73 65 74 53 74 65 70 52 65 73 75 6c 74  eResetStepResult
5df0: 28 28 56 64 62 65 2a 29 70 4e 65 77 29 3b 0a 20  ((Vdbe*)pNew);. 
5e00: 20 73 71 6c 69 74 65 33 56 64 62 65 46 69 6e 61   sqlite3VdbeFina
5e10: 6c 69 7a 65 28 28 56 64 62 65 2a 29 70 4e 65 77  lize((Vdbe*)pNew
5e20: 29 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49  );.  return SQLI
5e30: 54 45 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a  TE_OK;.}.../*.**
5e40: 20 54 77 6f 20 76 65 72 73 69 6f 6e 73 20 6f 66   Two versions of
5e50: 20 74 68 65 20 6f 66 66 69 63 69 61 6c 20 41 50   the official AP
5e60: 49 2e 20 20 4c 65 67 61 63 79 20 61 6e 64 20 6e  I.  Legacy and n
5e70: 65 77 20 75 73 65 2e 20 20 49 6e 20 74 68 65 20  ew use.  In the 
5e80: 6c 65 67 61 63 79 0a 2a 2a 20 76 65 72 73 69 6f  legacy.** versio
5e90: 6e 2c 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  n, the original 
5ea0: 53 51 4c 20 74 65 78 74 20 69 73 20 6e 6f 74 20  SQL text is not 
5eb0: 73 61 76 65 64 20 69 6e 20 74 68 65 20 70 72 65  saved in the pre
5ec0: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a  pared statement.
5ed0: 2a 2a 20 61 6e 64 20 73 6f 20 69 66 20 61 20 73  ** and so if a s
5ee0: 63 68 65 6d 61 20 63 68 61 6e 67 65 20 6f 63 63  chema change occ
5ef0: 75 72 73 2c 20 53 51 4c 49 54 45 5f 53 43 48 45  urs, SQLITE_SCHE
5f00: 4d 41 20 69 73 20 72 65 74 75 72 6e 65 64 20 62  MA is returned b
5f10: 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 74 65  y.** sqlite3_ste
5f20: 70 28 29 2e 20 20 49 6e 20 74 68 65 20 6e 65 77  p().  In the new
5f30: 20 76 65 72 73 69 6f 6e 2c 20 74 68 65 20 6f 72   version, the or
5f40: 69 67 69 6e 61 6c 20 53 51 4c 20 74 65 78 74 20  iginal SQL text 
5f50: 69 73 20 72 65 74 61 69 6e 65 64 0a 2a 2a 20 61  is retained.** a
5f60: 6e 64 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  nd the statement
5f70: 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   is automaticall
5f80: 79 20 72 65 63 6f 6d 70 69 6c 65 64 20 69 66 20  y recompiled if 
5f90: 61 6e 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  an schema change
5fa0: 0a 2a 2a 20 6f 63 63 75 72 73 2e 0a 2a 2f 0a 69  .** occurs..*/.i
5fb0: 6e 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  nt sqlite3_prepa
5fc0: 72 65 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  re(.  sqlite3 *d
5fd0: 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b,              
5fe0: 2f 2a 20 44 61 74 61 62 61 73 65 20 68 61 6e 64  /* Database hand
5ff0: 6c 65 2e 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  le. */.  const c
6000: 68 61 72 20 2a 7a 53 71 6c 2c 20 20 20 20 20 20  har *zSql,      
6010: 20 20 20 2f 2a 20 55 54 46 2d 38 20 65 6e 63 6f     /* UTF-8 enco
6020: 64 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  ded SQL statemen
6030: 74 2e 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74  t. */.  int nByt
6040: 65 73 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  es,             
6050: 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 7a    /* Length of z
6060: 53 71 6c 20 69 6e 20 62 79 74 65 73 2e 20 2a 2f  Sql in bytes. */
6070: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
6080: 2a 2a 70 70 53 74 6d 74 2c 20 20 20 20 2f 2a 20  **ppStmt,    /* 
6090: 4f 55 54 3a 20 41 20 70 6f 69 6e 74 65 72 20 74  OUT: A pointer t
60a0: 6f 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  o the prepared s
60b0: 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 63 6f  tatement */.  co
60c0: 6e 73 74 20 63 68 61 72 20 2a 2a 70 7a 54 61 69  nst char **pzTai
60d0: 6c 20 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20  l       /* OUT: 
60e0: 45 6e 64 20 6f 66 20 70 61 72 73 65 64 20 73 74  End of parsed st
60f0: 72 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  ring */.){.  int
6100: 20 72 63 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69   rc;.  rc = sqli
6110: 74 65 33 4c 6f 63 6b 41 6e 64 50 72 65 70 61 72  te3LockAndPrepar
6120: 65 28 64 62 2c 7a 53 71 6c 2c 6e 42 79 74 65 73  e(db,zSql,nBytes
6130: 2c 30 2c 30 2c 70 70 53 74 6d 74 2c 70 7a 54 61  ,0,0,ppStmt,pzTa
6140: 69 6c 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72  il);.  assert( r
6150: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
6160: 70 70 53 74 6d 74 3d 3d 30 20 7c 7c 20 2a 70 70  ppStmt==0 || *pp
6170: 53 74 6d 74 3d 3d 30 20 29 3b 20 20 2f 2a 20 56  Stmt==0 );  /* V
6180: 45 52 49 46 59 3a 20 46 31 33 30 32 31 20 2a 2f  ERIFY: F13021 */
6190: 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a  .  return rc;.}.
61a0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70  int sqlite3_prep
61b0: 61 72 65 5f 76 32 28 0a 20 20 73 71 6c 69 74 65  are_v2(.  sqlite
61c0: 33 20 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20  3 *db,          
61d0: 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
61e0: 68 61 6e 64 6c 65 2e 20 2a 2f 0a 20 20 63 6f 6e  handle. */.  con
61f0: 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 2c 20 20  st char *zSql,  
6200: 20 20 20 20 20 20 20 2f 2a 20 55 54 46 2d 38 20         /* UTF-8 
6210: 65 6e 63 6f 64 65 64 20 53 51 4c 20 73 74 61 74  encoded SQL stat
6220: 65 6d 65 6e 74 2e 20 2a 2f 0a 20 20 69 6e 74 20  ement. */.  int 
6230: 6e 42 79 74 65 73 2c 20 20 20 20 20 20 20 20 20  nBytes,         
6240: 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20        /* Length 
6250: 6f 66 20 7a 53 71 6c 20 69 6e 20 62 79 74 65 73  of zSql in bytes
6260: 2e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 73  . */.  sqlite3_s
6270: 74 6d 74 20 2a 2a 70 70 53 74 6d 74 2c 20 20 20  tmt **ppStmt,   
6280: 20 2f 2a 20 4f 55 54 3a 20 41 20 70 6f 69 6e 74   /* OUT: A point
6290: 65 72 20 74 6f 20 74 68 65 20 70 72 65 70 61 72  er to the prepar
62a0: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a  ed statement */.
62b0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 70    const char **p
62c0: 7a 54 61 69 6c 20 20 20 20 20 20 20 2f 2a 20 4f  zTail       /* O
62d0: 55 54 3a 20 45 6e 64 20 6f 66 20 70 61 72 73 65  UT: End of parse
62e0: 64 20 73 74 72 69 6e 67 20 2a 2f 0a 29 7b 0a 20  d string */.){. 
62f0: 20 69 6e 74 20 72 63 3b 0a 20 20 2f 2a 20 45 56   int rc;.  /* EV
6300: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33 37 39  IDENCE-OF: R-379
6310: 32 33 2d 31 32 31 37 33 20 54 68 65 20 73 71 6c  23-12173 The sql
6320: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
6330: 29 20 69 6e 74 65 72 66 61 63 65 20 77 6f 72 6b  ) interface work
6340: 73 0a 20 20 2a 2a 20 65 78 61 63 74 6c 79 20 74  s.  ** exactly t
6350: 68 65 20 73 61 6d 65 20 61 73 20 73 71 6c 69 74  he same as sqlit
6360: 65 33 5f 70 72 65 70 61 72 65 5f 76 33 28 29 20  e3_prepare_v3() 
6370: 77 69 74 68 20 61 20 7a 65 72 6f 20 70 72 65 70  with a zero prep
6380: 46 6c 61 67 73 0a 20 20 2a 2a 20 70 61 72 61 6d  Flags.  ** param
6390: 65 74 65 72 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  eter..  **.  ** 
63a0: 50 72 6f 6f 66 20 69 6e 20 74 68 61 74 20 74 68  Proof in that th
63b0: 65 20 35 74 68 20 70 61 72 61 6d 65 74 65 72 20  e 5th parameter 
63c0: 74 6f 20 73 71 6c 69 74 65 33 4c 6f 63 6b 41 6e  to sqlite3LockAn
63d0: 64 50 72 65 70 61 72 65 20 69 73 20 30 20 2a 2f  dPrepare is 0 */
63e0: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4c  .  rc = sqlite3L
63f0: 6f 63 6b 41 6e 64 50 72 65 70 61 72 65 28 64 62  ockAndPrepare(db
6400: 2c 7a 53 71 6c 2c 6e 42 79 74 65 73 2c 53 51 4c  ,zSql,nBytes,SQL
6410: 49 54 45 5f 50 52 45 50 41 52 45 5f 53 41 56 45  ITE_PREPARE_SAVE
6420: 53 51 4c 2c 30 2c 0a 20 20 20 20 20 20 20 20 20  SQL,0,.         
6430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6440: 20 20 20 20 70 70 53 74 6d 74 2c 70 7a 54 61 69      ppStmt,pzTai
6450: 6c 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63  l);.  assert( rc
6460: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70  ==SQLITE_OK || p
6470: 70 53 74 6d 74 3d 3d 30 20 7c 7c 20 2a 70 70 53  pStmt==0 || *ppS
6480: 74 6d 74 3d 3d 30 20 29 3b 0a 20 20 72 65 74 75  tmt==0 );.  retu
6490: 72 6e 20 72 63 3b 0a 7d 0a 69 6e 74 20 73 71 6c  rn rc;.}.int sql
64a0: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 33 28  ite3_prepare_v3(
64b0: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  .  sqlite3 *db, 
64c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
64d0: 44 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e  Database handle.
64e0: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
64f0: 20 2a 7a 53 71 6c 2c 20 20 20 20 20 20 20 20 20   *zSql,         
6500: 2f 2a 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64  /* UTF-8 encoded
6510: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20   SQL statement. 
6520: 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 73 2c  */.  int nBytes,
6530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
6540: 2a 20 4c 65 6e 67 74 68 20 6f 66 20 7a 53 71 6c  * Length of zSql
6550: 20 69 6e 20 62 79 74 65 73 2e 20 2a 2f 0a 20 20   in bytes. */.  
6560: 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 70 72 65  unsigned int pre
6570: 70 46 6c 61 67 73 2c 20 20 20 2f 2a 20 5a 65 72  pFlags,   /* Zer
6580: 6f 20 6f 72 20 6d 6f 72 65 20 53 51 4c 49 54 45  o or more SQLITE
6590: 5f 50 52 45 50 41 52 45 5f 2a 20 66 6c 61 67 73  _PREPARE_* flags
65a0: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 73 74   */.  sqlite3_st
65b0: 6d 74 20 2a 2a 70 70 53 74 6d 74 2c 20 20 20 20  mt **ppStmt,    
65c0: 2f 2a 20 4f 55 54 3a 20 41 20 70 6f 69 6e 74 65  /* OUT: A pointe
65d0: 72 20 74 6f 20 74 68 65 20 70 72 65 70 61 72 65  r to the prepare
65e0: 64 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20  d statement */. 
65f0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 70 7a   const char **pz
6600: 54 61 69 6c 20 20 20 20 20 20 20 2f 2a 20 4f 55  Tail       /* OU
6610: 54 3a 20 45 6e 64 20 6f 66 20 70 61 72 73 65 64  T: End of parsed
6620: 20 73 74 72 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20   string */.){.  
6630: 69 6e 74 20 72 63 3b 0a 20 20 2f 2a 20 45 56 49  int rc;.  /* EVI
6640: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 35 36 38 36  DENCE-OF: R-5686
6650: 31 2d 34 32 36 37 33 20 73 71 6c 69 74 65 33 5f  1-42673 sqlite3_
6660: 70 72 65 70 61 72 65 5f 76 33 28 29 20 64 69 66  prepare_v3() dif
6670: 66 65 72 73 20 66 72 6f 6d 0a 20 20 2a 2a 20 73  fers from.  ** s
6680: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
6690: 32 28 29 20 6f 6e 6c 79 20 69 6e 20 68 61 76 69  2() only in havi
66a0: 6e 67 20 74 68 65 20 65 78 74 72 61 20 70 72 65  ng the extra pre
66b0: 70 46 6c 61 67 73 20 70 61 72 61 6d 65 74 65 72  pFlags parameter
66c0: 2c 0a 20 20 2a 2a 20 77 68 69 63 68 20 69 73 20  ,.  ** which is 
66d0: 61 20 62 69 74 20 61 72 72 61 79 20 63 6f 6e 73  a bit array cons
66e0: 69 73 74 69 6e 67 20 6f 66 20 7a 65 72 6f 20 6f  isting of zero o
66f0: 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 0a 20 20  r more of the.  
6700: 2a 2a 20 53 51 4c 49 54 45 5f 50 52 45 50 41 52  ** SQLITE_PREPAR
6710: 45 5f 2a 20 66 6c 61 67 73 2e 0a 20 20 2a 2a 0a  E_* flags..  **.
6720: 20 20 2a 2a 20 50 72 6f 6f 66 20 62 79 20 63 6f    ** Proof by co
6730: 6d 70 61 72 69 73 6f 6e 20 74 6f 20 74 68 65 20  mparison to the 
6740: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
6750: 66 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  f sqlite3_prepar
6760: 65 5f 76 32 28 29 0a 20 20 2a 2a 20 64 69 72 65  e_v2().  ** dire
6770: 63 74 6c 79 20 61 62 6f 76 65 2e 20 2a 2f 0a 20  ctly above. */. 
6780: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4c 6f 63   rc = sqlite3Loc
6790: 6b 41 6e 64 50 72 65 70 61 72 65 28 64 62 2c 7a  kAndPrepare(db,z
67a0: 53 71 6c 2c 6e 42 79 74 65 73 2c 0a 20 20 20 20  Sql,nBytes,.    
67b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
67c0: 49 54 45 5f 50 52 45 50 41 52 45 5f 53 41 56 45  ITE_PREPARE_SAVE
67d0: 53 51 4c 7c 28 70 72 65 70 46 6c 61 67 73 26 53  SQL|(prepFlags&S
67e0: 51 4c 49 54 45 5f 50 52 45 50 41 52 45 5f 4d 41  QLITE_PREPARE_MA
67f0: 53 4b 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20  SK),.           
6800: 20 20 20 20 20 20 30 2c 70 70 53 74 6d 74 2c 70        0,ppStmt,p
6810: 7a 54 61 69 6c 29 3b 0a 20 20 61 73 73 65 72 74  zTail);.  assert
6820: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
6830: 7c 7c 20 70 70 53 74 6d 74 3d 3d 30 20 7c 7c 20  || ppStmt==0 || 
6840: 2a 70 70 53 74 6d 74 3d 3d 30 20 29 3b 0a 20 20  *ppStmt==0 );.  
6850: 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 0a 23  return rc;.}...#
6860: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
6870: 49 54 5f 55 54 46 31 36 0a 2f 2a 0a 2a 2a 20 43  IT_UTF16./*.** C
6880: 6f 6d 70 69 6c 65 20 74 68 65 20 55 54 46 2d 31  ompile the UTF-1
6890: 36 20 65 6e 63 6f 64 65 64 20 53 51 4c 20 73 74  6 encoded SQL st
68a0: 61 74 65 6d 65 6e 74 20 7a 53 71 6c 20 69 6e 74  atement zSql int
68b0: 6f 20 61 20 73 74 61 74 65 6d 65 6e 74 20 68 61  o a statement ha
68c0: 6e 64 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ndle..*/.static 
68d0: 69 6e 74 20 73 71 6c 69 74 65 33 50 72 65 70 61  int sqlite3Prepa
68e0: 72 65 31 36 28 0a 20 20 73 71 6c 69 74 65 33 20  re16(.  sqlite3 
68f0: 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20 20 20  *db,            
6900: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 68 61    /* Database ha
6910: 6e 64 6c 65 2e 20 2a 2f 20 0a 20 20 63 6f 6e 73  ndle. */ .  cons
6920: 74 20 76 6f 69 64 20 2a 7a 53 71 6c 2c 20 20 20  t void *zSql,   
6930: 20 20 20 20 20 20 2f 2a 20 55 54 46 2d 31 36 20        /* UTF-16 
6940: 65 6e 63 6f 64 65 64 20 53 51 4c 20 73 74 61 74  encoded SQL stat
6950: 65 6d 65 6e 74 2e 20 2a 2f 0a 20 20 69 6e 74 20  ement. */.  int 
6960: 6e 42 79 74 65 73 2c 20 20 20 20 20 20 20 20 20  nBytes,         
6970: 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20        /* Length 
6980: 6f 66 20 7a 53 71 6c 20 69 6e 20 62 79 74 65 73  of zSql in bytes
6990: 2e 20 2a 2f 0a 20 20 75 33 32 20 70 72 65 70 46  . */.  u32 prepF
69a0: 6c 61 67 73 2c 20 20 20 20 20 20 20 20 20 20 20  lags,           
69b0: 20 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65   /* Zero or more
69c0: 20 53 51 4c 49 54 45 5f 50 52 45 50 41 52 45 5f   SQLITE_PREPARE_
69d0: 2a 20 66 6c 61 67 73 20 2a 2f 0a 20 20 73 71 6c  * flags */.  sql
69e0: 69 74 65 33 5f 73 74 6d 74 20 2a 2a 70 70 53 74  ite3_stmt **ppSt
69f0: 6d 74 2c 20 20 20 20 2f 2a 20 4f 55 54 3a 20 41  mt,    /* OUT: A
6a00: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
6a10: 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
6a20: 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 76 6f  nt */.  const vo
6a30: 69 64 20 2a 2a 70 7a 54 61 69 6c 20 20 20 20 20  id **pzTail     
6a40: 20 20 2f 2a 20 4f 55 54 3a 20 45 6e 64 20 6f 66    /* OUT: End of
6a50: 20 70 61 72 73 65 64 20 73 74 72 69 6e 67 20 2a   parsed string *
6a60: 2f 0a 29 7b 0a 20 20 2f 2a 20 54 68 69 73 20 66  /.){.  /* This f
6a70: 75 6e 63 74 69 6f 6e 20 63 75 72 72 65 6e 74 6c  unction currentl
6a80: 79 20 77 6f 72 6b 73 20 62 79 20 66 69 72 73 74  y works by first
6a90: 20 74 72 61 6e 73 66 6f 72 6d 69 6e 67 20 74 68   transforming th
6aa0: 65 20 55 54 46 2d 31 36 0a 20 20 2a 2a 20 65 6e  e UTF-16.  ** en
6ab0: 63 6f 64 65 64 20 73 74 72 69 6e 67 20 74 6f 20  coded string to 
6ac0: 55 54 46 2d 38 2c 20 74 68 65 6e 20 69 6e 76 6f  UTF-8, then invo
6ad0: 6b 69 6e 67 20 73 71 6c 69 74 65 33 5f 70 72 65  king sqlite3_pre
6ae0: 70 61 72 65 28 29 2e 20 54 68 65 0a 20 20 2a 2a  pare(). The.  **
6af0: 20 74 72 69 63 6b 79 20 62 69 74 20 69 73 20 66   tricky bit is f
6b00: 69 67 75 72 69 6e 67 20 6f 75 74 20 74 68 65 20  iguring out the 
6b10: 70 6f 69 6e 74 65 72 20 74 6f 20 72 65 74 75 72  pointer to retur
6b20: 6e 20 69 6e 20 2a 70 7a 54 61 69 6c 2e 0a 20 20  n in *pzTail..  
6b30: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 38  */.  char *zSql8
6b40: 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
6b50: 7a 54 61 69 6c 38 20 3d 20 30 3b 0a 20 20 69 6e  zTail8 = 0;.  in
6b60: 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  t rc = SQLITE_OK
6b70: 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
6b80: 5f 45 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f  _ENABLE_API_ARMO
6b90: 52 0a 20 20 69 66 28 20 70 70 53 74 6d 74 3d 3d  R.  if( ppStmt==
6ba0: 30 20 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54  0 ) return SQLIT
6bb0: 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a 23  E_MISUSE_BKPT;.#
6bc0: 65 6e 64 69 66 0a 20 20 2a 70 70 53 74 6d 74 20  endif.  *ppStmt 
6bd0: 3d 20 30 3b 0a 20 20 69 66 28 20 21 73 71 6c 69  = 0;.  if( !sqli
6be0: 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b  te3SafetyCheckOk
6bf0: 28 64 62 29 7c 7c 7a 53 71 6c 3d 3d 30 20 29 7b  (db)||zSql==0 ){
6c00: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
6c10: 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a  TE_MISUSE_BKPT;.
6c20: 20 20 7d 0a 20 20 69 66 28 20 6e 42 79 74 65 73    }.  if( nBytes
6c30: 3e 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 73  >=0 ){.    int s
6c40: 7a 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61  z;.    const cha
6c50: 72 20 2a 7a 20 3d 20 28 63 6f 6e 73 74 20 63 68  r *z = (const ch
6c60: 61 72 2a 29 7a 53 71 6c 3b 0a 20 20 20 20 66 6f  ar*)zSql;.    fo
6c70: 72 28 73 7a 3d 30 3b 20 73 7a 3c 6e 42 79 74 65  r(sz=0; sz<nByte
6c80: 73 20 26 26 20 28 7a 5b 73 7a 5d 21 3d 30 20 7c  s && (z[sz]!=0 |
6c90: 7c 20 7a 5b 73 7a 2b 31 5d 21 3d 30 29 3b 20 73  | z[sz+1]!=0); s
6ca0: 7a 20 2b 3d 20 32 29 7b 7d 0a 20 20 20 20 6e 42  z += 2){}.    nB
6cb0: 79 74 65 73 20 3d 20 73 7a 3b 0a 20 20 7d 0a 20  ytes = sz;.  }. 
6cc0: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65   sqlite3_mutex_e
6cd0: 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b  nter(db->mutex);
6ce0: 0a 20 20 7a 53 71 6c 38 20 3d 20 73 71 6c 69 74  .  zSql8 = sqlit
6cf0: 65 33 55 74 66 31 36 74 6f 38 28 64 62 2c 20 7a  e3Utf16to8(db, z
6d00: 53 71 6c 2c 20 6e 42 79 74 65 73 2c 20 53 51 4c  Sql, nBytes, SQL
6d10: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 29  ITE_UTF16NATIVE)
6d20: 3b 0a 20 20 69 66 28 20 7a 53 71 6c 38 20 29 7b  ;.  if( zSql8 ){
6d30: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
6d40: 33 4c 6f 63 6b 41 6e 64 50 72 65 70 61 72 65 28  3LockAndPrepare(
6d50: 64 62 2c 20 7a 53 71 6c 38 2c 20 2d 31 2c 20 70  db, zSql8, -1, p
6d60: 72 65 70 46 6c 61 67 73 2c 20 30 2c 20 70 70 53  repFlags, 0, ppS
6d70: 74 6d 74 2c 20 26 7a 54 61 69 6c 38 29 3b 0a 20  tmt, &zTail8);. 
6d80: 20 7d 0a 0a 20 20 69 66 28 20 7a 54 61 69 6c 38   }..  if( zTail8
6d90: 20 26 26 20 70 7a 54 61 69 6c 20 29 7b 0a 20 20   && pzTail ){.  
6da0: 20 20 2f 2a 20 49 66 20 73 71 6c 69 74 65 33 5f    /* If sqlite3_
6db0: 70 72 65 70 61 72 65 20 72 65 74 75 72 6e 73 20  prepare returns 
6dc0: 61 20 74 61 69 6c 20 70 6f 69 6e 74 65 72 2c 20  a tail pointer, 
6dd0: 77 65 20 63 61 6c 63 75 6c 61 74 65 20 74 68 65  we calculate the
6de0: 0a 20 20 20 20 2a 2a 20 65 71 75 69 76 61 6c 65  .    ** equivale
6df0: 6e 74 20 70 6f 69 6e 74 65 72 20 69 6e 74 6f 20  nt pointer into 
6e00: 74 68 65 20 55 54 46 2d 31 36 20 73 74 72 69 6e  the UTF-16 strin
6e10: 67 20 62 79 20 63 6f 75 6e 74 69 6e 67 20 74 68  g by counting th
6e20: 65 20 75 6e 69 63 6f 64 65 0a 20 20 20 20 2a 2a  e unicode.    **
6e30: 20 63 68 61 72 61 63 74 65 72 73 20 62 65 74 77   characters betw
6e40: 65 65 6e 20 7a 53 71 6c 38 20 61 6e 64 20 7a 54  een zSql8 and zT
6e50: 61 69 6c 38 2c 20 61 6e 64 20 74 68 65 6e 20 72  ail8, and then r
6e60: 65 74 75 72 6e 69 6e 67 20 61 20 70 6f 69 6e 74  eturning a point
6e70: 65 72 0a 20 20 20 20 2a 2a 20 74 68 65 20 73 61  er.    ** the sa
6e80: 6d 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61  me number of cha
6e90: 72 61 63 74 65 72 73 20 69 6e 74 6f 20 74 68 65  racters into the
6ea0: 20 55 54 46 2d 31 36 20 73 74 72 69 6e 67 2e 0a   UTF-16 string..
6eb0: 20 20 20 20 2a 2f 0a 20 20 20 20 69 6e 74 20 63      */.    int c
6ec0: 68 61 72 73 5f 70 61 72 73 65 64 20 3d 20 73 71  hars_parsed = sq
6ed0: 6c 69 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e  lite3Utf8CharLen
6ee0: 28 7a 53 71 6c 38 2c 20 28 69 6e 74 29 28 7a 54  (zSql8, (int)(zT
6ef0: 61 69 6c 38 2d 7a 53 71 6c 38 29 29 3b 0a 20 20  ail8-zSql8));.  
6f00: 20 20 2a 70 7a 54 61 69 6c 20 3d 20 28 75 38 20    *pzTail = (u8 
6f10: 2a 29 7a 53 71 6c 20 2b 20 73 71 6c 69 74 65 33  *)zSql + sqlite3
6f20: 55 74 66 31 36 42 79 74 65 4c 65 6e 28 7a 53 71  Utf16ByteLen(zSq
6f30: 6c 2c 20 63 68 61 72 73 5f 70 61 72 73 65 64 29  l, chars_parsed)
6f40: 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 44  ;.  }.  sqlite3D
6f50: 62 46 72 65 65 28 64 62 2c 20 7a 53 71 6c 38 29  bFree(db, zSql8)
6f60: 3b 20 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  ; .  rc = sqlite
6f70: 33 41 70 69 45 78 69 74 28 64 62 2c 20 72 63 29  3ApiExit(db, rc)
6f80: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ;.  sqlite3_mute
6f90: 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65  x_leave(db->mute
6fa0: 78 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b  x);.  return rc;
6fb0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 77 6f 20 76 65  .}../*.** Two ve
6fc0: 72 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 6f 66  rsions of the of
6fd0: 66 69 63 69 61 6c 20 41 50 49 2e 20 20 4c 65 67  ficial API.  Leg
6fe0: 61 63 79 20 61 6e 64 20 6e 65 77 20 75 73 65 2e  acy and new use.
6ff0: 20 20 49 6e 20 74 68 65 20 6c 65 67 61 63 79 0a    In the legacy.
7000: 2a 2a 20 76 65 72 73 69 6f 6e 2c 20 74 68 65 20  ** version, the 
7010: 6f 72 69 67 69 6e 61 6c 20 53 51 4c 20 74 65 78  original SQL tex
7020: 74 20 69 73 20 6e 6f 74 20 73 61 76 65 64 20 69  t is not saved i
7030: 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  n the prepared s
7040: 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 61 6e 64 20  tatement.** and 
7050: 73 6f 20 69 66 20 61 20 73 63 68 65 6d 61 20 63  so if a schema c
7060: 68 61 6e 67 65 20 6f 63 63 75 72 73 2c 20 53 51  hange occurs, SQ
7070: 4c 49 54 45 5f 53 43 48 45 4d 41 20 69 73 20 72  LITE_SCHEMA is r
7080: 65 74 75 72 6e 65 64 20 62 79 0a 2a 2a 20 73 71  eturned by.** sq
7090: 6c 69 74 65 33 5f 73 74 65 70 28 29 2e 20 20 49  lite3_step().  I
70a0: 6e 20 74 68 65 20 6e 65 77 20 76 65 72 73 69 6f  n the new versio
70b0: 6e 2c 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  n, the original 
70c0: 53 51 4c 20 74 65 78 74 20 69 73 20 72 65 74 61  SQL text is reta
70d0: 69 6e 65 64 0a 2a 2a 20 61 6e 64 20 74 68 65 20  ined.** and the 
70e0: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61 75 74  statement is aut
70f0: 6f 6d 61 74 69 63 61 6c 6c 79 20 72 65 63 6f 6d  omatically recom
7100: 70 69 6c 65 64 20 69 66 20 61 6e 20 73 63 68 65  piled if an sche
7110: 6d 61 20 63 68 61 6e 67 65 0a 2a 2a 20 6f 63 63  ma change.** occ
7120: 75 72 73 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  urs..*/.int sqli
7130: 74 65 33 5f 70 72 65 70 61 72 65 31 36 28 0a 20  te3_prepare16(. 
7140: 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20   sqlite3 *db,   
7150: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
7160: 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 2a  tabase handle. *
7170: 2f 20 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20  / .  const void 
7180: 2a 7a 53 71 6c 2c 20 20 20 20 20 20 20 20 20 2f  *zSql,         /
7190: 2a 20 55 54 46 2d 31 36 20 65 6e 63 6f 64 65 64  * UTF-16 encoded
71a0: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20   SQL statement. 
71b0: 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 73 2c  */.  int nBytes,
71c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
71d0: 2a 20 4c 65 6e 67 74 68 20 6f 66 20 7a 53 71 6c  * Length of zSql
71e0: 20 69 6e 20 62 79 74 65 73 2e 20 2a 2f 0a 20 20   in bytes. */.  
71f0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2a 70  sqlite3_stmt **p
7200: 70 53 74 6d 74 2c 20 20 20 20 2f 2a 20 4f 55 54  pStmt,    /* OUT
7210: 3a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  : A pointer to t
7220: 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74  he prepared stat
7230: 65 6d 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73 74  ement */.  const
7240: 20 76 6f 69 64 20 2a 2a 70 7a 54 61 69 6c 20 20   void **pzTail  
7250: 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20 45 6e 64       /* OUT: End
7260: 20 6f 66 20 70 61 72 73 65 64 20 73 74 72 69 6e   of parsed strin
7270: 67 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 72 63  g */.){.  int rc
7280: 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
7290: 50 72 65 70 61 72 65 31 36 28 64 62 2c 7a 53 71  Prepare16(db,zSq
72a0: 6c 2c 6e 42 79 74 65 73 2c 30 2c 70 70 53 74 6d  l,nBytes,0,ppStm
72b0: 74 2c 70 7a 54 61 69 6c 29 3b 0a 20 20 61 73 73  t,pzTail);.  ass
72c0: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
72d0: 4f 4b 20 7c 7c 20 70 70 53 74 6d 74 3d 3d 30 20  OK || ppStmt==0 
72e0: 7c 7c 20 2a 70 70 53 74 6d 74 3d 3d 30 20 29 3b  || *ppStmt==0 );
72f0: 20 20 2f 2a 20 56 45 52 49 46 59 3a 20 46 31 33    /* VERIFY: F13
7300: 30 32 31 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20  021 */.  return 
7310: 72 63 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65  rc;.}.int sqlite
7320: 33 5f 70 72 65 70 61 72 65 31 36 5f 76 32 28 0a  3_prepare16_v2(.
7330: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20    sqlite3 *db,  
7340: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
7350: 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20  atabase handle. 
7360: 2a 2f 20 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64  */ .  const void
7370: 20 2a 7a 53 71 6c 2c 20 20 20 20 20 20 20 20 20   *zSql,         
7380: 2f 2a 20 55 54 46 2d 31 36 20 65 6e 63 6f 64 65  /* UTF-16 encode
7390: 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e  d SQL statement.
73a0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 73   */.  int nBytes
73b0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
73c0: 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 7a 53 71  /* Length of zSq
73d0: 6c 20 69 6e 20 62 79 74 65 73 2e 20 2a 2f 0a 20  l in bytes. */. 
73e0: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2a   sqlite3_stmt **
73f0: 70 70 53 74 6d 74 2c 20 20 20 20 2f 2a 20 4f 55  ppStmt,    /* OU
7400: 54 3a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  T: A pointer to 
7410: 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
7420: 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73  tement */.  cons
7430: 74 20 76 6f 69 64 20 2a 2a 70 7a 54 61 69 6c 20  t void **pzTail 
7440: 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20 45 6e        /* OUT: En
7450: 64 20 6f 66 20 70 61 72 73 65 64 20 73 74 72 69  d of parsed stri
7460: 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 72  ng */.){.  int r
7470: 63 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  c;.  rc = sqlite
7480: 33 50 72 65 70 61 72 65 31 36 28 64 62 2c 7a 53  3Prepare16(db,zS
7490: 71 6c 2c 6e 42 79 74 65 73 2c 53 51 4c 49 54 45  ql,nBytes,SQLITE
74a0: 5f 50 52 45 50 41 52 45 5f 53 41 56 45 53 51 4c  _PREPARE_SAVESQL
74b0: 2c 70 70 53 74 6d 74 2c 70 7a 54 61 69 6c 29 3b  ,ppStmt,pzTail);
74c0: 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
74d0: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70 70 53 74  QLITE_OK || ppSt
74e0: 6d 74 3d 3d 30 20 7c 7c 20 2a 70 70 53 74 6d 74  mt==0 || *ppStmt
74f0: 3d 3d 30 20 29 3b 20 20 2f 2a 20 56 45 52 49 46  ==0 );  /* VERIF
7500: 59 3a 20 46 31 33 30 32 31 20 2a 2f 0a 20 20 72  Y: F13021 */.  r
7510: 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 69 6e 74 20  eturn rc;.}.int 
7520: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31  sqlite3_prepare1
7530: 36 5f 76 33 28 0a 20 20 73 71 6c 69 74 65 33 20  6_v3(.  sqlite3 
7540: 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20 20 20  *db,            
7550: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 68 61    /* Database ha
7560: 6e 64 6c 65 2e 20 2a 2f 20 0a 20 20 63 6f 6e 73  ndle. */ .  cons
7570: 74 20 76 6f 69 64 20 2a 7a 53 71 6c 2c 20 20 20  t void *zSql,   
7580: 20 20 20 20 20 20 2f 2a 20 55 54 46 2d 31 36 20        /* UTF-16 
7590: 65 6e 63 6f 64 65 64 20 53 51 4c 20 73 74 61 74  encoded SQL stat
75a0: 65 6d 65 6e 74 2e 20 2a 2f 0a 20 20 69 6e 74 20  ement. */.  int 
75b0: 6e 42 79 74 65 73 2c 20 20 20 20 20 20 20 20 20  nBytes,         
75c0: 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20        /* Length 
75d0: 6f 66 20 7a 53 71 6c 20 69 6e 20 62 79 74 65 73  of zSql in bytes
75e0: 2e 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  . */.  unsigned 
75f0: 69 6e 74 20 70 72 65 70 46 6c 61 67 73 2c 20 20  int prepFlags,  
7600: 20 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65   /* Zero or more
7610: 20 53 51 4c 49 54 45 5f 50 52 45 50 41 52 45 5f   SQLITE_PREPARE_
7620: 2a 20 66 6c 61 67 73 20 2a 2f 0a 20 20 73 71 6c  * flags */.  sql
7630: 69 74 65 33 5f 73 74 6d 74 20 2a 2a 70 70 53 74  ite3_stmt **ppSt
7640: 6d 74 2c 20 20 20 20 2f 2a 20 4f 55 54 3a 20 41  mt,    /* OUT: A
7650: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
7660: 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
7670: 6e 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 76 6f  nt */.  const vo
7680: 69 64 20 2a 2a 70 7a 54 61 69 6c 20 20 20 20 20  id **pzTail     
7690: 20 20 2f 2a 20 4f 55 54 3a 20 45 6e 64 20 6f 66    /* OUT: End of
76a0: 20 70 61 72 73 65 64 20 73 74 72 69 6e 67 20 2a   parsed string *
76b0: 2f 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  /.){.  int rc;. 
76c0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 50 72 65   rc = sqlite3Pre
76d0: 70 61 72 65 31 36 28 64 62 2c 7a 53 71 6c 2c 6e  pare16(db,zSql,n
76e0: 42 79 74 65 73 2c 0a 20 20 20 20 20 20 20 20 20  Bytes,.         
76f0: 53 51 4c 49 54 45 5f 50 52 45 50 41 52 45 5f 53  SQLITE_PREPARE_S
7700: 41 56 45 53 51 4c 7c 28 70 72 65 70 46 6c 61 67  AVESQL|(prepFlag
7710: 73 26 53 51 4c 49 54 45 5f 50 52 45 50 41 52 45  s&SQLITE_PREPARE
7720: 5f 4d 41 53 4b 29 2c 0a 20 20 20 20 20 20 20 20  _MASK),.        
7730: 20 70 70 53 74 6d 74 2c 70 7a 54 61 69 6c 29 3b   ppStmt,pzTail);
7740: 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
7750: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70 70 53 74  QLITE_OK || ppSt
7760: 6d 74 3d 3d 30 20 7c 7c 20 2a 70 70 53 74 6d 74  mt==0 || *ppStmt
7770: 3d 3d 30 20 29 3b 20 20 2f 2a 20 56 45 52 49 46  ==0 );  /* VERIF
7780: 59 3a 20 46 31 33 30 32 31 20 2a 2f 0a 20 20 72  Y: F13021 */.  r
7790: 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 23 65 6e  eturn rc;.}..#en
77a0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
77b0: 49 54 5f 55 54 46 31 36 20 2a 2f 0a              IT_UTF16 */.