/ Hex Artifact Content
Login

Artifact 3283bb65b4b217a092c9cbf65014774e6c3a142d:


0000: 2f 2a 0a 2a 2a 20 32 30 30 35 20 4d 61 79 20 32  /*.** 2005 May 2
0010: 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 75 74 68  5.**.** The auth
0020: 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70  or disclaims cop
0030: 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73  yright to this s
0040: 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20  ource code.  In 
0050: 70 6c 61 63 65 20 6f 66 0a 2a 2a 20 61 20 6c 65  place of.** a le
0060: 67 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65  gal notice, here
0070: 20 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a   is a blessing:.
0080: 2a 2a 0a 2a 2a 20 20 20 20 4d 61 79 20 79 6f 75  **.**    May you
0090: 20 64 6f 20 67 6f 6f 64 20 61 6e 64 20 6e 6f 74   do good and not
00a0: 20 65 76 69 6c 2e 0a 2a 2a 20 20 20 20 4d 61 79   evil..**    May
00b0: 20 79 6f 75 20 66 69 6e 64 20 66 6f 72 67 69 76   you find forgiv
00c0: 65 6e 65 73 73 20 66 6f 72 20 79 6f 75 72 73 65  eness for yourse
00d0: 6c 66 20 61 6e 64 20 66 6f 72 67 69 76 65 20 6f  lf and forgive o
00e0: 74 68 65 72 73 2e 0a 2a 2a 20 20 20 20 4d 61 79  thers..**    May
00f0: 20 79 6f 75 20 73 68 61 72 65 20 66 72 65 65 6c   you share freel
0100: 79 2c 20 6e 65 76 65 72 20 74 61 6b 69 6e 67 20  y, never taking 
0110: 6d 6f 72 65 20 74 68 61 6e 20 79 6f 75 20 67 69  more than you gi
0120: 76 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ve..**.*********
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 0a 2a 2a 20 54 68 69 73 20 66 69 6c 65 20 63 6f  .** This file co
0180: 6e 74 61 69 6e 73 20 74 68 65 20 69 6d 70 6c 65  ntains the imple
0190: 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  mentation of the
01a0: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
01b0: 28 29 0a 2a 2a 20 69 6e 74 65 72 66 61 63 65 2c  ().** interface,
01c0: 20 61 6e 64 20 72 6f 75 74 69 6e 65 73 20 74 68   and routines th
01d0: 61 74 20 63 6f 6e 74 72 69 62 75 74 65 20 74 6f  at contribute to
01e0: 20 6c 6f 61 64 69 6e 67 20 74 68 65 20 64 61 74   loading the dat
01f0: 61 62 61 73 65 20 73 63 68 65 6d 61 0a 2a 2a 20  abase schema.** 
0200: 66 72 6f 6d 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a  from disk..**.**
0210: 20 24 49 64 3a 20 70 72 65 70 61 72 65 2e 63 2c   $Id: prepare.c,
0220: 76 20 31 2e 31 38 20 32 30 30 36 2f 30 31 2f 31  v 1.18 2006/01/1
0230: 30 20 31 37 3a 35 38 3a 32 33 20 64 61 6e 69 65  0 17:58:23 danie
0240: 6c 6b 31 39 37 37 20 45 78 70 20 24 0a 2a 2f 0a  lk1977 Exp $.*/.
0250: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
0260: 49 6e 74 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  Int.h".#include 
0270: 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  "os.h".#include 
0280: 3c 63 74 79 70 65 2e 68 3e 0a 0a 2f 2a 0a 2a 2a  <ctype.h>../*.**
0290: 20 46 69 6c 6c 20 74 68 65 20 49 6e 69 74 44 61   Fill the InitDa
02a0: 74 61 20 73 74 72 75 63 74 75 72 65 20 77 69 74  ta structure wit
02b0: 68 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  h an error messa
02c0: 67 65 20 74 68 61 74 20 69 6e 64 69 63 61 74 65  ge that indicate
02d0: 73 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61  s.** that the da
02e0: 74 61 62 61 73 65 20 69 73 20 63 6f 72 72 75 70  tabase is corrup
02f0: 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  t..*/.static voi
0300: 64 20 63 6f 72 72 75 70 74 53 63 68 65 6d 61 28  d corruptSchema(
0310: 49 6e 69 74 44 61 74 61 20 2a 70 44 61 74 61 2c  InitData *pData,
0320: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 78   const char *zEx
0330: 74 72 61 29 7b 0a 20 20 69 66 28 20 21 73 71 6c  tra){.  if( !sql
0340: 69 74 65 33 54 68 72 65 61 64 44 61 74 61 28 29  ite3ThreadData()
0350: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
0360: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  {.    sqlite3Set
0370: 53 74 72 69 6e 67 28 70 44 61 74 61 2d 3e 70 7a  String(pData->pz
0380: 45 72 72 4d 73 67 2c 20 22 6d 61 6c 66 6f 72 6d  ErrMsg, "malform
0390: 65 64 20 64 61 74 61 62 61 73 65 20 73 63 68 65  ed database sche
03a0: 6d 61 22 2c 0a 20 20 20 20 20 20 20 7a 45 78 74  ma",.       zExt
03b0: 72 61 21 3d 30 20 26 26 20 7a 45 78 74 72 61 5b  ra!=0 && zExtra[
03c0: 30 5d 21 3d 30 20 3f 20 22 20 2d 20 22 20 3a 20  0]!=0 ? " - " : 
03d0: 28 63 68 61 72 2a 29 30 2c 20 7a 45 78 74 72 61  (char*)0, zExtra
03e0: 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a 20 20 7d  , (char*)0);.  }
03f0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69  .}../*.** This i
0400: 73 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 72  s the callback r
0410: 6f 75 74 69 6e 65 20 66 6f 72 20 74 68 65 20 63  outine for the c
0420: 6f 64 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c  ode that initial
0430: 69 7a 65 73 20 74 68 65 0a 2a 2a 20 64 61 74 61  izes the.** data
0440: 62 61 73 65 2e 20 20 53 65 65 20 73 71 6c 69 74  base.  See sqlit
0450: 65 33 49 6e 69 74 28 29 20 62 65 6c 6f 77 20 66  e3Init() below f
0460: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
0470: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 20 54 68  formation..** Th
0480: 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61 6c  is routine is al
0490: 73 6f 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 74  so called from t
04a0: 68 65 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d  he OP_ParseSchem
04b0: 61 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20  a opcode of the 
04c0: 56 44 42 45 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68  VDBE..**.** Each
04d0: 20 63 61 6c 6c 62 61 63 6b 20 63 6f 6e 74 61 69   callback contai
04e0: 6e 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ns the following
04f0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 3a 0a 2a 2a   information:.**
0500: 0a 2a 2a 20 20 20 20 20 61 72 67 76 5b 30 5d 20  .**     argv[0] 
0510: 3d 20 6e 61 6d 65 20 6f 66 20 74 68 69 6e 67 20  = name of thing 
0520: 62 65 69 6e 67 20 63 72 65 61 74 65 64 0a 2a 2a  being created.**
0530: 20 20 20 20 20 61 72 67 76 5b 31 5d 20 3d 20 72       argv[1] = r
0540: 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20  oot page number 
0550: 66 6f 72 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  for table or ind
0560: 65 78 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 74 72  ex.  NULL for tr
0570: 69 67 67 65 72 20 6f 72 20 76 69 65 77 2e 0a 2a  igger or view..*
0580: 2a 20 20 20 20 20 61 72 67 76 5b 32 5d 20 3d 20  *     argv[2] = 
0590: 53 51 4c 20 74 65 78 74 20 66 6f 72 20 74 68 65  SQL text for the
05a0: 20 43 52 45 41 54 45 20 73 74 61 74 65 6d 65 6e   CREATE statemen
05b0: 74 2e 0a 2a 2a 20 20 20 20 20 61 72 67 76 5b 33  t..**     argv[3
05c0: 5d 20 3d 20 22 31 22 20 66 6f 72 20 74 65 6d 70  ] = "1" for temp
05d0: 6f 72 61 72 79 20 66 69 6c 65 73 2c 20 22 30 22  orary files, "0"
05e0: 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61 62 61   for main databa
05f0: 73 65 2c 20 22 32 22 20 6f 72 20 6d 6f 72 65 0a  se, "2" or more.
0600: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0610: 20 66 6f 72 20 61 75 78 69 6c 69 61 72 79 20 64   for auxiliary d
0620: 61 74 61 62 61 73 65 20 66 69 6c 65 73 2e 0a 2a  atabase files..*
0630: 2a 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  *.*/.int sqlite3
0640: 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69  InitCallback(voi
0650: 64 20 2a 70 49 6e 69 74 2c 20 69 6e 74 20 61 72  d *pInit, int ar
0660: 67 63 2c 20 63 68 61 72 20 2a 2a 61 72 67 76 2c  gc, char **argv,
0670: 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 4e 61 6d   char **azColNam
0680: 65 29 7b 0a 20 20 49 6e 69 74 44 61 74 61 20 2a  e){.  InitData *
0690: 70 44 61 74 61 20 3d 20 28 49 6e 69 74 44 61 74  pData = (InitDat
06a0: 61 2a 29 70 49 6e 69 74 3b 0a 20 20 73 71 6c 69  a*)pInit;.  sqli
06b0: 74 65 33 20 2a 64 62 20 3d 20 70 44 61 74 61 2d  te3 *db = pData-
06c0: 3e 64 62 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a  >db;.  int iDb;.
06d0: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 68  .  if( sqlite3Th
06e0: 72 65 61 64 44 61 74 61 28 29 2d 3e 6d 61 6c 6c  readData()->mall
06f0: 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20 20 20 20  ocFailed ){.    
0700: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4e 4f  return SQLITE_NO
0710: 4d 45 4d 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65  MEM;.  }..  asse
0720: 72 74 28 20 61 72 67 63 3d 3d 34 20 29 3b 0a 20  rt( argc==4 );. 
0730: 20 69 66 28 20 61 72 67 76 3d 3d 30 20 29 20 72   if( argv==0 ) r
0740: 65 74 75 72 6e 20 30 3b 20 20 20 2f 2a 20 4d 69  eturn 0;   /* Mi
0750: 67 68 74 20 68 61 70 70 65 6e 20 69 66 20 45 4d  ght happen if EM
0760: 50 54 59 5f 52 45 53 55 4c 54 5f 43 41 4c 4c 42  PTY_RESULT_CALLB
0770: 41 43 4b 53 20 61 72 65 20 6f 6e 20 2a 2f 0a 20  ACKS are on */. 
0780: 20 69 66 28 20 61 72 67 76 5b 31 5d 3d 3d 30 20   if( argv[1]==0 
0790: 7c 7c 20 61 72 67 76 5b 33 5d 3d 3d 30 20 29 7b  || argv[3]==0 ){
07a0: 0a 20 20 20 20 63 6f 72 72 75 70 74 53 63 68 65  .    corruptSche
07b0: 6d 61 28 70 44 61 74 61 2c 20 30 29 3b 0a 20 20  ma(pData, 0);.  
07c0: 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a    return 1;.  }.
07d0: 20 20 69 44 62 20 3d 20 61 74 6f 69 28 61 72 67    iDb = atoi(arg
07e0: 76 5b 33 5d 29 3b 0a 20 20 61 73 73 65 72 74 28  v[3]);.  assert(
07f0: 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
0800: 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 69 66 28 20  b->nDb );.  if( 
0810: 61 72 67 76 5b 32 5d 20 26 26 20 61 72 67 76 5b  argv[2] && argv[
0820: 32 5d 5b 30 5d 20 29 7b 0a 20 20 20 20 2f 2a 20  2][0] ){.    /* 
0830: 43 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20  Call the parser 
0840: 74 6f 20 70 72 6f 63 65 73 73 20 61 20 43 52 45  to process a CRE
0850: 41 54 45 20 54 41 42 4c 45 2c 20 49 4e 44 45 58  ATE TABLE, INDEX
0860: 20 6f 72 20 56 49 45 57 2e 0a 20 20 20 20 2a 2a   or VIEW..    **
0870: 20 42 75 74 20 62 65 63 61 75 73 65 20 64 62 2d   But because db-
0880: 3e 69 6e 69 74 2e 62 75 73 79 20 69 73 20 73 65  >init.busy is se
0890: 74 20 74 6f 20 31 2c 20 6e 6f 20 56 44 42 45 20  t to 1, no VDBE 
08a0: 63 6f 64 65 20 69 73 20 67 65 6e 65 72 61 74 65  code is generate
08b0: 64 0a 20 20 20 20 2a 2a 20 6f 72 20 65 78 65 63  d.    ** or exec
08c0: 75 74 65 64 2e 20 20 41 6c 6c 20 74 68 65 20 70  uted.  All the p
08d0: 61 72 73 65 72 20 64 6f 65 73 20 69 73 20 62 75  arser does is bu
08e0: 69 6c 64 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  ild the internal
08f0: 20 64 61 74 61 0a 20 20 20 20 2a 2a 20 73 74 72   data.    ** str
0900: 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
0910: 63 72 69 62 65 20 74 68 65 20 74 61 62 6c 65 2c  cribe the table,
0920: 20 69 6e 64 65 78 2c 20 6f 72 20 76 69 65 77 2e   index, or view.
0930: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 63 68 61 72  .    */.    char
0940: 20 2a 7a 45 72 72 3b 0a 20 20 20 20 69 6e 74 20   *zErr;.    int 
0950: 72 63 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  rc;.    assert( 
0960: 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 29 3b  db->init.busy );
0970: 0a 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 69 44  .    db->init.iD
0980: 62 20 3d 20 69 44 62 3b 0a 20 20 20 20 64 62 2d  b = iDb;.    db-
0990: 3e 69 6e 69 74 2e 6e 65 77 54 6e 75 6d 20 3d 20  >init.newTnum = 
09a0: 61 74 6f 69 28 61 72 67 76 5b 31 5d 29 3b 0a 20  atoi(argv[1]);. 
09b0: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
09c0: 65 78 65 63 28 64 62 2c 20 61 72 67 76 5b 32 5d  exec(db, argv[2]
09d0: 2c 20 30 2c 20 30 2c 20 26 7a 45 72 72 29 3b 0a  , 0, 0, &zErr);.
09e0: 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 69 44 62      db->init.iDb
09f0: 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 53 51   = 0;.    if( SQ
0a00: 4c 49 54 45 5f 4f 4b 21 3d 72 63 20 29 7b 0a 20  LITE_OK!=rc ){. 
0a10: 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
0a20: 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20  ITE_NOMEM ){.   
0a30: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 54 68         sqlite3Th
0a40: 72 65 61 64 44 61 74 61 28 29 2d 3e 6d 61 6c 6c  readData()->mall
0a50: 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20  ocFailed = 1;.  
0a60: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
0a70: 20 20 20 20 20 63 6f 72 72 75 70 74 53 63 68 65       corruptSche
0a80: 6d 61 28 70 44 61 74 61 2c 20 7a 45 72 72 29 3b  ma(pData, zErr);
0a90: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
0aa0: 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72  qlite3_free(zErr
0ab0: 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
0ac0: 72 63 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  rc;.    }.  }els
0ad0: 65 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65  e{.    /* If the
0ae0: 20 53 51 4c 20 63 6f 6c 75 6d 6e 20 69 73 20 62   SQL column is b
0af0: 6c 61 6e 6b 20 69 74 20 6d 65 61 6e 73 20 74 68  lank it means th
0b00: 69 73 20 69 73 20 61 6e 20 69 6e 64 65 78 20 74  is is an index t
0b10: 68 61 74 0a 20 20 20 20 2a 2a 20 77 61 73 20 63  hat.    ** was c
0b20: 72 65 61 74 65 64 20 74 6f 20 62 65 20 74 68 65  reated to be the
0b30: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20   PRIMARY KEY or 
0b40: 74 6f 20 66 75 6c 66 69 6c 6c 20 61 20 55 4e 49  to fulfill a UNI
0b50: 51 55 45 0a 20 20 20 20 2a 2a 20 63 6f 6e 73 74  QUE.    ** const
0b60: 72 61 69 6e 74 20 66 6f 72 20 61 20 43 52 45 41  raint for a CREA
0b70: 54 45 20 54 41 42 4c 45 2e 20 20 54 68 65 20 69  TE TABLE.  The i
0b80: 6e 64 65 78 20 73 68 6f 75 6c 64 20 68 61 76 65  ndex should have
0b90: 20 61 6c 72 65 61 64 79 0a 20 20 20 20 2a 2a 20   already.    ** 
0ba0: 62 65 65 6e 20 63 72 65 61 74 65 64 20 77 68 65  been created whe
0bb0: 6e 20 77 65 20 70 72 6f 63 65 73 73 65 64 20 74  n we processed t
0bc0: 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 2e  he CREATE TABLE.
0bd0: 20 20 41 6c 6c 20 77 65 20 68 61 76 65 0a 20 20    All we have.  
0be0: 20 20 2a 2a 20 74 6f 20 64 6f 20 68 65 72 65 20    ** to do here 
0bf0: 69 73 20 72 65 63 6f 72 64 20 74 68 65 20 72 6f  is record the ro
0c00: 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66  ot page number f
0c10: 6f 72 20 74 68 61 74 20 69 6e 64 65 78 2e 0a 20  or that index.. 
0c20: 20 20 20 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20     */.    Index 
0c30: 2a 70 49 6e 64 65 78 3b 0a 20 20 20 20 70 49 6e  *pIndex;.    pIn
0c40: 64 65 78 20 3d 20 73 71 6c 69 74 65 33 46 69 6e  dex = sqlite3Fin
0c50: 64 49 6e 64 65 78 28 64 62 2c 20 61 72 67 76 5b  dIndex(db, argv[
0c60: 30 5d 2c 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d  0], db->aDb[iDb]
0c70: 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 69 66 28  .zName);.    if(
0c80: 20 70 49 6e 64 65 78 3d 3d 30 20 7c 7c 20 70 49   pIndex==0 || pI
0c90: 6e 64 65 78 2d 3e 74 6e 75 6d 21 3d 30 20 29 7b  ndex->tnum!=0 ){
0ca0: 0a 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 63  .      /* This c
0cb0: 61 6e 20 6f 63 63 75 72 20 69 66 20 74 68 65 72  an occur if ther
0cc0: 65 20 65 78 69 73 74 73 20 61 6e 20 69 6e 64 65  e exists an inde
0cd0: 78 20 6f 6e 20 61 20 54 45 4d 50 20 74 61 62 6c  x on a TEMP tabl
0ce0: 65 20 77 68 69 63 68 0a 20 20 20 20 20 20 2a 2a  e which.      **
0cf0: 20 68 61 73 20 74 68 65 20 73 61 6d 65 20 6e 61   has the same na
0d00: 6d 65 20 61 73 20 61 6e 6f 74 68 65 72 20 69 6e  me as another in
0d10: 64 65 78 20 6f 6e 20 61 20 70 65 72 6d 61 6e 65  dex on a permane
0d20: 6e 74 20 69 6e 64 65 78 2e 20 20 53 69 6e 63 65  nt index.  Since
0d30: 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 70 65  .      ** the pe
0d40: 72 6d 61 6e 65 6e 74 20 74 61 62 6c 65 20 69 73  rmanent table is
0d50: 20 68 69 64 64 65 6e 20 62 79 20 74 68 65 20 54   hidden by the T
0d60: 45 4d 50 20 74 61 62 6c 65 2c 20 77 65 20 63 61  EMP table, we ca
0d70: 6e 20 61 6c 73 6f 0a 20 20 20 20 20 20 2a 2a 20  n also.      ** 
0d80: 73 61 66 65 6c 79 20 69 67 6e 6f 72 65 20 74 68  safely ignore th
0d90: 65 20 69 6e 64 65 78 20 6f 6e 20 74 68 65 20 70  e index on the p
0da0: 65 72 6d 61 6e 65 6e 74 20 74 61 62 6c 65 2e 0a  ermanent table..
0db0: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 2f        */.      /
0dc0: 2a 20 44 6f 20 4e 6f 74 68 69 6e 67 20 2a 2f 3b  * Do Nothing */;
0dd0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
0de0: 20 20 70 49 6e 64 65 78 2d 3e 74 6e 75 6d 20 3d    pIndex->tnum =
0df0: 20 61 74 6f 69 28 61 72 67 76 5b 31 5d 29 3b 0a   atoi(argv[1]);.
0e00: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75      }.  }.  retu
0e10: 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41  rn 0;.}../*.** A
0e20: 74 74 65 6d 70 74 20 74 6f 20 72 65 61 64 20 74  ttempt to read t
0e30: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
0e40: 6d 61 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a  ma and initializ
0e50: 65 20 69 6e 74 65 72 6e 61 6c 0a 2a 2a 20 64 61  e internal.** da
0e60: 74 61 20 73 74 72 75 63 74 75 72 65 73 20 66 6f  ta structures fo
0e70: 72 20 61 20 73 69 6e 67 6c 65 20 64 61 74 61 62  r a single datab
0e80: 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65 20 69  ase file.  The i
0e90: 6e 64 65 78 20 6f 66 20 74 68 65 0a 2a 2a 20 64  ndex of the.** d
0ea0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20  atabase file is 
0eb0: 67 69 76 65 6e 20 62 79 20 69 44 62 2e 20 20 69  given by iDb.  i
0ec0: 44 62 3d 3d 30 20 69 73 20 75 73 65 64 20 66 6f  Db==0 is used fo
0ed0: 72 20 74 68 65 20 6d 61 69 6e 0a 2a 2a 20 64 61  r the main.** da
0ee0: 74 61 62 61 73 65 2e 20 20 69 44 62 3d 3d 31 20  tabase.  iDb==1 
0ef0: 73 68 6f 75 6c 64 20 6e 65 76 65 72 20 62 65 20  should never be 
0f00: 75 73 65 64 2e 20 20 69 44 62 3e 3d 32 20 69 73  used.  iDb>=2 is
0f10: 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61 75 78   used for.** aux
0f20: 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 73  iliary databases
0f30: 2e 20 20 52 65 74 75 72 6e 20 6f 6e 65 20 6f 66  .  Return one of
0f40: 20 74 68 65 20 53 51 4c 49 54 45 5f 20 65 72 72   the SQLITE_ err
0f50: 6f 72 20 63 6f 64 65 73 20 74 6f 0a 2a 2a 20 69  or codes to.** i
0f60: 6e 64 69 63 61 74 65 20 73 75 63 63 65 73 73 20  ndicate success 
0f70: 6f 72 20 66 61 69 6c 75 72 65 2e 0a 2a 2f 0a 73  or failure..*/.s
0f80: 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65  tatic int sqlite
0f90: 33 49 6e 69 74 4f 6e 65 28 73 71 6c 69 74 65 33  3InitOne(sqlite3
0fa0: 20 2a 64 62 2c 20 69 6e 74 20 69 44 62 2c 20 63   *db, int iDb, c
0fb0: 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 29 7b  har **pzErrMsg){
0fc0: 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 42 74 43  .  int rc;.  BtC
0fd0: 75 72 73 6f 72 20 2a 63 75 72 4d 61 69 6e 3b 0a  ursor *curMain;.
0fe0: 20 20 69 6e 74 20 73 69 7a 65 3b 0a 20 20 54 61    int size;.  Ta
0ff0: 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 44 62 20  ble *pTab;.  Db 
1000: 2a 70 44 62 3b 0a 20 20 63 68 61 72 20 63 6f 6e  *pDb;.  char con
1010: 73 74 20 2a 61 7a 41 72 67 5b 35 5d 3b 0a 20 20  st *azArg[5];.  
1020: 63 68 61 72 20 7a 44 62 4e 75 6d 5b 33 30 5d 3b  char zDbNum[30];
1030: 0a 20 20 69 6e 74 20 6d 65 74 61 5b 31 30 5d 3b  .  int meta[10];
1040: 0a 20 20 49 6e 69 74 44 61 74 61 20 69 6e 69 74  .  InitData init
1050: 44 61 74 61 3b 0a 20 20 63 68 61 72 20 63 6f 6e  Data;.  char con
1060: 73 74 20 2a 7a 4d 61 73 74 65 72 53 63 68 65 6d  st *zMasterSchem
1070: 61 3b 0a 20 20 63 68 61 72 20 63 6f 6e 73 74 20  a;.  char const 
1080: 2a 7a 4d 61 73 74 65 72 4e 61 6d 65 20 3d 20 53  *zMasterName = S
1090: 43 48 45 4d 41 5f 54 41 42 4c 45 28 69 44 62 29  CHEMA_TABLE(iDb)
10a0: 3b 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 54 68 65  ;..  /*.  ** The
10b0: 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65   master database
10c0: 20 74 61 62 6c 65 20 68 61 73 20 61 20 73 74 72   table has a str
10d0: 75 63 74 75 72 65 20 6c 69 6b 65 20 74 68 69 73  ucture like this
10e0: 0a 20 20 2a 2f 0a 20 20 73 74 61 74 69 63 20 63  .  */.  static c
10f0: 6f 6e 73 74 20 63 68 61 72 20 6d 61 73 74 65 72  onst char master
1100: 5f 73 63 68 65 6d 61 5b 5d 20 3d 20 0a 20 20 20  _schema[] = .   
1110: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
1120: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 28 5c 6e  sqlite_master(\n
1130: 22 0a 20 20 20 20 20 22 20 20 74 79 70 65 20 74  ".     "  type t
1140: 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20  ext,\n".     "  
1150: 6e 61 6d 65 20 74 65 78 74 2c 5c 6e 22 0a 20 20  name text,\n".  
1160: 20 20 20 22 20 20 74 62 6c 5f 6e 61 6d 65 20 74     "  tbl_name t
1170: 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20  ext,\n".     "  
1180: 72 6f 6f 74 70 61 67 65 20 69 6e 74 65 67 65 72  rootpage integer
1190: 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20 73 71 6c  ,\n".     "  sql
11a0: 20 74 65 78 74 5c 6e 22 0a 20 20 20 20 20 22 29   text\n".     ")
11b0: 22 0a 20 20 3b 0a 23 69 66 6e 64 65 66 20 53 51  ".  ;.#ifndef SQ
11c0: 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42  LITE_OMIT_TEMPDB
11d0: 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
11e0: 63 68 61 72 20 74 65 6d 70 5f 6d 61 73 74 65 72  char temp_master
11f0: 5f 73 63 68 65 6d 61 5b 5d 20 3d 20 0a 20 20 20  _schema[] = .   
1200: 20 20 22 43 52 45 41 54 45 20 54 45 4d 50 20 54    "CREATE TEMP T
1210: 41 42 4c 45 20 73 71 6c 69 74 65 5f 74 65 6d 70  ABLE sqlite_temp
1220: 5f 6d 61 73 74 65 72 28 5c 6e 22 0a 20 20 20 20  _master(\n".    
1230: 20 22 20 20 74 79 70 65 20 74 65 78 74 2c 5c 6e   "  type text,\n
1240: 22 0a 20 20 20 20 20 22 20 20 6e 61 6d 65 20 74  ".     "  name t
1250: 65 78 74 2c 5c 6e 22 0a 20 20 20 20 20 22 20 20  ext,\n".     "  
1260: 74 62 6c 5f 6e 61 6d 65 20 74 65 78 74 2c 5c 6e  tbl_name text,\n
1270: 22 0a 20 20 20 20 20 22 20 20 72 6f 6f 74 70 61  ".     "  rootpa
1280: 67 65 20 69 6e 74 65 67 65 72 2c 5c 6e 22 0a 20  ge integer,\n". 
1290: 20 20 20 20 22 20 20 73 71 6c 20 74 65 78 74 5c      "  sql text\
12a0: 6e 22 0a 20 20 20 20 20 22 29 22 0a 20 20 3b 0a  n".     ")".  ;.
12b0: 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
12c0: 74 65 6d 70 5f 6d 61 73 74 65 72 5f 73 63 68 65  temp_master_sche
12d0: 6d 61 20 30 0a 23 65 6e 64 69 66 0a 0a 20 20 61  ma 0.#endif..  a
12e0: 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26  ssert( iDb>=0 &&
12f0: 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a   iDb<db->nDb );.
1300: 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61  .  assert( db->a
1310: 44 62 5b 69 44 62 5d 2e 70 53 63 68 65 6d 61 20  Db[iDb].pSchema 
1320: 29 3b 0a 23 69 66 20 30 0a 20 20 69 66 28 20 30  );.#if 0.  if( 0
1330: 3d 3d 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  ==db->aDb[iDb].p
1340: 53 63 68 65 6d 61 20 29 7b 0a 20 20 20 20 53 63  Schema ){.    Sc
1350: 68 65 6d 61 20 2a 70 53 20 3d 20 73 71 6c 69 74  hema *pS = sqlit
1360: 65 33 53 63 68 65 6d 61 47 65 74 28 64 62 2d 3e  e3SchemaGet(db->
1370: 61 44 62 5b 69 44 62 5d 2e 70 42 74 29 3b 0a 20  aDb[iDb].pBt);. 
1380: 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e     db->aDb[iDb].
1390: 70 53 63 68 65 6d 61 20 3d 20 70 53 3b 0a 20 20  pSchema = pS;.  
13a0: 20 20 69 66 28 20 21 70 53 20 29 7b 0a 20 20 20    if( !pS ){.   
13b0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
13c0: 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c 73  _NOMEM;.    }els
13d0: 65 20 69 66 28 20 70 53 2d 3e 66 69 6c 65 5f 66  e if( pS->file_f
13e0: 6f 72 6d 61 74 21 3d 30 20 29 7b 0a 20 20 20 20  ormat!=0 ){.    
13f0: 20 20 2f 2a 20 54 68 69 73 20 6d 65 61 6e 73 20    /* This means 
1400: 74 68 61 74 20 74 68 65 20 73 68 61 72 65 64 2d  that the shared-
1410: 73 63 68 65 6d 61 20 61 73 73 6f 63 69 61 74 65  schema associate
1420: 64 20 77 69 74 68 20 74 68 65 20 74 68 65 20 62  d with the the b
1430: 74 72 65 65 0a 20 20 20 20 20 20 2a 2a 20 69 73  tree.      ** is
1440: 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 61 6e   already open an
1450: 64 20 70 6f 70 75 6c 61 74 65 64 2e 0a 20 20 20  d populated..   
1460: 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20     */.      if( 
1470: 70 53 2d 3e 65 6e 63 21 3d 45 4e 43 28 64 62 29  pS->enc!=ENC(db)
1480: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
1490: 74 65 33 53 65 74 53 74 72 69 6e 67 28 70 7a 45  te3SetString(pzE
14a0: 72 72 4d 73 67 2c 20 22 61 74 74 61 63 68 65 64  rrMsg, "attached
14b0: 20 64 61 74 61 62 61 73 65 73 20 6d 75 73 74 20   databases must 
14c0: 75 73 65 20 74 68 65 20 73 61 6d 65 22 0a 20 20  use the same".  
14d0: 20 20 20 20 20 20 20 20 20 20 22 20 74 65 78 74            " text
14e0: 20 65 6e 63 6f 64 69 6e 67 20 61 73 20 6d 61 69   encoding as mai
14f0: 6e 20 64 61 74 61 62 61 73 65 22 2c 20 28 63 68  n database", (ch
1500: 61 72 2a 29 30 29 3b 0a 20 20 20 20 20 20 20 20  ar*)0);.        
1510: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52  return SQLITE_ER
1520: 52 4f 52 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ROR;.      }.   
1530: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
1540: 5f 4f 4b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23  _OK;.    }.  }.#
1550: 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 7a 4d 61 73  endif..  /* zMas
1560: 74 65 72 53 63 68 65 6d 61 20 61 6e 64 20 7a 49  terSchema and zI
1570: 6e 69 74 53 63 72 69 70 74 20 61 72 65 20 73 65  nitScript are se
1580: 74 20 74 6f 20 70 6f 69 6e 74 20 61 74 20 74 68  t to point at th
1590: 65 20 6d 61 73 74 65 72 20 73 63 68 65 6d 61 0a  e master schema.
15a0: 20 20 2a 2a 20 61 6e 64 20 69 6e 69 74 69 61 6c    ** and initial
15b0: 69 73 61 74 69 6f 6e 20 73 63 72 69 70 74 20 61  isation script a
15c0: 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74  ppropriate for t
15d0: 68 65 20 64 61 74 61 62 61 73 65 20 62 65 69 6e  he database bein
15e0: 67 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 69 73  g.  ** initialis
15f0: 65 64 2e 20 7a 4d 61 73 74 65 72 4e 61 6d 65 20  ed. zMasterName 
1600: 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  is the name of t
1610: 68 65 20 6d 61 73 74 65 72 20 74 61 62 6c 65 2e  he master table.
1620: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 21 4f 4d 49  .  */.  if( !OMI
1630: 54 5f 54 45 4d 50 44 42 20 26 26 20 69 44 62 3d  T_TEMPDB && iDb=
1640: 3d 31 20 29 7b 0a 20 20 20 20 7a 4d 61 73 74 65  =1 ){.    zMaste
1650: 72 53 63 68 65 6d 61 20 3d 20 74 65 6d 70 5f 6d  rSchema = temp_m
1660: 61 73 74 65 72 5f 73 63 68 65 6d 61 3b 0a 20 20  aster_schema;.  
1670: 7d 65 6c 73 65 7b 0a 20 20 20 20 7a 4d 61 73 74  }else{.    zMast
1680: 65 72 53 63 68 65 6d 61 20 3d 20 6d 61 73 74 65  erSchema = maste
1690: 72 5f 73 63 68 65 6d 61 3b 0a 20 20 7d 0a 20 20  r_schema;.  }.  
16a0: 7a 4d 61 73 74 65 72 4e 61 6d 65 20 3d 20 53 43  zMasterName = SC
16b0: 48 45 4d 41 5f 54 41 42 4c 45 28 69 44 62 29 3b  HEMA_TABLE(iDb);
16c0: 0a 0a 20 20 2f 2a 20 43 6f 6e 73 74 72 75 63 74  ..  /* Construct
16d0: 20 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c   the schema tabl
16e0: 65 73 2e 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65  es.  */.  sqlite
16f0: 33 53 61 66 65 74 79 4f 66 66 28 64 62 29 3b 0a  3SafetyOff(db);.
1700: 20 20 61 7a 41 72 67 5b 30 5d 20 3d 20 7a 4d 61    azArg[0] = zMa
1710: 73 74 65 72 4e 61 6d 65 3b 0a 20 20 61 7a 41 72  sterName;.  azAr
1720: 67 5b 31 5d 20 3d 20 22 31 22 3b 0a 20 20 61 7a  g[1] = "1";.  az
1730: 41 72 67 5b 32 5d 20 3d 20 7a 4d 61 73 74 65 72  Arg[2] = zMaster
1740: 53 63 68 65 6d 61 3b 0a 20 20 73 70 72 69 6e 74  Schema;.  sprint
1750: 66 28 7a 44 62 4e 75 6d 2c 20 22 25 64 22 2c 20  f(zDbNum, "%d", 
1760: 69 44 62 29 3b 0a 20 20 61 7a 41 72 67 5b 33 5d  iDb);.  azArg[3]
1770: 20 3d 20 7a 44 62 4e 75 6d 3b 0a 20 20 61 7a 41   = zDbNum;.  azA
1780: 72 67 5b 34 5d 20 3d 20 30 3b 0a 20 20 69 6e 69  rg[4] = 0;.  ini
1790: 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20  tData.db = db;. 
17a0: 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d   initData.pzErrM
17b0: 73 67 20 3d 20 70 7a 45 72 72 4d 73 67 3b 0a 20  sg = pzErrMsg;. 
17c0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 49 6e 69   rc = sqlite3Ini
17d0: 74 43 61 6c 6c 62 61 63 6b 28 26 69 6e 69 74 44  tCallback(&initD
17e0: 61 74 61 2c 20 34 2c 20 28 63 68 61 72 20 2a 2a  ata, 4, (char **
17f0: 29 61 7a 41 72 67 2c 20 30 29 3b 0a 20 20 69 66  )azArg, 0);.  if
1800: 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1810: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 61  ){.    sqlite3Sa
1820: 66 65 74 79 4f 6e 28 64 62 29 3b 0a 20 20 20 20  fetyOn(db);.    
1830: 72 65 74 75 72 6e 20 72 63 3b 0a 20 20 7d 0a 20  return rc;.  }. 
1840: 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33 46   pTab = sqlite3F
1850: 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a 4d 61  indTable(db, zMa
1860: 73 74 65 72 4e 61 6d 65 2c 20 64 62 2d 3e 61 44  sterName, db->aD
1870: 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65 29 3b 0a 20  b[iDb].zName);. 
1880: 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20   if( pTab ){.   
1890: 20 70 54 61 62 2d 3e 72 65 61 64 4f 6e 6c 79 20   pTab->readOnly 
18a0: 3d 20 31 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  = 1;.  }.  sqlit
18b0: 65 33 53 61 66 65 74 79 4f 6e 28 64 62 29 3b 0a  e3SafetyOn(db);.
18c0: 0a 20 20 2f 2a 20 43 72 65 61 74 65 20 61 20 63  .  /* Create a c
18d0: 75 72 73 6f 72 20 74 6f 20 68 6f 6c 64 20 74 68  ursor to hold th
18e0: 65 20 64 61 74 61 62 61 73 65 20 6f 70 65 6e 0a  e database open.
18f0: 20 20 2a 2f 0a 20 20 70 44 62 20 3d 20 26 64 62    */.  pDb = &db
1900: 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20 69 66  ->aDb[iDb];.  if
1910: 28 20 70 44 62 2d 3e 70 42 74 3d 3d 30 20 29 7b  ( pDb->pBt==0 ){
1920: 0a 20 20 20 20 69 66 28 20 21 4f 4d 49 54 5f 54  .    if( !OMIT_T
1930: 45 4d 50 44 42 20 26 26 20 69 44 62 3d 3d 31 20  EMPDB && iDb==1 
1940: 29 20 44 62 53 65 74 50 72 6f 70 65 72 74 79 28  ) DbSetProperty(
1950: 64 62 2c 20 31 2c 20 44 42 5f 53 63 68 65 6d 61  db, 1, DB_Schema
1960: 4c 6f 61 64 65 64 29 3b 0a 20 20 20 20 72 65 74  Loaded);.    ret
1970: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  urn SQLITE_OK;. 
1980: 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65   }.  rc = sqlite
1990: 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 44 62  3BtreeCursor(pDb
19a0: 2d 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f 52 4f  ->pBt, MASTER_RO
19b0: 4f 54 2c 20 30 2c 20 30 2c 20 30 2c 20 26 63 75  OT, 0, 0, 0, &cu
19c0: 72 4d 61 69 6e 29 3b 0a 20 20 69 66 28 20 72 63  rMain);.  if( rc
19d0: 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72  !=SQLITE_OK && r
19e0: 63 21 3d 53 51 4c 49 54 45 5f 45 4d 50 54 59 20  c!=SQLITE_EMPTY 
19f0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  ){.    sqlite3Se
1a00: 74 53 74 72 69 6e 67 28 70 7a 45 72 72 4d 73 67  tString(pzErrMsg
1a10: 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28  , sqlite3ErrStr(
1a20: 72 63 29 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a  rc), (char*)0);.
1a30: 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 20      return rc;. 
1a40: 20 7d 0a 0a 20 20 2f 2a 20 47 65 74 20 74 68 65   }..  /* Get the
1a50: 20 64 61 74 61 62 61 73 65 20 6d 65 74 61 20 69   database meta i
1a60: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 20 20 2a 2a  nformation..  **
1a70: 0a 20 20 2a 2a 20 4d 65 74 61 20 76 61 6c 75 65  .  ** Meta value
1a80: 73 20 61 72 65 20 61 73 20 66 6f 6c 6c 6f 77 73  s are as follows
1a90: 3a 0a 20 20 2a 2a 20 20 20 20 6d 65 74 61 5b 30  :.  **    meta[0
1aa0: 5d 20 20 20 53 63 68 65 6d 61 20 63 6f 6f 6b 69  ]   Schema cooki
1ab0: 65 2e 20 20 43 68 61 6e 67 65 73 20 77 69 74 68  e.  Changes with
1ac0: 20 65 61 63 68 20 73 63 68 65 6d 61 20 63 68 61   each schema cha
1ad0: 6e 67 65 2e 0a 20 20 2a 2a 20 20 20 20 6d 65 74  nge..  **    met
1ae0: 61 5b 31 5d 20 20 20 46 69 6c 65 20 66 6f 72 6d  a[1]   File form
1af0: 61 74 20 6f 66 20 73 63 68 65 6d 61 20 6c 61 79  at of schema lay
1b00: 65 72 2e 0a 20 20 2a 2a 20 20 20 20 6d 65 74 61  er..  **    meta
1b10: 5b 32 5d 20 20 20 53 69 7a 65 20 6f 66 20 74 68  [2]   Size of th
1b20: 65 20 70 61 67 65 20 63 61 63 68 65 2e 0a 20 20  e page cache..  
1b30: 2a 2a 20 20 20 20 6d 65 74 61 5b 33 5d 20 20 20  **    meta[3]   
1b40: 55 73 65 20 66 72 65 65 6c 69 73 74 20 69 66 20  Use freelist if 
1b50: 30 2e 20 20 41 75 74 6f 76 61 63 75 75 6d 20 69  0.  Autovacuum i
1b60: 66 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a  f greater than z
1b70: 65 72 6f 2e 0a 20 20 2a 2a 20 20 20 20 6d 65 74  ero..  **    met
1b80: 61 5b 34 5d 20 20 20 44 62 20 74 65 78 74 20 65  a[4]   Db text e
1b90: 6e 63 6f 64 69 6e 67 2e 20 31 3a 55 54 46 2d 38  ncoding. 1:UTF-8
1ba0: 20 33 3a 55 54 46 2d 31 36 20 4c 45 20 34 3a 55   3:UTF-16 LE 4:U
1bb0: 54 46 2d 31 36 20 42 45 0a 20 20 2a 2a 20 20 20  TF-16 BE.  **   
1bc0: 20 6d 65 74 61 5b 35 5d 20 20 20 54 68 65 20 75   meta[5]   The u
1bd0: 73 65 72 20 63 6f 6f 6b 69 65 2e 20 55 73 65 64  ser cookie. Used
1be0: 20 62 79 20 74 68 65 20 61 70 70 6c 69 63 61 74   by the applicat
1bf0: 69 6f 6e 2e 0a 20 20 2a 2a 20 20 20 20 6d 65 74  ion..  **    met
1c00: 61 5b 36 5d 20 20 20 0a 20 20 2a 2a 20 20 20 20  a[6]   .  **    
1c10: 6d 65 74 61 5b 37 5d 0a 20 20 2a 2a 20 20 20 20  meta[7].  **    
1c20: 6d 65 74 61 5b 38 5d 0a 20 20 2a 2a 20 20 20 20  meta[8].  **    
1c30: 6d 65 74 61 5b 39 5d 0a 20 20 2a 2a 0a 20 20 2a  meta[9].  **.  *
1c40: 2a 20 4e 6f 74 65 3a 20 54 68 65 20 68 61 73 68  * Note: The hash
1c50: 20 64 65 66 69 6e 65 64 20 53 51 4c 49 54 45 5f   defined SQLITE_
1c60: 55 54 46 2a 20 73 79 6d 62 6f 6c 73 20 69 6e 20  UTF* symbols in 
1c70: 73 71 6c 69 74 65 49 6e 74 2e 68 20 63 6f 72 72  sqliteInt.h corr
1c80: 65 73 70 6f 6e 64 20 74 6f 0a 20 20 2a 2a 20 74  espond to.  ** t
1c90: 68 65 20 70 6f 73 73 69 62 6c 65 20 76 61 6c 75  he possible valu
1ca0: 65 73 20 6f 66 20 6d 65 74 61 5b 34 5d 2e 0a 20  es of meta[4].. 
1cb0: 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   */.  if( rc==SQ
1cc0: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 69  LITE_OK ){.    i
1cd0: 6e 74 20 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d  nt i;.    for(i=
1ce0: 30 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  0; rc==SQLITE_OK
1cf0: 20 26 26 20 69 3c 73 69 7a 65 6f 66 28 6d 65 74   && i<sizeof(met
1d00: 61 29 2f 73 69 7a 65 6f 66 28 6d 65 74 61 5b 30  a)/sizeof(meta[0
1d10: 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  ]); i++){.      
1d20: 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1d30: 65 47 65 74 4d 65 74 61 28 70 44 62 2d 3e 70 42  eGetMeta(pDb->pB
1d40: 74 2c 20 69 2b 31 2c 20 28 75 33 32 20 2a 29 26  t, i+1, (u32 *)&
1d50: 6d 65 74 61 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a  meta[i]);.    }.
1d60: 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20      if( rc ){.  
1d70: 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
1d80: 72 69 6e 67 28 70 7a 45 72 72 4d 73 67 2c 20 73  ring(pzErrMsg, s
1d90: 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29  qlite3ErrStr(rc)
1da0: 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a 20 20 20  , (char*)0);.   
1db0: 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43     sqlite3BtreeC
1dc0: 6c 6f 73 65 43 75 72 73 6f 72 28 63 75 72 4d 61  loseCursor(curMa
1dd0: 69 6e 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  in);.      retur
1de0: 6e 20 72 63 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  n rc;.    }.  }e
1df0: 6c 73 65 7b 0a 20 20 20 20 6d 65 6d 73 65 74 28  lse{.    memset(
1e00: 6d 65 74 61 2c 20 30 2c 20 73 69 7a 65 6f 66 28  meta, 0, sizeof(
1e10: 6d 65 74 61 29 29 3b 0a 20 20 7d 0a 20 20 70 44  meta));.  }.  pD
1e20: 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  b->pSchema->sche
1e30: 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20 6d 65 74 61  ma_cookie = meta
1e40: 5b 30 5d 3b 0a 0a 20 20 2f 2a 20 49 66 20 6f 70  [0];..  /* If op
1e50: 65 6e 69 6e 67 20 61 20 6e 6f 6e 2d 65 6d 70 74  ening a non-empt
1e60: 79 20 64 61 74 61 62 61 73 65 2c 20 63 68 65 63  y database, chec
1e70: 6b 20 74 68 65 20 74 65 78 74 20 65 6e 63 6f 64  k the text encod
1e80: 69 6e 67 2e 20 46 6f 72 20 74 68 65 0a 20 20 2a  ing. For the.  *
1e90: 2a 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c  * main database,
1ea0: 20 73 65 74 20 73 71 6c 69 74 65 33 2e 65 6e 63   set sqlite3.enc
1eb0: 20 74 6f 20 74 68 65 20 65 6e 63 6f 64 69 6e 67   to the encoding
1ec0: 20 6f 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74   of the main dat
1ed0: 61 62 61 73 65 2e 0a 20 20 2a 2a 20 46 6f 72 20  abase..  ** For 
1ee0: 61 6e 20 61 74 74 61 63 68 65 64 20 64 62 2c 20  an attached db, 
1ef0: 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 69  it is an error i
1f00: 66 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 69  f the encoding i
1f10: 73 20 6e 6f 74 20 74 68 65 20 73 61 6d 65 0a 20  s not the same. 
1f20: 20 2a 2a 20 61 73 20 73 71 6c 69 74 65 33 2e 65   ** as sqlite3.e
1f30: 6e 63 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 6d  nc..  */.  if( m
1f40: 65 74 61 5b 34 5d 20 29 7b 20 20 2f 2a 20 74 65  eta[4] ){  /* te
1f50: 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20  xt encoding */. 
1f60: 20 20 20 69 66 28 20 69 44 62 3d 3d 30 20 29 7b     if( iDb==0 ){
1f70: 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 6f 70 65  .      /* If ope
1f80: 6e 69 6e 67 20 74 68 65 20 6d 61 69 6e 20 64 61  ning the main da
1f90: 74 61 62 61 73 65 2c 20 73 65 74 20 45 4e 43 28  tabase, set ENC(
1fa0: 64 62 29 2e 20 2a 2f 0a 20 20 20 20 20 20 45 4e  db). */.      EN
1fb0: 43 28 64 62 29 20 3d 20 28 75 38 29 6d 65 74 61  C(db) = (u8)meta
1fc0: 5b 34 5d 3b 0a 20 20 20 20 20 20 64 62 2d 3e 70  [4];.      db->p
1fd0: 44 66 6c 74 43 6f 6c 6c 20 3d 20 73 71 6c 69 74  DfltColl = sqlit
1fe0: 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 64 62  e3FindCollSeq(db
1ff0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 22  , SQLITE_UTF8, "
2000: 42 49 4e 41 52 59 22 2c 20 36 2c 20 30 29 3b 0a  BINARY", 6, 0);.
2010: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2020: 20 2f 2a 20 49 66 20 6f 70 65 6e 69 6e 67 20 61   /* If opening a
2030: 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
2040: 61 73 65 2c 20 74 68 65 20 65 6e 63 6f 64 69 6e  ase, the encodin
2050: 67 20 6d 75 63 68 20 6d 61 74 63 68 20 45 4e 43  g much match ENC
2060: 28 64 62 29 20 2a 2f 0a 20 20 20 20 20 20 69 66  (db) */.      if
2070: 28 20 6d 65 74 61 5b 34 5d 21 3d 45 4e 43 28 64  ( meta[4]!=ENC(d
2080: 62 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  b) ){.        sq
2090: 6c 69 74 65 33 42 74 72 65 65 43 6c 6f 73 65 43  lite3BtreeCloseC
20a0: 75 72 73 6f 72 28 63 75 72 4d 61 69 6e 29 3b 0a  ursor(curMain);.
20b0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 53          sqlite3S
20c0: 65 74 53 74 72 69 6e 67 28 70 7a 45 72 72 4d 73  etString(pzErrMs
20d0: 67 2c 20 22 61 74 74 61 63 68 65 64 20 64 61 74  g, "attached dat
20e0: 61 62 61 73 65 73 20 6d 75 73 74 20 75 73 65 20  abases must use 
20f0: 74 68 65 20 73 61 6d 65 22 0a 20 20 20 20 20 20  the same".      
2100: 20 20 20 20 20 20 22 20 74 65 78 74 20 65 6e 63        " text enc
2110: 6f 64 69 6e 67 20 61 73 20 6d 61 69 6e 20 64 61  oding as main da
2120: 74 61 62 61 73 65 22 2c 20 28 63 68 61 72 2a 29  tabase", (char*)
2130: 30 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75  0);.        retu
2140: 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b  rn SQLITE_ERROR;
2150: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
2160: 20 7d 0a 20 20 70 44 62 2d 3e 70 53 63 68 65 6d   }.  pDb->pSchem
2170: 61 2d 3e 65 6e 63 20 3d 20 45 4e 43 28 64 62 29  a->enc = ENC(db)
2180: 3b 0a 0a 20 20 73 69 7a 65 20 3d 20 6d 65 74 61  ;..  size = meta
2190: 5b 32 5d 3b 0a 20 20 69 66 28 20 73 69 7a 65 3d  [2];.  if( size=
21a0: 3d 30 20 29 7b 20 73 69 7a 65 20 3d 20 4d 41 58  =0 ){ size = MAX
21b0: 5f 50 41 47 45 53 3b 20 7d 0a 20 20 70 44 62 2d  _PAGES; }.  pDb-
21c0: 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f  >pSchema->cache_
21d0: 73 69 7a 65 20 3d 20 73 69 7a 65 3b 0a 20 20 73  size = size;.  s
21e0: 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43 61  qlite3BtreeSetCa
21f0: 63 68 65 53 69 7a 65 28 70 44 62 2d 3e 70 42 74  cheSize(pDb->pBt
2200: 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e  , pDb->pSchema->
2210: 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 0a 20 20  cache_size);..  
2220: 2f 2a 0a 20 20 2a 2a 20 66 69 6c 65 5f 66 6f 72  /*.  ** file_for
2230: 6d 61 74 3d 3d 31 20 20 20 20 56 65 72 73 69 6f  mat==1    Versio
2240: 6e 20 33 2e 30 2e 30 2e 0a 20 20 2a 2a 20 66 69  n 3.0.0..  ** fi
2250: 6c 65 5f 66 6f 72 6d 61 74 3d 3d 32 20 20 20 20  le_format==2    
2260: 56 65 72 73 69 6f 6e 20 33 2e 31 2e 33 2e 20 20  Version 3.1.3.  
2270: 2f 2f 20 41 4c 54 45 52 20 54 41 42 4c 45 20 41  // ALTER TABLE A
2280: 44 44 20 43 4f 4c 55 4d 4e 0a 20 20 2a 2a 20 66  DD COLUMN.  ** f
2290: 69 6c 65 5f 66 6f 72 6d 61 74 3d 3d 33 20 20 20  ile_format==3   
22a0: 20 56 65 72 73 69 6f 6e 20 33 2e 31 2e 34 2e 20   Version 3.1.4. 
22b0: 20 2f 2f 20 64 69 74 74 6f 20 62 75 74 20 77 69   // ditto but wi
22c0: 74 68 20 6e 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61  th non-NULL defa
22d0: 75 6c 74 73 0a 20 20 2a 2a 20 66 69 6c 65 5f 66  ults.  ** file_f
22e0: 6f 72 6d 61 74 3d 3d 34 20 20 20 20 56 65 72 73  ormat==4    Vers
22f0: 69 6f 6e 20 33 2e 33 2e 30 2e 20 20 2f 2f 20 44  ion 3.3.0.  // D
2300: 45 53 43 20 69 6e 64 69 63 65 73 2e 20 20 42 6f  ESC indices.  Bo
2310: 6f 6c 65 61 6e 20 63 6f 6e 73 74 61 6e 74 73 0a  olean constants.
2320: 20 20 2a 2f 0a 20 20 70 44 62 2d 3e 70 53 63 68    */.  pDb->pSch
2330: 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74  ema->file_format
2340: 20 3d 20 6d 65 74 61 5b 31 5d 3b 0a 20 20 69 66   = meta[1];.  if
2350: 28 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e  ( pDb->pSchema->
2360: 66 69 6c 65 5f 66 6f 72 6d 61 74 3d 3d 30 20 29  file_format==0 )
2370: 7b 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65  {.    pDb->pSche
2380: 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20  ma->file_format 
2390: 3d 20 31 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  = 1;.  }.  if( p
23a0: 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c  Db->pSchema->fil
23b0: 65 5f 66 6f 72 6d 61 74 3e 53 51 4c 49 54 45 5f  e_format>SQLITE_
23c0: 4d 41 58 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20  MAX_FILE_FORMAT 
23d0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74  ){.    sqlite3Bt
23e0: 72 65 65 43 6c 6f 73 65 43 75 72 73 6f 72 28 63  reeCloseCursor(c
23f0: 75 72 4d 61 69 6e 29 3b 0a 20 20 20 20 73 71 6c  urMain);.    sql
2400: 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 70 7a  ite3SetString(pz
2410: 45 72 72 4d 73 67 2c 20 22 75 6e 73 75 70 70 6f  ErrMsg, "unsuppo
2420: 72 74 65 64 20 66 69 6c 65 20 66 6f 72 6d 61 74  rted file format
2430: 22 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a 20 20  ", (char*)0);.  
2440: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
2450: 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 0a 20 20 2f  ERROR;.  }...  /
2460: 2a 20 52 65 61 64 20 74 68 65 20 73 63 68 65 6d  * Read the schem
2470: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 75  a information ou
2480: 74 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20  t of the schema 
2490: 74 61 62 6c 65 73 0a 20 20 2a 2f 0a 20 20 61 73  tables.  */.  as
24a0: 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62  sert( db->init.b
24b0: 75 73 79 20 29 3b 0a 20 20 69 66 28 20 72 63 3d  usy );.  if( rc=
24c0: 3d 53 51 4c 49 54 45 5f 45 4d 50 54 59 20 29 7b  =SQLITE_EMPTY ){
24d0: 0a 20 20 20 20 2f 2a 20 46 6f 72 20 61 6e 20 65  .    /* For an e
24e0: 6d 70 74 79 20 64 61 74 61 62 61 73 65 2c 20 74  mpty database, t
24f0: 68 65 72 65 20 69 73 20 6e 6f 74 68 69 6e 67 20  here is nothing 
2500: 74 6f 20 72 65 61 64 20 2a 2f 0a 20 20 20 20 72  to read */.    r
2510: 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
2520: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72   }else{.    char
2530: 20 2a 7a 53 71 6c 3b 0a 20 20 20 20 7a 53 71 6c   *zSql;.    zSql
2540: 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74   = sqlite3MPrint
2550: 66 28 0a 20 20 20 20 20 20 20 20 22 53 45 4c 45  f(.        "SELE
2560: 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67  CT name, rootpag
2570: 65 2c 20 73 71 6c 2c 20 27 25 73 27 20 46 52 4f  e, sql, '%s' FRO
2580: 4d 20 27 25 71 27 2e 25 73 22 2c 0a 20 20 20 20  M '%q'.%s",.    
2590: 20 20 20 20 7a 44 62 4e 75 6d 2c 20 64 62 2d 3e      zDbNum, db->
25a0: 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20  aDb[iDb].zName, 
25b0: 7a 4d 61 73 74 65 72 4e 61 6d 65 29 3b 0a 20 20  zMasterName);.  
25c0: 20 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f    sqlite3SafetyO
25d0: 66 66 28 64 62 29 3b 0a 20 20 20 20 72 63 20 3d  ff(db);.    rc =
25e0: 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62   sqlite3_exec(db
25f0: 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33 49  , zSql, sqlite3I
2600: 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e  nitCallback, &in
2610: 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 20 20  itData, 0);.    
2620: 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28  sqlite3SafetyOn(
2630: 64 62 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 46  db);.    sqliteF
2640: 72 65 65 28 7a 53 71 6c 29 3b 0a 23 69 66 6e 64  ree(zSql);.#ifnd
2650: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
2660: 4e 41 4c 59 5a 45 0a 20 20 20 20 69 66 28 20 72  NALYZE.    if( r
2670: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
2680: 20 20 20 20 20 20 73 71 6c 69 74 65 33 41 6e 61        sqlite3Ana
2690: 6c 79 73 69 73 4c 6f 61 64 28 64 62 2c 20 69 44  lysisLoad(db, iD
26a0: 62 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  b);.    }.#endif
26b0: 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
26c0: 65 43 6c 6f 73 65 43 75 72 73 6f 72 28 63 75 72  eCloseCursor(cur
26d0: 4d 61 69 6e 29 3b 0a 20 20 7d 0a 20 20 69 66 28  Main);.  }.  if(
26e0: 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 44 61   sqlite3ThreadDa
26f0: 74 61 28 29 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ta()->mallocFail
2700: 65 64 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ed ){.    sqlite
2710: 33 53 65 74 53 74 72 69 6e 67 28 70 7a 45 72 72  3SetString(pzErr
2720: 4d 73 67 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d  Msg, "out of mem
2730: 6f 72 79 22 2c 20 28 63 68 61 72 2a 29 30 29 3b  ory", (char*)0);
2740: 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
2750: 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 73 71 6c 69  _NOMEM;.    sqli
2760: 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c  te3ResetInternal
2770: 53 63 68 65 6d 61 28 64 62 2c 20 30 29 3b 0a 20  Schema(db, 0);. 
2780: 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c   }.  if( rc==SQL
2790: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 44 62  ITE_OK ){.    Db
27a0: 53 65 74 50 72 6f 70 65 72 74 79 28 64 62 2c 20  SetProperty(db, 
27b0: 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f  iDb, DB_SchemaLo
27c0: 61 64 65 64 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  aded);.  }else{.
27d0: 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
27e0: 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64  InternalSchema(d
27f0: 62 2c 20 69 44 62 29 3b 0a 20 20 7d 0a 20 20 72  b, iDb);.  }.  r
2800: 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a  eturn rc;.}../*.
2810: 2a 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 61 6c  ** Initialize al
2820: 6c 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  l database files
2830: 20 2d 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61   - the main data
2840: 62 61 73 65 20 66 69 6c 65 2c 20 74 68 65 20 66  base file, the f
2850: 69 6c 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73  ile.** used to s
2860: 74 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20 74  tore temporary t
2870: 61 62 6c 65 73 2c 20 61 6e 64 20 61 6e 79 20 61  ables, and any a
2880: 64 64 69 74 69 6f 6e 61 6c 20 64 61 74 61 62 61  dditional databa
2890: 73 65 20 66 69 6c 65 73 0a 2a 2a 20 63 72 65 61  se files.** crea
28a0: 74 65 64 20 75 73 69 6e 67 20 41 54 54 41 43 48  ted using ATTACH
28b0: 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 52 65   statements.  Re
28c0: 74 75 72 6e 20 61 20 73 75 63 63 65 73 73 20 63  turn a success c
28d0: 6f 64 65 2e 20 20 49 66 20 61 6e 0a 2a 2a 20 65  ode.  If an.** e
28e0: 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 77 72 69  rror occurs, wri
28f0: 74 65 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  te an error mess
2900: 61 67 65 20 69 6e 74 6f 20 2a 70 7a 45 72 72 4d  age into *pzErrM
2910: 73 67 2e 0a 2a 2a 0a 2a 2a 20 41 66 74 65 72 20  sg..**.** After 
2920: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
2930: 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20 74 68 65  initialized, the
2940: 20 53 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c 69   SQLITE_Initiali
2950: 7a 65 64 0a 2a 2a 20 62 69 74 20 69 73 20 73 65  zed.** bit is se
2960: 74 20 69 6e 20 74 68 65 20 66 6c 61 67 73 20 66  t in the flags f
2970: 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c 69  ield of the sqli
2980: 74 65 20 73 74 72 75 63 74 75 72 65 2e 20 0a 2a  te structure. .*
2990: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69  /.int sqlite3Ini
29a0: 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 63  t(sqlite3 *db, c
29b0: 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 29 7b  har **pzErrMsg){
29c0: 0a 20 20 69 6e 74 20 69 2c 20 72 63 3b 0a 20 20  .  int i, rc;.  
29d0: 0a 20 20 69 66 28 20 64 62 2d 3e 69 6e 69 74 2e  .  if( db->init.
29e0: 62 75 73 79 20 29 20 72 65 74 75 72 6e 20 53 51  busy ) return SQ
29f0: 4c 49 54 45 5f 4f 4b 3b 0a 20 20 61 73 73 65 72  LITE_OK;.  asser
2a00: 74 28 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20  t( (db->flags & 
2a10: 53 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c 69 7a  SQLITE_Initializ
2a20: 65 64 29 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d  ed)==0 );.  rc =
2a30: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 64 62   SQLITE_OK;.  db
2a40: 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b  ->init.busy = 1;
2a50: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 72 63 3d 3d  .  for(i=0; rc==
2a60: 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69 3c 64  SQLITE_OK && i<d
2a70: 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20  b->nDb; i++){.  
2a80: 20 20 69 66 28 20 44 62 48 61 73 50 72 6f 70 65    if( DbHasPrope
2a90: 72 74 79 28 64 62 2c 20 69 2c 20 44 42 5f 53 63  rty(db, i, DB_Sc
2aa0: 68 65 6d 61 4c 6f 61 64 65 64 29 20 7c 7c 20 69  hemaLoaded) || i
2ab0: 3d 3d 31 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ==1 ) continue;.
2ac0: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2ad0: 49 6e 69 74 4f 6e 65 28 64 62 2c 20 69 2c 20 70  InitOne(db, i, p
2ae0: 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 69 66  zErrMsg);.    if
2af0: 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 73 71  ( rc ){.      sq
2b00: 6c 69 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e  lite3ResetIntern
2b10: 61 6c 53 63 68 65 6d 61 28 64 62 2c 20 69 29 3b  alSchema(db, i);
2b20: 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a  .    }.  }..  /*
2b30: 20 4f 6e 63 65 20 61 6c 6c 20 74 68 65 20 6f 74   Once all the ot
2b40: 68 65 72 20 64 61 74 61 62 61 73 65 73 20 68 61  her databases ha
2b50: 76 65 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69  ve been initiali
2b60: 73 65 64 2c 20 6c 6f 61 64 20 74 68 65 20 73 63  sed, load the sc
2b70: 68 65 6d 61 0a 20 20 2a 2a 20 66 6f 72 20 74 68  hema.  ** for th
2b80: 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 2e  e TEMP database.
2b90: 20 54 68 69 73 20 69 73 20 6c 6f 61 64 65 64 20   This is loaded 
2ba0: 6c 61 73 74 2c 20 61 73 20 74 68 65 20 54 45 4d  last, as the TEM
2bb0: 50 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20  P database.  ** 
2bc0: 73 63 68 65 6d 61 20 6d 61 79 20 63 6f 6e 74 61  schema may conta
2bd0: 69 6e 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f  in references to
2be0: 20 6f 62 6a 65 63 74 73 20 69 6e 20 6f 74 68 65   objects in othe
2bf0: 72 20 64 61 74 61 62 61 73 65 73 2e 0a 20 20 2a  r databases..  *
2c00: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
2c10: 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 20 20 69  _OMIT_TEMPDB.  i
2c20: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
2c30: 20 26 26 20 64 62 2d 3e 6e 44 62 3e 31 20 26 26   && db->nDb>1 &&
2c40: 20 21 44 62 48 61 73 50 72 6f 70 65 72 74 79 28   !DbHasProperty(
2c50: 64 62 2c 20 31 2c 20 44 42 5f 53 63 68 65 6d 61  db, 1, DB_Schema
2c60: 4c 6f 61 64 65 64 29 20 29 7b 0a 20 20 20 20 72  Loaded) ){.    r
2c70: 63 20 3d 20 73 71 6c 69 74 65 33 49 6e 69 74 4f  c = sqlite3InitO
2c80: 6e 65 28 64 62 2c 20 31 2c 20 70 7a 45 72 72 4d  ne(db, 1, pzErrM
2c90: 73 67 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20  sg);.    if( rc 
2ca0: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
2cb0: 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53 63 68  ResetInternalSch
2cc0: 65 6d 61 28 64 62 2c 20 31 29 3b 0a 20 20 20 20  ema(db, 1);.    
2cd0: 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  }.  }.#endif..  
2ce0: 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20  db->init.busy = 
2cf0: 30 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  0;.  if( rc==SQL
2d00: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 64 62  ITE_OK ){.    db
2d10: 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54  ->flags |= SQLIT
2d20: 45 5f 49 6e 69 74 69 61 6c 69 7a 65 64 3b 0a 20  E_Initialized;. 
2d30: 20 20 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74     sqlite3Commit
2d40: 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28  InternalChanges(
2d50: 64 62 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  db);.  }..  if( 
2d60: 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
2d70: 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 26  .    db->flags &
2d80: 3d 20 7e 53 51 4c 49 54 45 5f 49 6e 69 74 69 61  = ~SQLITE_Initia
2d90: 6c 69 7a 65 64 3b 0a 20 20 7d 0a 20 20 72 65 74  lized;.  }.  ret
2da0: 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  urn rc;.}../*.**
2db0: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73   This routine is
2dc0: 20 61 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20   a no-op if the 
2dd0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
2de0: 69 73 20 61 6c 72 65 61 64 79 20 69 6e 69 74 69  is already initi
2df0: 61 6c 69 73 65 64 2e 0a 2a 2a 20 4f 74 68 65 72  alised..** Other
2e00: 77 69 73 65 2c 20 74 68 65 20 73 63 68 65 6d 61  wise, the schema
2e10: 20 69 73 20 6c 6f 61 64 65 64 2e 20 41 6e 20 65   is loaded. An e
2e20: 72 72 6f 72 20 63 6f 64 65 20 69 73 20 72 65 74  rror code is ret
2e30: 75 72 6e 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71  urned..*/.int sq
2e40: 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28  lite3ReadSchema(
2e50: 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 7b 0a  Parse *pParse){.
2e60: 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54    int rc = SQLIT
2e70: 45 5f 4f 4b 3b 0a 20 20 73 71 6c 69 74 65 33 20  E_OK;.  sqlite3 
2e80: 2a 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62  *db = pParse->db
2e90: 3b 0a 20 20 69 66 28 20 21 64 62 2d 3e 69 6e 69  ;.  if( !db->ini
2ea0: 74 2e 62 75 73 79 20 29 7b 0a 20 20 20 20 69 66  t.busy ){.    if
2eb0: 28 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  ( (db->flags & S
2ec0: 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c 69 7a 65  QLITE_Initialize
2ed0: 64 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72  d)==0 ){.      r
2ee0: 63 20 3d 20 73 71 6c 69 74 65 33 49 6e 69 74 28  c = sqlite3Init(
2ef0: 64 62 2c 20 26 70 50 61 72 73 65 2d 3e 7a 45 72  db, &pParse->zEr
2f00: 72 4d 73 67 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  rMsg);.    }.  }
2f10: 0a 20 20 61 73 73 65 72 74 28 20 72 63 21 3d 53  .  assert( rc!=S
2f20: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 64 62 2d  QLITE_OK || (db-
2f30: 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
2f40: 49 6e 69 74 69 61 6c 69 7a 65 64 29 20 7c 7c 20  Initialized) || 
2f50: 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 29 3b  db->init.busy );
2f60: 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
2f70: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 70 50 61 72  E_OK ){.    pPar
2f80: 73 65 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20  se->rc = rc;.   
2f90: 20 70 50 61 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b   pParse->nErr++;
2fa0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63  .  }.  return rc
2fb0: 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63  ;.}.../*.** Chec
2fc0: 6b 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 73  k schema cookies
2fd0: 20 69 6e 20 61 6c 6c 20 64 61 74 61 62 61 73 65   in all database
2fe0: 73 2e 20 20 49 66 20 61 6e 79 20 63 6f 6f 6b 69  s.  If any cooki
2ff0: 65 20 69 73 20 6f 75 74 0a 2a 2a 20 6f 66 20 64  e is out.** of d
3000: 61 74 65 2c 20 72 65 74 75 72 6e 20 30 2e 20 20  ate, return 0.  
3010: 49 66 20 61 6c 6c 20 73 63 68 65 6d 61 20 63 6f  If all schema co
3020: 6f 6b 69 65 73 20 61 72 65 20 63 75 72 72 65 6e  okies are curren
3030: 74 2c 20 72 65 74 75 72 6e 20 31 2e 0a 2a 2f 0a  t, return 1..*/.
3040: 73 74 61 74 69 63 20 69 6e 74 20 73 63 68 65 6d  static int schem
3050: 61 49 73 56 61 6c 69 64 28 73 71 6c 69 74 65 33  aIsValid(sqlite3
3060: 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20 69 44 62   *db){.  int iDb
3070: 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 42 74  ;.  int rc;.  Bt
3080: 43 75 72 73 6f 72 20 2a 63 75 72 54 65 6d 70 3b  Cursor *curTemp;
3090: 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65 3b 0a 20  .  int cookie;. 
30a0: 20 69 6e 74 20 61 6c 6c 4f 6b 20 3d 20 31 3b 0a   int allOk = 1;.
30b0: 0a 20 20 66 6f 72 28 69 44 62 3d 30 3b 20 61 6c  .  for(iDb=0; al
30c0: 6c 4f 6b 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e  lOk && iDb<db->n
30d0: 44 62 3b 20 69 44 62 2b 2b 29 7b 0a 20 20 20 20  Db; iDb++){.    
30e0: 42 74 72 65 65 20 2a 70 42 74 3b 0a 20 20 20 20  Btree *pBt;.    
30f0: 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 69 44  pBt = db->aDb[iD
3100: 62 5d 2e 70 42 74 3b 0a 20 20 20 20 69 66 28 20  b].pBt;.    if( 
3110: 70 42 74 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75  pBt==0 ) continu
3120: 65 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  e;.    rc = sqli
3130: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
3140: 42 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c  Bt, MASTER_ROOT,
3150: 20 30 2c 20 30 2c 20 30 2c 20 26 63 75 72 54 65   0, 0, 0, &curTe
3160: 6d 70 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  mp);.    if( rc=
3170: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
3180: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
3190: 42 74 72 65 65 47 65 74 4d 65 74 61 28 70 42 74  BtreeGetMeta(pBt
31a0: 2c 20 31 2c 20 28 75 33 32 20 2a 29 26 63 6f 6f  , 1, (u32 *)&coo
31b0: 6b 69 65 29 3b 0a 20 20 20 20 20 20 69 66 28 20  kie);.      if( 
31c0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
31d0: 20 63 6f 6f 6b 69 65 21 3d 64 62 2d 3e 61 44 62   cookie!=db->aDb
31e0: 5b 69 44 62 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  [iDb].pSchema->s
31f0: 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 29 7b 0a  chema_cookie ){.
3200: 20 20 20 20 20 20 20 20 61 6c 6c 4f 6b 20 3d 20          allOk = 
3210: 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  0;.      }.     
3220: 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 6f   sqlite3BtreeClo
3230: 73 65 43 75 72 73 6f 72 28 63 75 72 54 65 6d 70  seCursor(curTemp
3240: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72  );.    }.  }.  r
3250: 65 74 75 72 6e 20 61 6c 6c 4f 6b 3b 0a 7d 0a 0a  eturn allOk;.}..
3260: 2f 2a 0a 2a 2a 20 46 72 65 65 20 61 6c 6c 20 72  /*.** Free all r
3270: 65 73 6f 75 72 63 65 73 20 68 65 6c 64 20 62 79  esources held by
3280: 20 74 68 65 20 73 63 68 65 6d 61 20 73 74 72 75   the schema stru
3290: 63 74 75 72 65 2e 20 54 68 65 20 76 6f 69 64 2a  cture. The void*
32a0: 20 61 72 67 75 6d 65 6e 74 20 70 6f 69 6e 74 73   argument points
32b0: 0a 2a 2a 20 61 74 20 61 20 53 63 68 65 6d 61 20  .** at a Schema 
32c0: 73 74 72 75 63 74 2e 20 54 68 69 73 20 66 75 6e  struct. This fun
32d0: 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 20 63  ction does not c
32e0: 61 6c 6c 20 73 71 6c 69 74 65 46 72 65 65 28 29  all sqliteFree()
32f0: 20 6f 6e 20 74 68 65 20 0a 2a 2a 20 70 6f 69 6e   on the .** poin
3300: 74 65 72 20 69 74 73 65 6c 66 2c 20 69 74 20 6a  ter itself, it j
3310: 75 73 74 20 63 6c 65 61 6e 73 20 75 70 20 73 75  ust cleans up su
3320: 62 73 69 64 75 61 72 79 20 72 65 73 6f 75 72 63  bsiduary resourc
3330: 65 73 20 28 69 2e 65 2e 20 74 68 65 20 63 6f 6e  es (i.e. the con
3340: 74 65 6e 74 73 0a 2a 2a 20 6f 66 20 74 68 65 20  tents.** of the 
3350: 73 63 68 65 6d 61 20 68 61 73 68 20 74 61 62 6c  schema hash tabl
3360: 65 73 29 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  es)..*/.void sql
3370: 69 74 65 33 53 63 68 65 6d 61 46 72 65 65 28 76  ite3SchemaFree(v
3380: 6f 69 64 20 2a 70 29 7b 0a 20 20 48 61 73 68 20  oid *p){.  Hash 
3390: 74 65 6d 70 31 3b 0a 20 20 48 61 73 68 20 74 65  temp1;.  Hash te
33a0: 6d 70 32 3b 0a 20 20 48 61 73 68 45 6c 65 6d 20  mp2;.  HashElem 
33b0: 2a 70 45 6c 65 6d 3b 0a 20 20 53 63 68 65 6d 61  *pElem;.  Schema
33c0: 20 2a 70 53 63 68 65 6d 61 20 3d 20 28 53 63 68   *pSchema = (Sch
33d0: 65 6d 61 20 2a 29 70 3b 0a 0a 20 20 74 65 6d 70  ema *)p;..  temp
33e0: 31 20 3d 20 70 53 63 68 65 6d 61 2d 3e 74 62 6c  1 = pSchema->tbl
33f0: 48 61 73 68 3b 0a 20 20 74 65 6d 70 32 20 3d 20  Hash;.  temp2 = 
3400: 70 53 63 68 65 6d 61 2d 3e 74 72 69 67 48 61 73  pSchema->trigHas
3410: 68 3b 0a 20 20 73 71 6c 69 74 65 33 48 61 73 68  h;.  sqlite3Hash
3420: 49 6e 69 74 28 26 70 53 63 68 65 6d 61 2d 3e 74  Init(&pSchema->t
3430: 72 69 67 48 61 73 68 2c 20 53 51 4c 49 54 45 5f  rigHash, SQLITE_
3440: 48 41 53 48 5f 53 54 52 49 4e 47 2c 20 30 29 3b  HASH_STRING, 0);
3450: 0a 20 20 73 71 6c 69 74 65 33 48 61 73 68 43 6c  .  sqlite3HashCl
3460: 65 61 72 28 26 70 53 63 68 65 6d 61 2d 3e 61 46  ear(&pSchema->aF
3470: 4b 65 79 29 3b 0a 20 20 73 71 6c 69 74 65 33 48  Key);.  sqlite3H
3480: 61 73 68 43 6c 65 61 72 28 26 70 53 63 68 65 6d  ashClear(&pSchem
3490: 61 2d 3e 69 64 78 48 61 73 68 29 3b 0a 20 20 66  a->idxHash);.  f
34a0: 6f 72 28 70 45 6c 65 6d 3d 73 71 6c 69 74 65 48  or(pElem=sqliteH
34b0: 61 73 68 46 69 72 73 74 28 26 74 65 6d 70 32 29  ashFirst(&temp2)
34c0: 3b 20 70 45 6c 65 6d 3b 20 70 45 6c 65 6d 3d 73  ; pElem; pElem=s
34d0: 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 70 45  qliteHashNext(pE
34e0: 6c 65 6d 29 29 7b 0a 20 20 20 20 73 71 6c 69 74  lem)){.    sqlit
34f0: 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  e3DeleteTrigger(
3500: 28 54 72 69 67 67 65 72 2a 29 73 71 6c 69 74 65  (Trigger*)sqlite
3510: 48 61 73 68 44 61 74 61 28 70 45 6c 65 6d 29 29  HashData(pElem))
3520: 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 48  ;.  }.  sqlite3H
3530: 61 73 68 43 6c 65 61 72 28 26 74 65 6d 70 32 29  ashClear(&temp2)
3540: 3b 0a 20 20 73 71 6c 69 74 65 33 48 61 73 68 49  ;.  sqlite3HashI
3550: 6e 69 74 28 26 70 53 63 68 65 6d 61 2d 3e 74 62  nit(&pSchema->tb
3560: 6c 48 61 73 68 2c 20 53 51 4c 49 54 45 5f 48 41  lHash, SQLITE_HA
3570: 53 48 5f 53 54 52 49 4e 47 2c 20 30 29 3b 0a 20  SH_STRING, 0);. 
3580: 20 66 6f 72 28 70 45 6c 65 6d 3d 73 71 6c 69 74   for(pElem=sqlit
3590: 65 48 61 73 68 46 69 72 73 74 28 26 74 65 6d 70  eHashFirst(&temp
35a0: 31 29 3b 20 70 45 6c 65 6d 3b 20 70 45 6c 65 6d  1); pElem; pElem
35b0: 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28  =sqliteHashNext(
35c0: 70 45 6c 65 6d 29 29 7b 0a 20 20 20 20 54 61 62  pElem)){.    Tab
35d0: 6c 65 20 2a 70 54 61 62 20 3d 20 73 71 6c 69 74  le *pTab = sqlit
35e0: 65 48 61 73 68 44 61 74 61 28 70 45 6c 65 6d 29  eHashData(pElem)
35f0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 65 6c  ;.    sqlite3Del
3600: 65 74 65 54 61 62 6c 65 28 30 2c 20 70 54 61 62  eteTable(0, pTab
3610: 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  );.  }.  sqlite3
3620: 48 61 73 68 43 6c 65 61 72 28 26 74 65 6d 70 31  HashClear(&temp1
3630: 29 3b 0a 20 20 70 53 63 68 65 6d 61 2d 3e 70 53  );.  pSchema->pS
3640: 65 71 54 61 62 20 3d 20 30 3b 0a 20 20 70 53 63  eqTab = 0;.  pSc
3650: 68 65 6d 61 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  hema->flags &= ~
3660: 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 3b  DB_SchemaLoaded;
3670: 0a 7d 0a 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69  .}..Schema *sqli
3680: 74 65 33 53 63 68 65 6d 61 47 65 74 28 42 74 72  te3SchemaGet(Btr
3690: 65 65 20 2a 70 42 74 29 7b 0a 20 20 53 63 68 65  ee *pBt){.  Sche
36a0: 6d 61 20 2a 20 70 3b 0a 20 20 69 66 28 20 70 42  ma * p;.  if( pB
36b0: 74 20 29 7b 0a 20 20 20 20 70 20 3d 20 28 53 63  t ){.    p = (Sc
36c0: 68 65 6d 61 20 2a 29 73 71 6c 69 74 65 33 42 74  hema *)sqlite3Bt
36d0: 72 65 65 53 63 68 65 6d 61 28 70 42 74 2c 73 69  reeSchema(pBt,si
36e0: 7a 65 6f 66 28 53 63 68 65 6d 61 29 2c 73 71 6c  zeof(Schema),sql
36f0: 69 74 65 33 53 63 68 65 6d 61 46 72 65 65 29 3b  ite3SchemaFree);
3700: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 20  .  }else{.    p 
3710: 3d 20 28 53 63 68 65 6d 61 20 2a 29 73 71 6c 69  = (Schema *)sqli
3720: 74 65 4d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28  teMalloc(sizeof(
3730: 53 63 68 65 6d 61 29 29 3b 0a 20 20 7d 0a 20 20  Schema));.  }.  
3740: 69 66 28 20 70 20 26 26 20 30 3d 3d 70 2d 3e 66  if( p && 0==p->f
3750: 69 6c 65 5f 66 6f 72 6d 61 74 20 29 7b 0a 20 20  ile_format ){.  
3760: 20 20 73 71 6c 69 74 65 33 48 61 73 68 49 6e 69    sqlite3HashIni
3770: 74 28 26 70 2d 3e 74 62 6c 48 61 73 68 2c 20 53  t(&p->tblHash, S
3780: 51 4c 49 54 45 5f 48 41 53 48 5f 53 54 52 49 4e  QLITE_HASH_STRIN
3790: 47 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74  G, 0);.    sqlit
37a0: 65 33 48 61 73 68 49 6e 69 74 28 26 70 2d 3e 69  e3HashInit(&p->i
37b0: 64 78 48 61 73 68 2c 20 53 51 4c 49 54 45 5f 48  dxHash, SQLITE_H
37c0: 41 53 48 5f 53 54 52 49 4e 47 2c 20 30 29 3b 0a  ASH_STRING, 0);.
37d0: 20 20 20 20 73 71 6c 69 74 65 33 48 61 73 68 49      sqlite3HashI
37e0: 6e 69 74 28 26 70 2d 3e 74 72 69 67 48 61 73 68  nit(&p->trigHash
37f0: 2c 20 53 51 4c 49 54 45 5f 48 41 53 48 5f 53 54  , SQLITE_HASH_ST
3800: 52 49 4e 47 2c 20 30 29 3b 0a 20 20 20 20 73 71  RING, 0);.    sq
3810: 6c 69 74 65 33 48 61 73 68 49 6e 69 74 28 26 70  lite3HashInit(&p
3820: 2d 3e 61 46 4b 65 79 2c 20 53 51 4c 49 54 45 5f  ->aFKey, SQLITE_
3830: 48 41 53 48 5f 53 54 52 49 4e 47 2c 20 31 29 3b  HASH_STRING, 1);
3840: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 3b  .  }.  return p;
3850: 0a 7d 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  .}..int sqlite3S
3860: 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c  chemaToIndex(sql
3870: 69 74 65 33 20 2a 64 62 2c 20 53 63 68 65 6d 61  ite3 *db, Schema
3880: 20 2a 70 53 63 68 65 6d 61 29 7b 0a 20 20 69 6e   *pSchema){.  in
3890: 74 20 69 20 3d 20 2d 31 30 30 30 30 30 30 3b 0a  t i = -1000000;.
38a0: 0a 20 20 2f 2a 20 49 66 20 70 53 63 68 65 6d 61  .  /* If pSchema
38b0: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 72   is NULL, then r
38c0: 65 74 75 72 6e 20 2d 31 30 30 30 30 30 30 2e 20  eturn -1000000. 
38d0: 54 68 69 73 20 68 61 70 70 65 6e 73 20 77 68 65  This happens whe
38e0: 6e 20 63 6f 64 65 20 69 6e 20 0a 20 20 2a 2a 20  n code in .  ** 
38f0: 65 78 70 72 2e 63 20 69 73 20 74 72 79 69 6e 67  expr.c is trying
3900: 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 20 72 65   to resolve a re
3910: 66 65 72 65 6e 63 65 20 74 6f 20 61 20 74 72 61  ference to a tra
3920: 6e 73 69 65 6e 74 20 74 61 62 6c 65 20 28 69 2e  nsient table (i.
3930: 65 2e 20 6f 6e 65 0a 20 20 2a 2a 20 63 72 65 61  e. one.  ** crea
3940: 74 65 64 20 62 79 20 61 20 73 75 62 2d 73 65 6c  ted by a sub-sel
3950: 65 63 74 29 2e 20 49 6e 20 74 68 69 73 20 63 61  ect). In this ca
3960: 73 65 20 74 68 65 20 72 65 74 75 72 6e 20 76 61  se the return va
3970: 6c 75 65 20 6f 66 20 74 68 69 73 20 0a 20 20 2a  lue of this .  *
3980: 2a 20 66 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c  * function shoul
3990: 64 20 6e 65 76 65 72 20 62 65 20 75 73 65 64 2e  d never be used.
39a0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 65 20 72 65  .  **.  ** We re
39b0: 74 75 72 6e 20 2d 31 30 30 30 30 30 30 20 69 6e  turn -1000000 in
39c0: 73 74 65 61 64 20 6f 66 20 74 68 65 20 6d 6f 72  stead of the mor
39d0: 65 20 75 73 75 61 6c 20 2d 31 20 73 69 6d 70 6c  e usual -1 simpl
39e0: 79 20 62 65 63 61 75 73 65 20 75 73 69 6e 67 0a  y because using.
39f0: 20 20 2a 2a 20 2d 31 30 30 30 30 30 30 20 61 73    ** -1000000 as
3a00: 20 69 6e 63 6f 72 72 65 63 74 6c 79 20 75 73 69   incorrectly usi
3a10: 6e 67 20 2d 31 30 30 30 30 30 30 20 69 6e 64 65  ng -1000000 inde
3a20: 78 20 69 6e 74 6f 20 64 62 2d 3e 61 44 62 5b 5d  x into db->aDb[]
3a30: 20 69 73 20 6d 75 63 68 20 0a 20 20 2a 2a 20 6d   is much .  ** m
3a40: 6f 72 65 20 6c 69 6b 65 6c 79 20 74 6f 20 63 61  ore likely to ca
3a50: 75 73 65 20 61 20 73 65 67 66 61 75 6c 74 20 74  use a segfault t
3a60: 68 61 6e 20 2d 31 20 28 6f 66 20 63 6f 75 72 73  han -1 (of cours
3a70: 65 20 74 68 65 72 65 20 61 72 65 20 61 73 73 65  e there are asse
3a80: 72 74 28 29 0a 20 20 2a 2a 20 73 74 61 74 65 6d  rt().  ** statem
3a90: 65 6e 74 73 20 74 6f 6f 2c 20 62 75 74 20 69 74  ents too, but it
3aa0: 20 6e 65 76 65 72 20 68 75 72 74 73 20 74 6f 20   never hurts to 
3ab0: 70 6c 61 79 20 74 68 65 20 6f 64 64 73 29 2e 0a  play the odds)..
3ac0: 20 20 2a 2f 0a 20 20 69 66 28 20 70 53 63 68 65    */.  if( pSche
3ad0: 6d 61 20 29 7b 0a 20 20 20 20 66 6f 72 28 69 3d  ma ){.    for(i=
3ae0: 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b  0; i<db->nDb; i+
3af0: 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 64 62  +){.      if( db
3b00: 2d 3e 61 44 62 5b 69 5d 2e 70 53 63 68 65 6d 61  ->aDb[i].pSchema
3b10: 3d 3d 70 53 63 68 65 6d 61 20 29 7b 0a 20 20 20  ==pSchema ){.   
3b20: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
3b30: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73    }.    }.    as
3b40: 73 65 72 74 28 20 69 3e 3d 30 20 26 26 69 3e 3d  sert( i>=0 &&i>=
3b50: 30 20 26 26 20 20 69 3c 64 62 2d 3e 6e 44 62 20  0 &&  i<db->nDb 
3b60: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
3b70: 69 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d 70  i;.}../*.** Comp
3b80: 69 6c 65 20 74 68 65 20 55 54 46 2d 38 20 65 6e  ile the UTF-8 en
3b90: 63 6f 64 65 64 20 53 51 4c 20 73 74 61 74 65 6d  coded SQL statem
3ba0: 65 6e 74 20 7a 53 71 6c 20 69 6e 74 6f 20 61 20  ent zSql into a 
3bb0: 73 74 61 74 65 6d 65 6e 74 20 68 61 6e 64 6c 65  statement handle
3bc0: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
3bd0: 5f 70 72 65 70 61 72 65 28 0a 20 20 73 71 6c 69  _prepare(.  sqli
3be0: 74 65 33 20 2a 64 62 2c 20 20 20 20 20 20 20 20  te3 *db,        
3bf0: 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73        /* Databas
3c00: 65 20 68 61 6e 64 6c 65 2e 20 2a 2f 0a 20 20 63  e handle. */.  c
3c10: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 2c  onst char *zSql,
3c20: 20 20 20 20 20 20 20 20 20 2f 2a 20 55 54 46 2d           /* UTF-
3c30: 38 20 65 6e 63 6f 64 65 64 20 53 51 4c 20 73 74  8 encoded SQL st
3c40: 61 74 65 6d 65 6e 74 2e 20 2a 2f 0a 20 20 69 6e  atement. */.  in
3c50: 74 20 6e 42 79 74 65 73 2c 20 20 20 20 20 20 20  t nBytes,       
3c60: 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74          /* Lengt
3c70: 68 20 6f 66 20 7a 53 71 6c 20 69 6e 20 62 79 74  h of zSql in byt
3c80: 65 73 2e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  es. */.  sqlite3
3c90: 5f 73 74 6d 74 20 2a 2a 70 70 53 74 6d 74 2c 20  _stmt **ppStmt, 
3ca0: 20 20 20 2f 2a 20 4f 55 54 3a 20 41 20 70 6f 69     /* OUT: A poi
3cb0: 6e 74 65 72 20 74 6f 20 74 68 65 20 70 72 65 70  nter to the prep
3cc0: 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 2a  ared statement *
3cd0: 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2a  /.  const char**
3ce0: 20 70 7a 54 61 69 6c 20 20 20 20 20 20 20 2f 2a   pzTail       /*
3cf0: 20 4f 55 54 3a 20 45 6e 64 20 6f 66 20 70 61 72   OUT: End of par
3d00: 73 65 64 20 73 74 72 69 6e 67 20 2a 2f 0a 29 7b  sed string */.){
3d10: 0a 20 20 50 61 72 73 65 20 73 50 61 72 73 65 3b  .  Parse sParse;
3d20: 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67  .  char *zErrMsg
3d30: 20 3d 20 30 3b 0a 20 20 69 6e 74 20 72 63 20 3d   = 0;.  int rc =
3d40: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 69 6e   SQLITE_OK;.  in
3d50: 74 20 69 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  t i;..  assert( 
3d60: 21 73 71 6c 69 74 65 33 54 68 72 65 61 64 44 61  !sqlite3ThreadDa
3d70: 74 61 28 29 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ta()->mallocFail
3d80: 65 64 20 29 3b 0a 0a 20 20 61 73 73 65 72 74 28  ed );..  assert(
3d90: 20 70 70 53 74 6d 74 20 29 3b 0a 20 20 2a 70 70   ppStmt );.  *pp
3da0: 53 74 6d 74 20 3d 20 30 3b 0a 20 20 69 66 28 20  Stmt = 0;.  if( 
3db0: 73 71 6c 69 74 65 33 53 61 66 65 74 79 4f 6e 28  sqlite3SafetyOn(
3dc0: 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72  db) ){.    retur
3dd0: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3b  n SQLITE_MISUSE;
3de0: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 61 6e  .  }..  /* If an
3df0: 79 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  y attached datab
3e00: 61 73 65 20 73 63 68 65 6d 61 73 20 61 72 65 20  ase schemas are 
3e10: 6c 6f 63 6b 65 64 2c 20 64 6f 20 6e 6f 74 20 70  locked, do not p
3e20: 72 6f 63 65 65 64 20 77 69 74 68 0a 20 20 2a 2a  roceed with.  **
3e30: 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 2e 20 49 6e   compilation. In
3e40: 73 74 65 61 64 20 72 65 74 75 72 6e 20 53 51 4c  stead return SQL
3e50: 49 54 45 5f 4c 4f 43 4b 45 44 20 69 6d 6d 65 64  ITE_LOCKED immed
3e60: 69 61 74 65 6c 79 2e 0a 20 20 2a 2f 0a 20 20 66  iately..  */.  f
3e70: 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44  or(i=0; i<db->nD
3e80: 62 3b 20 69 2b 2b 29 20 7b 0a 20 20 20 20 42 74  b; i++) {.    Bt
3e90: 72 65 65 20 2a 70 42 74 20 3d 20 64 62 2d 3e 61  ree *pBt = db->a
3ea0: 44 62 5b 69 5d 2e 70 42 74 3b 0a 20 20 20 20 69  Db[i].pBt;.    i
3eb0: 66 28 20 70 42 74 20 26 26 20 73 71 6c 69 74 65  f( pBt && sqlite
3ec0: 33 42 74 72 65 65 53 63 68 65 6d 61 4c 6f 63 6b  3BtreeSchemaLock
3ed0: 65 64 28 70 42 74 29 20 29 7b 0a 20 20 20 20 20  ed(pBt) ){.     
3ee0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
3ef0: 20 3d 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e   = db->aDb[i].zN
3f00: 61 6d 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ame;.      sqlit
3f10: 65 33 45 72 72 6f 72 28 64 62 2c 20 53 51 4c 49  e3Error(db, SQLI
3f20: 54 45 5f 4c 4f 43 4b 45 44 2c 20 22 64 61 74 61  TE_LOCKED, "data
3f30: 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 6c  base schema is l
3f40: 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a 44 62 29  ocked: %s", zDb)
3f50: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  ;.      sqlite3S
3f60: 61 66 65 74 79 4f 66 66 28 64 62 29 3b 0a 20 20  afetyOff(db);.  
3f70: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
3f80: 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 7d 0a  E_LOCKED;.    }.
3f90: 20 20 7d 0a 20 20 0a 20 20 6d 65 6d 73 65 74 28    }.  .  memset(
3fa0: 26 73 50 61 72 73 65 2c 20 30 2c 20 73 69 7a 65  &sParse, 0, size
3fb0: 6f 66 28 73 50 61 72 73 65 29 29 3b 0a 20 20 73  of(sParse));.  s
3fc0: 50 61 72 73 65 2e 64 62 20 3d 20 64 62 3b 0a 20  Parse.db = db;. 
3fd0: 20 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65   sqlite3RunParse
3fe0: 72 28 26 73 50 61 72 73 65 2c 20 7a 53 71 6c 2c  r(&sParse, zSql,
3ff0: 20 26 7a 45 72 72 4d 73 67 29 3b 0a 0a 20 20 69   &zErrMsg);..  i
4000: 66 28 20 73 71 6c 69 74 65 33 54 68 72 65 61 64  f( sqlite3Thread
4010: 44 61 74 61 28 29 2d 3e 6d 61 6c 6c 6f 63 46 61  Data()->mallocFa
4020: 69 6c 65 64 20 29 7b 0a 20 20 20 20 73 50 61 72  iled ){.    sPar
4030: 73 65 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e  se.rc = SQLITE_N
4040: 4f 4d 45 4d 3b 0a 20 20 7d 0a 20 20 69 66 28 20  OMEM;.  }.  if( 
4050: 73 50 61 72 73 65 2e 72 63 3d 3d 53 51 4c 49 54  sParse.rc==SQLIT
4060: 45 5f 44 4f 4e 45 20 29 20 73 50 61 72 73 65 2e  E_DONE ) sParse.
4070: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
4080: 20 20 69 66 28 20 73 50 61 72 73 65 2e 63 68 65    if( sParse.che
4090: 63 6b 53 63 68 65 6d 61 20 26 26 20 21 73 63 68  ckSchema && !sch
40a0: 65 6d 61 49 73 56 61 6c 69 64 28 64 62 29 20 29  emaIsValid(db) )
40b0: 7b 0a 20 20 20 20 73 50 61 72 73 65 2e 72 63 20  {.    sParse.rc 
40c0: 3d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b  = SQLITE_SCHEMA;
40d0: 0a 20 20 7d 0a 20 20 69 66 28 20 73 50 61 72 73  .  }.  if( sPars
40e0: 65 2e 72 63 3d 3d 53 51 4c 49 54 45 5f 53 43 48  e.rc==SQLITE_SCH
40f0: 45 4d 41 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  EMA ){.    sqlit
4100: 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61 6c 53  e3ResetInternalS
4110: 63 68 65 6d 61 28 64 62 2c 20 30 29 3b 0a 20 20  chema(db, 0);.  
4120: 7d 0a 20 20 69 66 28 20 70 7a 54 61 69 6c 20 29  }.  if( pzTail )
4130: 20 2a 70 7a 54 61 69 6c 20 3d 20 73 50 61 72 73   *pzTail = sPars
4140: 65 2e 7a 54 61 69 6c 3b 0a 20 20 72 63 20 3d 20  e.zTail;.  rc = 
4150: 73 50 61 72 73 65 2e 72 63 3b 0a 0a 23 69 66 6e  sParse.rc;..#ifn
4160: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
4170: 45 58 50 4c 41 49 4e 0a 20 20 69 66 28 20 72 63  EXPLAIN.  if( rc
4180: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 73  ==SQLITE_OK && s
4190: 50 61 72 73 65 2e 70 56 64 62 65 20 26 26 20 73  Parse.pVdbe && s
41a0: 50 61 72 73 65 2e 65 78 70 6c 61 69 6e 20 29 7b  Parse.explain ){
41b0: 0a 20 20 20 20 69 66 28 20 73 50 61 72 73 65 2e  .    if( sParse.
41c0: 65 78 70 6c 61 69 6e 3d 3d 32 20 29 7b 0a 20 20  explain==2 ){.  
41d0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
41e0: 65 74 4e 75 6d 43 6f 6c 73 28 73 50 61 72 73 65  etNumCols(sParse
41f0: 2e 70 56 64 62 65 2c 20 33 29 3b 0a 20 20 20 20  .pVdbe, 3);.    
4200: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
4210: 43 6f 6c 4e 61 6d 65 28 73 50 61 72 73 65 2e 70  ColName(sParse.p
4220: 56 64 62 65 2c 20 30 2c 20 22 6f 72 64 65 72 22  Vdbe, 0, "order"
4230: 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20  , P3_STATIC);.  
4240: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
4250: 65 74 43 6f 6c 4e 61 6d 65 28 73 50 61 72 73 65  etColName(sParse
4260: 2e 70 56 64 62 65 2c 20 31 2c 20 22 66 72 6f 6d  .pVdbe, 1, "from
4270: 22 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20  ", P3_STATIC);. 
4280: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
4290: 53 65 74 43 6f 6c 4e 61 6d 65 28 73 50 61 72 73  SetColName(sPars
42a0: 65 2e 70 56 64 62 65 2c 20 32 2c 20 22 64 65 74  e.pVdbe, 2, "det
42b0: 61 69 6c 22 2c 20 50 33 5f 53 54 41 54 49 43 29  ail", P3_STATIC)
42c0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
42d0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
42e0: 74 4e 75 6d 43 6f 6c 73 28 73 50 61 72 73 65 2e  tNumCols(sParse.
42f0: 70 56 64 62 65 2c 20 35 29 3b 0a 20 20 20 20 20  pVdbe, 5);.     
4300: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
4310: 6f 6c 4e 61 6d 65 28 73 50 61 72 73 65 2e 70 56  olName(sParse.pV
4320: 64 62 65 2c 20 30 2c 20 22 61 64 64 72 22 2c 20  dbe, 0, "addr", 
4330: 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  P3_STATIC);.    
4340: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
4350: 43 6f 6c 4e 61 6d 65 28 73 50 61 72 73 65 2e 70  ColName(sParse.p
4360: 56 64 62 65 2c 20 31 2c 20 22 6f 70 63 6f 64 65  Vdbe, 1, "opcode
4370: 22 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20  ", P3_STATIC);. 
4380: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
4390: 53 65 74 43 6f 6c 4e 61 6d 65 28 73 50 61 72 73  SetColName(sPars
43a0: 65 2e 70 56 64 62 65 2c 20 32 2c 20 22 70 31 22  e.pVdbe, 2, "p1"
43b0: 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20  , P3_STATIC);.  
43c0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
43d0: 65 74 43 6f 6c 4e 61 6d 65 28 73 50 61 72 73 65  etColName(sParse
43e0: 2e 70 56 64 62 65 2c 20 33 2c 20 22 70 32 22 2c  .pVdbe, 3, "p2",
43f0: 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20   P3_STATIC);.   
4400: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
4410: 74 43 6f 6c 4e 61 6d 65 28 73 50 61 72 73 65 2e  tColName(sParse.
4420: 70 56 64 62 65 2c 20 34 2c 20 22 70 33 22 2c 20  pVdbe, 4, "p3", 
4430: 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  P3_STATIC);.    
4440: 7d 0a 20 20 7d 20 0a 23 65 6e 64 69 66 0a 0a 20  }.  } .#endif.. 
4450: 20 69 66 28 20 73 71 6c 69 74 65 33 53 61 66 65   if( sqlite3Safe
4460: 74 79 4f 66 66 28 64 62 29 20 29 7b 0a 20 20 20  tyOff(db) ){.   
4470: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53   rc = SQLITE_MIS
4480: 55 53 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72  USE;.  }.  if( r
4490: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
44a0: 20 20 20 20 2a 70 70 53 74 6d 74 20 3d 20 28 73      *ppStmt = (s
44b0: 71 6c 69 74 65 33 5f 73 74 6d 74 2a 29 73 50 61  qlite3_stmt*)sPa
44c0: 72 73 65 2e 70 56 64 62 65 3b 0a 20 20 7d 65 6c  rse.pVdbe;.  }el
44d0: 73 65 20 69 66 28 20 73 50 61 72 73 65 2e 70 56  se if( sParse.pV
44e0: 64 62 65 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  dbe ){.    sqlit
44f0: 65 33 5f 66 69 6e 61 6c 69 7a 65 28 28 73 71 6c  e3_finalize((sql
4500: 69 74 65 33 5f 73 74 6d 74 2a 29 73 50 61 72 73  ite3_stmt*)sPars
4510: 65 2e 70 56 64 62 65 29 3b 0a 20 20 7d 0a 0a 20  e.pVdbe);.  }.. 
4520: 20 69 66 28 20 7a 45 72 72 4d 73 67 20 29 7b 0a   if( zErrMsg ){.
4530: 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72      sqlite3Error
4540: 28 64 62 2c 20 72 63 2c 20 22 25 73 22 2c 20 7a  (db, rc, "%s", z
4550: 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 73 71 6c  ErrMsg);.    sql
4560: 69 74 65 46 72 65 65 28 7a 45 72 72 4d 73 67 29  iteFree(zErrMsg)
4570: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
4580: 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20  qlite3Error(db, 
4590: 72 63 2c 20 30 29 3b 0a 20 20 7d 0a 0a 20 20 2f  rc, 0);.  }..  /
45a0: 2a 20 57 65 20 6d 75 73 74 20 63 68 65 63 6b 20  * We must check 
45b0: 66 6f 72 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75  for malloc failu
45c0: 72 65 20 6c 61 73 74 20 6f 66 20 61 6c 6c 2c 20  re last of all, 
45d0: 69 6e 20 63 61 73 65 20 6d 61 6c 6c 6f 63 28 29  in case malloc()
45e0: 20 66 61 69 6c 65 64 0a 20 20 2a 2a 20 69 6e 73   failed.  ** ins
45f0: 69 64 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74  ide of the sqlit
4600: 65 33 45 72 72 6f 72 28 29 20 63 61 6c 6c 20 61  e3Error() call a
4610: 62 6f 76 65 20 6f 72 20 73 6f 6d 65 74 68 69 6e  bove or somethin
4620: 67 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71  g..  */.  if( sq
4630: 6c 69 74 65 33 54 68 72 65 61 64 44 61 74 61 28  lite3ThreadData(
4640: 29 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  )->mallocFailed 
4650: 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
4660: 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 73 71  TE_NOMEM;.    sq
4670: 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20 72  lite3Error(db, r
4680: 63 2c 20 30 29 3b 0a 20 20 7d 0a 0a 20 20 73 71  c, 0);.  }..  sq
4690: 6c 69 74 65 33 4d 61 6c 6c 6f 63 43 6c 65 61 72  lite3MallocClear
46a0: 46 61 69 6c 65 64 28 29 3b 0a 20 20 72 65 74 75  Failed();.  retu
46b0: 72 6e 20 72 63 3b 0a 7d 0a 0a 23 69 66 6e 64 65  rn rc;.}..#ifnde
46c0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
46d0: 46 31 36 0a 2f 2a 0a 2a 2a 20 43 6f 6d 70 69 6c  F16./*.** Compil
46e0: 65 20 74 68 65 20 55 54 46 2d 31 36 20 65 6e 63  e the UTF-16 enc
46f0: 6f 64 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65  oded SQL stateme
4700: 6e 74 20 7a 53 71 6c 20 69 6e 74 6f 20 61 20 73  nt zSql into a s
4710: 74 61 74 65 6d 65 6e 74 20 68 61 6e 64 6c 65 2e  tatement handle.
4720: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
4730: 70 72 65 70 61 72 65 31 36 28 0a 20 20 73 71 6c  prepare16(.  sql
4740: 69 74 65 33 20 2a 64 62 2c 20 20 20 20 20 20 20  ite3 *db,       
4750: 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
4760: 73 65 20 68 61 6e 64 6c 65 2e 20 2a 2f 20 0a 20  se handle. */ . 
4770: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 53 71   const void *zSq
4780: 6c 2c 20 20 20 20 20 20 20 20 20 2f 2a 20 55 54  l,         /* UT
4790: 46 2d 38 20 65 6e 63 6f 64 65 64 20 53 51 4c 20  F-8 encoded SQL 
47a0: 73 74 61 74 65 6d 65 6e 74 2e 20 2a 2f 0a 20 20  statement. */.  
47b0: 69 6e 74 20 6e 42 79 74 65 73 2c 20 20 20 20 20  int nBytes,     
47c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e            /* Len
47d0: 67 74 68 20 6f 66 20 7a 53 71 6c 20 69 6e 20 62  gth of zSql in b
47e0: 79 74 65 73 2e 20 2a 2f 0a 20 20 73 71 6c 69 74  ytes. */.  sqlit
47f0: 65 33 5f 73 74 6d 74 20 2a 2a 70 70 53 74 6d 74  e3_stmt **ppStmt
4800: 2c 20 20 20 20 2f 2a 20 4f 55 54 3a 20 41 20 70  ,    /* OUT: A p
4810: 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 70 72  ointer to the pr
4820: 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
4830: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64   */.  const void
4840: 20 2a 2a 70 7a 54 61 69 6c 20 20 20 20 20 20 20   **pzTail       
4850: 2f 2a 20 4f 55 54 3a 20 45 6e 64 20 6f 66 20 70  /* OUT: End of p
4860: 61 72 73 65 64 20 73 74 72 69 6e 67 20 2a 2f 0a  arsed string */.
4870: 29 7b 0a 20 20 2f 2a 20 54 68 69 73 20 66 75 6e  ){.  /* This fun
4880: 63 74 69 6f 6e 20 63 75 72 72 65 6e 74 6c 79 20  ction currently 
4890: 77 6f 72 6b 73 20 62 79 20 66 69 72 73 74 20 74  works by first t
48a0: 72 61 6e 73 66 6f 72 6d 69 6e 67 20 74 68 65 20  ransforming the 
48b0: 55 54 46 2d 31 36 0a 20 20 2a 2a 20 65 6e 63 6f  UTF-16.  ** enco
48c0: 64 65 64 20 73 74 72 69 6e 67 20 74 6f 20 55 54  ded string to UT
48d0: 46 2d 38 2c 20 74 68 65 6e 20 69 6e 76 6f 6b 69  F-8, then invoki
48e0: 6e 67 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  ng sqlite3_prepa
48f0: 72 65 28 29 2e 20 54 68 65 0a 20 20 2a 2a 20 74  re(). The.  ** t
4900: 72 69 63 6b 79 20 62 69 74 20 69 73 20 66 69 67  ricky bit is fig
4910: 75 72 69 6e 67 20 6f 75 74 20 74 68 65 20 70 6f  uring out the po
4920: 69 6e 74 65 72 20 74 6f 20 72 65 74 75 72 6e 20  inter to return 
4930: 69 6e 20 2a 70 7a 54 61 69 6c 2e 0a 20 20 2a 2f  in *pzTail..  */
4940: 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 38 20 3d  .  char *zSql8 =
4950: 20 30 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   0;.  const char
4960: 20 2a 7a 54 61 69 6c 38 20 3d 20 30 3b 0a 20 20   *zTail8 = 0;.  
4970: 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 73  int rc;..  if( s
4980: 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
4990: 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74  k(db) ){.    ret
49a0: 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  urn SQLITE_MISUS
49b0: 45 3b 0a 20 20 7d 0a 20 20 7a 53 71 6c 38 20 3d  E;.  }.  zSql8 =
49c0: 20 73 71 6c 69 74 65 33 75 74 66 31 36 74 6f 38   sqlite3utf16to8
49d0: 28 7a 53 71 6c 2c 20 6e 42 79 74 65 73 29 3b 0a  (zSql, nBytes);.
49e0: 20 20 69 66 28 20 21 7a 53 71 6c 38 20 29 7b 0a    if( !zSql8 ){.
49f0: 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72      sqlite3Error
4a00: 28 64 62 2c 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  (db, SQLITE_NOME
4a10: 4d 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  M, 0);.    retur
4a20: 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  n SQLITE_NOMEM;.
4a30: 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
4a40: 65 33 5f 70 72 65 70 61 72 65 28 64 62 2c 20 7a  e3_prepare(db, z
4a50: 53 71 6c 38 2c 20 2d 31 2c 20 70 70 53 74 6d 74  Sql8, -1, ppStmt
4a60: 2c 20 26 7a 54 61 69 6c 38 29 3b 0a 0a 20 20 69  , &zTail8);..  i
4a70: 66 28 20 7a 54 61 69 6c 38 20 26 26 20 70 7a 54  f( zTail8 && pzT
4a80: 61 69 6c 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  ail ){.    /* If
4a90: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
4aa0: 20 72 65 74 75 72 6e 73 20 61 20 74 61 69 6c 20   returns a tail 
4ab0: 70 6f 69 6e 74 65 72 2c 20 77 65 20 63 61 6c 63  pointer, we calc
4ac0: 75 6c 61 74 65 20 74 68 65 0a 20 20 20 20 2a 2a  ulate the.    **
4ad0: 20 65 71 75 69 76 61 6c 65 6e 74 20 70 6f 69 6e   equivalent poin
4ae0: 74 65 72 20 69 6e 74 6f 20 74 68 65 20 55 54 46  ter into the UTF
4af0: 2d 31 36 20 73 74 72 69 6e 67 20 62 79 20 63 6f  -16 string by co
4b00: 75 6e 74 69 6e 67 20 74 68 65 20 75 6e 69 63 6f  unting the unico
4b10: 64 65 0a 20 20 20 20 2a 2a 20 63 68 61 72 61 63  de.    ** charac
4b20: 74 65 72 73 20 62 65 74 77 65 65 6e 20 7a 53 71  ters between zSq
4b30: 6c 38 20 61 6e 64 20 7a 54 61 69 6c 38 2c 20 61  l8 and zTail8, a
4b40: 6e 64 20 74 68 65 6e 20 72 65 74 75 72 6e 69 6e  nd then returnin
4b50: 67 20 61 20 70 6f 69 6e 74 65 72 0a 20 20 20 20  g a pointer.    
4b60: 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e 75 6d 62  ** the same numb
4b70: 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73  er of characters
4b80: 20 69 6e 74 6f 20 74 68 65 20 55 54 46 2d 31 36   into the UTF-16
4b90: 20 73 74 72 69 6e 67 2e 0a 20 20 20 20 2a 2f 0a   string..    */.
4ba0: 20 20 20 20 69 6e 74 20 63 68 61 72 73 5f 70 61      int chars_pa
4bb0: 72 73 65 64 20 3d 20 73 71 6c 69 74 65 33 75 74  rsed = sqlite3ut
4bc0: 66 38 43 68 61 72 4c 65 6e 28 7a 53 71 6c 38 2c  f8CharLen(zSql8,
4bd0: 20 7a 54 61 69 6c 38 2d 7a 53 71 6c 38 29 3b 0a   zTail8-zSql8);.
4be0: 20 20 20 20 2a 70 7a 54 61 69 6c 20 3d 20 28 75      *pzTail = (u
4bf0: 38 20 2a 29 7a 53 71 6c 20 2b 20 73 71 6c 69 74  8 *)zSql + sqlit
4c00: 65 33 75 74 66 31 36 42 79 74 65 4c 65 6e 28 7a  e3utf16ByteLen(z
4c10: 53 71 6c 2c 20 63 68 61 72 73 5f 70 61 72 73 65  Sql, chars_parse
4c20: 64 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  d);.  }.  sqlite
4c30: 46 72 65 65 28 7a 53 71 6c 38 29 3b 20 0a 20 20  Free(zSql8); .  
4c40: 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 23 65 6e  return rc;.}.#en
4c50: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
4c60: 49 54 5f 55 54 46 31 36 20 2a 2f 0a              IT_UTF16 */.